예제 #1
0
        /// <summary>
        /// Конструктор глушителя
        /// </summary>
        /// <param name="figureParameters">Parameters of muffler</param>
        /// <param name="kompasApp">Kompas application specimen</param>
        /// <param name="basePlane">Base plane of muffler, by default is null</param>
        public Muffler(KompasApplication kompasApp, MufflerParameters figureParameters,
                       ksEntity basePlane = null)
        {
            if (kompasApp == null ||
                figureParameters.Document3DPart == null ||
                figureParameters.BasePlanePoint.LastErrorCode != ErrorCodes.OK ||
                !(figureParameters.BasePlaneAxis == Obj3dType.o3d_planeXOY ||
                  figureParameters.BasePlaneAxis == Obj3dType.o3d_planeXOZ ||
                  figureParameters.BasePlaneAxis == Obj3dType.o3d_planeYOZ) ||
                !DoubleValidator.Validate(figureParameters.BasePlanePoint.X) ||
                !DoubleValidator.Validate(figureParameters.BasePlanePoint.Y))
            {
                LastErrorCode = ErrorCodes.ArgumentNull;
                return;
            }
            if (!(figureParameters.Direction == Direction_Type.dtNormal ||
                  figureParameters.Direction == Direction_Type.dtReverse))
            {
                LastErrorCode = ErrorCodes.ArgumentInvalid;
                return;
            }

            _kompasApp        = kompasApp;
            _figureParameters = figureParameters;

            Extrusion = CreateMuffler(figureParameters, basePlane);
            if (Extrusion == null)
            {
                return;
            }
        }
예제 #2
0
        /// <summary>
        /// Создать глушитель оси базовой плоскости
        /// </summary>
        /// <param name="figureParameters">Parameters of muffler</param>
        /// <param name="basePlane">Base plane of muffler, by default is null</param>
        /// <returns>Выдавливание глушителя или ноль, если выдавливание возвращает ошибку</returns>
        private KompasExtrusion CreateMuffler(MufflerParameters figureParameters, ksEntity basePlane = null)
        {
            // Muffler sketch
            var muffler = new KompasSketch(figureParameters.Document3DPart, figureParameters.BasePlaneAxis);

            // If базовая плоскость установлена --
            // -- создать эскиз глушителя на нем
            // вместо оси базовой плоскости
            if (basePlane != null)
            {
                muffler = new KompasSketch(figureParameters.Document3DPart, basePlane);
            }
            if (muffler.LastErrorCode != ErrorCodes.OK)
            {
                LastErrorCode = muffler.LastErrorCode;
                return(null);
            }

            var mufflerSketchEdit = muffler.BeginEntityEdit();

            if (mufflerSketchEdit == null)
            {
                LastErrorCode = ErrorCodes.EntityCreateError;
                return(null);
            }

            // Глушитель прямоугольник, ширина и высота диаметр шляпки
            var mufflerRectangleParam = new RectangleParameter(_kompasApp, _kompasApp.Parameters[0], _kompasApp.Parameters[0], figureParameters.BasePlanePoint);

            if (mufflerSketchEdit.ksRectangle(mufflerRectangleParam.FigureParam) == 0)
            {
                LastErrorCode = ErrorCodes.Document2DRectangleCreateError;
                return(null);
            }

            muffler.EndEntityEdit();

            // Выдавливание глушителя, высота глушителя высота шляпки / 4
            var extrusionParameters = new KompasExtrusionParameters(figureParameters.Document3DPart, Obj3dType.o3d_baseExtrusion, muffler.Entity, figureParameters.Direction, _kompasApp.Parameters[4] / 4.0);
            var mufflerExtrusion    = new KompasExtrusion(extrusionParameters, ExtrusionType.ByEntity);

            if (mufflerExtrusion.LastErrorCode != ErrorCodes.OK)
            {
                LastErrorCode = mufflerExtrusion.LastErrorCode;
                return(null);
            }

            return(mufflerExtrusion);
        }
