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 } } }
/// <summary> /// Создание модели шестерни /// </summary> /// <param name="properties">Передаваемые с формы параметры</param> public void CreateModel(Gear properties) { int teethCount = properties.TeethCount; var angle = properties.Angle; var thickness = properties.Thickness; var shaftDiam = properties.ShaftDiam; var diameterOut = properties.DiameterOut; var diameterIn = properties.DiameterIn; var diameterPitch = (diameterOut + diameterIn) / 2; // делительный диаметр колеса var alfa1 = 0.0; var alfa2 = 0.0; // интерфейсы ортогональных плоскостей ksPart iPart = _doc3.GetPart((int)Part_Type.pNew_Part) as ksPart; //новый компонет if (iPart != null) { // интерфейсы ортогональных плоскостей ksEntity planeXoy = iPart.GetDefaultEntity((short)Obj3dType.o3d_planeXOY) as ksEntity; ksEntity planeXoz = iPart.GetDefaultEntity((short)Obj3dType.o3d_planeXOZ) as ksEntity; ksEntity planeYoz = iPart.GetDefaultEntity((short)Obj3dType.o3d_planeYOZ) as ksEntity; // интерфейс эскиза (половина контура сечения колеса) ksEntity iSketchEntity = iPart.NewEntity((short)Obj3dType.o3d_sketch) as ksEntity; if (iSketchEntity != null) { // интерфейс параметров эскиза ksSketchDefinition iSketchDef = iSketchEntity.GetDefinition() as ksSketchDefinition; if (iSketchDef != null) { if (planeXoy != null) { // устанавливаем плоскость, // на которой создается эскиз iSketchDef.SetPlane(planeXoy); iSketchEntity.Create(); // запускаем процесс редактирования эскиза // doc – указатель на интерфейс ksDocument2D _doc = iSketchDef.BeginEdit() as ksDocument2D; if (_doc != null) { _doc.ksLineSeg(-thickness / 2, 00, thickness / 2, 0, 3); //3 - осевая линия _doc.ksLineSeg(thickness / 2, shaftDiam / 2, -thickness / 2, shaftDiam / 2, 1); _doc.ksLineSeg(thickness / 2, shaftDiam / 2, thickness / 2, diameterOut / 2, 1); _doc.ksLineSeg(-thickness / 2, diameterOut / 2, -thickness / 2, shaftDiam / 2, 1); _doc.ksLineSeg(-thickness / 2, diameterOut / 2, thickness / 2, diameterOut / 2, 1); } iSketchDef.EndEdit(); } } } // интерфейс базовой операции вращения ksEntity iBaseRotatedEntity = iPart.NewEntity((short)Obj3dType.o3d_baseRotated) as ksEntity; if (iBaseRotatedEntity != null) { // интерфейс параметров вращения ksBaseRotatedDefinition iBaseRotatedDef = iBaseRotatedEntity.GetDefinition() as ksBaseRotatedDefinition; if (iBaseRotatedDef != null) { // настройка параметров вращения iBaseRotatedDef.SetThinParam(false, (short)Direction_Type.dtNormal, 1, 1); iBaseRotatedDef.SetSideParam(true, 360.0); iBaseRotatedDef.toroidShapeType = false; iBaseRotatedDef.SetSketch(iSketchEntity); // создаем операцию вращения // результат – заготовка зубчатого колеса iBaseRotatedEntity.Create(); } } ksEntity iSketch1Entity = iPart.NewEntity((short)Obj3dType.o3d_sketch) as ksEntity; if (iSketch1Entity != null) { ksSketchDefinition iSketch1Def = iSketch1Entity.GetDefinition() as ksSketchDefinition; if (iSketch1Def != null) { if (planeYoz != null) { // размещаем эскиз на плоскости XOY iSketch1Def.SetPlane(planeXoy); iSketch1Entity.Create(); _doc = iSketch1Def.BeginEdit() as ksDocument2D; if (_doc != null) { var width = properties.KeywayWidth; _doc.ksLineSeg(thickness / 2, -width / 2, -thickness / 2, -width / 2, 1); _doc.ksLineSeg(-thickness / 2, width / 2, -thickness / 2, -width / 2, 1); _doc.ksLineSeg(-thickness / 2, width / 2, thickness / 2, width / 2, 1); _doc.ksLineSeg(thickness / 2, width / 2, thickness / 2, -width / 2, 1); } iSketch1Def.EndEdit(); } } } // интерфейс операции Вырезать выдавливанием ksEntity iCutExtrusion = iPart.NewEntity((short)Obj3dType.o3d_cutExtrusion) as ksEntity; if (iCutExtrusion != null) { // интерфейс параметров вырезания ksCutExtrusionDefinition iCutExtrusionDef = iCutExtrusion.GetDefinition() as ksCutExtrusionDefinition; if (iCutExtrusionDef != null) { // настройка параметров iCutExtrusionDef.SetSketch(iSketch1Entity); // направление iCutExtrusionDef.directionType = (short)Direction_Type.dtNormal; // величина вырезания по каждому из направлений iCutExtrusionDef.SetSideParam(true, (short)ksEndTypeEnum.etBlind, properties.KeywayDepth + shaftDiam / 2, 0, false); iCutExtrusionDef.SetThinParam(false, 0, 0, 0); iCutExtrusion.Create(); } } // интерфейс смещенной плоскости ksEntity iOffsetPlaneEntity = iPart.NewEntity((short)Obj3dType.o3d_planeOffset) as ksEntity; if (iOffsetPlaneEntity != null) { // интерфейс параметров смещенной плоскости ksPlaneOffsetDefinition iOffsetPlaneDef = iOffsetPlaneEntity.GetDefinition() as ksPlaneOffsetDefinition; if (iOffsetPlaneDef != null) { // величина, базовая плоскость и другие параметры смещения iOffsetPlaneDef.offset = thickness / 2; iOffsetPlaneDef.SetPlane(planeYoz); iOffsetPlaneDef.direction = false; // делаем плоскость скрытой iOffsetPlaneEntity.hidden = true; // создаем вспомогательную плоскость iOffsetPlaneEntity.Create(); } } // эскиз первого выреза между зубьями ksEntity iSketch2Entity = iPart.NewEntity((short)Obj3dType.o3d_sketch) as ksEntity; if (iSketch2Entity != null) { ksSketchDefinition iSketch2Def = iSketch2Entity.GetDefinition() as ksSketchDefinition; if (iSketch2Def != null) { // базовая плоскость – вспомогательная iOffsetPlaneEntity iSketch2Def.SetPlane(iOffsetPlaneEntity); iSketch2Entity.Create(); _doc = iSketch2Def.BeginEdit() as ksDocument2D; alfa1 = 360.0 / teethCount; _doc.ksMtr(0, 0, 90, 1, 1); // вычерчивание изображения эскиза // вместо эвольвент для простоты // берем обычные дуги по трем точкам _doc.ksArcBy3Points(-(diameterOut / 2 + 0.1) * Math.Sin(DegToRad(0)), -(diameterOut / 2 + 0.1) * Math.Cos(DegToRad(0)), -diameterPitch / 2 * Math.Sin(DegToRad(alfa1 / 8)), -diameterPitch / 2 * Math.Cos(DegToRad(alfa1 / 8)), -diameterIn / 2 * Math.Sin(DegToRad(alfa1 / 4)), -diameterIn / 2 * Math.Cos(DegToRad(alfa1 / 4)), 1); _doc.ksArcByPoint(0, 0, diameterIn / 2, -diameterIn / 2 * Math.Sin(DegToRad(alfa1 / 4)), -diameterIn / 2 * Math.Cos(DegToRad(alfa1 / 4)), -diameterIn / 2 * Math.Sin(DegToRad(alfa1 / 2)), -diameterIn / 2 * Math.Cos(DegToRad(alfa1 / 2)), -1, 1); _doc.ksArcBy3Points(-diameterIn / 2 * Math.Sin(DegToRad(alfa1 / 2)), -diameterIn / 2 * Math.Cos(DegToRad(alfa1 / 2)), -diameterPitch / 2 * Math.Sin(DegToRad(0.625 * alfa1)), -diameterPitch / 2 * Math.Cos(DegToRad(0.625 * alfa1)), -(diameterOut / 2 + 0.1) * Math.Sin(DegToRad(0.75 * alfa1)), -(diameterOut / 2 + 0.1) * Math.Cos(DegToRad(0.75 * alfa1)), 1); _doc.ksArcBy3Points(-(diameterOut / 2 + 0.1) * Math.Sin(DegToRad(0.75 * alfa1)), -(diameterOut / 2 + 0.1) * Math.Cos(DegToRad(0.75 * alfa1)), -(diameterOut / 2 + 2) * Math.Sin(DegToRad(0.375 * alfa1)), -(diameterOut / 2 + 2) * Math.Cos(DegToRad(0.375 * alfa1)), -(diameterOut / 2 + 0.1) * Math.Sin(DegToRad(0)), -(diameterOut / 2 + 0.1) * Math.Cos(DegToRad(0)), 1); _doc.ksDeleteMtr(); iSketch2Def.EndEdit(); } } // интерфейс второго эскиза выреза между зубьями ksEntity iSketch3Entity = iPart.NewEntity((short)Obj3dType.o3d_sketch) as ksEntity; if (iSketch3Entity != null) { ksSketchDefinition iSketch3Def = iSketch3Entity.GetDefinition() as ksSketchDefinition; if (iSketch3Def != null) { // строим на плоскости YOZ iSketch3Def.SetPlane(planeYoz); iSketch3Entity.Create(); _doc = iSketch3Def.BeginEdit() as ksDocument2D; alfa2 = -(180 / Math.PI * (thickness * Math.Tan(Math.PI * (angle) / 180) / diameterPitch)); _doc.ksMtr(0, 0, 90, 1, 1); // вычерчивание изображения эскиза // вместо эвольвент для простоты // берем обычные дуги по трем точкам _doc.ksArcBy3Points(-(diameterOut / 2 + 0.1) * Math.Sin(DegToRad(alfa2)), -(diameterOut / 2 + 0.1) * Math.Cos(DegToRad(alfa2)), -diameterPitch / 2 * Math.Sin(DegToRad(alfa1 / 8 + alfa2)), -diameterPitch / 2 * Math.Cos(DegToRad(alfa1 / 8 + alfa2)), -diameterIn / 2 * Math.Sin(DegToRad(alfa1 / 4 + alfa2)), -diameterIn / 2 * Math.Cos(DegToRad(alfa1 / 4 + alfa2)), 1); _doc.ksArcByPoint(0, 0, diameterIn / 2, -diameterIn / 2 * Math.Sin(DegToRad(alfa1 / 4 + alfa2)), -diameterIn / 2 * Math.Cos(DegToRad(alfa1 / 4 + alfa2)), -diameterIn / 2 * Math.Sin(DegToRad(alfa1 / 2 + alfa2)), -diameterIn / 2 * Math.Cos(DegToRad(alfa1 / 2 + alfa2)), -1, 1); _doc.ksArcBy3Points(-diameterIn / 2 * Math.Sin(DegToRad(alfa1 / 2 + alfa2)), -diameterIn / 2 * Math.Cos(DegToRad(alfa1 / 2 + alfa2)), -diameterPitch / 2 * Math.Sin(DegToRad(0.625 * alfa1 + alfa2)), -diameterPitch / 2 * Math.Cos(DegToRad(0.625 * alfa1 + alfa2)), -(diameterOut / 2 + 0.1) * Math.Sin(DegToRad(0.75 * alfa1 + alfa2)), -(diameterOut / 2 + 0.1) * Math.Cos(DegToRad(0.75 * alfa1 + alfa2)), 1); _doc.ksArcBy3Points(-(diameterOut / 2 + 0.1) * Math.Sin(DegToRad(0.75 * alfa1 + alfa2)), -(diameterOut / 2 + 0.1) * Math.Cos(DegToRad(0.75 * alfa1 + alfa2)), -(diameterOut / 2 + 2) * Math.Sin(DegToRad(0.375 * alfa1 + alfa2)), -(diameterOut / 2 + 2) * Math.Cos(DegToRad(0.375 * alfa1 + alfa2)), -(diameterOut / 2 + 0.1) * Math.Sin(DegToRad(alfa2)), -(diameterOut / 2 + 0.1) * Math.Cos(DegToRad(alfa2)), 1); _doc.ksDeleteMtr(); iSketch3Def.EndEdit(); } } // вторая смещенная плоскость ksEntity iOffsetPlane1Entity = iPart.NewEntity((short)Obj3dType.o3d_planeOffset) as ksEntity; if (iOffsetPlane1Entity != null) { ksPlaneOffsetDefinition iOffsetPlane1Def = iOffsetPlane1Entity.GetDefinition() as ksPlaneOffsetDefinition; if (iOffsetPlane1Def != null) { // величина смещения та же iOffsetPlane1Def.offset = thickness / 2; // направление противоположное iOffsetPlane1Def.direction = true; iOffsetPlane1Def.SetPlane(planeYoz); // делаем плоскость скрытой iOffsetPlane1Entity.hidden = true; // создаем смещенную плоскость iOffsetPlane1Entity.Create(); } } // третий (последний) эскиз выреза между зубьями ksEntity iSketch4Entity = iPart.NewEntity((short)Obj3dType.o3d_sketch) as ksEntity; if (iSketch4Entity != null) { ksSketchDefinition iSketch4Def = iSketch4Entity.GetDefinition() as ksSketchDefinition; if (iSketch4Def != null) { // базовая плоскость – только что созданная смещенная iSketch4Def.SetPlane(iOffsetPlane1Entity); iSketch4Entity.Create(); _doc = iSketch4Def.BeginEdit() as ksDocument2D; alfa2 = -(180 / Math.PI * (2 * thickness * Math.Tan(Math.PI * (angle) / 180) / diameterPitch)); _doc.ksMtr(0, 0, 90, 1, 1); // вычерчивание изображения эскиза // вместо эвольвент для простоты // берем обычные дуги по трем точкам _doc.ksArcBy3Points(-(diameterOut / 2 + 0.1) * Math.Sin(DegToRad(alfa2)), -(diameterOut / 2 + 0.1) * Math.Cos(DegToRad(alfa2)), -diameterPitch / 2 * Math.Sin(DegToRad(alfa1 / 8 + alfa2)), -diameterPitch / 2 * Math.Cos(DegToRad(alfa1 / 8 + alfa2)), -diameterIn / 2 * Math.Sin(DegToRad(alfa1 / 4 + alfa2)), -diameterIn / 2 * Math.Cos(DegToRad(alfa1 / 4 + alfa2)), 1); _doc.ksArcByPoint(0, 0, diameterIn / 2, -diameterIn / 2 * Math.Sin(DegToRad(alfa1 / 4 + alfa2)), -diameterIn / 2 * Math.Cos(DegToRad(alfa1 / 4 + alfa2)), -diameterIn / 2 * Math.Sin(DegToRad(alfa1 / 2 + alfa2)), -diameterIn / 2 * Math.Cos(DegToRad(alfa1 / 2 + alfa2)), -1, 1); _doc.ksArcBy3Points(-diameterIn / 2 * Math.Sin(DegToRad(alfa1 / 2 + alfa2)), -diameterIn / 2 * Math.Cos(DegToRad(alfa1 / 2 + alfa2)), -diameterPitch / 2 * Math.Sin(DegToRad(0.625 * alfa1 + alfa2)), -diameterPitch / 2 * Math.Cos(DegToRad(0.625 * alfa1 + alfa2)), -(diameterOut / 2 + 0.1) * Math.Sin(DegToRad(0.75 * alfa1 + alfa2)), -(diameterOut / 2 + 0.1) * Math.Cos(DegToRad(0.75 * alfa1 + alfa2)), 1); _doc.ksArcBy3Points(-(diameterOut / 2 + 0.1) * Math.Sin(DegToRad(0.75 * alfa1 + alfa2)), -(diameterOut / 2 + 0.1) * Math.Cos(DegToRad(0.75 * alfa1 + alfa2)), -(diameterOut / 2 + 2) * Math.Sin(DegToRad(0.375 * alfa1 + alfa2)), -(diameterOut / 2 + 2) * Math.Cos(DegToRad(0.375 * alfa1 + alfa2)), -(diameterOut / 2 + 0.1) * Math.Sin(DegToRad(alfa2)), -(diameterOut / 2 + 0.1) * Math.Cos(DegToRad(alfa2)), 1); _doc.ksDeleteMtr(); iSketch4Def.EndEdit(); } } // интерфейс операции Вырезать по сечениям ksEntity iCutLoftEntity = iPart.NewEntity((short)Obj3dType.o3d_cutLoft) as ksEntity; if (iCutLoftEntity != null) { // интерфейс параметров операции по сечениям ksCutLoftDefinition iCutLoftDef = iCutLoftEntity.GetDefinition() as ksCutLoftDefinition; if (iCutLoftDef != null) { // интерфейс массива ksEntityCollection // коллекции эскизов для вырезания по сечениям ksEntityCollection collect = iCutLoftDef.Sketchs() as ksEntityCollection; // добавляем эскизы в колекцию collect.Add(iSketch2Entity); collect.Add(iSketch3Entity); collect.Add(iSketch4Entity); // создаем операцию по сечениям // результат – первый вырез между зубьями в венце колеса iCutLoftEntity.Create(); } } // интерфейс вспомогательной оси на пересечении двух плоскостей ksEntity iAxis = iPart.NewEntity((short)Obj3dType.o3d_axis2Planes) as ksEntity; if (iAxis != null) { // интерфейс параметров вспомогательной оси // на пересечении плоскостей ksAxis2PlanesDefinition iAxis2PlDef = iAxis.GetDefinition() as ksAxis2PlanesDefinition; if (iAxis2PlDef != null) { // задаем плоскости iAxis2PlDef.SetPlane(1, planeXoz); iAxis2PlDef.SetPlane(2, planeXoy); // делаем ось невидимой iAxis.hidden = true; // создаем вспомогательную ось iAxis.Create(); } } // интерфейс операции Массив по концентрической сетке ksEntity iCircularCopy = iPart.NewEntity((short)Obj3dType.o3d_circularCopy) as ksEntity; if (iCircularCopy != null) { // интерфейс параметров операции копирования по массиву ksCircularCopyDefinition iCirCopyDef = iCircularCopy.GetDefinition() as ksCircularCopyDefinition; if (iCirCopyDef != null) { // коллекция операций для копирования ksEntityCollection collect1 = iCirCopyDef.GetOperationArray() as ksEntityCollection; // операция всего лишь одна – вырезание зуба collect1.Add(iCutLoftEntity); // количество копий, равно количеству зубьев iCirCopyDef.count2 = teethCount; iCirCopyDef.factor2 = true; // ось копирования iCirCopyDef.SetAxis(iAxis); // создаем концентрический массив – колесо готово! iCircularCopy.Create(); } } } }
// Создать слой private void DrawLayer() { int n = 0; if (kompas.ksReadInt("Введите номер слоя", 1, 0, 255, ref n) != 1) { return; } // создаем слой, слой становится текущим reference lay = doc.ksLayer(n); doc.ksMtr(20, 15, 0, 1, 1); doc.ksLineSeg(-10, 0, 10, 0, 1); doc.ksLineSeg(10, 0, 10, 20, 1); doc.ksLineSeg(10, 20, -10, 20, 1); doc.ksLineSeg(-10, 20, -10, 0, 1); doc.ksDeleteMtr(); // подсветить слой doc.ksLightObj(lay, 1); // получить номер слоя по указателю и указатель по номеру int n1 = doc.ksGetLayerNumber(lay); reference l = doc.ksGetLayerReference(n1); string buf = string.Format("n = {0:.##}, n1 = {1:.##}, layer = {2:.##}, l = {3:.##}", n, n1, lay, l); kompas.ksMessage(buf); // установить параметры слоя и считать их обратно ksLayerParam par = (ksLayerParam)kompas.GetParamStruct((short)StructType2DEnum.ko_LayerParam); ksLayerParam par1 = (ksLayerParam)kompas.GetParamStruct((short)StructType2DEnum.ko_LayerParam); if ((par != null) & (par1 != null)) { par.Init(); par1.Init(); par.color = (Color.FromArgb(0, 0, 255, 0).ToArgb()); par.state = (ldefin2d.stACTIVE); par.name = ("зеленый"); doc.ksLayer(0); if (doc.ksSetObjParam(l, par, ldefin2d.ALLPARAM) != 1) { kompas.ksMessageBoxResult(); } else { doc.ksGetObjParam(l, par1, ldefin2d.ALLPARAM); buf = string.Format("col = {0:.##}, col1 = {1:.##}, name = {2}, name1 = {3}", par.color, par1.color, par.name, par1.name); kompas.ksMessage(buf); } // снять выделение слоя doc.ksLightObj(lay, 0); // изменить состояние слоя ksLtVariant var = (ksLtVariant)kompas.GetParamStruct((short)StructType2DEnum.ko_LtVariant); if (var != null) { var.Init(); var.intVal = ldefin2d.stACTIVE; doc.ksSetObjParam(l, var, ldefin2d.VIEW_LAYER_STATE); } } }