/// <summary> /// Dump all properties from the given model item /// </summary> public static void DumpProperties(ModelItem mi) { // inspired by sample code from // 'Navisworks .NET API Properties' by Xiaodong Liang // https://adndevblog.typepad.com/aec/2012/05/navisworks-net-api-properties.html PropertyCategoryCollection pcs = mi.PropertyCategories; int n = pcs.Count <PropertyCategory>(); Debug.Print("{0} property categories:", n); foreach (PropertyCategory pc in pcs) { Debug.Print("{0} ({1})", pc.DisplayName, pc.Name); foreach (DataProperty dp in pc.Properties) { VariantData v = dp.Value; VariantDataType t = v.DataType; Debug.Print(" {0} ({1}) = {2} ({3})", dp.DisplayName, dp.Name, GetPropertyValue(dp, true), t.ToString()); } } }
public static object GetPropertyValue( DataProperty dp, bool return_string) { VariantData v = dp.Value; VariantDataType t = v.DataType; object o = null; switch (t) { // Empty. No data stored. case VariantDataType.None: o = return_string ? "<null>" : null; break; // Unitless double value case VariantDataType.Double: o = return_string ? (object)Util.RealString(v.ToDouble()) : v.ToDouble(); break; // Unitless 32 bit integer value case VariantDataType.Int32: o = return_string ? (object)v.ToInt32().ToString() : v.ToInt32(); break; // Boolean (true/false) value case VariantDataType.Boolean: o = return_string ? (object)(v.ToBoolean() ? "true" : "false") : v.ToBoolean(); break; // String intended for display to the end user (normally localized) case VariantDataType.DisplayString: o = v.ToDisplayString(); break; // A specific date and time (usually UTC) case VariantDataType.DateTime: o = return_string ? (object)v.ToDateTime().ToShortTimeString() : v.ToDateTime(); break; // A double that represents a length (specific units depend on context) case VariantDataType.DoubleLength: o = return_string ? (object)Util.RealString(v.ToDoubleLength()) : v.ToDoubleLength(); break; // A double that represents an angle in radians case VariantDataType.DoubleAngle: o = return_string ? (object)Util.RealString(v.ToDoubleAngle()) : v.ToDoubleAngle(); break; // A named constant case VariantDataType.NamedConstant: o = return_string ? (object)v.ToNamedConstant().ToString() : v.ToNamedConstant(); break; // String intended to be used as a programmatic identifier. 7-bit ASCII characters // only. case VariantDataType.IdentifierString: o = v.ToIdentifierString(); break; // A double that species an area (specific units depend on context) case VariantDataType.DoubleArea: o = return_string ? (object)Util.RealString(v.ToDoubleArea()) : v.ToDoubleArea(); break; // A double that species a volume (specific units depend on context) case VariantDataType.DoubleVolume: o = return_string ? (object)Util.RealString(v.ToDoubleVolume()) : v.ToDoubleVolume(); break; // A 3D point value case VariantDataType.Point3D: o = return_string ? (object)Util.PointString(v.ToPoint3D()) : v.ToPoint3D(); break; // A 2D point value case VariantDataType.Point2D: o = return_string ? (object)Util.PointString(v.ToPoint2D()) : v.ToPoint2D(); break; } return(o); }