예제 #1
0
    /// <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);
            }
        }
    }
예제 #2
0
    /// <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;
            }
        }
    }