public IfcLocalPlacement(IfcAxis2Placement relativePlacement, IfcObjectPlacement placementRelTo) : this() { if (relativePlacement == null) throw new ArgumentNullException("relativePlacement argument can not be null"); _relativePlacement = relativePlacement; _placementRelTo = placementRelTo; }
internal abstract void CopyValues(IfcObjectPlacement value);
/// <summary> /// Builds a windows Matrix3D from an ObjectPlacement /// Conversion fo c++ function CartesianTransform::ConvertMatrix3D from CartesianTransform.cpp /// </summary> /// <param name="objPlacement">IfcObjectPlacement object</param> /// <returns>Matrix3D</returns> protected XbimMatrix3D ConvertMatrix3D(IfcObjectPlacement objPlacement) { if(objPlacement is IfcLocalPlacement) { IfcLocalPlacement locPlacement = (IfcLocalPlacement)objPlacement; if (locPlacement.RelativePlacement is IfcAxis2Placement3D) { IfcAxis2Placement3D axis3D = (IfcAxis2Placement3D)locPlacement.RelativePlacement; XbimVector3D ucsXAxis = new XbimVector3D(axis3D.RefDirection.DirectionRatios[0], axis3D.RefDirection.DirectionRatios[1], axis3D.RefDirection.DirectionRatios[2]); XbimVector3D ucsZAxis = new XbimVector3D(axis3D.Axis.DirectionRatios[0], axis3D.Axis.DirectionRatios[1], axis3D.Axis.DirectionRatios[2]); ucsXAxis.Normalize(); ucsZAxis.Normalize(); XbimVector3D ucsYAxis = XbimVector3D.CrossProduct(ucsZAxis, ucsXAxis); ucsYAxis.Normalize(); XbimPoint3D ucsCentre = axis3D.Location.XbimPoint3D(); XbimMatrix3D ucsTowcs = new XbimMatrix3D(ucsXAxis.X, ucsXAxis.Y, ucsXAxis.Z, 0, ucsYAxis.X, ucsYAxis.Y, ucsYAxis.Z, 0, ucsZAxis.X, ucsZAxis.Y, ucsZAxis.Z, 0, ucsCentre.X, ucsCentre.Y, ucsCentre.Z , 1); if (locPlacement.PlacementRelTo != null) { return XbimMatrix3D.Multiply(ucsTowcs, ConvertMatrix3D(locPlacement.PlacementRelTo)); } else return ucsTowcs; } else //must be 2D { throw new NotImplementedException("Support for Placements other than 3D not implemented"); } } else //probably a Grid { throw new NotImplementedException("Support for Placements other than Local not implemented"); } }
internal override void CopyValues(IfcObjectPlacement value) { IfcLocalPlacement lp = value as IfcLocalPlacement; PlacementRelTo = lp.PlacementRelTo; RelativePlacement = lp.RelativePlacement; }
public override void IfcParse(int propIndex, IPropertyValue value) { switch (propIndex) { case 0: _placementRelTo = (IfcObjectPlacement) value.EntityVal; break; case 1: _relativePlacement = (IfcAxis2Placement)value.EntityVal; break; default: this.HandleUnexpectedAttribute(propIndex, value); break; } }
public override void IfcParse(int propIndex, IPropertyValue value) { switch (propIndex) { case 0: case 1: case 2: case 3: case 4: base.IfcParse(propIndex, value); break; case 5: _objectPlacement = (IfcObjectPlacement) value.EntityVal; break; case 6: _representation = (IfcProductRepresentation) value.EntityVal; break; default: this.HandleUnexpectedAttribute(propIndex, value); break; } }
internal override void CopyValues(IfcObjectPlacement value) { IfcGridPlacement gp = value as IfcGridPlacement; PlacementLocation = gp.PlacementLocation; PlacementRefDirection = gp.PlacementRefDirection; }