Beispiel #1
0
        private void LineDraw(ksDocument2D sketch,
                              KeyboardParametersStorage data, SketchType sketchType)
        {
            switch (sketchType)
            {
            case SketchType.BlackKeyCut:
            {
                sketch.ksLineSeg(-data.BodyHeight + 0.1, 5.5,
                                 -data.BodyHeight + 0.1, 6.5, 1);
                sketch.ksLineSeg(-data.BodyHeight + 0.1, 6.5,
                                 -data.BodyHeight + 1.4, 5.5, 1);
                sketch.ksLineSeg(-data.BodyHeight + 1.4, 5.5,
                                 -data.BodyHeight + 0.1, 5.5, 1);

                sketch.ksLineSeg(-data.BodyHeight + 0.1, 15.5,
                                 -data.BodyHeight + 0.1, 15.0, 1);
                sketch.ksLineSeg(-data.BodyHeight + 0.1, 15.0,
                                 -data.BodyHeight + 1.375, 15.0, 1);
                sketch.ksLineSeg(-data.BodyHeight + 1.375, 15.0,
                                 -data.BodyHeight + 1.375, 15.5, 1);
                sketch.ksLineSeg(-data.BodyHeight + 1.375, 15.5,
                                 -data.BodyHeight + 0.1, 15.5, 1);
                break;
            }

            default:
            {
                break;
            }
            }
        }
Beispiel #2
0
        public void CreateSpout(ksPart iPart, KompasObject _kompas, TeaPotParams teaPotParams)
        {
            double spout  = (teaPotParams.TeaPotDiameter / 5);
            double offset = teaPotParams.TeaPotHeight - spout * 1.5;
            double width  = spout; // spoutWidth
            double height = spout; // spoutHeigth

            ksEntity           iSketch;
            ksSketchDefinition iDefinitionSketch;

            CreateSketch(out iSketch, out iDefinitionSketch, offset);
            // Интерфейс для рисования = на скетче;
            ksDocument2D iDocument2D = (ksDocument2D)iDefinitionSketch.BeginEdit();

            // Построить прямоугольник (x1,y1, x2,y2, style)
            ksRectangleParam par1 = (ksRectangleParam)_kompas.GetParamStruct((short)StructType2DEnum.ko_RectangleParam);

            par1.x      = (teaPotParams.TeaPotDiameter / 2) - 5;
            par1.height = width;                          // spoutWidth.
            par1.y      = -(par1.height / 2);
            par1.width  = teaPotParams.TeaPotSpoutLength; //spoutLength

            par1.style = 1;                               // При нуле не видно деталь.
            iDocument2D.ksRectangle(par1);

            // Закончить редактировать эскиз
            iDefinitionSketch.EndEdit();
            int X = Convert.ToInt32(teaPotParams.TeaPotHandleColor);

            ExctrusionSketch(iPart, iSketch, height, true, X);
            Fillet(iPart, 7, width / 2, teaPotParams);
        }
Beispiel #3
0
        /// <summary>
        /// Метод, рисующий линии черной клавиши для эскиза.
        /// </summary>
        /// <param name="sketch">Указатель на эскиз.</param>
        /// <param name="data">Указатель на данные.</param>
        /// <param name="currentKey">Текущая клавиша.</param>
        private KeyCreatorBase KeyLineDraw(ksDocument2D sketch, KeyNote currentKey)
        {
            switch (currentKey)
            {
            case KeyNote.Db:
            {
                return(new KeyCreatorDb(sketch, _marginLeft));
            }

            case KeyNote.Eb:
            {
                return(new KeyCreatorEb(sketch, _marginLeft));
            }

            case KeyNote.Gb:
            {
                return(new KeyCreatorGb(sketch, _marginLeft));
            }

            case KeyNote.Ab:
            {
                return(new KeyCreatorAb(sketch, _marginLeft));
            }

            case KeyNote.Bb:
            {
                return(new KeyCreatorBb(sketch, _marginLeft));
            }

            default:
            {
                throw new Exception("TODO");
            }
            }
        }
Beispiel #4
0
        public bool OpenFileKompas(string fileName, out string result, bool visual = true)
        {
            var fileopen = false;

            if (_kompasObj != null)
            {
                _doc2D = (ksDocument2D)_kompasObj.Document2D();
                if (_doc2D != null)
                {
                    fileopen = _doc2D.ksOpenDocument(fileName, false);
                }
                if (!fileopen)
                {
                    result = "Error: Не могу открыть файл";
                    AddLog(result);
                    return(false);
                }
                _kompasObj.Visible = visual;
                var err = _kompasObj.ksReturnResult();
                if (err != 0)
                {
                    _kompasObj.ksResultNULL();
                }
            }
            else
            {
                result = "Warning: Подключение с Компасом не установлено";
                AddLog(result);
                return(false);
            }
            result = string.Empty;
            return(true);
        }
Beispiel #5
0
        /// <summary>
        /// Создать паз
        /// </summary>
        /// <param name="shim">Параметры шайбы</param>
        /// <param name="part">Компонент сборки</param>
        private void CreateGroove(ShimSettings shim, ksPart part)
        {
            // Создаем эскиз для паза

            ksEntity           sketchGroove;
            ksSketchDefinition sketchGrooveDefinition;

            CreateSketch(part, out sketchGroove, out sketchGrooveDefinition,
                         (short)Obj3dType.o3d_planeXOZ);


            // Рисуем паз на эскизе

            ksDocument2D GrooveEdit = sketchGrooveDefinition.BeginEdit();

            GrooveEdit.ksCircle(shim.InnerRadius, 0, shim.GrooveRadius, 1);
            sketchGrooveDefinition.EndEdit();

            // Вырезаем паз

            ksEntity cutGrooveExtrude =
                part.NewEntity((short)Obj3dType.o3d_cutExtrusion);
            ksCutExtrusionDefinition cutGrooveExtrudeDefinition =
                cutGrooveExtrude.GetDefinition();

            cutGrooveExtrudeDefinition.directionType =
                (short)Direction_Type.dtBoth;
            cutGrooveExtrudeDefinition.SetSketch(sketchGroove);
            ksExtrusionParam cutGrooveExtrudeParam =
                cutGrooveExtrudeDefinition.ExtrusionParam();

            cutGrooveExtrudeParam.depthNormal  = shim.Height;
            cutGrooveExtrudeParam.depthReverse = shim.Height;
            cutGrooveExtrude.Create();
        }
