Пример #1
0
    /// <summary>
    /// 根据 Attribute 节点创建 Attribute 对象,并添加基础信息
    /// </summary>
    /// <param name="attributeNode">Attribute 节点</param>
    /// <returns>生成的 Attribute 对象</returns>
    private static GDTF_AttributeDefinitionsData_Attribute CreateAttribute(XmlNode attributeNode)
    {
        GDTF_AttributeDefinitionsData_Attribute attribute = new GDTF_AttributeDefinitionsData_Attribute();

        attribute.attributeName = GetNodeAttribute(attributeNode, "Name");
        attribute.physicalUnit  = (PhysicalUnit)Enum.Parse(typeof(PhysicalUnit), GetNodeAttribute(attributeNode, "PhysicalUnit"));
        string color = GetNodeAttribute(attributeNode, "Color");

        if (color != null)
        {
            attribute.color = XmlColorToColor(GetNodeAttribute(attributeNode, "Color"));
        }

        return(attribute);
    }
Пример #2
0
    /// <summary>
    /// 根据 Attribute 节点,将 MainAttribute 进行绑定
    /// </summary>
    /// <param name="attributes">保存所有 Attribute 的字典</param>
    /// <param name="attributeNode">当前节点</param>
    private static GDTF_AttributeDefinitionsData_Attribute GenerateAttribute(Dictionary <string, GDTF_AttributeDefinitionsData_Attribute> attributes, XmlNode attributeNode)
    {
        // 如果字典中存在 Attribute 属性,因为 Feature 和 ActivationGroup 可能会绑定同一个 Attribute
        string attributeName = GetNodeAttribute(attributeNode, "Name");

        if (attributeName != null && attributes.ContainsKey(attributeName))
        {
            return(attributes[attributeName]);
        }

        // 获取 Attributes 节点
        XmlNode attributesNode = attributeNode.ParentNode;

        // 父 Attribute 名称
        string mainAttributeName = GetNodeAttribute(attributeNode, "MainAttribute");

        // 如果当前 Attribute 存在 父Attribute
        if (mainAttributeName != null)
        {
            GDTF_AttributeDefinitionsData_Attribute mainAttribute = null;

            // 在当前保存 Attribute 的字典中查找指定名称的 Attribute 对象
            if (attributes.ContainsKey(mainAttributeName))
            {
                mainAttribute = attributes[mainAttributeName];
            }


            // 如果找到了并为其绑定
            if (mainAttribute != null)
            {
                GDTF_AttributeDefinitionsData_Attribute attribute = CreateAttribute(attributeNode);
                attribute.mainAttribute = mainAttribute;
                mainAttribute.childAttribute.Add(attribute);

                attributes[attribute.attributeName] = attribute;
                return(attribute);
            }
            // 如果没找到先创建 父Attribute 再绑定
            else
            {
                GDTF_AttributeDefinitionsData_Attribute attribute = null;

                foreach (XmlNode mainAttributeNode in attributesNode)
                {
                    string name = GetNodeAttribute(mainAttributeNode, "Name");
                    if (name != null && name == mainAttributeName)
                    {
                        mainAttribute = CreateAttribute(mainAttributeNode);
                        attribute     = CreateAttribute(attributeNode);
                        mainAttribute.childAttribute.Add(attribute);

                        attributes[mainAttribute.attributeName] = mainAttribute;
                        attributes[attribute.attributeName]     = attribute;
                        break;
                    }
                }

                return(attribute);
            }
        }
        else
        {
            GDTF_AttributeDefinitionsData_Attribute attribute = CreateAttribute(attributeNode);
            attributes[attribute.attributeName] = attribute;

            return(attribute);
        }
    }
Пример #3
0
    private static void GetAttributeDefinitions(GDTF_Data data)
    {
        // 如果 AttributeDefinitions 节点为空则推出
        if (attributeDefinitionsNode == null)
        {
            Debug.Log("Not Found AttributeDefinitions Node!");
            return;
        }

        // 如果 AttributeDefinitions 节点存在子节点
        if (attributeDefinitionsNode.HasChildNodes)
        {
            // GDTF_Data 对象中保存的信息
            Dictionary <string, GDTF_AttributeDefinitionsData_Attribute>       attributes       = new Dictionary <string, GDTF_AttributeDefinitionsData_Attribute>();
            Dictionary <string, GDTF_AttributeDefinitionsData_ActivationGroup> activationGroups = new Dictionary <string, GDTF_AttributeDefinitionsData_ActivationGroup>();
            Dictionary <string, GDTF_AttributeDefinitionsData_FeatureGroup>    featureGroups    = new Dictionary <string, GDTF_AttributeDefinitionsData_FeatureGroup>();

            // 查找 Group 节点
            foreach (XmlNode groupsNode in attributeDefinitionsNode)
            {
                // 添加激活组相关信息
                if (groupsNode.Name == "ActivationGroups" && groupsNode.HasChildNodes)
                {
                    GetActivationGroups(groupsNode, activationGroups);
                }

                // 添加功能组相关信息
                if (groupsNode.Name == "FeatureGroups" && groupsNode.HasChildNodes)
                {
                    GetFeatureGroups(groupsNode, featureGroups);
                }
            }

            // 查找 Attributes 节点
            foreach (XmlNode attributesNode in attributeDefinitionsNode)
            {
                // 如果存在 Attributes 节点,并且该节点存在子节点
                if (attributesNode.Name == "Attributes" && attributesNode.HasChildNodes)
                {
                    // 遍历 Attributes 节点下的 Attribute 节点
                    foreach (XmlNode attributeNode in attributesNode)
                    {
                        // Attribute 中所绑定的 ActivationGroup 名称、Feature 名称、Color 名称
                        string activationGroupName = GetNodeAttribute(attributeNode, "ActivationGroup");
                        string featureName         = GetNodeAttribute(attributeNode, "Feature");
                        string colorName           = GetNodeAttribute(attributeNode, "Color");

                        // 如果存在 ActivationGroup
                        if (activationGroupName != null)
                        {
                            // 生成 Attribute 对象并绑定到 ActivationGroup 中
                            GDTF_AttributeDefinitionsData_Attribute attribute = GenerateAttribute(attributes, attributeNode);
                            if (attribute != null)
                            {
                                activationGroups[activationGroupName].attributes.Add(attribute);
                            }
                        }

                        // 如果存在 Feature
                        if (featureName != null)
                        {
                            // 生成 Attribute 对象并绑定到对应的 Feature 中
                            GDTF_AttributeDefinitionsData_Attribute attribute = GenerateAttribute(attributes, attributeNode);
                            if (attribute != null)
                            {
                                string[] featurePath = featureName.Split('.');

                                featureGroups[featurePath[0]].features[featurePath[1]].attributes.Add(attribute);
                            }
                        }
                    }
                }
            }

            data.attributeDefinitions.activationGroups = activationGroups;
            data.attributeDefinitions.featureGroups    = featureGroups;
            data.attributeDefinitions.attributes       = attributes;
        }
    }