예제 #3
0
        /// <summary>
        /// Create muffler in detail in base plane axis
        /// </summary>
        /// <param name="figureParameters">Parameters of muffler</param>
        /// <param name="basePlane">Base plane of muffler, by default is null</param>
        /// <returns>Muffler extrusion or null if extrusion returns error</returns>
        private KompasExtrusion CreateMuffler(MufflerParameters figureParameters, ksEntity basePlane = null)
        {
            // Muffler sketch
            var muffler = new KompasSketch(figureParameters.Document3DPart, figureParameters.BasePlaneAxis);

            // If base plane is set --
            // -- create sketch of muffler on it
            // instead of base plane axis
            if (basePlane != null)
            {
                muffler = new KompasSketch(figureParameters.Document3DPart, basePlane);
            }
            if (muffler.LastErrorCode != ErrorCodes.OK)
            {
                LastErrorCode = muffler.LastErrorCode;
                return(null);
            }

            var mufflerSketchEdit = muffler.BeginEntityEdit();

            if (mufflerSketchEdit == null)
            {
                LastErrorCode = ErrorCodes.EntityCreateError;
                return(null);
            }

            // Muffler rectangle, width and height are screw hat width
            var mufflerRectangleParam = new RectangleParameter(_kompasApp, _kompasApp.Parameters[0], _kompasApp.Parameters[0], figureParameters.BasePlanePoint);

            if (mufflerSketchEdit.ksRectangle(mufflerRectangleParam.FigureParam) == 0)
            {
                LastErrorCode = ErrorCodes.Document2DRectangleCreateError;
                return(null);
            }

            muffler.EndEntityEdit();

            // Muffler extrusion, height of muffler is nut height / 4
            var extrusionParameters = new KompasExtrusionParameters(figureParameters.Document3DPart, Obj3dType.o3d_baseExtrusion, muffler.Entity, figureParameters.Direction, _kompasApp.Parameters[4] / 4.0);
            var mufflerExtrusion    = new KompasExtrusion(extrusionParameters, ExtrusionType.ByEntity);

            if (mufflerExtrusion.LastErrorCode != ErrorCodes.OK)
            {
                LastErrorCode = mufflerExtrusion.LastErrorCode;
                return(null);
            }

            return(mufflerExtrusion);
        }
예제 #4
0
        /// <summary>
        /// Создать глушитель оси базовой плоскости
        /// </summary>
        /// <param name="figureParameters">Parameters of muffler</param>
        /// <param name="basePlane">Base plane of muffler, by default is null</param>
        /// <returns>Выдавливание глушителя или ноль, если выдавливание возвращает ошибку</returns>
        private KompasExtrusion CreateMuffler(MufflerParameters figureParameters,
                                              ksEntity basePlane = null)
        {
            var muffler = new KompasSketch(figureParameters.Document3DPart,
                                           figureParameters.BasePlaneAxis);

            if (basePlane != null)
            {
                muffler = new KompasSketch(figureParameters.Document3DPart, basePlane);
            }

            var mufflerSketchEdit = muffler.BeginEntityEdit();

            if (mufflerSketchEdit == null)
            {
                LastErrorCode = ErrorCodes.EntityCreateError;
                return(null);
            }

            var mufflerRectangleParam = new RectangleParameter
                                        (
                _kompasApp,
                _kompasApp.Parameters[0],
                _kompasApp.Parameters[0],
                figureParameters.BasePlanePoint
                                        );

            if (mufflerSketchEdit.ksRectangle(mufflerRectangleParam.FigureParam) == 0)
            {
                LastErrorCode = ErrorCodes.Document2DRegPolyCreateError;
                return(null);
            }

            muffler.EndEntityEdit();

            var extrusionParameters = new KompasExtrusionParameters
                                      (
                figureParameters.Document3DPart,
                Obj3dType.o3d_baseExtrusion,
                muffler.Entity,
                figureParameters.Direction, _kompasApp.Parameters[4] / 4.0
                                      );

            var mufflerExtrusion = new KompasExtrusion(extrusionParameters,
                                                       ExtrusionType.ByEntity);

            return(mufflerExtrusion);
        }