Beispiel #6
0
 /// <summary>
 /// Построение гладкой части
 /// </summary>
 private void CreateConnector(ksPart iPatr)
 {
     if (_modelelParameters.Parameter(ParametersName.ConnectionLength).Value != 0)
     {
         //Получаем интерфейс базовой плоскости ХОY
         ksEntity planeZOY =
             (ksEntity)iPatr.GetDefaultEntity((short)Obj3dType.o3d_planeXOZ);
         //Создаем новый эскиз
         ksEntity iSketch =
             (ksEntity)iPatr.NewEntity((short)Obj3dType.o3d_sketch);
         //Получаем интерфейс свойств эскиза
         ksSketchDefinition iDefinitionSketch = (ksSketchDefinition)iSketch.GetDefinition();
         //Устанавливаем плоскость эскиза
         iDefinitionSketch.SetPlane(planeZOY);
         //Создание эскиза
         iSketch.Create();
         //Создание нового 2Д документа
         ksDocument2D iDocument2D = (ksDocument2D)iDefinitionSketch.BeginEdit();
         //Получение радиуса рукояти
         var rad = _modelelParameters.Parameter(ParametersName.HandleRadius).Value;
         //Построение круга
         iDocument2D.ksCircle(0, 0, rad + 0.1, 1);
         //Создание эскиза
         iDefinitionSketch.EndEdit();
         //Получение глубины выдавливания
         var depth = _modelelParameters.Parameter(ParametersName.ConnectionLength).Value / 2;
         //Выдавливание в обе стороны
         ExctrusionSketch(iPatr, iSketch, depth, false);
         ExctrusionSketch(iPatr, iSketch, depth, true);
     }
 }
        /// <summary>
        /// Добавление элементов на полотно двери
        /// </summary>
        /// <param name="doorParameters"></param>
        /// <param name="doorPart"></param>
        /// <param name="planeXoY"></param>
        private void DoorModification(DoorParameters doorParameters,
                                      ksPart doorPart, ksEntity planeXoY)
        {
            ksEntity eyePlaneOffset = doorPart.NewEntity((short)
                                                         Obj3dType.o3d_planeOffset);
            ksPlaneOffsetDefinition eyeDefinition =
                eyePlaneOffset.GetDefinition();

            eyeDefinition.SetPlane(planeXoY);
            eyeDefinition.offset = doorParameters.WeigthDoor;
            eyePlaneOffset.Create();
            ksEntity eyeSketch = doorPart.NewEntity((short)
                                                    Obj3dType.o3d_sketch);
            ksSketchDefinition eyeSketchDefinition =
                eyeSketch.GetDefinition();

            eyeSketchDefinition.SetPlane(eyePlaneOffset);
            eyeSketch.Create();
            ksDocument2D eye = eyeSketchDefinition.BeginEdit();

            eye.ksCircle(doorParameters.YEye / 2.0, 0, 15, 1);
            eyeSketchDefinition.EndEdit();
            Cut(doorPart, eyeSketch, doorParameters.WeigthDoor);
            AnimalDoor(doorParameters, doorPart, eyePlaneOffset);
            DoorKnob(doorParameters, doorPart, eyePlaneOffset);
        }
Beispiel #8
0
 /// <summary>
 /// Рисует окружность.
 /// </summary>
 /// <param name="sketchEdit">Эскиз для рисования.</param>
 public void DrawCircle(ksDocument2D sketchEdit)
 {
     foreach (PointF center in PointsList)
     {
         sketchEdit.ksCircle(center.X, center.Y, Radius, 1);
     }
 }
        /// <summary>
        /// Основание ручки
        /// </summary>
        /// <param name="doorParameters"></param>
        /// <param name="doorPart"></param>
        /// <param name="eyePlaneOffset"></param>
        private void HandleBase(DoorParameters doorParameters,
                                ksPart doorPart, ksEntity eyePlaneOffset)
        {
            ksEntity keyPlaneOffset = doorPart.NewEntity((short)
                                                         Obj3dType.o3d_planeOffset);
            ksPlaneOffsetDefinition pod5 =
                keyPlaneOffset.GetDefinition();

            pod5.SetPlane(eyePlaneOffset);
            pod5.offset = 25;
            keyPlaneOffset.Create();
            ksEntity keySketch = doorPart.NewEntity((short)
                                                    Obj3dType.o3d_sketch);
            ksSketchDefinition keySketchDefinition =
                keySketch.GetDefinition();

            keySketchDefinition.SetPlane(keyPlaneOffset);
            keySketch.Create();
            ksDocument2D key = keySketchDefinition.BeginEdit();

            DrawRectangle(key, doorParameters.YKey / 2.0,
                          doorParameters.WidthDoor - 450, 200, 26, -90);
            keySketchDefinition.EndEdit();
            Extrude(doorPart, keySketch, 5,
                    (short)Direction_Type.dtNormal);
        }
Beispiel #10
0
        /// <summary>
        /// Создание двери
        /// </summary>
        /// <param name="doorParameters"></param>
        public void BuildDoor(DoorParameters doorParameters)
        {
            ConnectToKompas();

            ksDocument3D doc = Kompas3D.Document3D();

            doc.Create();

            ksPart doorPart = doc.GetPart((short)
                                          Part_Type.pTop_Part);
            ksEntity planeXoY = doorPart.GetDefaultEntity((short)
                                                          Obj3dType.o3d_planeXOY);
            ksEntity sketch = doorPart.NewEntity((short)
                                                 Obj3dType.o3d_sketch);
            ksSketchDefinition sd = sketch.GetDefinition();

            sd.SetPlane(planeXoY);
            sketch.Create();
            ksDocument2D topSketch = sd.BeginEdit();

            DrawRectangle(topSketch,
                          -doorParameters.HeightDoor / 2.0, -doorParameters.WidthDoor / 2.0,
                          doorParameters.HeightDoor, doorParameters.WidthDoor,
                          null);
            sd.EndEdit();
            Extrude(doorPart, sketch, doorParameters.WeigthDoor,
                    (short)Direction_Type.dtNormal);
            DoorModification(doorParameters, doorPart, planeXoY);
        }
