Exemplo n.º 1
0
        /// <summary>
        /// Copy constructor using the specification of another alignment
        /// </summary>
        /// <param name="axisAlignment"></param>
        public IfcAxisAlignment(IfcAxisAlignment axisAlignment)
        {
            if (null == axisAlignment)
            {
                throw new ArgumentNullException(nameof(axisAlignment));
            }

            SourceReferenceAxis = new IfcAlignReferenceAxis(axisAlignment.SourceReferenceAxis);
            TargetReferenceAxis = new IfcAlignReferenceAxis(axisAlignment.TargetReferenceAxis);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Changes an existing local placement to be aligned to target axis.
        /// </summary>
        /// <param name="placement">A placement to be aligned</param>
        /// <param name="transform">The associated transform in model units</param>
        /// <returns>The given placement with (possible) additional axis components</returns>
        public IIfcLocalPlacement ChangeIfcLocalPlacement(IIfcLocalPlacement placement, XbimMatrix3D transform)
        {
            // Compute delta alignment
            var virtualParent = SourceReferenceAxis.TransformAxisTo(TargetReferenceAxis);
            // Multiply out with selected placement
            var unitsPerMeter  = placement.Model.ModelFactors.OneMeter;
            var finalAlignment = new IfcAlignReferenceAxis(transform * virtualParent.To3D(unitsPerMeter), unitsPerMeter);

            switch (placement.Model.SchemaVersion)
            {
            case Xbim.Common.Step21.XbimSchemaVersion.Ifc2X3:
                return((placement as Xbim.Ifc2x3.GeometricConstraintResource.IfcLocalPlacement).ChangeIfc2x3ObjectPlacementTo(finalAlignment, true));

            case Xbim.Common.Step21.XbimSchemaVersion.Ifc4:
            case Xbim.Common.Step21.XbimSchemaVersion.Ifc4x1:
                return((placement as Xbim.Ifc4.GeometricConstraintResource.IfcLocalPlacement).ChangeIfc4ObjectPlacementTo(finalAlignment, true));

            default:
                throw new ArgumentException($"Unhandled schema version {placement.Model.SchemaVersion}");
            }
        }