public IXbimGeometryObject Moved(IXbimGeometryObject geometryObject, IIfcObjectPlacement objectPlacement, ILogger logger) { using (new Tracer(LogHelper.CurrentFunctionName(), this._logger, geometryObject)) { return(_engine.Moved(geometryObject, objectPlacement, logger)); } }
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"); } }
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); }
public IXbimGeometryObject Moved(IXbimGeometryObject geometryObject, IIfcObjectPlacement objectPlacement) { return(_engine.Moved(geometryObject, objectPlacement)); }
public XbimMatrix3D ToMatrix3D(IIfcObjectPlacement objPlacement) { return(_engine.ToMatrix3D(objPlacement)); }