Beispiel #11
0
        public void act()
        {
            Type c = Type.GetTypeFromProgID("KOMPAS.Application.5");

            kompas        = (KompasObject)Activator.CreateInstance(c);
            documentParam = (ksDocumentParam)kompas.GetParamStruct((short)StructType2DEnum.ko_DocumentParam);
            //для активации нового листа и добавление рамки к чертежу
            documentParam.type   = (int)DocType.lt_DocSheetStandart;
            documentParam.regime = 0;
            sheetPar             = (ksSheetPar)documentParam.GetLayoutParam();
            str = kompas.ksSystemPath(0) + @"\graphic.lyt";
            sheetPar.layoutName    = str;
            sheetPar.shtType       = 1;
            standartSheet          = (ksStandartSheet)sheetPar.GetSheetParam();
            standartSheet.direct   = true;
            standartSheet.format   = 3;
            standartSheet.multiply = 1;
            dock = (ksDocument2D)kompas.Document2D();
            dock.ksCreateDocument(documentParam);

            //dock = (ksDocument2D)kompas.Document2D();                                                             // ДЛЯ СТАРОГО КОМПАСА
            //dock.ksCreateDocument(documentParam);                                                                 // ДЛЯ СТАРОГО КОМПАСА
            //sheetOptions = (ksSheetOptions)kompas.GetParamStruct((short)StructType2DEnum.ko_SheetOptions);        // ДЛЯ СТАРОГО КОМПАСА
            //dock.ksGetDocOptions(SHEET_OPTIONS_EX, sheetOptions);                                                 // ДЛЯ СТАРОГО КОМПАСА
            //sheetOptions.sheetType = false;                                                                       // ДЛЯ СТАРОГО КОМПАСА
            //standartSheet = (ksStandartSheet)sheetOptions.GetSheetParam(false);                                   // ДЛЯ СТАРОГО КОМПАСА
            //standartSheet.format = 3;                                                                             // ДЛЯ СТАРОГО КОМПАСА
            //standartSheet.direct = true;                                                                          // ДЛЯ СТАРОГО КОМПАСА
            //sheetOptions.sheetType = true;                                                                        // ДЛЯ СТАРОГО КОМПАСА
            //dock.ksSetDocOptions(SHEET_OPTIONS_EX, sheetOptions);                                                 // ДЛЯ СТАРОГО КОМПАСА
            kompas.Visible = true;
        }
        /// <summary>
        /// Создание головки
        /// </summary>
        /// <param name="diameterHead">Диаметр головки </param>
        /// <param name="lengthHead">Длина головки </param>
        private void BuildHead(double diameterHead, double lengthHead)
        {
            #region Константы для головки
            const int part          = -1;
            const int sketch        = 5;
            const int planeXOY      = 1;
            const int baseExtrusion = 24;
            const int shaded        = 3;
            const int etBlind       = 0;
            #endregion

            //Эскиз головки
            _part   = _doc3D.GetPart(part);
            _entity = _part.NewEntity(sketch);
            ksSketchDefinition SketchDefinition = _entity.GetDefinition();
            ksEntity           EntityPlane      = _part.GetDefaultEntity(planeXOY);
            SketchDefinition.SetPlane(EntityPlane);
            _entity.Create();
            ksDocument2D Document2D = SketchDefinition.BeginEdit();
            Document2D.ksCircle(0, 0, diameterHead / 2, 1);
            SketchDefinition.EndEdit();

            //Выдавливание головки
            ksEntity EntityExtrusion = _part.NewEntity(baseExtrusion);
            ksBaseExtrusionDefinition BaseExtrusionDefinition = EntityExtrusion.GetDefinition();
            BaseExtrusionDefinition.SetSideParam(true, etBlind, lengthHead, 0, true);
            BaseExtrusionDefinition.SetSketch(_entity);
            EntityExtrusion.Create();
            _doc3D.drawMode        = shaded;
            _doc3D.shadedWireframe = true;
        }
        public bool OpenFileKompas(string fileName, out string result)
        {
            var fileopen = false;
            if (_kompasObj != null)
            {
                _doc2D = (ksDocument2D)_kompasObj.Document2D();
                if (_doc2D != null) fileopen = _doc2D.ksOpenDocument(fileName, false);
                if (!fileopen)
                {
                    result = "Error: Не могу открыть файл";
                    AddLog(result);
                    return false;
                }

                _kompasObj.Visible = true;
                var err = _kompasObj.ksReturnResult();
                if (err != 0) _kompasObj.ksResultNULL();

            }
            else
            {
                result = "Warning: Подключение с Компасом не установлено";
                AddLog(result);
                return false;
            }
            result = string.Empty;
            return true;
        }
Beispiel #14
0
 /// <summary>
 /// Нарисовать внутреннее скругление шайбы
 /// </summary>
 /// <param name="shimSettings">Параметры шайбы</param>
 /// <param name="shimEdit">Чертеж</param>
 private static void DrawShimInnerFillet(ShimSettings shimSettings,
                                         ksDocument2D shimEdit)
 {
     if (shimSettings.InnerFillet > 0)
     {
         shimEdit.ksArcByPoint(
             shimSettings.InnerRadius + shimSettings.InnerFillet,
             shimSettings.Height / 2 - shimSettings.InnerFillet,
             shimSettings.InnerFillet,
             shimSettings.InnerRadius + shimSettings.InnerFillet,
             shimSettings.Height / 2, shimSettings.InnerRadius,
             shimSettings.Height / 2 - shimSettings.InnerFillet,
             1, 1);
     }
     if (shimSettings.InnerFillet != shimSettings.Height / 2)
     {
         shimEdit.ksLineSeg(shimSettings.InnerRadius,
                            shimSettings.Height / 2 - shimSettings.InnerFillet,
                            shimSettings.InnerRadius,
                            -shimSettings.Height / 2 + shimSettings.InnerFillet, 1);
     }
     if (shimSettings.InnerFillet > 0)
     {
         shimEdit.ksArcByPoint(
             shimSettings.InnerRadius + shimSettings.InnerFillet,
             -shimSettings.Height / 2 + shimSettings.InnerFillet,
             shimSettings.InnerFillet,
             shimSettings.InnerRadius + shimSettings.InnerFillet,
             -shimSettings.Height / 2, shimSettings.InnerRadius,
             -shimSettings.Height / 2 + shimSettings.InnerFillet,
             -1, 1);
     }
 }
