/// <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); } }
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); }
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); } }