/// <summary> /// 获取当前 DMX LogicalChannel 下的 ChannelFunction /// </summary> /// <param name="logicalChannelNode">LogicalChannel 节点</param> /// <param name="logicalChannel">DMXChannelData 对象</param> /// <param name="data">GDTF_Data 对象</param> private static void GetDmxChannelFuctions(XmlNode logicalChannelNode, GDTF_DmxLogicalChannel logicalChannel, GDTF_Data data) { // 如果 LogicalChannel 节点下存在子节点 if (logicalChannelNode.HasChildNodes) { List <XmlNode> channelFunctionNodes = new List <XmlNode>(); // 获取所有 ChannelFunction 节点 foreach (XmlNode channelFunctionNode in logicalChannelNode) { // 只保存 ChannelFunction 节点 if (channelFunctionNode.Name == "ChannelFunction") { channelFunctionNodes.Add(channelFunctionNode); } } for (int i = 0; i < channelFunctionNodes.Count; i++) { GDTF_DmxChannelFunction channelFunction = new GDTF_DmxChannelFunction(); int functionDmxFrom = GetDmxValue(GetNodeAttribute(channelFunctionNodes[i], "DMXFrom")); int functionDmxTo; if (i == channelFunctionNodes.Count - 1) { functionDmxTo = (1 << ((int)GetDmxValueResolution(GetNodeAttribute(channelFunctionNodes[i], "DMXFrom")) * 8)) - 1; } else { functionDmxTo = GetDmxValue(GetNodeAttribute(channelFunctionNodes[i + 1], "DMXFrom")) - 1; } channelFunction.functionName = GetNodeAttribute(channelFunctionNodes[i], "Name"); string attributeName = GetNodeAttribute(channelFunctionNodes[i], "Attribute"); if (attributeName != null) { channelFunction.attribute = data.attributeDefinitions.attributes[attributeName]; } channelFunction.functionDmxFrom = functionDmxFrom; channelFunction.functionDmxTo = functionDmxTo; channelFunction.functionPhysicalFrom = Convert.ToSingle(GetNodeAttribute(channelFunctionNodes[i], "PhysicalFrom")); channelFunction.functionPhysicalTo = Convert.ToSingle(GetNodeAttribute(channelFunctionNodes[i], "PhysicalTo")); channelFunction.wheelName = GetNodeAttribute(channelFunctionNodes[i], "Wheel"); // 为该 ChannelFunction 添加 ChannelSet GetDmxChannelSets(channelFunctionNodes[i], channelFunction); // 为该 Channel 添加 ChannelFunction logicalChannel.channelFunctions.Add(channelFunction); } } }
/// <summary> /// 获取当前模式下 LogicalChannel 信息 /// </summary> /// <param name="dmxChannelNode">DmxChannel 节点</param> /// <param name="channel">DMXChannel 对象</param> /// <param name="data">GDTF_Data 对象</param> private static void GetDmxLogicalChannel(XmlNode dmxChannelNode, GDTF_DmxChannel channel, GDTF_Data data) { // 如果 DMXChannel 节点下存在 LogicalChannel 节点 if (dmxChannelNode.HasChildNodes) { XmlNode logicalChannelNode = dmxChannelNode.FirstChild; if (logicalChannelNode != null) { string attributeName = GetNodeAttribute(logicalChannelNode, "Attribute"); GDTF_DmxLogicalChannel logicalChannel = new GDTF_DmxLogicalChannel { attribute = data.attributeDefinitions.attributes[attributeName] }; GetDmxChannelFuctions(logicalChannelNode, logicalChannel, data); channel.logicalChannel = logicalChannel; } } }