Ejemplo n.º 1
0
        /// <summary>
        /// 读取Asset中的各种属性
        /// </summary>
        /// <param name="prop"></param>
        /// <param name="ttrgb"></param>
        public void ReadAssetProperty(AssetProperty prop, string ttrgb)
        {
            switch (prop.Type)
            {
                 
#if R2016
            case AssetPropertyType.APT_Integer:
#elif R2018
            case AssetPropertyType.Integer:
#endif
                var AssetPropertyInt = prop as AssetPropertyInteger;
                break;

#if R2016
            case AssetPropertyType.APT_Distance:
#elif R2018
            case AssetPropertyType.Distance:
#endif
                var AssetPropertyDistance = prop as AssetPropertyDistance;
                break;

#if R2016
            case AssetPropertyType.APT_Double:
#elif R2018
            case AssetPropertyType.Double1:
#endif
                var AssetPropertyDouble = prop as AssetPropertyDouble;
                break;

#if R2016
            case AssetPropertyType.APT_DoubleArray2d:
#elif R2018
            case AssetPropertyType.Double2:
#endif
                var AssetPropertyDoubleArray2d = prop as AssetPropertyDoubleArray2d;
                break;

#if R2016
            case AssetPropertyType.APT_DoubleArray4d:
#elif R2018
            case AssetPropertyType.Double4:
#endif
                var AssetPropertyDoubleArray4d = prop as AssetPropertyDoubleArray4d;
                break;

#if R2016
            case AssetPropertyType.APT_String:
#elif R2018
            case AssetPropertyType.String:
#endif
                AssetPropertyString val = prop as AssetPropertyString;
                if (val.Name == "unifiedbitmap_Bitmap" && val.Value != "")
                {
                    map.Add(ttrgb);
                    map.Add(val.Value.Trim().Replace("\\", ""));
                }

                break;

#if R2016
            case AssetPropertyType.APT_Boolean:
#elif R2018
            case AssetPropertyType.Boolean:
#endif
                AssetPropertyBoolean boolProp = prop as AssetPropertyBoolean;
                break;

#if R2016
            case AssetPropertyType.APT_Double44:
#elif R2018
            case AssetPropertyType.Double44:
#endif
                AssetPropertyDoubleArray4d transformProp = prop as AssetPropertyDoubleArray4d;
#if R2016
                DoubleArray tranformValue = transformProp.Value;
#elif R2018
                DoubleArray tranformValue = (DoubleArray)transformProp.GetValueAsDoubles();
#endif
                break;

                //APT_Lis包含了一系列的子属性值
#if R2016
            case AssetPropertyType.APT_List:
#elif R2018
            case AssetPropertyType.List:
#endif
                AssetPropertyList     propList = prop as AssetPropertyList;
                IList <AssetProperty> subProps = propList.GetValue();
                if (subProps.Count == 0)
                {
                    break;
                }
                switch (subProps[0].Type)
                {
#if R2016
                case AssetPropertyType.APT_Integer:
#elif R2018
                case AssetPropertyType.Integer:
#endif
                    foreach (AssetProperty subProp in subProps)
                    {
                        AssetPropertyInteger intProp = subProp as AssetPropertyInteger;
                        int intValue = intProp.Value;
                    }
                    break;

#if R2016
                case AssetPropertyType.APT_String:
#elif R2018
                case AssetPropertyType.String:
#endif

                    foreach (AssetProperty subProp in subProps)
                    {
                        AssetPropertyString intProp = subProp as AssetPropertyString;
                        string intValue             = intProp.Value;
                        if (intProp.Name == "unifiedbitmap_Bitmap" && intProp.Value != "")
                        {
                            map.Add(ttrgb);
                            map.Add(intProp.Value.Trim().Replace("\\", ""));
                        }
                    }
                    break;
                }
                break;

#if R2016
            case AssetPropertyType.APT_Asset:
#elif R2018
            case AssetPropertyType.Asset:
#endif
                Asset propAsset = prop as Asset;
                for (int i = 0; i < propAsset.Size; i++)
                {
                    ReadAssetProperty(propAsset[i], ttrgb);
                }
                break;

#if R2016
            case AssetPropertyType.APT_Reference:
#elif R2018
            case AssetPropertyType.Reference:
#endif
                break;

            default:
                break;
            }

                        //遍历连接属性,一般位图信息存储在这里  
                        if (prop.NumberOfConnectedProperties == 0)
            {
                return;
            }
            foreach (AssetProperty connectedProp in prop.GetAllConnectedProperties())
            {
                ReadAssetProperty(connectedProp, ttrgb);
            }
        }