예제 #5
0
        /// <summary>
        /// Create screw hat with extrusion operation
        /// </summary>
        /// "regPoly" here is abbreviation of Regular Polygon
        /// Screw hat consists of base of hat (0.84 * H)
        /// and rounded chamfer on the top (0.16 * H)
        /// <returns>Extruded entity of hat for base part of screw</returns>
        private ksEntity CreateHat()
        {
            // 0.1 Create muffler, which base point is (W3 / 5, W3 / 5)
            var basePoint         = -(_kompasApp.Parameters[0] / 5.0);
            var mufflerParameters = new MufflerParameters();

            mufflerParameters.Document3DPart = _kompasApp.ScrewPart;
            mufflerParameters.Direction      = Direction_Type.dtNormal;
            mufflerParameters.BasePlaneAxis  = Obj3dType.o3d_planeYOZ;
            mufflerParameters.BasePlanePoint = new KompasPoint2D(basePoint, basePoint);

            var mufflerManager = new Muffler(_kompasApp, mufflerParameters);

            if (mufflerManager.LastErrorCode != ErrorCodes.OK)
            {
                LastErrorCode = mufflerManager.LastErrorCode;
                return(null);
            }

            var mufflerExtrusion = mufflerManager.Extrusion;

            if (mufflerExtrusion == null)
            {
                LastErrorCode = mufflerManager.LastErrorCode;
                return(null);
            }

            // 1.1 Hat sketch
            var regPolySketch = new KompasSketch(_kompasApp.ScrewPart, Obj3dType.o3d_planeYOZ);

            if (regPolySketch.LastErrorCode != ErrorCodes.OK)
            {
                LastErrorCode = regPolySketch.LastErrorCode;
                return(null);
            }

            var regPolySketchEdit = regPolySketch.BeginEntityEdit();

            if (regPolySketchEdit == null)
            {
                LastErrorCode = regPolySketch.LastErrorCode;
                return(null);
            }

            // Regular polygon center point
            var regPolyPoint = new KompasPoint2D(0, 0);
            // Regular polygon is base of hat
            var regPolyParam = new RegularPolygonParameter(_kompasApp, 6, _kompasApp.Parameters[0] / 2.0, regPolyPoint);              // W3

            if (regPolySketchEdit.ksRegularPolygon(regPolyParam.FigureParam, 0) == 0)
            {
                LastErrorCode = ErrorCodes.Document2DRegPolyCreatingError;
                return(null);
            }

            regPolySketch.EndEntityEdit();

            // 1.2 Hat entity extrusion
            // Screw hat height is equal to nut height
            var extrusionParameters = new KompasExtrusionParameters(_kompasApp.ScrewPart, Obj3dType.o3d_baseExtrusion, regPolySketch.Entity, Direction_Type.dtReverse, _kompasApp.Parameters[4] * 0.84);
            var regPolyExtrusion    = new KompasExtrusion(extrusionParameters, ExtrusionType.ByEntity);          // 0.84 * H

            if (regPolyExtrusion.LastErrorCode != ErrorCodes.OK)
            {
                LastErrorCode = regPolyExtrusion.LastErrorCode;
                return(null);
            }

            /* Main base face area is lower than parallel base face
             * because of muffler partially overlaps main base face area,
             * but not overlaps parallel base face area.
             */
            regPolyExtrusion.BaseFaceAreaState = KompasFaces.BaseFaceAreaState.BaseFaceAreaLower;
            var extruded = regPolyExtrusion.ExtrudedEntity;

            if (extruded == null)
            {
                LastErrorCode = regPolyExtrusion.LastErrorCode;
                return(null);
            }

            // 0.2 Delete muffler
            if (!mufflerManager.DeleteDetail())
            {
                LastErrorCode = mufflerManager.LastErrorCode;
                return(null);
            }

            // 1.3 Rounded chamfer in hat
            var roundedChamferParameters = new RoundedChamferParameters();

            roundedChamferParameters.Document3DPart           = _kompasApp.ScrewPart;
            roundedChamferParameters.RegularPolygonSketch     = regPolySketch.Entity;
            roundedChamferParameters.RegularPolygonParameters = regPolyParam;
            roundedChamferParameters.BasePlanePoint           = new KompasPoint2D(0.0, 0.0);
            roundedChamferParameters.Direction = Direction_Type.dtNormal;
            var roundedChamferManager = new RoundedChamfer(_kompasApp, roundedChamferParameters);

            if (!roundedChamferManager.CreateDetail())
            {
                LastErrorCode = roundedChamferManager.LastErrorCode;
                return(null);
            }

            return(extruded);
        }
