示例#1
0
 public IXbimGeometryObject Moved(IXbimGeometryObject geometryObject, IIfcObjectPlacement objectPlacement, ILogger logger)
 {
     using (new Tracer(LogHelper.CurrentFunctionName(), this._logger, geometryObject))
     {
         return(_engine.Moved(geometryObject, objectPlacement, logger));
     }
 }
示例#2
0
 public XbimMatrix3D ToMatrix3D(IIfcObjectPlacement objPlacement, ILogger logger)
 {
     using (new Tracer(LogHelper.CurrentFunctionName(), this._logger, objPlacement))
     {
         return(_engine.ToMatrix3D(objPlacement, logger));
     }
 }
        public static double?Z(this IIfcObjectPlacement objPlacement)
        {
            var localPlacement = objPlacement as IIfcLocalPlacement;

            if (localPlacement == null)
            {
                return(null);
            }
            var matrix = localPlacement.ToMatrix3D();
            var origin = new XbimPoint3D(0, 0, 0);

            origin = matrix.Transform(origin);
            return(origin.Z);
        }
        public static XbimMatrix3D ToMatrix3D(IIfcObjectPlacement op)
        {
            // op must be an IfcLocalPlacement
            var lp     = (IIfcLocalPlacement)op;
            var matrix = ToMatrix3D(lp.RelativePlacement as IIfcAxis2Placement3D);

            // If the attribute PlacementRelTo is null, then the local placement is given to the WCS.
            if (lp.PlacementRelTo == null)
            {
                return(matrix);
            }
            // Recursively deal with the transformation
            return(matrix * ToMatrix3D(lp.PlacementRelTo));
        }
        public static XbimMatrix3D ToMatrix3D(this IIfcObjectPlacement objPlacement)
        {
            var lp = objPlacement as IIfcLocalPlacement;

            if (lp != null)
            {
                XbimMatrix3D local = lp.RelativePlacement.ToMatrix3D();
                if (lp.PlacementRelTo != null)
                {
                    return(local * lp.PlacementRelTo.ToMatrix3D());
                }
                return(local);
            }
            else //
            {
                throw new NotImplementedException($"Placement of type {objPlacement.GetType().Name} is not implemented");
            }
        }
示例#6
0
        private TransformNode AddNode(IIfcObjectPlacement placement, IIfcProduct product)
        {
            var lp = placement as IIfcLocalPlacement;
            var gp = placement as IIfcGridPlacement;

            if (gp != null)
            {
                throw new NotImplementedException("GridPlacement is not implemented");
            }
            if (lp == null)
            {
                return(null);
            }
            TransformNode node;

            if (!_placementNodes.TryGetValue(placement, out node))
            {
                node = new TransformNode(product);
                if (product != null)
                {
                    _productNodes.Add(product.EntityLabel, node);
                }
                var ax3 = lp.RelativePlacement as IIfcAxis2Placement3D;
                if (ax3 != null)
                {
                    node.LocalMatrix = ax3.ToMatrix3D();
                }
                else
                {
                    var ax2 = lp.RelativePlacement as IIfcAxis2Placement2D;
                    if (ax2 != null)
                    {
                        node.LocalMatrix = ax2.ToMatrix3D();
                    }
                }

                _placementNodes.Add(placement, node);
                if (lp.PlacementRelTo != null)
                {
                    TransformNode parent;
                    if (_placementNodes.TryGetValue(lp.PlacementRelTo, out parent))
                    //we have already processed parent
                    {
                        parent.AddChild(node);
                        node.Parent = parent;
                    }
                    else //make sure placement tree is created
                    {
                        parent = AddNode(lp.PlacementRelTo, null);
                        parent.AddChild(node);
                        node.Parent = parent;
                    }
                }
                else //it is in world coordinate system just add it
                {
                    _root.AddChild(node);
                    node.Parent = _root;
                }
                return(node);
            }

            if (product == null || node.ProductLabel != null)
            {
                return(null);
            }
            node.ProductLabel = product.EntityLabel;
            _productNodes.Add(product.EntityLabel, node);
            return(node);
        }
示例#7
0
 public IXbimGeometryObject Moved(IXbimGeometryObject geometryObject, IIfcObjectPlacement objectPlacement)
 {
     return(_engine.Moved(geometryObject, objectPlacement));
 }
示例#8
0
 public XbimMatrix3D ToMatrix3D(IIfcObjectPlacement objPlacement)
 {
     return(_engine.ToMatrix3D(objPlacement));
 }