Beispiel #15
0
 ///<summary>
 /// Создание отверстия в кадле
 ///</summary>
 private void CreateHoleInKadlo(double kadloHeight, bool circle, bool square, bool triangle, double radiusHole, double squareSide, double triangleSide)
 {
     if (_part != null)
     {
         // интерфейс свойств эскиза
         ksEntity holeInKadlo = (ksEntity)_part.NewEntity((short)Obj3dType.o3d_sketch);
         if (holeInKadlo != null)
         {
             // Получение интерфейса свойств эскиза
             ksSketchDefinition holeSketch = (ksSketchDefinition)holeInKadlo.GetDefinition();
             if (holeSketch != null)
             {
                 ksEntity basePlane;
                 // Получение интерфейса базовой плоскости XOZ
                 basePlane = (ksEntity)_part.GetDefaultEntity((short)Obj3dType.o3d_planeXOZ);
                 // установим плоскость базовой для эскиза
                 holeSketch.SetPlane(basePlane);
                 // создадим эскиз
                 holeInKadlo.Create();
                 // интерфейс редактора эскиза
                 ksDocument2D sketchEdit = (ksDocument2D)holeSketch.BeginEdit();
                 //КРУГ
                 if (circle == true)
                 {
                     sketchEdit.ksCircle(1, -kadloHeight / 2, radiusHole, 1);
                 }
                 if (square == true)
                 {
                     sketchEdit.ksLineSeg(1 - squareSide / 2, -kadloHeight / 2 - squareSide / 2, 1 - squareSide / 2, -kadloHeight / 2 + squareSide / 2, 1);
                     sketchEdit.ksLineSeg(1 - squareSide / 2, -kadloHeight / 2 + squareSide / 2, 1 + squareSide / 2, -kadloHeight / 2 + squareSide / 2, 1);
                     sketchEdit.ksLineSeg(1 + squareSide / 2, -kadloHeight / 2 + squareSide / 2, 1 + squareSide / 2, -kadloHeight / 2 - squareSide / 2, 1);
                     sketchEdit.ksLineSeg(1 + squareSide / 2, -kadloHeight / 2 - squareSide / 2, 1 - squareSide / 2, -kadloHeight / 2 - squareSide / 2, 1);
                 }
                 //ТРЕУГОЛЬНИК
                 if (triangle == true)
                 {
                     var triangleHeight = Math.Sqrt(3) / 2 * triangleSide;
                     sketchEdit.ksLineSeg(1, -kadloHeight / 2, 1 - triangleSide / 2, -kadloHeight / 2 + triangleHeight, 1);
                     sketchEdit.ksLineSeg(1 - triangleSide / 2, -kadloHeight / 2 + triangleHeight, 1 + triangleSide / 2, -kadloHeight / 2 + triangleHeight, 1);
                     sketchEdit.ksLineSeg(1 + triangleSide / 2, -kadloHeight / 2 + triangleHeight, 1, -kadloHeight / 2, 1);
                 }
                 // завершение редактирования эскиза
                 holeSketch.EndEdit();
                 ksEntity entityHoleCutExtr = (ksEntity)_part.NewEntity((short)Obj3dType.o3d_cutExtrusion);
                 if (entityHoleCutExtr != null)
                 {
                     ksCutExtrusionDefinition cutExtrDef = (ksCutExtrusionDefinition)entityHoleCutExtr.GetDefinition();
                     if (cutExtrDef != null)
                     {
                         cutExtrDef.cut           = true;
                         cutExtrDef.directionType = (short)Direction_Type.dtNormal;
                         cutExtrDef.SetSideParam(true, (short)End_Type.etThroughAll);
                         cutExtrDef.SetSketch(holeSketch);
                         entityHoleCutExtr.Create();
                     }
                 }
             }
         }
     }
 }
Beispiel #16
0
        /// <summary>
        /// Метод, создающий осовной эскиз самой ручки
        /// </summary>
        /// <param name="backRadius">Радиус задней части руки</param>
        /// <param name="backLenght">Длина задней части ручки</param>
        /// <param name="frontLenght">Длина передней части ручки</param>
        /// <param name="holeRadius">Радиус тверстия ручки</param>
        private void CreateMainSketch
            (double backRadius, double backLenght, double frontLenght, double holeRadius)
        {
            CreateEntitySketch((short)Obj3dType.o3d_planeYOZ);

            _sketchEdit = (ksDocument2D)_sketchDefinition.BeginEdit();

            _sketchEdit.ksLineSeg
                (-backLenght + 3, -holeRadius, -backLenght, -holeRadius - 4, 1);
            _sketchEdit.ksLineSeg
                (-backLenght, -holeRadius - 4, -backLenght, -backRadius, 1);
            _sketchEdit.ksLineSeg
                (-backLenght, -backRadius, 0, -backRadius, 1);
            _sketchEdit.ksLineSeg
                (0, -backRadius, 0, -20, 1);
            _sketchEdit.ksLineSeg
                (0, -20, 6.5, -30, 1);
            _sketchEdit.ksLineSeg
                (6.5, -30, frontLenght - 6.5, -30, 1);
            _sketchEdit.ksLineSeg
                (frontLenght - 6.5, -30, frontLenght, -20, 1);
            _sketchEdit.ksLineSeg
                (frontLenght, -20, frontLenght, -holeRadius - 4, 1);
            _sketchEdit.ksLineSeg
                (frontLenght, -holeRadius - 4, frontLenght - 3, -holeRadius, 1);
            _sketchEdit.ksLineSeg
                (frontLenght - 3, -holeRadius, -backLenght + 3, -holeRadius, 1);
            _sketchEdit.ksLineSeg
                (-45, 0, 45, 0, 3);
            _sketchDefinition.EndEdit();
        }
 public string createDoc()
 {
     if (_kompas != null)
     {
         // создать новый документ
         // первый параметр - тип открываемого файла
         //  0 - лист чертежа
         //  1 - фрагмент
         //  2 - текстовый документ
         //  3 - спецификация
         //  4 - 3D-модель
         // второй параметр указывает на необходимость выдачи запроса "Файл изменен. Сохранять?" при закрытии файла
         // третий параметр - указатель на IDispatch, по которому Графие вызывает уведомления об изенении своего состояния
         // ф-ия возвращает HANDLE открытого документа
         ksDocument2D doc = (ksDocument2D)_kompas.Document2D();
         if (doc != null)
         {
             ksDocumentParam docParam = (ksDocumentParam)_kompas.GetParamStruct((short)StructType2DEnum.ko_DocumentParam);
             if (docParam != null)
             {
                 docParam.Init();
                 //docParam.type = (int)DocType.lt_DocSheetStandart;
                 docParam.type = (int)DocType.lt_DocFragment;
                 doc.ksCreateDocument(docParam);
             }
         }
         return(null);
     }
     else
     {
         return("Программа не инициализирована");
     }
 }