예제 #6
0
        /// <summary>
        /// Создание шляпки винта с методом выдавливания
        /// </summary>
        /// <returns>Выдавленная шляпки винта для базовой части винта</returns>
        private ksEntity CreateHat()
        {
            // 0.1 Create muffler, which base point is (D / 5, D / 5)
            var basePoint         = -(_kompasApp.Parameters[0] / 5.0);
            var mufflerParameters = new MufflerParameters
            {
                Document3DPart = _kompasApp.ScrewPart,
                Direction      = Direction_Type.dtNormal,
                BasePlaneAxis  = Obj3dType.o3d_planeYOZ,
                BasePlanePoint = new KompasPoint2D(basePoint, basePoint)
            };

            var mufflerManager = new Muffler(_kompasApp, mufflerParameters);

            if (mufflerManager.LastErrorCode != ErrorCodes.OK)
            {
                LastErrorCode = mufflerManager.LastErrorCode;
                return(null);
            }

            var mufflerExtrusion = mufflerManager.Extrusion;

            if (mufflerExtrusion == null)
            {
                LastErrorCode = mufflerManager.LastErrorCode;
                return(null);
            }

            // 1.1 Create hat
            var screwHat = new KompasSketch(_kompasApp.ScrewPart, Obj3dType.o3d_planeYOZ);

            if (screwHat.LastErrorCode != ErrorCodes.OK)
            {
                LastErrorCode = screwHat.LastErrorCode;
                return(null);
            }

            var screwHatSketchEdit = screwHat.BeginEntityEdit();

            if (screwHatSketchEdit == null)
            {
                LastErrorCode = screwHat.LastErrorCode;
                return(null);
            }

            var screwHatPoint = new KompasPoint2D(0, 0);

            if (screwHatSketchEdit.ksCircle(screwHatPoint.X, screwHatPoint.Y, _kompasApp.Parameters[0] / 2, 1) == 0)
            {
                LastErrorCode = ErrorCodes.Document2DCircleCreatingError;
                return(null);
            }
            screwHat.EndEntityEdit();

            // 1.2 Screw base extrusion
            var extrusionParameters = new KompasExtrusionParameters(_kompasApp.ScrewPart, Obj3dType.o3d_baseExtrusion, screwHat.Entity, Direction_Type.dtReverse, _kompasApp.Parameters[4] * 0.84);
            var screwHatExtrusion   = new KompasExtrusion(extrusionParameters, ExtrusionType.ByEntity); // H

            if (screwHatExtrusion.LastErrorCode != ErrorCodes.OK)
            {
                LastErrorCode = screwHatExtrusion.LastErrorCode;
                return(null);
            }

            screwHatExtrusion.BaseFaceAreaState = KompasFaces.BaseFaceAreaState.BaseFaceAreaLower;
            var extruded = screwHatExtrusion.ExtrudedEntity;

            if (extruded == null)
            {
                LastErrorCode =
                    screwHatExtrusion.LastErrorCode;
                return(null);
            }
            // 0.2 Delete muffler
            if (!mufflerManager.DeleteDetail())
            {
                LastErrorCode = mufflerManager.LastErrorCode;
                return(null);
            }



            //Create slot
            var rectangleSketch = new KompasSketch(_kompasApp.ScrewPart, Obj3dType.o3d_planeYOZ);

            if (rectangleSketch.LastErrorCode != ErrorCodes.OK)
            {
                LastErrorCode = rectangleSketch.LastErrorCode;
                return(null);
            }

            var rectangleSketchEdit = rectangleSketch.BeginEntityEdit();

            if (rectangleSketchEdit == null)
            {
                LastErrorCode = rectangleSketch.LastErrorCode;
                return(null);
            }
            var rectanglePoint = new KompasPoint2D(-_kompasApp.Parameters[0], -_kompasApp.Parameters[5] / 2);
            var rectangleParam = new RectangleParameter(_kompasApp, _kompasApp.Parameters[0] * 2, _kompasApp.Parameters[5], rectanglePoint);

            if (rectangleSketchEdit.ksRectangle(rectangleParam.FigureParam, 0) == 0)
            {
                LastErrorCode = ErrorCodes.EntityDefinitionNull;
                return(null);
            }
            rectangleSketch.EndEntityEdit();

            extrusionParameters = new KompasExtrusionParameters(_kompasApp.ScrewPart, Obj3dType.o3d_cutExtrusion, rectangleSketch.Entity, Direction_Type.dtNormal, _kompasApp.Parameters[1] * 0.84);
            var rectangleExtrusion = new KompasExtrusion(extrusionParameters, ExtrusionType.ByEntity); // m; выдавливание шлица методом вырезания на глубину m

            if (rectangleExtrusion.LastErrorCode != ErrorCodes.OK)
            {
                LastErrorCode = rectangleExtrusion.LastErrorCode;
                return(null);
            }



            return(extruded);
        }
