In the show I'm building, I'm using a lot of Cue Lists with Scenes, RGBMatrices, Sequences, and Chasers nested inside them.
Often, I like to re-use Scenes and have the fade-in/out times be different depending on the situation. For example, "Red Scene" might fade in over 5 seconds one place, but pop in instantly in 0ms in another place.
By setting the Cue List's Chaser to Fade In and Fade Out times "Per Step," this is easy to achieve. But there is a problem / limitation.
When I choose an RGBMatrix, Chaser, or Sequence as a step in the main Cue List, the fade times are wrong. I can't make an individual step "default" as it would need to be, to allow the nested steps to fade as they are supposed to. The outer Chaser's "Per Step" fade time takes over the fade times for all the individual steps of the nested function.
Is there any way to implement a "special" duration which would make only that one step act as "Default" - yet still allow other steps to have explicitly stated times?
Set individual steps in Chaser to "default" fade time
-
- Posts: 71
- Joined: Wed Jun 15, 2016 8:51 am
- Real Name: Matt Mayfield
It looks as if defaultSpeed() returns -1, similar to how infiniteSpeed() returns -2. So maybe if a chaser step has its fade time set to -1, it won't send a speed override to the nested function. Maybe all that is needed is to allow speedToString() and stringToSpeed() to work with something like "d" for default and treat that as defaultSpeed() == -1, similar to how it works with "∞" meaning infinite and treating it as infiniteSpeed() == -2.
-
- Posts: 71
- Joined: Wed Jun 15, 2016 8:51 am
- Real Name: Matt Mayfield
Yup, that seems to do the trick. I'll continue to test in more detail. If anyone wants to try this, here's what I did. In engine/src/function.cpp, I added the final four lines here:
And the final two lines here:
At least in preliminary testing, that appears to allow a Chaser to be in Per Step mode, with overrides on some of the steps, but non-overriding Default timing on steps where the fade time is set to "d".
Code: Select all
QString Function::speedToString(uint ms)
{
QString str;
if (ms == infiniteSpeed())
{
str = QChar(0x221E); // Infinity symbol
}
else if (ms == defaultSpeed())
{
str = QChar('d'); // Default speed
}
Code: Select all
uint Function::stringToSpeed(QString speed)
{
uint value = 0;
if (speed == QChar(0x221E)) // Infinity symbol
return infiniteSpeed();
if (speed == QChar('d')) // Default
return defaultSpeed();
-
- Posts: 71
- Joined: Wed Jun 15, 2016 8:51 am
- Real Name: Matt Mayfield
XML seems to save properly with this modification; so far all is well when used carefully. But the total duration times seem to behave a bit unpredictably, requiring re-setting the Hold time sometimes, and it is possible to put in "d" for the Hold time, which doesn't exactly make sense.
For now this seems like a bit of a messy kludge. I think I will continue using it in testing for future shows, but not yet in current production.
For now this seems like a bit of a messy kludge. I think I will continue using it in testing for future shows, but not yet in current production.
-
- Posts: 243
- Joined: Mon Apr 20, 2015 5:07 am
- Real Name: Mark Lohrey
Hi Matt,
This problem seems to have been around for a long time now.
To my limited understanding, the order in which QLC+ handles fading seems to be the cause. It must be difficult to fix otherwise I suspect it would have been done by now.
https://github.com/mcallegari/qlcplus/issues/193
https://github.com/mcallegari/qlcplus/issues/445
It would great if you could find a solution especially for us 'theatre guys'.
Cheers
Mark
This problem seems to have been around for a long time now.
To my limited understanding, the order in which QLC+ handles fading seems to be the cause. It must be difficult to fix otherwise I suspect it would have been done by now.
https://github.com/mcallegari/qlcplus/issues/193
https://github.com/mcallegari/qlcplus/issues/445
It would great if you could find a solution especially for us 'theatre guys'.
Cheers
Mark