Beispiel #18
0
 /// <summary>
 /// Метод создает эскиз правильного шестиугольника
 /// </summary>
 /// <param name="rad">Радиус описанной окружности шестиугольника</param>
 public bool DrawHexagon(double rad)
 {
     try
     {
         SketchCreator      sketch   = new SketchCreator(_app);
         ksSketchDefinition def      = sketch.MakeSketch();
         ksDocument2D       doc      = (ksDocument2D)def.BeginEdit();
         short polyParam             = (short)StructType2DEnum.ko_RegularPolygonParam;
         ksRegularPolygonParam param = (ksRegularPolygonParam)_app.Kompas.GetParamStruct(polyParam);
         param.count    = 6;
         param.xc       = 0;
         param.yc       = 0;
         param.ang      = 0;
         param.radius   = rad;
         param.describe = false;
         param.style    = 1;
         doc.ksRegularPolygon(param, 0);
         def.EndEdit();
         return(true);
     }
     catch
     {
         return(false);
     }
 }
Beispiel #19
0
 /// <summary>
 /// Метод для отрисовки эскиза внешнего обода в КОМПАС-3D
 /// </summary>
 /// <param name="rimsDoc">эскиз</param>
 /// <param name="BearingWidth">Ширина подшипника</param>
 /// <param name="InnerRimDiam">Диаметр внутреннего обода</param>
 /// <param name="OuterRimDiam">Диаметр внешнего обода</param>
 /// <param name="RimsThickness">Толщина подшипника</param>
 /// <param name="BallDiam">Диаметр шарика</param>
 private static void DrawOuterRim(ksDocument2D rimsDoc, double BearingWidth, double InnerRimDiam,
                                  double OuterRimDiam, double RimsThickness, double BallDiam,
                                  RollingElementForm rollingElementForm, double BearingAxis, double GutterDepth, double GutterWidth)
 {
     rimsDoc.ksLineSeg(-BearingWidth / 2, OuterRimDiam / 2, BearingWidth / 2, OuterRimDiam / 2, 1);
     rimsDoc.ksLineSeg(-BearingWidth / 2, OuterRimDiam / 2, -BearingWidth / 2, OuterRimDiam / 2 - RimsThickness, 1);
     rimsDoc.ksLineSeg(BearingWidth / 2, OuterRimDiam / 2, BearingWidth / 2, OuterRimDiam / 2 - RimsThickness, 1);
     if (rollingElementForm is RollingElementForm.Ball)
     {
         rimsDoc.ksLineSeg(-BearingWidth / 2, OuterRimDiam / 2 - RimsThickness,
                           -GutterWidth, OuterRimDiam / 2 - RimsThickness, 1);
         rimsDoc.ksLineSeg(BearingWidth / 2, OuterRimDiam / 2 - RimsThickness,
                           GutterWidth, OuterRimDiam / 2 - RimsThickness, 1);
         rimsDoc.ksArcBy3Points(-GutterWidth, OuterRimDiam / 2 - RimsThickness,
                                0, OuterRimDiam / 2 - RimsThickness + GutterDepth, GutterWidth, OuterRimDiam / 2 - RimsThickness, 1);
     }
     else
     {
         rimsDoc.ksLineSeg(-BearingWidth / 2, OuterRimDiam / 2 - RimsThickness,
                           -GutterWidth, OuterRimDiam / 2 - RimsThickness, 1);
         rimsDoc.ksLineSeg(BearingWidth / 2, OuterRimDiam / 2 - RimsThickness,
                           GutterWidth, OuterRimDiam / 2 - RimsThickness, 1);
         rimsDoc.ksLineSeg(-GutterWidth, OuterRimDiam / 2 - RimsThickness,
                           -GutterWidth, OuterRimDiam / 2 - RimsThickness + GutterDepth, 1);
         rimsDoc.ksLineSeg(GutterWidth, OuterRimDiam / 2 - RimsThickness,
                           GutterWidth, OuterRimDiam / 2 - RimsThickness + GutterDepth, 1);
         rimsDoc.ksLineSeg(-GutterWidth, OuterRimDiam / 2 - RimsThickness + GutterDepth,
                           GutterWidth, OuterRimDiam / 2 - RimsThickness + GutterDepth, 1);
     }
 }
Beispiel #20
0
        /// <summary>
        /// Метод, создающий эскиз вырезов на передней части ручки
        /// </summary>
        private void CreateNotchSketch()
        {
            CreateEntitySketch((short)Obj3dType.o3d_planeXOY);

            _sketchEdit = (ksDocument2D)_sketchDefinition.BeginEdit();
            _sketchEdit.ksCircle(0, 40, 19, 1);
            _sketchDefinition.EndEdit();
        }