예제 #7
0
        /// <summary>
        /// Create nut base extrusion and sketch entities
        /// </summary>
        /// <param name="nutBasePlane">Base plane (see <seealso cref="CreateDetail"></seealso> for more info)</param>
        /// <param name="nutBasePoint">Nut base point</param>
        /// <param name="regPolyParam">Regular polygon parameters</param>
        /// <returns>
        /// An array of nut base sketch and extrusion entities
        /// or null in case of error during creation
        /// </returns>
        private ksEntity[] CreateNutBase(ksEntity nutBasePlane, KompasPoint3D nutBasePoint, RegularPolygonParameter regPolyParam)
        {
            // 1.1 Nut base sketch
            var nutBaseSketch = new KompasSketch(_kompasApp.NutPart, nutBasePlane);

            if (nutBaseSketch.LastErrorCode != ErrorCodes.OK)
            {
                LastErrorCode = nutBaseSketch.LastErrorCode;
                return(null);
            }

            var nutBaseEdit = nutBaseSketch.BeginEntityEdit();

            if (nutBaseEdit == null)
            {
                LastErrorCode = nutBaseSketch.LastErrorCode;
                return(null);
            }

            // Nut width is equal to W3 (screw hat width)
            if (nutBaseEdit.ksRegularPolygon(regPolyParam.FigureParam, 1) == 0)
            {
                LastErrorCode = ErrorCodes.Document2DRegPolyCreatingError;
                return(null);
            }

            nutBaseSketch.EndEntityEdit();

            // 1.2 Nut base extrusion
            var extrusionParameters = new KompasExtrusionParameters(_kompasApp.NutPart, Obj3dType.o3d_baseExtrusion, nutBaseSketch.Entity, Direction_Type.dtReverse, _kompasApp.Parameters[4] / 2.0);
            var nutBaseExtrusion    = new KompasExtrusion(extrusionParameters, ExtrusionType.ByEntity);           // / H /

            if (nutBaseExtrusion.LastErrorCode != ErrorCodes.OK)
            {
                LastErrorCode = nutBaseExtrusion.LastErrorCode;
                return(null);
            }

            // 0.1 Create muffler
            var mufflerParameters = new MufflerParameters();

            mufflerParameters.Document3DPart = _kompasApp.NutPart;
            mufflerParameters.Direction      = Direction_Type.dtNormal;
            mufflerParameters.BasePlaneAxis  = Obj3dType.o3d_planeXOZ;
            mufflerParameters.BasePlanePoint = new KompasPoint2D(nutBasePoint.Y, nutBasePoint.Z);

            var muffler = new Muffler(_kompasApp, mufflerParameters, nutBaseSketch.Entity);

            if (muffler.LastErrorCode != ErrorCodes.OK)
            {
                LastErrorCode = muffler.LastErrorCode;
                return(null);
            }

            // 1.3 Get base plane
            nutBaseExtrusion.BaseFaceAreaState = KompasFaces.BaseFaceAreaState.BaseFaceAreaLower;
            var nutBaseExtrudedEntity = nutBaseExtrusion.ExtrudedEntity;

            if (nutBaseExtrudedEntity == null)
            {
                LastErrorCode = nutBaseExtrusion.LastErrorCode;
                return(null);
            }

            // 0.2 Delete muffler
            if (!muffler.DeleteDetail())
            {
                LastErrorCode = muffler.LastErrorCode;
                return(null);
            }

            return(new ksEntity[2] {
                nutBaseSketch.Entity, nutBaseExtrudedEntity
            });
        }
