コード例 #1
0
 public IfcLocalPlacement(IfcAxis2Placement relativePlacement, IfcObjectPlacement placementRelTo)
     : this()
 {
     if (relativePlacement == null)
         throw new ArgumentNullException("relativePlacement argument can not be null");
     _relativePlacement = relativePlacement;
     _placementRelTo = placementRelTo;
 }
コード例 #2
0
 internal abstract void CopyValues(IfcObjectPlacement value);
コード例 #3
0
        /// <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");
			}
        }
コード例 #4
0
 internal override void CopyValues(IfcObjectPlacement value)
 {
     IfcLocalPlacement lp = value as IfcLocalPlacement;
     PlacementRelTo = lp.PlacementRelTo;
     RelativePlacement = lp.RelativePlacement;
 }
コード例 #5
0
 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;
     }
 }
コード例 #6
0
ファイル: IfcProduct.cs プロジェクト: Artoymyp/XbimEssentials
 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;
     }
 }
コード例 #7
0
 internal override void CopyValues(IfcObjectPlacement value)
 {
     IfcGridPlacement gp = value as IfcGridPlacement;
     PlacementLocation = gp.PlacementLocation;
     PlacementRefDirection = gp.PlacementRefDirection;
 }