Beispiel #21
0
        /// <summary>
        /// Собачья заслонка
        /// </summary>
        /// <param name="doorParameters"></param>
        /// <param name="doorPart"></param>
        /// <param name="eyePlaneOffset"></param>
        private void AnimalDoor(DoorParameters doorParameters,
                                ksPart doorPart, ksEntity eyePlaneOffset)
        {
            var x = -doorParameters.HeightDoor / 2;
            var y = -doorParameters.WidthDoor / 2 + 350;
            var animalHoleHeight = 200;

            if (doorParameters.IsOpen == true)
            {
                ksEntity animalDoorHoleSketch = doorPart.NewEntity((short)
                                                                   Obj3dType.o3d_sketch);
                ksSketchDefinition animalDoorHoleSketchDefinition =
                    animalDoorHoleSketch.GetDefinition();
                animalDoorHoleSketchDefinition.SetPlane(eyePlaneOffset);
                animalDoorHoleSketch.Create();

                ksDocument2D animalDoorHole =
                    animalDoorHoleSketchDefinition.BeginEdit();
                DrawRectangle(animalDoorHole, x, y,
                              animalHoleHeight,
                              animalHoleHeight, null);
                animalDoorHoleSketchDefinition.EndEdit();
                Cut(doorPart, animalDoorHoleSketch,
                    doorParameters.WeigthDoor);

                ksEntity animalDoorSketch = doorPart.NewEntity((short)
                                                               Obj3dType.o3d_sketch);
                ksSketchDefinition animalDoorSketchDefinition =
                    animalDoorSketch.GetDefinition();
                animalDoorSketchDefinition.SetPlane(eyePlaneOffset);
                animalDoorSketch.Create();

                ksDocument2D animalDoor =
                    animalDoorSketchDefinition.BeginEdit();
                DrawRectangle(animalDoor, x + animalHoleHeight, y,
                              animalHoleHeight / 10.0, animalHoleHeight,
                              null);
                animalDoorSketchDefinition.EndEdit();
                Extrude(doorPart, animalDoorSketch, animalHoleHeight,
                        (short)Direction_Type.dtNormal);
            }
            if (doorParameters.IsOpen == false)
            {
                ksEntity animalDoorHoleSketch = doorPart.NewEntity((short)
                                                                   Obj3dType.o3d_sketch);
                ksSketchDefinition animalDoorHoleSketchDefinition =
                    animalDoorHoleSketch.GetDefinition();
                animalDoorHoleSketchDefinition.SetPlane(eyePlaneOffset);
                animalDoorHoleSketch.Create();

                ksDocument2D animalDoorHole =
                    animalDoorHoleSketchDefinition.BeginEdit();
                DrawRectangle(animalDoorHole, x, y, animalHoleHeight,
                              animalHoleHeight, null);
                animalDoorHoleSketchDefinition.EndEdit();
                Cut(doorPart, animalDoorHoleSketch, 0.2);
            }
        }
        /// <summary>
        /// Создание отверстий по концентрической сетке
        /// </summary>
        /// <param name="coordinate">Координата расположения</param>
        /// <param name="radius">Радиус отверстия</param>
        /// <param name="height">Высота вырезания</param>
        /// <param name="count">Количество отверстий</param>
        private void CreateArray(double coordinate, double radius,
                                 double height, int count)
        {
            var       document           = (ksDocument3D)_kompas.ActiveDocument3D();
            var       part               = (ksPart)document.GetPart((short)Part_Type.pTop_Part);
            const int coordinateX        = 0;
            const int coordinateY        = 0;
            const int styleLineBase      = 1;
            const int styleLineAuxiliary = 6;
            const int stepCopy           = 360;

            ksEntity entitySketch = (ksEntity)part.NewEntity((short)
                                                             Obj3dType.o3d_sketch);
            ksSketchDefinition sketchDefinition = (ksSketchDefinition)
                                                  entitySketch.GetDefinition();
            ksEntity basePlane = (ksEntity)part.GetDefaultEntity((short)
                                                                 Obj3dType.o3d_planeXOY);

            sketchDefinition.SetPlane(basePlane);
            entitySketch.Create();
            ksDocument2D sketchEdit = (ksDocument2D)sketchDefinition.
                                      BeginEdit();

            sketchEdit.ksCircle(coordinateX, coordinateY, coordinate,
                                styleLineAuxiliary);
            sketchEdit.ksCircle(coordinate, coordinateY, radius,
                                styleLineBase);
            sketchDefinition.EndEdit();

            ksEntity entityCutExtrusion = (ksEntity)part.NewEntity((short)
                                                                   Obj3dType.o3d_cutExtrusion);
            ksCutExtrusionDefinition cutExtrusionDefinition =
                (ksCutExtrusionDefinition)entityCutExtrusion.GetDefinition();

            cutExtrusionDefinition.directionType =
                (short)Direction_Type.dtNormal;
            cutExtrusionDefinition.SetSideParam(true,
                                                (short)End_Type.etBlind, height);
            cutExtrusionDefinition.SetSketch(entitySketch);
            entityCutExtrusion.Create();

            ksEntity circularCopyEntity = (ksEntity)part.NewEntity((short)
                                                                   Obj3dType.o3d_circularCopy);
            ksCircularCopyDefinition circularCopyDefinition =
                (ksCircularCopyDefinition)circularCopyEntity.GetDefinition();

            circularCopyDefinition.SetCopyParamAlongDir(count, stepCopy,
                                                        true, false);
            ksEntity baseAxisOZ = (ksEntity)part.GetDefaultEntity((short)
                                                                  Obj3dType.o3d_axisOZ);

            circularCopyDefinition.SetAxis(baseAxisOZ);
            ksEntityCollection entityCollection = (ksEntityCollection)
                                                  circularCopyDefinition.GetOperationArray();

            entityCollection.Add(cutExtrusionDefinition);
            circularCopyEntity.Create();
        }
