Пример #1
0
        /// <summary>
        /// Функция построения ножек
        /// </summary>
        /// <param name="tableSettings">Параметры столика</param>
        private void BuildLegs(TableSettings tableSettings)
        {
            var document = (ksDocument3D)_kompas.ActiveDocument3D();
            var part     = (ksPart)document.GetPart((short)Part_Type.pTop_Part);

            if (part != null)
            {
                var legsOffsetPlane    = (ksEntity)part.NewEntity((short)Obj3dType.o3d_planeOffset);
                var legsOffsetPlaneDef = (ksPlaneOffsetDefinition)legsOffsetPlane.GetDefinition();

                var basePlane = (ksEntity)part.GetDefaultEntity(
                    (short)Obj3dType.o3d_planeXOY);

                legsOffsetPlaneDef.SetPlane(basePlane);
                legsOffsetPlaneDef.offset = tableSettings.TabletopThickness;
                legsOffsetPlane.Create();

                _legsOffsetPlane = legsOffsetPlane;

                var legsSketch = (ksEntity)part.NewEntity((short)Obj3dType.o3d_sketch);
                if (legsSketch != null)
                {
                    legsSketch.name = "Эскиз ножек";
                    var legsSketchDefinition = (ksSketchDefinition)legsSketch.GetDefinition();
                    if (legsSketchDefinition != null)
                    {
                        legsSketchDefinition.SetPlane(legsOffsetPlane);
                        legsSketch.Create();

                        var draw = (ksDocument2D)legsSketchDefinition.BeginEdit();
                        DrawLeg(draw, -_halfX, _halfY, tableSettings.LegLength);
                        DrawLeg(draw, -_halfX, -_halfY + tableSettings.LegLength,
                                tableSettings.LegLength);
                        DrawLeg(draw, _halfX - tableSettings.LegLength, _halfY,
                                tableSettings.LegLength);
                        DrawLeg(draw, _halfX - tableSettings.LegLength, -_halfY + tableSettings.LegLength,
                                tableSettings.LegLength);
                        legsSketchDefinition.EndEdit();

                        var extr = (ksEntity)part.NewEntity(
                            (short)Obj3dType.o3d_bossExtrusion);
                        if (extr != null)
                        {
                            extr.name = "Выдавливание ножек";
                            var extrDef = (ksBossExtrusionDefinition)extr.GetDefinition();
                            if (extrDef != null)
                            {
                                extrDef.directionType = (short)Direction_Type.dtNormal;
                                extrDef.SetSideParam(true, (short)End_Type.etBlind,
                                                     tableSettings.LegHeight);
                                extrDef.SetSketch(legsSketch);
                                extr.Create();
                            }
                        }
                    }
                }
            }
        }
Пример #2
0
        /// <summary>
        /// Построение разделителей
        /// </summary>
        /// <param name="tableSettings">Параметры столика</param>
        private void BuildSeptums(TableSettings tableSettings)
        {
            var document = (ksDocument3D)_kompas.ActiveDocument3D();
            var part     = (ksPart)document.GetPart((short)Part_Type.pTop_Part);

            if (part != null)
            {
                var septumOffsetPlane = (ksEntity)part.NewEntity(
                    (short)Obj3dType.o3d_planeOffset);
                var septOffsetPlaneDef = (ksPlaneOffsetDefinition)
                                         septumOffsetPlane.GetDefinition();
                septOffsetPlaneDef.SetPlane(_legsOffsetPlane);
                septOffsetPlaneDef.offset = tableSettings.SeptumOffset;
                septumOffsetPlane.Create();

                var septumSketch = (ksEntity)part.NewEntity((short)Obj3dType.o3d_sketch);
                if (septumSketch != null)
                {
                    septumSketch.name = "Эскиз разделителей";
                    var septumSketchDef = (ksSketchDefinition)septumSketch.GetDefinition();
                    septumSketchDef.SetPlane(septumOffsetPlane);
                    septumSketch.Create();

                    double a = 20;
                    double b = (_halfX - tableSettings.LegLength) - (-_halfX + tableSettings.LegLength);

                    var sketchEdit = septumSketchDef.BeginEdit();
                    DrawSeptum(sketchEdit, -_halfX + tableSettings.LegLength, _halfY - 10,
                               a, b, 0);
                    DrawSeptum(sketchEdit, _halfX - 10,
                               _halfY - tableSettings.LegLength,
                               b, a, 1);
                    DrawSeptum(sketchEdit, -_halfX + tableSettings.LegLength,
                               -_halfY + 10,
                               a, b, 2);
                    DrawSeptum(sketchEdit, -_halfX + 10, _halfY - tableSettings.LegLength, b, a, 0);
                    septumSketchDef.EndEdit();

                    var extr = (ksEntity)part.NewEntity(
                        (short)Obj3dType.o3d_bossExtrusion);
                    if (extr != null)
                    {
                        extr.name = "Выдавливание разделителей";
                        var extrDef = (ksBossExtrusionDefinition)extr.GetDefinition();
                        if (extrDef != null)
                        {
                            extrDef.directionType = (short)Direction_Type.dtNormal;
                            extrDef.SetSideParam(true, (short)End_Type.etBlind,
                                                 tableSettings.SeptumLength);
                            extrDef.SetSketch(septumSketch);
                            extr.Create();
                        }
                    }
                }
            }
        }
