diff --git a/Virtual-res-issue-test-file.xml b/Virtual-res-issue-test-file.xml new file mode 100644 index 00000000..392c91c5 --- /dev/null +++ b/Virtual-res-issue-test-file.xml @@ -0,0 +1,5282 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/GDTFManager.cpp b/src/GDTFManager.cpp index 44369f46..60b2eac1 100644 --- a/src/GDTFManager.cpp +++ b/src/GDTFManager.cpp @@ -5406,7 +5406,7 @@ void GdtfDmxChannel::OnReadFromNode(const IXMLFileNodePtr& pNode) TXString defVal; if (pNode->GetNodeAttributeValue(XML_GDTF_DMXChannelFuntionDefault, defVal) == kVCOMError_NoError) { - GdtfConverter::ConvertDMXValue(defVal, pNode, this->GetChannelBitResolution(), fDefaultValue_old); + GdtfConverter::ConvertDMXValue(defVal, pNode, this->GetChannelBitResolution(), fDefaultValue_old, this->IsVirtual()); } // ------------------------------------------------------------------------------------ @@ -5414,7 +5414,7 @@ void GdtfDmxChannel::OnReadFromNode(const IXMLFileNodePtr& pNode) TXString highlight; if(VCOM_SUCCEEDED(pNode->GetNodeAttributeValue(XML_GDTF_DMXChannelHighlight, highlight) )) { - GdtfConverter::ConvertDMXValue(highlight, pNode, this->GetChannelBitResolution(), fHeighlight, fHeighlightNone); + GdtfConverter::ConvertDMXValue(highlight, pNode, this->GetChannelBitResolution(), fHeighlight, fHeighlightNone, this->IsVirtual()); } pNode->GetNodeAttributeValue(XML_GDTF_DMXChannelGeometry, fUnresolvedGeomRef); @@ -5589,16 +5589,12 @@ const TGdtfDmxLogicalChannelArray GdtfDmxChannel::GetLogicalChannelArray() EGdtfChannelBitResolution SceneData::GdtfDmxChannel::GetChannelBitResolution() { - // 0 is false, everything else is true - if ((!fCoarse) && !fFine && !fUltra && !fUber) { return EGdtfChannelBitResolution::eGdtfChannelBitResolution_32; } - else if (( fCoarse) && !fFine && !fUltra && !fUber) { return EGdtfChannelBitResolution::eGdtfChannelBitResolution_8; } - else if (( fCoarse) &&( fFine) && !fUltra && !fUber ) { return EGdtfChannelBitResolution::eGdtfChannelBitResolution_16; } - else if (( fCoarse) &&( fFine) && ( fUltra) && !fUber ) { return EGdtfChannelBitResolution::eGdtfChannelBitResolution_24; } - else if (( fCoarse) &&( fFine) && ( fUltra) && ( fUber)) { return EGdtfChannelBitResolution::eGdtfChannelBitResolution_32; } - - // Other states are invalid. This line should never be reached. - DSTOP((kEveryone, "Invalid state in GetChannelBitResolution()")); - return EGdtfChannelBitResolution::eGdtfChannelBitResolution_8; + if (!fCoarse) { return EGdtfChannelBitResolution::eGdtfChannelBitResolution_16; } + else if (!fFine) { return EGdtfChannelBitResolution::eGdtfChannelBitResolution_8; } + else if (!fUltra) { return EGdtfChannelBitResolution::eGdtfChannelBitResolution_16; } + else if (!fUber ) { return EGdtfChannelBitResolution::eGdtfChannelBitResolution_24; } + + return EGdtfChannelBitResolution::eGdtfChannelBitResolution_32; } DmxValue SceneData::GdtfDmxChannel::GetChannelMaxDmx() @@ -6118,11 +6114,14 @@ void GdtfDmxChannelFunction::OnReadFromNode(const IXMLFileNodePtr& pNode) // ------------------------------------------------------------------------------------ // Print node attributes EGdtfChannelBitResolution channelReso = fParentLogicalChannel->GetParentDMXChannel()->GetChannelBitResolution(); + bool isVirtual = fParentLogicalChannel->GetParentDMXChannel()->IsVirtual(); pNode->GetNodeAttributeValue(XML_GDTF_DMXChannelFuntionName, fName); pNode->GetNodeAttributeValue(XML_GDTF_DMXChannelFuntionOriginalAttribute, fOrignalAttribute); - TXString defaultValue; pNode->GetNodeAttributeValue(XML_GDTF_DMXChannelFuntionDefault, defaultValue); GdtfConverter::ConvertDMXValue(defaultValue, pNode, channelReso,fDefaultValue); - TXString dmxFrom; pNode->GetNodeAttributeValue(XML_GDTF_DMXChannelFuntionDMXFrom, dmxFrom); GdtfConverter::ConvertDMXValue(dmxFrom, pNode, channelReso,fAdressStart); + bool noneValue_defaultValue = false; + TXString defaultValue; pNode->GetNodeAttributeValue(XML_GDTF_DMXChannelFuntionDefault, defaultValue); GdtfConverter::ConvertDMXValue(defaultValue, pNode, channelReso,fDefaultValue, noneValue_defaultValue, isVirtual); + bool noneValue_dmxFrom = false; + TXString dmxFrom; pNode->GetNodeAttributeValue(XML_GDTF_DMXChannelFuntionDMXFrom, dmxFrom); GdtfConverter::ConvertDMXValue(dmxFrom, pNode, channelReso,fAdressStart, noneValue_dmxFrom, isVirtual); TXString physFrom; pNode->GetNodeAttributeValue(XML_GDTF_DMXChannelFuntionPhysicalFrom, physFrom); GdtfConverter::ConvertDouble(physFrom, pNode, fPhysicalStart); TXString physTo; pNode->GetNodeAttributeValue(XML_GDTF_DMXChannelFuntionPhysicalTo, physTo); GdtfConverter::ConvertDouble(physTo, pNode, fPhysicalEnd); TXString realFade; pNode->GetNodeAttributeValue(XML_GDTF_DMXChannelFuntionRealFade, realFade); GdtfConverter::ConvertDouble(realFade, pNode, fRealFade); @@ -6419,13 +6418,13 @@ DmxValue GdtfDmxChannelFunction::GetModeMasterDmxEnd() const return fDmxModeEnd; } -void GdtfDmxChannelFunction::ResolveModeMasterDmx(EGdtfChannelBitResolution resolution) +void GdtfDmxChannelFunction::ResolveModeMasterDmx(EGdtfChannelBitResolution resolution, bool isVirtual) { IXMLFileNodePtr node; this->GetNode(node); - GdtfConverter::ConvertDMXValue(fUnresolvedDmxModeStart, node, resolution, fDmxModeStart); - GdtfConverter::ConvertDMXValue(fUnresolvedDmxModeEnd,node, resolution, fDmxModeEnd); + GdtfConverter::ConvertDMXValue(fUnresolvedDmxModeStart, node, resolution, fDmxModeStart, isVirtual); + GdtfConverter::ConvertDMXValue(fUnresolvedDmxModeEnd,node, resolution, fDmxModeEnd, isVirtual); } void GdtfDmxChannelFunction::SetModeMaster_Channel(GdtfDmxChannel* channel) @@ -6664,8 +6663,10 @@ void GdtfDmxChannelSet::OnReadFromNode(const IXMLFileNodePtr& pNode) pNode->GetNodeAttributeValue(XML_GDTF_DMXChannelSetName, fUniqueName); EGdtfChannelBitResolution channelReso = fParentChnlFunction->GetParentDMXChannel()->GetChannelBitResolution(); + bool isVirtual = fParentChnlFunction->GetParentDMXChannel()->IsVirtual(); + bool noneValue = false; - TXString dmxfrom; pNode->GetNodeAttributeValue(XML_GDTF_DMXChannelSetDMXFrom, dmxfrom); fValid = GdtfConverter::ConvertDMXValue (dmxfrom, pNode, channelReso, fDmxStart); + TXString dmxfrom; pNode->GetNodeAttributeValue(XML_GDTF_DMXChannelSetDMXFrom, dmxfrom); fValid = GdtfConverter::ConvertDMXValue (dmxfrom, pNode, channelReso, fDmxStart, noneValue, isVirtual); TXString wheelId; pNode->GetNodeAttributeValue(XML_GDTF_DMXChannelSetWheelSlotIndexRef, wheelId); GdtfConverter::ConvertInteger(wheelId, pNode, fWheelSlotIdx); @@ -8387,7 +8388,7 @@ void GdtfFixture::ResolveMacroRefs(GdtfDmxModePtr dmxMode) { DmxValue dmxVal = 0; - GdtfConverter::ConvertDMXValue(value->GetUnresolvedDMXValue(), node, value->GetDMXChannel()->GetChannelBitResolution(), dmxVal); + GdtfConverter::ConvertDMXValue(value->GetUnresolvedDMXValue(), node, value->GetDMXChannel()->GetChannelBitResolution(), dmxVal, false); value->SetValue(dmxVal); } else @@ -8424,7 +8425,7 @@ void GdtfFixture::ResolveMacroRefs(GdtfDmxModePtr dmxMode) value->GetNode(node); DmxValue dmxVal = 0; - GdtfConverter::ConvertDMXValue(value->GetUnresolvedDMXValue(), node, channelFunction->GetParentDMXChannel()->GetChannelBitResolution(), dmxVal); + GdtfConverter::ConvertDMXValue(value->GetUnresolvedDMXValue(), node, channelFunction->GetParentDMXChannel()->GetChannelBitResolution(), dmxVal, false); value->SetDmxValue(dmxVal); } } @@ -8504,13 +8505,15 @@ void GdtfFixture::ResolveDMXModeMasters() { bool resolved = false; EGdtfChannelBitResolution resolution = EGdtfChannelBitResolution::eGdtfChannelBitResolution_8; + bool isVirtual = false; GdtfDmxChannelPtr channelPtr = getDmxChannelByRef(unresolvedModeMaster, mode); if(! resolved && channelPtr) { function->SetModeMaster_Channel(channelPtr); resolved = true; - resolution = channelPtr->GetChannelBitResolution(); + resolution = channelPtr->GetChannelBitResolution(); + isVirtual = channelPtr->IsVirtual(); } GdtfDmxChannelFunctionPtr functionPtr = getDmxFunctionByRef(unresolvedModeMaster, mode); @@ -8519,10 +8522,11 @@ void GdtfFixture::ResolveDMXModeMasters() function->SetModeMaster_Function(functionPtr); resolved = true; resolution = functionPtr->GetParentDMXChannel()->GetChannelBitResolution(); + isVirtual = functionPtr->GetParentDMXChannel()->IsVirtual(); } ASSERTN(kEveryone, resolved); - if(resolved) { function->ResolveModeMasterDmx(resolution); } + if(resolved) { function->ResolveModeMasterDmx(resolution, isVirtual); } else { IXMLFileNodePtr node; diff --git a/src/GDTFManager.h b/src/GDTFManager.h index da4d9e2c..73392cc4 100644 --- a/src/GDTFManager.h +++ b/src/GDTFManager.h @@ -1643,7 +1643,7 @@ namespace SceneData GdtfDmxChannel* GetParentDMXChannel() const; GdtfDmxLogicalChannel* GetParentLogicalChannel() const; - void ResolveModeMasterDmx(EGdtfChannelBitResolution resolution); + void ResolveModeMasterDmx(EGdtfChannelBitResolution resolution, bool isVirtual); void SetNextFunction(GdtfDmxChannelFunction* next); GdtfDmxChannelFunction* GetNextFunction() const; diff --git a/src/XmlFileHelper.cpp b/src/XmlFileHelper.cpp index 5a15315e..2b278471 100644 --- a/src/XmlFileHelper.cpp +++ b/src/XmlFileHelper.cpp @@ -675,7 +675,7 @@ bool SplitStr(const TXString& str, TXString& part1, TXString& part2, size_t spli return true; } -bool SceneData::GdtfConverter::ConvertDMXValue(const TXString& strValue, const IXMLFileNodePtr& node, EGdtfChannelBitResolution chanlReso, DmxValue & intValue) +bool SceneData::GdtfConverter::ConvertDMXValue(const TXString& strValue, const IXMLFileNodePtr& node, EGdtfChannelBitResolution chanlReso, DmxValue & intValue, bool isVirtual) /* Converts a string to a DmxValue. returns succes of the opeation as bool (XXX this is always true at the moment.)*/ { if(strValue.IsEmpty()) @@ -684,6 +684,13 @@ bool SceneData::GdtfConverter::ConvertDMXValue(const TXString& strValue, const I return true; } + // If isVirtual is true and channel resolution is 32-bit, convert to work as 16-bit + // This allows old 32-bit virtual channels to be converted to 16-bit + if (isVirtual && chanlReso == 4) + { + chanlReso = (EGdtfChannelBitResolution)2; // Change resolution from 32-bit to 16-bit + } + // Split the String ("ValRaw/byteSpecifier") TXString firstPart; TXString secndPart; @@ -767,7 +774,7 @@ bool SceneData::GdtfConverter::ConvertDMXValue(const TXString& strValue, const I return true; } -bool SceneData::GdtfConverter::ConvertDMXValue(const TXString & strValue, const IXMLFileNodePtr& node, EGdtfChannelBitResolution chanlReso, DmxValue & intValue, bool & noneValue) +bool SceneData::GdtfConverter::ConvertDMXValue(const TXString & strValue, const IXMLFileNodePtr& node, EGdtfChannelBitResolution chanlReso, DmxValue & intValue, bool & noneValue, bool isVirtual) /* Converts a string to a DmxValue */ { noneValue = false; @@ -778,7 +785,7 @@ bool SceneData::GdtfConverter::ConvertDMXValue(const TXString & strValue, const return true; } - ConvertDMXValue(strValue, node, chanlReso, intValue); + ConvertDMXValue(strValue, node, chanlReso, intValue, isVirtual); return true; } @@ -2407,7 +2414,7 @@ TXString SceneData::SceneDataZip::GetResourceSubFolder(ERessourceType resType) /*static*/ bool GdtfConverter::ConvertDMXValue_UnitTest(const char* value, EGdtfChannelBitResolution chanlReso, DmxValue& intValue) { - return GdtfConverter::ConvertDMXValue(value,nullptr, chanlReso, intValue); + return GdtfConverter::ConvertDMXValue(value,nullptr, chanlReso, intValue, false); } void GdtfConverter::TraverseNodes(IXMLFileNodePtr root, const TXString& childContainerNodeName, const TXString& childNodeName, TProcessNodeCall processNodeFunction) diff --git a/src/XmlFileHelper.h b/src/XmlFileHelper.h index 578300c2..287a0fdc 100644 --- a/src/XmlFileHelper.h +++ b/src/XmlFileHelper.h @@ -128,8 +128,8 @@ namespace SceneData static bool ConvertInteger( const TXString& value, const IXMLFileNodePtr& node, Sint32& intValue, bool& noneValue); static bool ConvertIntegerArray( TXString values,const IXMLFileNodePtr& node, TSint32Array& intArray); static bool ConvertDMXAdress( const TXString& value, const IXMLFileNodePtr& node, DMXAddress& intValue); - static bool ConvertDMXValue( const TXString& value, const IXMLFileNodePtr& node, EGdtfChannelBitResolution chanlReso, DmxValue& intValue); - static bool ConvertDMXValue( const TXString& value, const IXMLFileNodePtr& node, EGdtfChannelBitResolution chanlReso, DmxValue& intValue, bool& noneValue); + static bool ConvertDMXValue( const TXString& value, const IXMLFileNodePtr& node, EGdtfChannelBitResolution chanlReso, DmxValue& intValue, bool isVirtual); + static bool ConvertDMXValue( const TXString& value, const IXMLFileNodePtr& node, EGdtfChannelBitResolution chanlReso, DmxValue& intValue, bool& noneValue, bool isVirtual); static bool ConvertRelationEnum( const TXString& value, const IXMLFileNodePtr& node, EGdtfDmxRelationType& relation); static bool ConvertSnapEnum( const TXString& value, const IXMLFileNodePtr& node, EGdtfDmxSnap& snap); static bool ConvertMasterEnum( const TXString& value, const IXMLFileNodePtr& node, EGdtfDmxMaster& master); diff --git a/unittest/XmlConversionTest.cpp b/unittest/XmlConversionTest.cpp index b15b8a37..cc3d866d 100644 --- a/unittest/XmlConversionTest.cpp +++ b/unittest/XmlConversionTest.cpp @@ -31,7 +31,7 @@ void CheckDmxValue(const char* string, DmxValue result, EGdtfChannelBitResolutio { #ifndef _WINDOWS DmxValue value = 0; - ref->checkifTrue("DMX Conversion failed" ,GdtfConverter::ConvertDMXValue(string, nullptr, targetResolution, value) ); + ref->checkifTrue("DMX Conversion failed" ,GdtfConverter::ConvertDMXValue(string, nullptr, targetResolution, value, false) ); ref->checkifEqual("DmxValue", value, result); #endif };