public static StepFile simpleStepRepresentation() { StepDataObject entity0 = new StepDataObject("IFCPROJECT", StepValue.CreateString("3MD_HkJ6X2EwpfIbCFm0g_"), StepValue.CreateLineReference(2), StepValue.CreateString("Default Project"), StepValue.CreateString("Description of Default Project"), StepValue.CreateNull(), StepValue.CreateFloat(-22.4), StepValue.CreateNull(), StepValue.CreateArray( StepValue.CreateLineReference(20) ), StepValue.CreateLineReference(7) ); StepDataObject entity1 = new StepDataObject("IFCOWNERHISTORY", StepValue.CreateLineReference(3), StepValue.CreateNestedEntity(new StepDataObject("IFCTEXT", StepValue.CreateString("foobar"))), StepValue.CreateNull(), StepValue.CreateEnum("ADDED"), StepValue.CreateNull(), StepValue.CreateBoolean(false), StepValue.CreateOverridden(), StepValue.CreateInteger(1217620436) ); StepFile sf = new StepFile(); appendHeaderToStepFile(sf, createHeader()); sf.Data.Add(1, entity0); sf.Data.Add(2, entity1); return(sf); }
private StepValue ExtractProperty(Object entity, PropertyInfo pi) { if (entity == null) { throw new ArgumentNullException("entity"); } if (pi == null) { throw new ArgumentNullException("pi"); } logger.Debug(String.Format(CultureInfo.InvariantCulture, "Method ExtractProperty(Object, PropertyInfo) called with parameters 'entity', an object of type {0}, and 'pi', a PropertyInfo of name '{1}' and PropertyType {2}", entity.GetType().FullName, pi.Name, pi.PropertyType)); if (pi.Name == "ValueAsString") { throw new StepBindingException("Property extraction has gone wrong - it should not be working with any properties named 'ValueAsString'"); } if (IsOverriddenProperty(pi)) { return(StepValue.CreateOverridden()); } object value = pi.GetValue(entity, null); if (value == null) { return(StepValue.CreateNull()); } if (IsIndirectProperty(pi)) { return(ExtractProperty(value, GetIndirectProperty(pi.PropertyType))); //TODO what if this is indexed?? } if (pi.PropertyType == typeof(object)) { //TODO /* * The value should be wrapped as an object * e.g. IFCMEASUREWITHUNIT(1.745E-2, ... * should become * IFCMEASUREWITHUNIT(IFCPLANEANGLEMEASURE(1.745E-2), ... * * **/ logger.Debug(String.Format("\t\tFound an object property. Type of value is {0}", value.GetType())); return(StepValue.CreateNestedEntity(ExtractObject(value))); } return(ExtractPropertyValue(value)); }
private StepValue deserializeNull() { return(StepValue.CreateNull()); }
private StepValue ExtractPropertyValue(Object value) { if (value == null) { return(StepValue.CreateNull()); } if (typeof(Entity).IsAssignableFrom(value.GetType())) //it's a nested entity, which should be referenced { return(ExtractNestedEntity(value as Entity)); } Type typeOfValue = value.GetType(); if (IsAnonymousType(typeOfValue)) { if (IsValueType(typeOfValue)) { return(ExtractProperty(value, this._cache.getPropertiesOfEntity(typeOfValue)[0])); //HACK } else { logger.Debug(String.Format("{0} is not a ValueType", typeOfValue.FullName)); return(ExtractProperty(value, GetIndirectProperty(value.GetType()))); } } if (value.GetType().Equals(typeof(string))) { return(StepValue.CreateString((string)value)); } if (value.GetType().IsArray) { Array array = (Array)value; IList <StepValue> arrayValues = extractValuesFromArray(array); return(StepValue.CreateArray(arrayValues)); } if (value is IArray) { Type t = value.GetType(); PropertyInfo itemsPi = t.GetProperty("Items", BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance); if (itemsPi == null) { throw new StepBindingException( String.Format("We believe to have located a type, {0}, which derives from IArray but does not implement the Items property", t.FullName)); } Array array = (Array)itemsPi.GetValue(value, null); IList <StepValue> arrayValues = extractValuesFromArray(array); return(StepValue.CreateArray(arrayValues)); } if (value.GetType().IsEnum) { return(StepValue.CreateEnum(String.Format(CultureInfo.InvariantCulture, "{0}", value.ToString().ToUpper()))); } if (value.GetType().IsPrimitive) { switch (value.GetType().FullName) //HACK, there must be a better way of { case "System.Boolean": return(StepValue.CreateBoolean((bool)value)); case "System.Single": return(StepValue.CreateFloat((Single)value)); case "System.Double": return(StepValue.CreateFloat((double)value)); case "System.Int16": return(StepValue.CreateInteger((System.Int16)value)); case "System.Int32": return(StepValue.CreateInteger((System.Int32)value)); case "System.Int64": return(StepValue.CreateInteger((System.Int64)value)); default: throw new NotImplementedException(String.Format(CultureInfo.InvariantCulture, "ExtractProperty method has not yet implemented for a primitive of type {0}", value.GetType().FullName)); } } //nested objects return(StepValue.CreateNestedEntity(this.ExtractObject(value))); }