Ejemplo n.º 2
0
        public void ReadAssetProperty(AssetProperty prop, StreamWriter objWriter)
        {
            switch (prop.Type)
            {
                // Retrieve the value from simple type property is easy.
                // for example, retrieve bool property value.
#if _Revit2018
            case AssetPropertyType.Integer:
#else
            case AssetPropertyType.APT_Integer:
#endif
                var AssetPropertyInt = prop as AssetPropertyInteger;
                objWriter.WriteLine(_priexFix + AssetPropertyInt.Name + "= " + AssetPropertyInt.Value);
                break;

#if _Revit2018
            case AssetPropertyType.Distance:
#else
            case AssetPropertyType.APT_Distance:
#endif
                var AssetPropertyDistance = prop as AssetPropertyDistance;
                objWriter.WriteLine(_priexFix + AssetPropertyDistance.Name + "= " + AssetPropertyDistance.Value);
                break;

#if _Revit2018
            case AssetPropertyType.Float:
#else
            case AssetPropertyType.APT_Float:
#endif
                var assFlot = prop as AssetPropertyFloat;
                objWriter.WriteLine(_priexFix + assFlot.Name + "= " + assFlot.Value);
                break;

#if _Revit2018
            case AssetPropertyType.Double1:
#else
            case AssetPropertyType.APT_Double:
#endif
                var AssetPropertyDouble = prop as AssetPropertyDouble;
                objWriter.WriteLine(_priexFix + AssetPropertyDouble.Name + "= " + AssetPropertyDouble.Value);
                break;

#if _Revit2018
            case AssetPropertyType.Double2:
#else
            case AssetPropertyType.APT_DoubleArray2d:
#endif
                var    AssetPropertyDoubleArray2d = prop as AssetPropertyDoubleArray2d;
                string msg = AssetPropertyDoubleArray2d.Value.Cast <double>().Aggregate(string.Empty, (current, v) => current + (v + ", "));
                objWriter.WriteLine(_priexFix + AssetPropertyDoubleArray2d.Name + "= " + msg);
                break;

#if _Revit2018
            case AssetPropertyType.Double3:
                var arr3d = prop as AssetPropertyDoubleArray3d;
                msg = arr3d.GetValueAsDoubles().Cast <double>().Aggregate(string.Empty, (current, v) => current + (v + ", "));
#else
            case AssetPropertyType.APT_DoubleArray3d:
                var arr3d = prop as AssetPropertyDoubleArray3d;
                msg = arr3d.Value.Cast <double>().Aggregate(string.Empty, (current, v) => current + (v + ", "));
#endif
                objWriter.WriteLine(_priexFix + arr3d.Name + "= " + msg);
                break;

#if _Revit2018
            case AssetPropertyType.Double4:
                var arr4d = prop as AssetPropertyDoubleArray4d;
                msg = arr4d.GetValueAsDoubles().Cast <double>().Aggregate(string.Empty, (current, v) => current + (v + ", "));
#else
            case AssetPropertyType.APT_DoubleArray4d:
                var arr4d = prop as AssetPropertyDoubleArray4d;
                msg = arr4d.Value.Cast <double>().Aggregate(string.Empty, (current, v) => current + (v + ", "));
#endif
                objWriter.WriteLine(_priexFix + arr4d.Name + "= " + msg);
                break;

#if _Revit2018
            case AssetPropertyType.String:
#else
            case AssetPropertyType.APT_String:
#endif
                AssetPropertyString val = prop as AssetPropertyString;
                objWriter.WriteLine(_priexFix + val.Name + "= " + val.Value);
                break;

#if _Revit2018
            case AssetPropertyType.Boolean:
#else
            case AssetPropertyType.APT_Boolean:
#endif
                AssetPropertyBoolean boolProp = prop as AssetPropertyBoolean;
                objWriter.WriteLine(_priexFix + boolProp.Name + "= " + boolProp.Value);
                break;

                // When you retrieve the value from the data array property,
                // you may need to get which value the property stands for.
                // for example, the APT_Double44 may be a transform data.
#if _Revit2018
            case AssetPropertyType.Double44:
#else
            case AssetPropertyType.APT_Double44:
#endif
                AssetPropertyDoubleArray4d transformProp = prop as AssetPropertyDoubleArray4d;
                objWriter.WriteLine(_priexFix + transformProp.Name + "= " + transformProp.Value);
                break;

                // The APT_List contains a list of sub asset properties with same type.
#if _Revit2018
            case AssetPropertyType.List:
#else
            case AssetPropertyType.APT_List:
#endif
                AssetPropertyList     propList = prop as AssetPropertyList;
                IList <AssetProperty> subProps = propList.GetValue();
                if (subProps.Count == 0)
                {
                    break;
                }
                objWriter.WriteLine(_priexFix + propList.Name + " as propList");

                _priexFix += "\t";
                foreach (var ap in subProps)
                {
                    ReadAssetProperty(ap, objWriter);
                }
                _priexFix = _priexFix.Substring(0, _priexFix.Length - 1);

                break;

#if _Revit2018
            case AssetPropertyType.Asset:
#else
            case AssetPropertyType.APT_Asset:
#endif
                Asset propAsset = prop as Asset;
                objWriter.WriteLine(_priexFix + propAsset.Name + " as Asset");
                ReadAsset(propAsset, objWriter);
                break;

#if _Revit2018
            case AssetPropertyType.Enumeration:
#else
            case AssetPropertyType.APT_Enum:
#endif
                var propEnum = prop as AssetPropertyEnum;
                objWriter.WriteLine(_priexFix + propEnum.Name + "= " + propEnum.Value);
                break;

#if _Revit2018
            case AssetPropertyType.Reference:
#else
            case AssetPropertyType.APT_Reference:
#endif
                var propRef = prop as AssetPropertyReference;
                objWriter.WriteLine(_priexFix + prop.Name + " as propReference");
                break;

            default:
                objWriter.WriteLine(_priexFix + "居然有啥都不是类型的" + prop.Type);
                break;
            }

            // Get the connected properties.
            // please notice that the information of many texture stores here.
            if (prop.NumberOfConnectedProperties == 0)
            {
                return;
            }

            objWriter.WriteLine(_priexFix + "Connected Property: ");
            _priexFix += "\t";
            foreach (AssetProperty connectedProp in prop.GetAllConnectedProperties())
            {
                // Note: Usually, the connected property is an Asset.
                ReadAssetProperty(connectedProp, objWriter);
            }
            _priexFix = _priexFix.Substring(0, _priexFix.Length - 1);
        }