Пример #3
0
        /// <summary>
        /// Строит столешницу центром (0, 0) на плоскости XOY
        /// </summary>
        /// <param name="tableSettings">Параметры столика</param>
        private void BuildTabletop(TableSettings tableSettings)
        {
            _halfX = (double)tableSettings.TabletopLength / 2.0d;
            _halfY = (double)tableSettings.TabletopLength / 2.0d;

            var document  = (ksDocument3D)_kompas.ActiveDocument3D();
            var part      = (ksPart)document.GetPart((short)Part_Type.pTop_Part);
            var basePlane = (ksEntity)part.GetDefaultEntity(
                (short)Obj3dType.o3d_planeXOY);

            if (part != null)
            {
                var sketch = (ksEntity)part.NewEntity((short)Obj3dType.o3d_sketch);
                if (sketch != null)
                {
                    sketch.name = "Эскиз столешницы";
                    var sketchDef = (ksSketchDefinition)sketch.GetDefinition();
                    if (sketchDef != null)
                    {
                        sketchDef.SetPlane(basePlane);
                        sketch.Create();

                        var draw = (ksDocument2D)sketchDef.BeginEdit();
                        draw.ksLineSeg(-_halfX, -_halfY,
                                       _halfX, -_halfY, 1);
                        draw.ksLineSeg(_halfX, -_halfY,
                                       _halfX, _halfY, 1);
                        draw.ksLineSeg(_halfX, _halfY,
                                       -_halfX, _halfY, 1);
                        draw.ksLineSeg(-_halfX, _halfY,
                                       -_halfX, -_halfY, 1);
                        sketchDef.EndEdit();

                        var extr = (ksEntity)part.NewEntity(
                            (short)Obj3dType.o3d_bossExtrusion);
                        if (extr != null)
                        {
                            extr.name = "Выдавливание столешницы";
                            var extrDef = (ksBossExtrusionDefinition)extr.GetDefinition();
                            if (extrDef != null)
                            {
                                extrDef.directionType = (short)Direction_Type.dtNormal;
                                extrDef.SetSideParam(true, (short)End_Type.etBlind,
                                                     tableSettings.TabletopThickness);
                                extrDef.SetSketch(sketch);
                                extr.Create();
                            }
                        }
                    }
                }
            }
        }
Пример #4
0
        /// <summary>
        /// Конструктор. Включает Компас и создает документ
        /// </summary>
        /// <param name="tableSettings">Параметры столика, из которого Компас построит его</param>
        public KompasBuilder(TableSettings tableSettings)
        {
            if (_kompas == null)
            {
                //try
                //{
                //    string progID = "Kompas.Application.5";
                //    _kompas = (KompasObject)Marshal.GetActiveObject(progID);
                //}
                //catch
                //{
                //    Type t = Type.GetTypeFromProgID("Kompas.Application.5");
                //    _kompas = (KompasObject)Activator.CreateInstance(t);
                //}
                Type t = Type.GetTypeFromProgID("Kompas.Application.5");
                _kompas = (KompasObject)Activator.CreateInstance(t);
            }

            if (_kompas != null)
            {
                try
                {
                    _kompas.Visible = true;
                    _kompas.ActivateControllerAPI();
                }
                catch
                {
                    Type t = Type.GetTypeFromProgID("Kompas.Application.5");
                    _kompas         = (KompasObject)Activator.CreateInstance(t);
                    _kompas.Visible = true;
                    _kompas.ActivateControllerAPI();
                }
            }

            var document = (ksDocument3D)_kompas.Document3D();

            document.Create();

            BuildTabletop(tableSettings);
            BuildLegs(tableSettings);

            if (tableSettings.WithSeptums)
            {
                BuildSeptums(tableSettings);
            }

            if (tableSettings.RoundedEdgesTabletop)
            {
                RoundTabletop(tableSettings);
            }
        }