Beispiel #23
0
        /// <summary>
        /// построение среднего цилиндра детали
        /// </summary>
        /// <param name="param"></param>
        public void MiddleCircle(Parameters param)
        {
            double Radios1 = param.Radios1;
            double Lenght1 = param.Lenght1;
            double Angle2  = param.Angle2;
            var    doc     = (ksDocument3D)_kompas.ActiveDocument3D();
            ksPart part1   = (ksPart)doc.GetPart((short)Part_Type.pTop_Part); // новый компонент

            if (part1 != null)
            {
                ksEntity entityOffsetPlane1 = (ksEntity)part1.NewEntity((short)Obj3dType.o3d_planeOffset);
                ksEntity entitySketch1      = (ksEntity)part1.NewEntity((short)Obj3dType.o3d_sketch);
                if (entityOffsetPlane1 != null)
                {
                    // интерфейс свойств смещенной плоскости
                    ksPlaneOffsetDefinition offsetDef1 = (ksPlaneOffsetDefinition)entityOffsetPlane1.GetDefinition();
                    if (offsetDef1 != null)
                    {
                        offsetDef1.offset = Lenght1;                       // расстояние от базовой плоскости
                        ksEntity basePlane1 = (ksEntity)part1.GetDefaultEntity((short)Obj3dType.o3d_planeXOY);
                        basePlane1.name = "Смещенная плоскость";           // название для плоскости

                        offsetDef1.SetPlane(basePlane1);                   // базовая плоскость
                        entityOffsetPlane1.name   = "Смещенная плоскость"; // имя для смещенной плоскости
                        entityOffsetPlane1.hidden = true;
                        entityOffsetPlane1.Create();                       // создать смещенную плоскость

                        if (entitySketch1 != null)
                        {
                            ksSketchDefinition sketchDef1 = (ksSketchDefinition)entitySketch1.GetDefinition();
                            if (sketchDef1 != null)
                            {
                                sketchDef1.SetPlane(entityOffsetPlane1); // установим плоскость XOY базовой для эскиза
                                entitySketch1.Create();                  // создадим эскиз

                                // интерфейс редактора эскиза
                                ksDocument2D sketchEdit1 = (ksDocument2D)sketchDef1.BeginEdit();
                                sketchEdit1.ksCircle(0, 0, Radios1, 1);
                                sketchDef1.EndEdit();                    // завершение редактирования эскиза
                                ksEntity entityExtr1 = (ksEntity)part1.NewEntity((short)Obj3dType.o3d_baseExtrusion);
                                if (entityExtr1 != null)
                                {
                                    ksBaseExtrusionDefinition extrusionDef1 = (ksBaseExtrusionDefinition)entityExtr1.GetDefinition();
                                    if (extrusionDef1 != null)
                                    {
                                        extrusionDef1.directionType = (short)Direction_Type.dtNormal;
                                        extrusionDef1.SetSideParam(true, (short)End_Type.etBlind, 5, Angle2, true);
                                        extrusionDef1.SetSketch(entitySketch1);  // эскиз операции выдавливания
                                        entityExtr1.Create();                    // создать операцию
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        private bool liniya_s_obrivom(Stupica master, double multiply, ksDocument2D doc)
        {
            ksLBreakDimParam param = (ksLBreakDimParam)_kompas.GetParamStruct((short)StructType2DEnum.ko_LBreakDimParam);

            if (param == null)
            {
                return(true);
            }

            ksBreakDimDrawing dPar = (ksBreakDimDrawing)param.GetDPar();
            ksLBreakDimSource sPar = (ksLBreakDimSource)param.GetSPar();
            ksDimTextParam    tPar = (ksDimTextParam)param.GetTPar();

            if (dPar == null || sPar == null || tPar == null)
            {
                return(true);
            }

            dPar.Init();
            dPar.textPos = 5;
            dPar.pl      = false;
            dPar.pt      = 1; //стрелка внутри
            dPar.angle   = 90;
            dPar.length  = 10;


            sPar.Init();
            //точка размер чего строим
            sPar.x1 = master.l - master.b1;
            sPar.y1 = -(master.d / 2);
            //точки размерной линии
            sPar.x2 = master.l + 15 / multiply;
            sPar.y2 = -(master.d / 2);
            sPar.x3 = master.l + 15 / multiply;
            sPar.y3 = 0;

            tPar.Init(false);
            tPar.bitFlag    = 0; //выводится только номинал
            tPar.style      = 3; //текст размерной надписи????
            tPar.stringFlag = false;
            tPar.sign       = 1; //diametr

            ksChar255      str     = (ksChar255)_kompas.GetParamStruct((short)StructType2DEnum.ko_Char255);
            ksDynamicArray arrText = (ksDynamicArray)tPar.GetTextArr();

            if (str == null || arrText == null)
            {
                return(true);
            }

            str.str = master.d.ToString();
            arrText.ksAddArrayItem(-1, str);

            int obj = doc.ksLinBreakDimension(param); //отрисовка

            return(false);
        }
Beispiel #25
0
 ///<summary>
 /// Создание отверситий в нижнем ободе
 ///</summary>
 private void CreateHolesInRim(double kadloHeight, double rimCenter, int numberMounting)
 {
     if (_part != null)
     {
         // интерфейс свойств эскиза
         ksEntity rimHoles = (ksEntity)_part.NewEntity((short)Obj3dType.o3d_sketch);
         if (rimHoles != null)
         {
             // Получение интерфейса свойств эскиза
             ksSketchDefinition rimSketch = (ksSketchDefinition)rimHoles.GetDefinition();
             if (rimSketch != null)
             {
                 ksEntity basePlane;
                 // Получение интерфейса базовой плоскости XOY
                 basePlane = (ksEntity)_part.GetDefaultEntity((short)Obj3dType.o3d_planeXOY);
                 // установим плоскость базовой для эскиза
                 rimSketch.SetPlane(basePlane);
                 // создадим эскиз
                 rimHoles.Create();
                 // интерфейс редактора эскиза
                 ksDocument2D sketchEdit = (ksDocument2D)rimSketch.BeginEdit();
                 int          i          = 1;
                 for (double phi = 0; phi < 2 * Math.PI; phi += 2 * Math.PI / numberMounting)
                 {
                     double x = rimCenter * Math.Cos(phi);
                     double y = rimCenter * Math.Sin(phi);
                     //круглое отверстие
                     sketchEdit.ksCircle(x, y, 2.5, 1);
                     if (i < numberMounting)
                     {
                         i++;
                     }
                     else
                     {
                         break;
                     }
                 }
                 // завершение редактирования эскиза
                 rimSketch.EndEdit();
                 // вырежим выдавливанием
                 ksEntity entityCutExtr = (ksEntity)_part.NewEntity((short)Obj3dType.o3d_cutExtrusion);
                 if (entityCutExtr != null)
                 {
                     ksCutExtrusionDefinition cutExtrDef = (ksCutExtrusionDefinition)entityCutExtr.GetDefinition();
                     if (cutExtrDef != null)
                     {
                         cutExtrDef.cut           = true;
                         cutExtrDef.directionType = (short)Direction_Type.dtNormal;
                         cutExtrDef.SetSideParam(true, (short)End_Type.etThroughAll);
                         cutExtrDef.SetSketch(rimSketch);
                         entityCutExtr.Create();
                     }
                 }
             }
         }
     }
 }
 /// <summary>
 /// Нарисовать четырехугольник с непрямыми углами с отверстием некруглым
 /// </summary>
 internal void DrawQuadrangleWithNonCircularHole()
 {
     if (kompas != null)
     {
         kompas.Visible = true;
         ksDocument3D iDocument3D = (ksDocument3D)kompas.Document3D();
         if (iDocument3D.Create(false /*видимый*/, true /*деталь*/))
         {
             iDocument3D.fileName = "With Non-Circular Hole";
             ksPart iPart = (ksPart)iDocument3D.GetPart((short)Part_Type.pTop_Part);     // новый компонент (.pNew_Part - был)
             if (iPart != null)
             {
                 //// получим интерфейс базовой плоскости XOY
                 ksEntity planeXOY = (ksEntity)iPart.GetDefaultEntity((short)Obj3dType.o3d_planeXOY);    // 1-интерфейс на плоскость XOY
                 ksEntity iSketch  = (ksEntity)iPart.NewEntity((short)Obj3dType.o3d_sketch);
                 if (iSketch != null)
                 {
                     // интерфейс свойств эскиза
                     ksSketchDefinition iDefinitionSketch = (ksSketchDefinition)iSketch.GetDefinition();
                     if (iDefinitionSketch != null)
                     {
                         iDefinitionSketch.SetPlane(planeXOY);
                         iSketch.Create();
                         ksDocument2D iDocument2D = (ksDocument2D)iDefinitionSketch.BeginEdit();
                         iDocument2D.ksLineSeg(-30.0, -30.0, 30.0, -30.0, 1);
                         iDocument2D.ksLineSeg(30.0, -30.0, 0, 30.0, 1);
                         iDocument2D.ksLineSeg(0, 30.0, -60.0, 30.0, 1);
                         iDocument2D.ksLineSeg(-60.0, 30.0, -30.0, -30.0, 1);
                         iDocument2D.ksLineSeg(-10.0, -18.660254, -28.660254, 13.660254, 1);
                         iDocument2D.ksLineSeg(-20, 18.660254, -1.339746, -13.660254, 1);
                         iDocument2D.ksArcByAngle(-24.330127, 16.160254, 5, 30.0, 210.0, 1, 1);
                         iDocument2D.ksArcByAngle(-5.669873, -16.160254, 5, 210.0, 30.0, 1, 1);
                         iDefinitionSketch.EndEdit();
                         ksEntity entityExtr = (ksEntity)iPart.NewEntity((short)Obj3dType.o3d_bossExtrusion);
                         if (entityExtr != null)
                         {
                             // интерфейс свойств базовой операции выдавливания
                             ksBossExtrusionDefinition extrusionDef = (ksBossExtrusionDefinition)entityExtr.GetDefinition(); // интерфейс базовой операции выдавливания
                             if (extrusionDef != null)
                             {
                                 ksExtrusionParam extrProp = (ksExtrusionParam)extrusionDef.ExtrusionParam(); // интерфейс структуры параметров выдавливания
                                 if (extrProp != null)
                                 {
                                     extrusionDef.SetSketch(iSketch);                       // эскиз операции выдавливания
                                     extrProp.direction   = (short)Direction_Type.dtNormal; // направление выдавливания (прямое)
                                     extrProp.typeNormal  = (short)End_Type.etBlind;        // тип выдавливания (строго на глубину)
                                     extrProp.depthNormal = 10;                             // глубина выдавливания
                                     entityExtr.Create();                                   // создадим операцию
                                 }
                             }
                         }
                     }
                 }
             }
         }
     }
 }
Beispiel #27
0
        /// <summary>
        /// Нарисовать шайбу на эскизе
        /// </summary>
        /// <param name="shimSettings">Параметры шайбы</param>
        /// <param name="shimEdit">Чертеж</param>
        private static void DrawShim(ShimSettings shimSettings,
                                     ksDocument2D shimEdit)
        {
            DrawShimLines(shimSettings, shimEdit);
            DrawShimInnerFillet(shimSettings, shimEdit);
            DrawShimOuterFillet(shimSettings, shimEdit);

            // Рисуем осевую линию
            shimEdit.ksLineSeg(0, -5, 0, 5, 3);
        }
Beispiel #28
0
        void close_file()
        {
            Console.WriteLine("ЗАКРЫТИЕ ДОКУМЕНТЫ");
            ksDocument2D doc = (ksDocument2D)kompas.ActiveDocument2D();

            if (doc != null)
            {
                doc.ksCloseDocument();
            }
        }
Beispiel #29
0
            protected override void DrawSketch(ksDocument2D sketchEdit)
            {
                var m  = Model;
                var p1 = Point.Pnt(-m.GripWidth / 2 - m.ButtWidth / 2, -m.GripHeight / 2);
                var p2 = Point.Pnt(-m.GripWidth / 2 - m.ButtWidth / 2, m.GripHeight / 2);
                var p3 = Point.Pnt(m.GripWidth / 2 - m.ButtWidth / 2, m.GripHeight / 2);
                var p4 = Point.Pnt(m.GripWidth / 2 - m.ButtWidth / 2, -m.GripHeight / 2);

                DrawLine(sketchEdit, p1, p2, p3, p4, p1);
            }
Beispiel #30
0
 /// <summary>
 /// Функция для рисования эскиза ножек столика
 /// </summary>
 /// <param name="sketchEdit">Объект рисования эскиза</param>
 /// <param name="x">Координата х верхней левой точки квадратной ножки</param>
 /// <param name="y">Координата у верхней левой точки квадратной ножки</param>
 /// <param name="sideLength">Длина стороны квадратной ножки</param>
 private void DrawLeg(ksDocument2D sketchEdit, double x, double y,
                      double sideLength)
 {
     sketchEdit.ksLineSeg(x, y, x + sideLength, y, 1);
     sketchEdit.ksLineSeg(x + sideLength, y,
                          x + sideLength, y - sideLength, 1);
     sketchEdit.ksLineSeg(x + sideLength, y - sideLength,
                          x, y - sideLength, 1);
     sketchEdit.ksLineSeg(x, y - sideLength, x, y, 1);
 }
Beispiel #31
0
            protected override void DrawSketch(ksDocument2D sketchEdit)
            {
                var p1 = Point.Pnt(-12, -Model.BladeHeight / 2);
                var p2 = Point.Pnt(-Model.BladeLength * .8, -Model.BladeHeight / 2);
                var p3 = Point.Pnt(-Model.BladeLength, Model.BladeHeight * .2);

                DrawLine(sketchEdit, p1, p2);
                sketchEdit.ksArcBy3Points(p2.Coordinate1, p2.Coordinate2, p2.Coordinate1 - 1, p2.Coordinate2,
                                          p3.Coordinate1, p3.Coordinate2, 1);
            }