Ejemplo n.º 3
0
        public void ReadAssetProperty(AssetProperty prop, StreamWriter objWriter)
        {
            switch (prop.Type)
            {
                // Retrieve the value from simple type property is easy.  
                // for example, retrieve bool property value.  
#if R2016
            case AssetPropertyType.APT_Integer:
#elif R2018
            case AssetPropertyType.Integer:
#endif
                var AssetPropertyInt = prop as AssetPropertyInteger;
                objWriter.WriteLine(AssetPropertyInt.Name + "= " + AssetPropertyInt.Value.ToString() + ";" + AssetPropertyInt.IsReadOnly.ToString());
                break;

#if R2016
            case AssetPropertyType.APT_Distance:
#elif R2018
            case AssetPropertyType.Distance:
#endif
                var AssetPropertyDistance = prop as AssetPropertyDistance;
                objWriter.WriteLine(AssetPropertyDistance.Name + "= " + AssetPropertyDistance.Value + ";" + AssetPropertyDistance.IsReadOnly.ToString());
                break;

#if R2016
            case AssetPropertyType.APT_Double:
#elif R2018
            case AssetPropertyType.Double1:
#endif
                var AssetPropertyDouble = prop as AssetPropertyDouble;
                objWriter.WriteLine(AssetPropertyDouble.Name + "= " + AssetPropertyDouble.Value.ToString() + ";" + AssetPropertyDouble.IsReadOnly.ToString());
                break;

#if R2016
            case AssetPropertyType.APT_DoubleArray2d:
#elif R2018
            case AssetPropertyType.Double2:
#endif
                var AssetPropertyDoubleArray2d = prop as AssetPropertyDoubleArray2d;
                objWriter.WriteLine(AssetPropertyDoubleArray2d.Name + "= " + AssetPropertyDoubleArray2d.Value.ToString() + ";" + AssetPropertyDoubleArray2d.IsReadOnly.ToString());
                break;

#if R2016
            case AssetPropertyType.APT_DoubleArray4d:
#elif R2018
            case AssetPropertyType.Double4:
#endif
                var AssetPropertyDoubleArray4d = prop as AssetPropertyDoubleArray4d;
                objWriter.WriteLine(AssetPropertyDoubleArray4d.Name + "= " + AssetPropertyDoubleArray4d.Value.ToString() + ";" + AssetPropertyDoubleArray4d.IsReadOnly.ToString());
                break;

#if R2016
            case AssetPropertyType.APT_String:
#elif R2018
            case AssetPropertyType.String:
#endif
                AssetPropertyString val = prop as AssetPropertyString;
                objWriter.WriteLine(val.Name + "= " + val.Value + ";" + val.IsReadOnly.ToString());
                break;

#if R2016
            case AssetPropertyType.APT_Boolean:
#elif R2018
            case AssetPropertyType.Boolean:
#endif
                AssetPropertyBoolean boolProp = prop as AssetPropertyBoolean;
                objWriter.WriteLine(boolProp.Name + "= " + boolProp.Value.ToString() + ";" + boolProp.IsReadOnly.ToString());
                break;

                // When you retrieve the value from the data array property,  
                // you may need to get which value the property stands for.  
                // for example, the APT_Double44 may be a transform data.
#if R2016
            case AssetPropertyType.APT_Double44:
#elif R2018
            case AssetPropertyType.Double44:
#endif
                AssetPropertyDoubleArray4d transformProp = prop as AssetPropertyDoubleArray4d;
                DoubleArray tranformValue = transformProp.Value;
                objWriter.WriteLine(transformProp.Name + "= " + transformProp.Value.ToString() + ";" + tranformValue.IsReadOnly.ToString());
                break;

                // The APT_List contains a list of sub asset properties with same type.
#if R2016
            case AssetPropertyType.APT_List:
#elif R2018
            case AssetPropertyType.List:
#endif
                AssetPropertyList     propList = prop as AssetPropertyList;
                IList <AssetProperty> subProps = propList.GetValue();
                if (subProps.Count == 0)
                {
                    break;
                }
                switch (subProps[0].Type)
                {
#if R2016
                case AssetPropertyType.APT_Integer:
#elif R2018
                case AssetPropertyType.Integer:
#endif
                    foreach (AssetProperty subProp in subProps)
                    {
                        AssetPropertyInteger intProp = subProp as AssetPropertyInteger;
                        int intValue = intProp.Value;
                        objWriter.WriteLine(intProp.Name + "= " + intProp.Value.ToString() + ";" + intProp.IsReadOnly.ToString());
                    }
                    break;

#if R2016
                case AssetPropertyType.APT_String:
#elif R2018
                case AssetPropertyType.String:
#endif
                    foreach (AssetProperty subProp in subProps)
                    {
                        AssetPropertyString intProp = subProp as AssetPropertyString;
                        string intValue             = intProp.Value;
                        objWriter.WriteLine(intProp.Name + "= " + intProp.Value.ToString() + ";" + intProp.IsReadOnly.ToString());
                    }
                    break;
                }
                break;

#if R2016
            case AssetPropertyType.APT_Asset:
#elif R2018
            case AssetPropertyType.Asset:
#endif
                Asset propAsset = prop as Asset;
                for (int i = 0; i < propAsset.Size; i++)
                {
                    ReadAssetProperty(propAsset[i], objWriter);
                }
                break;

#if R2016
            case AssetPropertyType.APT_Reference:
#elif R2018
            case AssetPropertyType.Reference:
#endif
                break;

            default:
                objWriter.WriteLine("居然有啥都不是类型的" + prop.Type.ToString());
                break;
            }
                        // Get the connected properties.  
                        // please notice that the information of many texture stores here.  
                        if (prop.NumberOfConnectedProperties == 0)
            {
                return;
            }
            foreach (AssetProperty connectedProp in prop.GetAllConnectedProperties())
            {
                ReadAssetProperty(connectedProp, objWriter);
            }
        }