コード例 #1
0
ファイル: ExampleData.cs プロジェクト: whztt07/ifc-dotnet
        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);
        }
コード例 #2
0
        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)));
        }