예제 #8
0
        /// <summary>
        /// Create base plane cylinder extrusion for nut
        /// </summary>
        /// <param name="basePlaneCylinderDepth">Depth of cylinder of base plane (see <seealso cref="CreateDetail"></seealso> for more info)</param>
        /// <param name="nutBasePoint">Nut base point</param>
        /// <returns>Nut base cylinder extruded entity or null in case of error during creation</returns>
        private ksEntity CreateNutBasePlaneCylinder(KompasPoint3D nutBasePoint, double basePlaneCylinderDepth)
        {
            // 1. Create plane in global coordinates.
            // We are using small cylinder with diameter 0.1*W3 in base plane YOZ
            // and extrude him in length: W1 + W2 + H + 0.1*W1*W2.
            // Extruded plane is plane in global coordinates.
            // After this we can simply delete the cylinder.

            // 1.1 Cylinder sketch
            var basePlaneCylinderSketch = new KompasSketch(_kompasApp.NutPart, Obj3dType.o3d_planeYOZ);

            if (basePlaneCylinderSketch.LastErrorCode != ErrorCodes.OK)
            {
                LastErrorCode = basePlaneCylinderSketch.LastErrorCode;
                return(null);
            }

            var cylinderSketchEdit = basePlaneCylinderSketch.BeginEntityEdit();

            if (cylinderSketchEdit.ksCircle(nutBasePoint.Y, nutBasePoint.Z, _kompasApp.Parameters[0] * 0.1, 1) == 0)
            {
                LastErrorCode = ErrorCodes.Document2DCircleCreatingError;
                return(null);
            }

            basePlaneCylinderSketch.EndEntityEdit();


            // 1.2 Cylinder extrusion
            var extrusionParameters = new KompasExtrusionParameters(_kompasApp.NutPart, Obj3dType.o3d_baseExtrusion, basePlaneCylinderSketch.Entity, Direction_Type.dtReverse, basePlaneCylinderDepth);
            var cylinderExtrusion   = new KompasExtrusion(extrusionParameters, ExtrusionType.ByEntity);

            if (cylinderExtrusion.LastErrorCode != ErrorCodes.OK)
            {
                LastErrorCode = cylinderExtrusion.LastErrorCode;
                return(null);
            }

            // 0.1 Muffler creation
            var mufflerParameters = new MufflerParameters();

            mufflerParameters.Document3DPart = _kompasApp.NutPart;
            mufflerParameters.Direction      = Direction_Type.dtNormal;
            mufflerParameters.BasePlaneAxis  = Obj3dType.o3d_planeYOZ;
            mufflerParameters.BasePlanePoint = new KompasPoint2D(nutBasePoint.Y, nutBasePoint.Z);

            var mufflerManager = new Muffler(_kompasApp, mufflerParameters);

            if (mufflerManager.LastErrorCode != ErrorCodes.OK)
            {
                LastErrorCode = mufflerManager.LastErrorCode;
                return(null);
            }

            var mufflerExtrusion = mufflerManager.Extrusion;

            if (mufflerExtrusion == null)
            {
                LastErrorCode = ErrorCodes.ArgumentNull;
                return(null);
            }

            // 1.3 Get nut base plane
            cylinderExtrusion.BaseFaceAreaState = KompasFaces.BaseFaceAreaState.BaseFaceAreaLower;
            var nutBasePlane = cylinderExtrusion.ExtrudedEntity;

            if (nutBasePlane == null)
            {
                LastErrorCode = cylinderExtrusion.LastErrorCode;
                return(null);
            }

            // 0.2 Muffler deletion
            if (!mufflerManager.DeleteDetail())
            {
                return(null);
            }

            return(nutBasePlane);
        }