GeometryGym.Ifc.IfcAxis2Placement3D.parseJObject C# (CSharp) Метод

parseJObject() приватный Метод

private parseJObject ( JObject obj ) : void
obj JObject
Результат void
        internal override void parseJObject(JObject obj)
        {
            base.parseJObject(obj);
            IfcCartesianPoint cp = Location;
            if(cp != null)
                cp.Coordinates = cp.Coordinates; // Force 3d
            IfcDirection dir = mDatabase.parseJObject<IfcDirection>(obj.GetValue("Axis", StringComparison.InvariantCultureIgnoreCase) as JObject);
            if (dir != null)
            {
                mAxis = dir.mIndex;
                dir.DirectionRatioY = dir.DirectionRatioY;
                dir.DirectionRatioZ = dir.DirectionRatioZ;
            }
            dir = mDatabase.parseJObject<IfcDirection>(obj.GetValue("RefDirection", StringComparison.InvariantCultureIgnoreCase) as JObject);
            if (dir != null)
            {
                mRefDirection = dir.mIndex;
                dir.DirectionRatioY = dir.DirectionRatioY;
                dir.DirectionRatioZ = dir.DirectionRatioZ;
            }
        }

Usage Example

        public T ParseJObject <T>(JObject obj) where T : IBaseClassIfc
        {
            if (obj == null)
            {
                return(default(T));
            }

            BaseClassIfc result = null;
            JToken       token  = obj.GetValue("href", StringComparison.InvariantCultureIgnoreCase);

            if (token != null)
            {
                if (token.Type == JTokenType.Integer)
                {
                    int index = token.Value <int>();
                    result = this[index];
                }
                else if (token.Type == JTokenType.String)
                {
                    mDictionary.TryGetValue(token.Value <string>(), out result);
                }
                if (result != null && obj.Count == 1)
                {
                    return((T)(IBaseClassIfc)result);
                }
            }
            if (result == null)
            {
                Type type = null;
                token = obj.GetValue("type", StringComparison.InvariantCultureIgnoreCase);
                if (token != null)
                {
                    string keyword = token.Value <string>();
                    type = Type.GetType("GeometryGym.Ifc." + keyword, false, true);
                }
                if (token == null)
                {
                    type = typeof(T);
                }
                if (type != null && !type.IsAbstract)
                {
                    ConstructorInfo constructor = type.GetConstructor(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic,
                                                                      null, Type.EmptyTypes, null);
                    if (constructor != null)
                    {
                        result = constructor.Invoke(new object[] { }) as BaseClassIfc;
                        if (result != null)
                        {
                            result.mDatabase = this;
                            token            = obj.GetValue("id", StringComparison.InvariantCultureIgnoreCase);
                            int index = 0;                            // (int) (this.mIfcObjects.Count * 1.2);
                            if (token != null)
                            {
                                if (token.Type == JTokenType.Integer)
                                {
                                    try
                                    {
                                        int i = token.Value <int>();
                                        if (this[i] == null)
                                        {
                                            index = i;
                                        }
                                    }
                                    catch (Exception) { }
                                    // TODO merge if existing equivalent
                                }
                                else if (token.Type == JTokenType.String)
                                {
                                    result.mGlobalId = token.Value <string>();
                                    mDictionary.TryAdd(result.mGlobalId, result);
                                }
                            }
                            IfcCartesianPoint   point     = result as IfcCartesianPoint;
                            IfcDirection        direction = result as IfcDirection;
                            IfcAxis2Placement3D placement = result as IfcAxis2Placement3D;
                            if (index == 0)
                            {
                                if (point != null)
                                {
                                    point.parseJObject(obj);
                                    if (point.isOrigin)
                                    {
                                        if (point.is2D)
                                        {
                                            return((T)(IBaseClassIfc)Factory.Origin2d);
                                        }
                                        return((T)(IBaseClassIfc)Factory.Origin);
                                    }
                                }
                                else
                                {
                                    if (direction != null)
                                    {
                                        direction.parseJObject(obj);
                                        if (!direction.is2D)
                                        {
                                            if (direction.isXAxis)
                                            {
                                                return((T)(IBaseClassIfc)Factory.XAxis);
                                            }
                                            if (direction.isYAxis)
                                            {
                                                return((T)(IBaseClassIfc)Factory.YAxis);
                                            }
                                            if (direction.isZAxis)
                                            {
                                                return((T)(IBaseClassIfc)Factory.ZAxis);
                                            }
                                            if (direction.isXAxisNegative)
                                            {
                                                return((T)(IBaseClassIfc)Factory.XAxisNegative);
                                            }
                                            if (direction.isYAxisNegative)
                                            {
                                                return((T)(IBaseClassIfc)Factory.YAxisNegative);
                                            }
                                            if (direction.isZAxisNegative)
                                            {
                                                return((T)(IBaseClassIfc)Factory.ZAxisNegative);
                                            }
                                        }
                                    }
                                    if (placement != null)
                                    {
                                        placement.parseJObject(obj);
                                        if (placement.IsXYPlane)
                                        {
                                            return((T)(IBaseClassIfc)Factory.XYPlanePlacement);
                                        }
                                    }
                                }

                                index       = NextBlank();
                                this[index] = result;

                                if (point != null || direction != null || placement != null)
                                {
                                    return((T)(IBaseClassIfc)result);
                                }
                            }
                            else
                            {
                                this[index] = result;
                            }
                        }
                    }
                }
            }
            if (result == null)
            {
                return(default(T));
            }
            result.parseJObject(obj);
            parseBespoke(result, obj);
            return((T)(IBaseClassIfc)result);
        }
All Usage Examples Of GeometryGym.Ifc.IfcAxis2Placement3D::parseJObject