/// <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(); // создадим операцию } } } } } } } } }
// Создать дугу private void DrawArc() { string buf = string.Empty; // построить дугу doc.ksMtr(10, 10, 0, 1, 1); reference p = doc.ksArcByAngle(30, 20, 20, 45, 135, 1, 1); // взять параметры дуги по углам ksArcByAngleParam par = (ksArcByAngleParam)kompas.GetParamStruct((short)StructType2DEnum.ko_ArcByAngleParam); ksArcByPointParam par1 = (ksArcByPointParam)kompas.GetParamStruct((short)StructType2DEnum.ko_ArcByPointParam); if ((par != null) && (par1 != null)) { int t = doc.ksGetObjParam(p, par, ldefin2d.ALLPARAM); buf = string.Format("t = {0}, xc = {1:.#}, yc = {2:.#}, rad = {3:.#}, \n a1 = {4:.#}, a2 = {5:.#}, napr = {6} , tl = {7}", t, par.xc, par.yc, par.rad, par.ang1, par.ang2, par.dir, par.style); kompas.ksMessage(buf); // заменить параметры дуги по точкам par1.xc = 40; par1.yc = 30; par1.rad = 10; par1.dir = 1; par1.style = 2; par1.x1 = 50; par1.y1 = 30; par1.x2 = 40; par1.y2 = 20; if (doc.ksSetObjParam(p, par1, 1) == 1) { kompas.ksMessage("Изменили объект"); } else { kompas.ksMessageBoxResult(); } } doc.ksDeleteMtr(); }
/// <summary> /// Метод для отрисовки эскиза элемена качения в КОМПАС-3D /// </summary> /// <param name="ballDoc">эскиз</param> /// <param name="BearingWidth">Ширина подшипника</param> /// <param name="InnerRimDiam">Диаметр внутреннего обода</param> /// <param name="OuterRimDiam">Диаметр внешнего обода</param> /// <param name="RimsThickness">Толщина подшипника</param> /// <param name="BallDiam">Диаметр шарика</param> private static void DrawBalls(ksDocument2D ballDoc, double BearingWidth, double InnerRimDiam, double OuterRimDiam, double RimsThickness, double BallDiam, RollingElementForm rollingElementForm, double BearingAxis, double GutterDepth, double GutterWidth) { if (rollingElementForm is RollingElementForm.Ball) { ballDoc.ksArcByAngle(0, BearingAxis, BallDiam / 2, -90, 90, 1, 1); ballDoc.ksLineSeg(0, 0, 0, 1, 3); } else { ballDoc.ksLineSeg(-GutterWidth, BearingAxis, -GutterWidth, BearingAxis - BallDiam / 2, 1); ballDoc.ksLineSeg(-GutterWidth, BearingAxis - BallDiam / 2, GutterWidth, BearingAxis - BallDiam / 2, 1); ballDoc.ksLineSeg(GutterWidth, BearingAxis - BallDiam / 2, GutterWidth, BearingAxis, 1); ballDoc.ksLineSeg(-GutterWidth, BearingAxis, GutterWidth, BearingAxis, 3); } }
/// <summary> /// Построение выреза сферической конфеты /// </summary> /// <param name="part">Компонент сборки</param> /// <param name="planeFormSurface">Плоскость поверхности формы</param> /// <param name="candySettings">Параметры конфетной формы</param> /// <param name="formTotalLength">Общая длина конфетной формы</param> /// <param name="formTotalWidth">Общая ширина конфетной формы</param> public override void Build(ksPart part, ksEntity planeFormSurface, CandySettings candySettings, double formTotalLength, double formTotalWidth) { double x = -formTotalLength / 2 + candySettings.FormDepthByLength + Height; double y = -formTotalWidth / 2 + candySettings.FormDepthByWidth + Height; for (int i = 0; i < candySettings.CandyCount / 2; ++i) { for (int j = 0; j < 2; ++j) { // Создание и настройка эскиза // на поверхности формы (смещенной плоскости) ksEntity formSurfaceSketch = part.NewEntity((short)Obj3dType.o3d_sketch); ksSketchDefinition formSurfaceSketchDefinition = formSurfaceSketch.GetDefinition(); formSurfaceSketchDefinition.SetPlane(planeFormSurface); formSurfaceSketch.Create(); // Входим в режим редактирования эскиза ksDocument2D formSurfaceDocument2D = (ksDocument2D)formSurfaceSketchDefinition.BeginEdit(); formSurfaceDocument2D.ksArcByAngle(x, y, Height, 0, 180, 1, 1); formSurfaceDocument2D.ksLineSeg(-Height + x, 0 + y, Height + x, 0 + y, 3); // Выходим из режима редактирования эскиза formSurfaceSketchDefinition.EndEdit(); CutRotated(part, formSurfaceSketch); y += Length + candySettings.FormDepthByWidth; } y -= 2 * (Length + candySettings.FormDepthByWidth); x += Width + candySettings.FormDepthByLength; } }
public void MakeTechnicalDrawings_STUPICA(Stupica stupica) { double multiply; // = 0.4; //масштаб 1:2.5 if (stupica.D_external <= 30) { multiply = 5; } else if (stupica.D_external > 30 && stupica.D_external <= 37.5) { multiply = 4; } else if (stupica.D_external > 37.5 && stupica.D_external <= 60) { multiply = 2.5; } else if (stupica.D_external > 60 && stupica.D_external <= 75) { multiply = 2; } else if (stupica.D_external > 75 && stupica.D_external <= 150) { multiply = 1; } else if (stupica.D_external > 150 && stupica.D_external <= 300) { multiply = 0.5; } else if (stupica.D_external > 300 && stupica.D_external <= 375) { multiply = 0.4; } else if (stupica.D_external > 375 && stupica.D_external <= 600) { multiply = 0.25; } else if (stupica.D_external > 600 && stupica.D_external <= 750) { multiply = 0.2; } else { multiply = 1; } ksDynamicArray arr = (ksDynamicArray)_kompas.GetDynamicArray(ldefin2d.POINT_ARR); ksDocument2D doc = (ksDocument2D)_kompas.Document2D(); doc = (ksDocument2D)_kompas.Document2D(); ksDocumentParam docPar = (ksDocumentParam)_kompas.GetParamStruct((short)StructType2DEnum.ko_DocumentParam); ksDocumentParam docPar1 = (ksDocumentParam)_kompas.GetParamStruct((short)StructType2DEnum.ko_DocumentParam); if ((docPar != null) & (docPar1 != null)) { // docPar.fileName = @"c:\2.cdw"; //docPar.comment = "Create document"; docPar.author = "unbekannte"; docPar.regime = 0; docPar.type = (short)DocType.lt_DocSheetStandart; ksSheetPar shPar = (ksSheetPar)docPar.GetLayoutParam(); if (shPar != null) { shPar.shtType = 1; shPar.layoutName = string.Empty; ksStandartSheet stPar = (ksStandartSheet)shPar.GetSheetParam(); if (stPar != null) { stPar.format = 3; //2 - А2, 3 - А3 и тд stPar.multiply = 1; //кратность формата, увеличивает лист в размерах stPar.direct = true; //горизонтально } } // Создали документ: лист, формат А3, горизонтально расположенный // и с системным штампом 1 doc.ksCreateDocument(docPar); ksStamp stamp = (ksStamp)doc.GetStamp(); if (stamp != null) { if (stamp.ksOpenStamp() == 1) { stamp.ksColumnNumber(1); Set_into_Stamp(doc, "Ступица фланцевой муфты"); stamp.ksColumnNumber(2); Set_into_Stamp(doc, "-"); stamp.ksColumnNumber(3); Set_into_Stamp(doc, "СТАЛЬ 35 ГОСТ 1050-2013"); stamp.ksColumnNumber(6); string tmp = ""; if (multiply >= 1) { tmp = multiply.ToString() + ":1"; } else { var M = Math.Round((1 / multiply), 1); tmp = "1:" + M.ToString(); } Set_into_Stamp(doc, tmp); stamp.ksColumnNumber(7); Set_into_Stamp(doc, "1"); stamp.ksColumnNumber(8); Set_into_Stamp(doc, "3"); stamp.ksColumnNumber(9); Set_into_Stamp(doc, "ТулГУ гр. 222131"); stamp.ksCloseStamp(); } } int number = 0; ksViewParam parv1 = (ksViewParam)_kompas.GetParamStruct((short)StructType2DEnum.ko_ViewParam); if (parv1 != null) { number = 1; parv1.Init(); parv1.x = 100; parv1.y = 150; parv1.scale_ = multiply; parv1.angle = 0; //угол поворота вида parv1.color = Color.FromArgb(10, 20, 10).ToArgb(); //цвет вида в активном состоянии parv1.state = ldefin2d.stACTIVE; parv1.name = "Вид слева"; // У документа создадим вид с номером 1, масштабом 0.5, под углом 45 гр reference v = doc.ksCreateSheetView(parv1, ref number); //создать вид // Создадим слой с номером 3 doc.ksLayer(3); //основа doc.ksLineSeg(0, 0, 0, (stupica.D_external / 2 - stupica.b1), 1); //с середины до верха doc.ksLineSeg(0, (stupica.D_external / 2 - stupica.b1), (stupica.b1), (stupica.D_external / 2), 1); //фаска doc.ksLineSeg((stupica.b1), (stupica.D_external / 2), (stupica.l1 - stupica.b1), (stupica.D_external / 2), 1); //верхняя линия doc.ksLineSeg((stupica.l1 - stupica.b1), (stupica.D_external / 2), (stupica.l1), (stupica.D_external / 2 - stupica.b1), 1); //faska doc.ksLineSeg((stupica.l1), (stupica.D_external / 2 - stupica.b1), (stupica.l1), (stupica.d1 / 2 + stupica.R1), 1); //сверху вниз до скругления doc.ksArcByAngle((stupica.l1 + stupica.R1), (stupica.d1 / 2 + stupica.R1), (stupica.R1), 180, 270, 1, 1); //скругление doc.ksLineSeg((stupica.l1 + stupica.R1), (stupica.d1 / 2), (stupica.l - stupica.b1), (stupica.d1 / 2), 1); //линия внешней стороны стакана вправо doc.ksLineSeg((stupica.l - stupica.b1), (stupica.d1 / 2), (stupica.l), (stupica.d1 / 2 - stupica.b1), 1); //faska doc.ksLineSeg((stupica.l), (stupica.d1 / 2 - stupica.b1), (stupica.l), 0, 1); ///////зеркально doc.ksLineSeg(0, 0, 0, -(stupica.D_external / 2 - stupica.b1), 1); //с середины до верха doc.ksLineSeg(0, -(stupica.D_external / 2 - stupica.b1), (stupica.b1), -(stupica.D_external / 2), 1); //фаска doc.ksLineSeg((stupica.b1), -(stupica.D_external / 2), (stupica.l1 - stupica.b1), -(stupica.D_external / 2), 1); //верхняя линия doc.ksLineSeg((stupica.l1 - stupica.b1), -(stupica.D_external / 2), (stupica.l1), -(stupica.D_external / 2 - stupica.b1), 1); //faska doc.ksLineSeg((stupica.l1), -(stupica.D_external / 2 - stupica.b1), (stupica.l1), -(stupica.d1 / 2 + stupica.R1), 1); //сверху вниз до скругления doc.ksArcByAngle((stupica.l1 + stupica.R1), -(stupica.d1 / 2 + stupica.R1), (stupica.R1), 90, 180, 1, 1); //скругление doc.ksLineSeg((stupica.l1 + stupica.R1), -(stupica.d1 / 2), (stupica.l - stupica.b1), -(stupica.d1 / 2), 1); //линия внешней стороны стакана вправо doc.ksLineSeg((stupica.l - stupica.b1), -(stupica.d1 / 2), (stupica.l), -(stupica.d1 / 2 - stupica.b1), 1); //faska doc.ksLineSeg((stupica.l), -(stupica.d1 / 2 - stupica.b1), (stupica.l), 0, 1); //верхнее отверстие под болты doc.ksLineSeg((0), (stupica.D_okr / 2 - stupica.d4 / 2), (0), (stupica.D_okr / 2 + stupica.d4 / 2), 1); //снизу вверх doc.ksLineSeg((0), (stupica.D_okr / 2 + stupica.d4 / 2), (stupica.l1 - stupica.b2), (stupica.D_okr / 2 + stupica.d4 / 2), 1); //верхняя планка doc.ksLineSeg((stupica.l1 - stupica.b2), (stupica.D_okr / 2 + stupica.d4 / 2), (stupica.l1 - stupica.b2), (stupica.D_okr / 2 - stupica.d4 / 2), 1); //сверху вниз doc.ksLineSeg((0), (stupica.D_okr / 2 - stupica.d4 / 2), (stupica.l1 - stupica.b2), (stupica.D_okr / 2 - stupica.d4 / 2), 1); //нижняя планка doc.ksLineSeg((stupica.l1 - stupica.b2), (stupica.D_okr / 2 + stupica.d4 / 2), (stupica.l1), (stupica.D_okr / 2 + stupica.d4 / 2 + stupica.b2), 1); //верхняя фаска doc.ksLineSeg((stupica.l1), (stupica.D_okr / 2 + stupica.d4 / 2 + stupica.b2), (stupica.l1), (stupica.D_okr / 2 - stupica.d4 / 2 - stupica.b2), 1); //сверху вниз doc.ksLineSeg((stupica.l1 - stupica.b2), (stupica.D_okr / 2 - stupica.d4 / 2), (stupica.l1), (stupica.D_okr / 2 - stupica.d4 / 2 - stupica.b2), 1); //нижняя фаска //нижнее отверстие под болты doc.ksLineSeg((0), -(stupica.D_okr / 2 - stupica.d4 / 2), (0), -(stupica.D_okr / 2 + stupica.d4 / 2), 1); //снизу вверх doc.ksLineSeg((0), -(stupica.D_okr / 2 + stupica.d4 / 2), (stupica.l1 - stupica.b2), -(stupica.D_okr / 2 + stupica.d4 / 2), 1); //верхняя планка doc.ksLineSeg((stupica.l1 - stupica.b2), -(stupica.D_okr / 2 + stupica.d4 / 2), (stupica.l1 - stupica.b2), -(stupica.D_okr / 2 - stupica.d4 / 2), 1); //сверху вниз doc.ksLineSeg((0), -(stupica.D_okr / 2 - stupica.d4 / 2), (stupica.l1 - stupica.b2), -(stupica.D_okr / 2 - stupica.d4 / 2), 1); //нижняя планка doc.ksLineSeg((stupica.l1 - stupica.b2), -(stupica.D_okr / 2 + stupica.d4 / 2), (stupica.l1), -(stupica.D_okr / 2 + stupica.d4 / 2 + stupica.b2), 1); //верхняя фаска doc.ksLineSeg((stupica.l1), -(stupica.D_okr / 2 + stupica.d4 / 2 + stupica.b2), (stupica.l1), -(stupica.D_okr / 2 - stupica.d4 / 2 - stupica.b2), 1); //сверху вниз doc.ksLineSeg((stupica.l1 - stupica.b2), -(stupica.D_okr / 2 - stupica.d4 / 2), (stupica.l1), -(stupica.D_okr / 2 - stupica.d4 / 2 - stupica.b2), 1); //нижняя фаска //внутр кольцо верх doc.ksLineSeg((0), (0), (0), (stupica.d2 / 2), 1); doc.ksLineSeg((stupica.l2), (0), (stupica.l2), (stupica.d2 / 2), 1); doc.ksLineSeg((0), (stupica.d2 / 2), (stupica.l2), (stupica.d2 / 2), 1); //внутр кольцо низ doc.ksLineSeg((0), (0), (0), -(stupica.d2 / 2), 1); doc.ksLineSeg((stupica.l2), (0), (stupica.l2), -(stupica.d2 / 2), 1); doc.ksLineSeg((0), -(stupica.d2 / 2), (stupica.l2), -(stupica.d2 / 2), 1); //осн. отверстие верх doc.ksLineSeg((stupica.l2), (stupica.d / 2), (stupica.l - stupica.b1), (stupica.d / 2), 1); // doc.ksLineSeg((stupica.l2), (stupica.h - stupica.d / 2), (stupica.l), (stupica.h - stupica.d / 2), 1); // doc.ksLineSeg((stupica.l - stupica.b1), (stupica.d / 2), (stupica.l), (stupica.d / 2 + stupica.b1), 1); //фаска doc.ksLineSeg((stupica.l - stupica.b1), (stupica.d / 2), (stupica.l - stupica.b1), (0), 1); //фаска //осн. отверстие низ doc.ksLineSeg((stupica.l2), -(stupica.d / 2), (stupica.l - stupica.b1), -(stupica.d / 2), 1); doc.ksLineSeg((stupica.l - stupica.b1), -(stupica.d / 2), (stupica.l), -(stupica.d / 2 + stupica.b1), 1); //фаска doc.ksLineSeg((stupica.l - stupica.b1), -(stupica.d / 2), (stupica.l - stupica.b1), (0), 1); //фаска doc.ksLineSeg((0), (0), (0), (0), 1); // doc.ksLineSeg((0), (0), (0), (0), 1); // doc.ksLineSeg((0), (0), (0), (0), 1); // doc.ksLineSeg((0), (0), (0), (0), 1); // //освевые doc.ksLineSeg((0) - 5, (0), (stupica.l) + 5, (0), 3); // doc.ksLineSeg((0) - 5, (stupica.D_okr / 2), (stupica.l1) + 5, (stupica.D_okr / 2), 3); // doc.ksLineSeg((0) - 5, -(stupica.D_okr / 2), (stupica.l1) + 5, -(stupica.D_okr / 2), 3); // if (doc.ksHatch(0, 45, 2, 0, 0, 0) == 1) { doc.ksLineSeg(0, stupica.D_okr / 2 + stupica.d4 / 2, 0, (stupica.D_external / 2 - stupica.b1), 1); //от отверстия до верха doc.ksLineSeg(0, (stupica.D_external / 2 - stupica.b1), (stupica.b1), (stupica.D_external / 2), 1); //фаска doc.ksLineSeg((stupica.b1), (stupica.D_external / 2), (stupica.l1 - stupica.b1), (stupica.D_external / 2), 1); //верхняя линия doc.ksLineSeg((stupica.l1 - stupica.b1), (stupica.D_external / 2), (stupica.l1), (stupica.D_external / 2 - stupica.b1), 1); //faska doc.ksLineSeg((stupica.l1), (stupica.D_external / 2 - stupica.b1), (stupica.l1), (stupica.D_okr / 2 + stupica.d4 / 2 + stupica.b2), 1); //сверху вниз до фаски doc.ksLineSeg((stupica.l1 - stupica.b2), (stupica.D_okr / 2 + stupica.d4 / 2), (stupica.l1), (stupica.D_okr / 2 + stupica.d4 / 2 + stupica.b2), 1); //верхняя фаска doc.ksLineSeg((0), (stupica.D_okr / 2 + stupica.d4 / 2), (stupica.l1 - stupica.b2), (stupica.D_okr / 2 + stupica.d4 / 2), 1); //нижняя линия doc.ksLineSeg((0), (stupica.d2 / 2), (0), (stupica.D_okr / 2 - stupica.d4 / 2), 1); //от кольца до отверстия doc.ksLineSeg((0), (stupica.D_okr / 2 - stupica.d4 / 2), (stupica.l1 - stupica.b2), (stupica.D_okr / 2 - stupica.d4 / 2), 1); //нижняя планка doc.ksLineSeg((stupica.l1 - stupica.b2), (stupica.D_okr / 2 - stupica.d4 / 2), (stupica.l1), (stupica.D_okr / 2 - stupica.d4 / 2 - stupica.b2), 1); //нижняя фаска doc.ksLineSeg((stupica.l1), (stupica.D_okr / 2 - stupica.d4 / 2 - stupica.b2), (stupica.l1), (stupica.d1 / 2 + stupica.R1), 1); //нижняя фаска doc.ksArcByAngle((stupica.l1 + stupica.R1), (stupica.d1 / 2 + stupica.R1), (stupica.R1), 180, 270, 1, 1); //скругление doc.ksLineSeg((stupica.l1 + stupica.R1), (stupica.d1 / 2), (stupica.l - stupica.b1), (stupica.d1 / 2), 1); //линия внешней стороны стакана вправо doc.ksLineSeg((stupica.l - stupica.b1), (stupica.d1 / 2), (stupica.l), (stupica.d1 / 2 - stupica.b1), 1); //faska doc.ksLineSeg((stupica.l), (stupica.d1 / 2 - stupica.b1), (stupica.l), (stupica.h - stupica.d / 2), 1); //до паза doc.ksLineSeg((stupica.l2), (stupica.h - stupica.d / 2), (stupica.l), (stupica.h - stupica.d / 2), 1); //паз doc.ksLineSeg((stupica.l2), (stupica.h - stupica.d / 2), (stupica.l2), (stupica.d2 / 2), 1); doc.ksLineSeg((0), (stupica.d2 / 2), (stupica.l2), (stupica.d2 / 2), 1); //зеркально doc.ksLineSeg(0, -(stupica.D_okr / 2 + stupica.d4 / 2), 0, -(stupica.D_external / 2 - stupica.b1), 1); //от отверстия до верха doc.ksLineSeg(0, -(stupica.D_external / 2 - stupica.b1), (stupica.b1), -(stupica.D_external / 2), 1); //фаска doc.ksLineSeg((stupica.b1), -(stupica.D_external / 2), (stupica.l1 - stupica.b1), -(stupica.D_external / 2), 1); //верхняя линия doc.ksLineSeg((stupica.l1 - stupica.b1), -(stupica.D_external / 2), (stupica.l1), -(stupica.D_external / 2 - stupica.b1), 1); //faska doc.ksLineSeg((stupica.l1), -(stupica.D_external / 2 - stupica.b1), (stupica.l1), -(stupica.D_okr / 2 + stupica.d4 / 2 + stupica.b2), 1); //сверху вниз до фаски doc.ksLineSeg((stupica.l1 - stupica.b2), -(stupica.D_okr / 2 + stupica.d4 / 2), (stupica.l1), -(stupica.D_okr / 2 + stupica.d4 / 2 + stupica.b2), 1); //верхняя фаска doc.ksLineSeg((0), -(stupica.D_okr / 2 + stupica.d4 / 2), (stupica.l1 - stupica.b2), -(stupica.D_okr / 2 + stupica.d4 / 2), 1); //нижняя линия doc.ksLineSeg((0), -(stupica.d2 / 2), (0), -(stupica.D_okr / 2 - stupica.d4 / 2), 1); //от кольца до отверстия doc.ksLineSeg((0), -(stupica.D_okr / 2 - stupica.d4 / 2), (stupica.l1 - stupica.b2), -(stupica.D_okr / 2 - stupica.d4 / 2), 1); //нижняя планка doc.ksLineSeg((stupica.l1 - stupica.b2), -(stupica.D_okr / 2 - stupica.d4 / 2), (stupica.l1), -(stupica.D_okr / 2 - stupica.d4 / 2 - stupica.b2), 1); //нижняя фаска doc.ksLineSeg((stupica.l1), -(stupica.D_okr / 2 - stupica.d4 / 2 - stupica.b2), (stupica.l1), -(stupica.d1 / 2 + stupica.R1), 1); //нижняя фаска doc.ksArcByAngle((stupica.l1 + stupica.R1), -(stupica.d1 / 2 + stupica.R1), (stupica.R1), 90, 180, 1, 1); //скругление doc.ksLineSeg((stupica.l1 + stupica.R1), -(stupica.d1 / 2), (stupica.l - stupica.b1), -(stupica.d1 / 2), 1); //линия внешней стороны стакана вправо doc.ksLineSeg((stupica.l - stupica.b1), -(stupica.d1 / 2), (stupica.l), -(stupica.d1 / 2 - stupica.b1), 1); //faska doc.ksLineSeg((stupica.l), -(stupica.d1 / 2 - stupica.b1), (stupica.l), -(stupica.d / 2), 1); //до отв doc.ksLineSeg((stupica.l - stupica.b1), -(stupica.d / 2), (stupica.l - stupica.b1), -(stupica.d / 2 + stupica.b1), 1); //фаска doc.ksLineSeg((stupica.l2), -(stupica.d / 2), (stupica.l), -(stupica.d / 2), 1); //отв doc.ksLineSeg((stupica.l2), -(stupica.d / 2), (stupica.l2), -(stupica.d2 / 2), 1); doc.ksLineSeg((0), -(stupica.d2 / 2), (stupica.l2), -(stupica.d2 / 2), 1); reference telo = doc.ksEndObj(); ksHatchParam par = (ksHatchParam)_kompas.GetParamStruct((short)StructType2DEnum.ko_HatchParam); if (par != null) { par.Init(); int t = doc.ksGetObjParam(telo, par, ldefin2d.ALLPARAM); doc.ksDeleteMtr(); doc.ksMtr(0, 0, 0, 2, 2); // заменить параметры штриховки par.x = 0.8; doc.ksDeleteMtr(); } } ////////// РАЗМЕРЫ //горизонтальные LinRazm(doc, (stupica.b1), -(stupica.d2 / 2), (stupica.b1), (stupica.d2 / 2), 1, -15, 0, 1); //d2 LinRazm(doc, (stupica.b1), -(stupica.D_external / 2), (stupica.b1), (stupica.D_external / 2), 1, -27, 0, 1); //D_external LinRazm(doc, (stupica.l - stupica.b1), -(stupica.d1 / 2), (stupica.l - stupica.b1), (stupica.d1 / 2), 1, 27, 0, 1); //d1 //вертикальные LinRazm(doc, (0), -(stupica.d2 / 2), (stupica.l2), -(stupica.d2 / 2), 2, 0, -15, 0); //l2 LinRazm(doc, (stupica.l1 - stupica.b2), -(stupica.D_okr / 2), (stupica.l1), -(stupica.D_okr / 2), 2, 0, -(stupica.D_external / 2 - stupica.D_okr / 2) * multiply - 15, 0, 3); //b2 - фаска отверстия LinRazm(doc, (0), -(stupica.D_external / 2 - stupica.b1), (stupica.l1), -(stupica.D_external / 2 - stupica.b1), 2, 0, -27, 0); //l1 LinRazm(doc, (0), (0), (stupica.l), (0), 2, 0, -(stupica.D_external / 2) * multiply - 39, 0); //l LinRazm(doc, (stupica.l - stupica.b1), (0), (stupica.l), (0), 2, 0, -(stupica.d1 / 2) * multiply - 15, 0, 3); //b1 - фаска ребра set_rad_razm(stupica, doc); liniya_s_obrivom(stupica, multiply, doc); } ksViewParam parv2 = (ksViewParam)_kompas.GetParamStruct((short)StructType2DEnum.ko_ViewParam); if (parv2 != null) { number = 2; parv2.Init(); parv2.x = 300; parv2.y = 150; parv2.scale_ = multiply; //масштаб вида parv2.angle = 0; //угол поворота вида parv2.color = Color.FromArgb(10, 20, 10).ToArgb(); //цвет вида в активном состоянии parv2.state = ldefin2d.stACTIVE; parv2.name = "Вид спереди"; // У документа создадим вид с номером 1, масштабом 0.5, под углом 45 гр reference v = doc.ksCreateSheetView(parv2, ref number); //создать вид // Создадим слой с номером 5 doc.ksLayer(5); //внешняя окр doc.ksCircle(0, 0, (stupica.D_external / 2), 1); doc.ksCircle(0, 0, (stupica.D_external / 2 - stupica.b1), 1); //стакан doc.ksCircle(0, 0, (stupica.d1 / 2), 1); doc.ksCircle(0, 0, (stupica.d1 / 2 - stupica.b1), 1); //осевая doc.ksCircle(0, 0, (stupica.D_okr / 2), 3); //паз reference left = doc.ksLineSeg((-stupica.B / 2), (stupica.d / 2 - stupica.b1 * 5), (-stupica.B / 2), (stupica.h - stupica.d / 2 - stupica.R), 1); //левая линия reference right = doc.ksLineSeg((stupica.B / 2), (stupica.d / 2 - stupica.b1 * 5), (stupica.B / 2), (stupica.h - stupica.d / 2 - stupica.R), 1); //правая линия doc.ksArcByAngle((-stupica.B / 2 + stupica.R), (stupica.h - stupica.d / 2 - stupica.R), (stupica.R), 90, 180, 1, 1); //скругление doc.ksArcByAngle((stupica.B / 2 - stupica.R), (stupica.h - stupica.d / 2 - stupica.R), (stupica.R), 0, 90, 1, 1); //скругление doc.ksLineSeg((-stupica.B / 2 + stupica.R), (stupica.h - stupica.d / 2), (stupica.B / 2 - stupica.R), (stupica.h - stupica.d / 2), 1); //верхняя линия //внутр окр reference c1 = doc.ksCircle(0, 0, (stupica.d / 2), 1); reference c2 = doc.ksCircle(0, 0, (stupica.d / 2 + stupica.b1), 1); /* doc.ksTrimmCurve(left, * (-master.B / 2), (master.h - master.d / 2 - master.R), * (-master.B / 2), (master.d / 2), * (-master.B / 2), (master.d / 2 + 0.5), 1);*/ ksMathPointParam p1 = (ksMathPointParam)_kompas.GetParamStruct((short)StructType2DEnum.ko_MathPointParam); object afa = new object(); //точки пересечения считаю сам, т.к. компас... не будем говорить о плохом var c1_l1 = line_cirle_itersection((stupica.d / 2), (-stupica.B / 2)); var c1_l2 = line_cirle_itersection((stupica.d / 2), (stupica.B / 2)); var c2_l1 = line_cirle_itersection((stupica.d / 2 + stupica.b1), (-stupica.B / 2)); var c2_l2 = line_cirle_itersection((stupica.d / 2 + stupica.b1), (stupica.B / 2)); doc.ksTrimmCurve(left, (-stupica.B / 2), (stupica.h - stupica.d / 2 - stupica.R), c1_l1.x, c1_l1.y, c1_l1.x, c1_l1.y, 1); doc.ksTrimmCurve(right, (stupica.B / 2), (stupica.h - stupica.d / 2 - stupica.R), c1_l2.x, c1_l2.y, c1_l2.x, c1_l2.y, 1); doc.ksTrimmCurve(c1, c1_l1.x, c1_l1.y, c1_l2.x, c1_l2.y, 0, -(stupica.d / 2), 1); doc.ksTrimmCurve(c2, c2_l1.x, c2_l1.y, c2_l2.x, c2_l2.y, 0, -(stupica.d / 2 + stupica.b1), 1); doc.ksLineSeg((0), (0), (0), (0), 1); // doc.ksLineSeg((0), (0), (0), (0), 1); // doc.ksLineSeg((0), (0), (0), (0), 1); // int N_otv = (stupica.n + stupica.n3); int angle = 360 / N_otv; List <ksMathPointParam> list_of_holes = new List <ksMathPointParam>(); for (int i = 1; i <= N_otv; i++) { var c_otv = point_by_angle((stupica.D_okr / 2), 90 + angle * (i - 1)); list_of_holes.Add(c_otv); if (i % 2 == 1) { doc.ksCircle(c_otv.x, c_otv.y, (stupica.d4 / 2), 1); doc.ksLineSeg(c_otv.x, c_otv.y + (stupica.d4 / 2 + 5), c_otv.x, c_otv.y - (stupica.d4 / 2 + 5), 3); doc.ksLineSeg(c_otv.x - (stupica.d4 / 2 + 5), c_otv.y, c_otv.x + (stupica.d4 / 2 + 5), c_otv.y, 3); } else { doc.ksCircle(c_otv.x, c_otv.y, (stupica.d3 / 2), 1); doc.ksLineSeg(c_otv.x, c_otv.y + (stupica.d3 / 2 + 5), c_otv.x, c_otv.y - (stupica.d3 / 2 + 5), 3); doc.ksLineSeg(c_otv.x - (stupica.d3 / 2 + 5), c_otv.y, c_otv.x + (stupica.d3 / 2 + 5), c_otv.y, 3); } //как сделать обозначения повернутыми к центру пока не придумал, время и так нема } ////////// РАЗМЕРЫ //диаметры Diam_Razmer(0, 0, (stupica.D_okr / 2), (int)((stupica.D_external - stupica.D_okr) / 2 * multiply) + 15, 1, 1, 45, doc); Diam_Razmer(list_of_holes[0].x, list_of_holes[0].y, (stupica.d4 / 2), 5, 2, 1, 45, doc); Diam_Razmer(list_of_holes[1].x, list_of_holes[1].y, (stupica.d3 / 2), 5, 2, 1, 45, doc); LinRazm(doc, -(stupica.B / 2), (stupica.h - stupica.d / 2 - stupica.R), (stupica.B / 2), (stupica.h - stupica.d / 2 - stupica.R), 2, 0, 12, 0); //l1 LinRazm(doc, (0), -(stupica.d / 2), (0), (stupica.h - stupica.d / 2), 1, (stupica.d1 / 2) * multiply + 10, 0, 0); //l1 } } }