Пример #5
0
        /// <summary>
        /// Обработчик нажатия на кнопку построения столика
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ButtonBuildTable_Click(object sender, EventArgs e)
        {
            if (!ValidateForEmptiness())
            {
                return;
            }

            uint tabletopLength    = Convert.ToUInt32(txtBoxTabletopLength.Text);
            uint tabletopThickness = Convert.ToUInt32(tableTopThicknessTextBox.Text);
            uint legHeight         = Convert.ToUInt32(legHeightTextBox.Text);
            uint legLength         = Convert.ToUInt32(legLengthTextBox.Text);
            uint septumLength      = 0;
            uint septumOffset      = 0;
            bool withSeptums       = chkBoxBuildSeptums.Checked;

            if (withSeptums)
            {
                septumLength = Convert.ToUInt32(txtBoxSeptumLength.Text);
                septumOffset = Convert.ToUInt32(txtBoxSeptumOffset.Text);
            }
            else
            {
                septumLength = 0;
                septumOffset = 0;
            }
            bool roundedEdges = chkBoxRoundedEdgesTabletop.Checked;

            try
            {
                _tableSettings = new TableSettings(tabletopLength, tabletopThickness,
                                                   legHeight, legLength,
                                                   withSeptums, septumLength, septumOffset, roundedEdges);
            }
            catch (ArgumentException ex)
            {
                _errorList.Add(ex.Message);
                ShowErrors();
                return;
            }
            if (BuildClick != null)
            {
                BuildClick(this, EventArgs.Empty);
            }
        }
Пример #6
0
        /// <summary>
        /// Скругление краев столешницы
        /// </summary>
        /// <param name="tableSettings">Параметры столешницы</param>
        private void RoundTabletop(TableSettings tableSettings)
        {
            var document = (ksDocument3D)_kompas.ActiveDocument3D();
            var part     = (ksPart)document.GetPart((short)Part_Type.pTop_Part);

            var fillet = (ksEntity)part.NewEntity((short)Obj3dType.o3d_fillet);

            if (fillet != null)
            {
                fillet.name = "Скругление краёв столешницы";
                var filletDef = (ksFilletDefinition)fillet.GetDefinition();
                if (filletDef != null)
                {
                    filletDef.radius  = 5;
                    filletDef.tangent = false;

                    var edgeArrayY = (ksEntityCollection)part.EntityCollection(
                        (short)Obj3dType.o3d_edge);
                    var edgeArrayYminus = (ksEntityCollection)part.EntityCollection(
                        (short)Obj3dType.o3d_edge);
                    var edgeArrayX = (ksEntityCollection)part.EntityCollection(
                        (short)Obj3dType.o3d_edge);
                    var edgeArrayXminus = (ksEntityCollection)part.EntityCollection(
                        (short)Obj3dType.o3d_edge);

                    edgeArrayY.SelectByPoint(0, _halfY, 0);
                    edgeArrayYminus.SelectByPoint(0, -_halfY, 0);
                    edgeArrayX.SelectByPoint(_halfX, 0, 0);
                    edgeArrayXminus.SelectByPoint(-_halfX, 0, 0);


                    var filletArray = (ksEntityCollection)filletDef.array();
                    filletArray.Clear();

                    filletArray.Add(edgeArrayY.First());
                    filletArray.Add(edgeArrayYminus.First());
                    filletArray.Add(edgeArrayX.First());
                    filletArray.Add(edgeArrayXminus.First());

                    fillet.Create();
                }
            }
        }