/// <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); } }
/// <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); }
/// <summary> /// Нарисовать четырехугольник с непрямыми углами с круглым отверстием /// </summary> internal void DrawQuadrangleWithRoundHole() { if (kompas != null) { kompas.Visible = true; ksDocument3D iDocument3D = (ksDocument3D)kompas.Document3D(); if (iDocument3D.Create(false /*видимый*/, true /*деталь*/)) { iDocument3D.fileName = "With Round 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.ksCircle(-15, 0, 4, 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(); // создадим операцию } } } } } } } } }
/// <summary> /// Рисует линию. /// </summary> /// <param name="sketchEdit">Эскиз для рисования.</param> /// <param name="pointsList">Координаты линии.</param> private void DrawLine(ksDocument2D sketchEdit, List <PointF> pointsList) { for (int i = 0; i < pointsList.Count - 1; i++) { sketchEdit.ksLineSeg(pointsList[i].X, pointsList[i].Y, pointsList[i + 1].X, pointsList[i + 1].Y, 1); } int index = pointsList.Count - 1; sketchEdit.ksLineSeg(pointsList[index].X, pointsList[index].Y, pointsList[0].X, pointsList[0].Y, 1); }
/// <summary> /// Нарисовать эскиз двух зеркальных блоков для фоторамки. /// </summary> /// <param name="photoFrame">Шаблон фоторамки.</param> /// <param name="draw">Документ эскиза.</param> /// <param name="offsetX">Смещение по OX для начальной точки.</param> /// <param name="offsetY">Смещение по OY для начальной точки.</param> /// <param name="dx">Расстояние между начальными точками по OX /// отрисовки брусков.</param> private void DrawSketchBlock(IPhotoFrame photoFrame, ksDocument2D draw, double offsetX, double offsetY, double dx) { var h1 = photoFrame.OuterHeight; var h2 = photoFrame.InnerHeight; var h = photoFrame.Interval; /* Блок для фоторамки представляет собой трапецию, * либо в частном случае квадрат. * B * |\h * | \ C * h1 | | h2 * | | * | / D * |/h * A */ //координаты для точки А var Ax = _startX - offsetX; var Ay = _startY - offsetY; //координаты для точки B var Bx = Ax; var By = Ay + h1; // var h3 = (h1 - h2) / 2; //координаты для точки D var Dx = Ax + h; var Dy = Ay + h3; //координаты для точки C var Cx = Dx; var Cy = Dy + h2; var groupRightId = draw.ksNewGroup(0); draw.ksLineSeg(Ax, Ay, Bx, By, 1); draw.ksLineSeg(Bx, By, Cx, Cy, 1); draw.ksLineSeg(Cx, Cy, Dx, Dy, 1); draw.ksLineSeg(Dx, Dy, Ax, Ay, 1); draw.ksEndObj(); //координаты для зеркального отображения блока Ax += dx / 2; Bx = Ax; //симметричное отображение трапеции (блока) draw.ksSymmetryObj(groupRightId, Ax, Ay, Bx, By, "1"); }
/// <summary> /// Нарисовать линии на чертеже шайбы /// </summary> /// <param name="shimSettings">Параметры шайбы</param> /// <param name="shimEdit">Чертеж</param> private static void DrawShimLines(ShimSettings shimSettings, ksDocument2D shimEdit) { shimEdit.ksLineSeg( shimSettings.InnerRadius + shimSettings.InnerFillet, shimSettings.Height / 2, shimSettings.OuterRadius - shimSettings.OuterFillet, shimSettings.Height / 2, 1); shimEdit.ksLineSeg( shimSettings.InnerRadius + shimSettings.InnerFillet, -shimSettings.Height / 2, shimSettings.OuterRadius - shimSettings.OuterFillet, -shimSettings.Height / 2, 1); }
/// <summary> /// Метод, рисующий эскиз верхней окружности стакана. /// </summary> /// <param name="radius">Радиус верхней окружности.</param> /// <param name="wallwidth">Толщина стенки.</param> /// <param name="height">Высота.</param> private void DrawEdge(double radius, double wallwidth, double height) { _sketchEdit = (ksDocument2D)_sketchDefinition.BeginEdit(); _sketchEdit.ksLineSeg (radius, -height, radius - wallwidth, -height, 1); _sketchEdit.ksLineSeg (radius - wallwidth, -height, radius - wallwidth, throat * height, 1); _sketchEdit.ksLineSeg (radius - wallwidth, throat * height, radius, throat * height, 1); _sketchEdit.ksLineSeg (radius, throat * height, radius, -height, 1); _sketchEdit.ksLineSeg (origin, origin, origin, -50 * 2, 3); _sketchDefinition.EndEdit(); RotateSketch(); }
/// <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); } }
///<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(); } } } } } }
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; } } }
/// <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="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); }
protected static void DrawLine(ksDocument2D sketchEdit, params Point[] points) { if (points.Length < 2) { throw new ArgumentException("At least two points required"); } for (var i = 1; i < points.Length; i++) { var p1 = points[i - 1]; var p2 = points[i]; sketchEdit.ksLineSeg(p1.Coordinate1, p1.Coordinate2, p2.Coordinate1, p2.Coordinate2, 1); } }
/// <summary> /// Рисование в компасе квадрата. /// axisline = номер линии которую нужно нарисовать осевой /// </summary> /// <param name="x">Массив x координат точек</param> /// <param name="y">Массив y координат точек</param> /// <param name="doc2d">Чертеж</param> /// <param name="axisline">Номер осевой линии</param> public static void DrawRect(double[] x, double[] y, ksDocument2D doc2d, int axisline = -1) { int lineStyle = 1; for (int k = 0; k < 4; ++k) { if (k == axisline) { // 3 = осевая линия lineStyle = 3; } doc2d.ksLineSeg(x[k], y[k], x[k + 1], y[k + 1], lineStyle); lineStyle = 1; } }
/// <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; } }
/// <summary> /// Метод, рисующий равносторонний многоугольник с заданным расстоянием от центра. /// </summary> /// <param name="radius">Радиус круга.</param> /// <param name="count">Количество углов.</param> private void DrawCircle(double radius, int count) { _sketchEdit = (ksDocument2D)_sketchDefinition.BeginEdit(); var x1 = radius; var y1 = 0.0; var x2 = 0.0; var y2 = 0.0; for (int i = 1; i <= count; i++) { var koef = 360.0 / (double)count * (double)i; x2 = Math.Cos((koef / 180.0) * Math.PI) * radius; y2 = Math.Sin((koef / 180.0) * Math.PI) * radius; _sketchEdit.ksLineSeg (x1, y1, x2, y2, 1); x1 = x2; y1 = y2; } _sketchDefinition.EndEdit(); }
/// <summary> /// Эскиз стакана. /// </summary> /// <param name="wallWidth">Толщина стенки.</param> /// <param name="highDiameter">Диаметр верхней окружности.</param> /// <param name="height">Высота.</param> /// <param name="bottomThicknes">Толщина дна.</param> /// <param name="lowDiameter">Диаметр нижней окружности.</param> /// <return>Возвращает выдавленный эскиз.</return> private void GlassfulSketch(double wallWidth, double highDiameter, double height, double bottomThicknes, double lowDiameter) { CreateSketch((short)Obj3dType.o3d_planeXOY); _sketchEdit = (ksDocument2D)_sketchDefinition.BeginEdit(); _sketchEdit.ksLineSeg (origin, origin, origin + lowDiameter / 2, origin, 1); _sketchEdit.ksLineSeg (origin + lowDiameter / 2, origin, highDiameter / 2, height, 1); _sketchEdit.ksLineSeg (highDiameter / 2, height, highDiameter / 2 - wallWidth, height, 1); _sketchEdit.ksLineSeg (highDiameter / 2 - wallWidth, height, lowDiameter / 2 - wallWidth, bottomThicknes, 1); _sketchEdit.ksLineSeg (lowDiameter / 2 - wallWidth, bottomThicknes, origin, bottomThicknes, 1); _sketchEdit.ksLineSeg (origin, bottomThicknes, origin, origin, 1); _sketchEdit.ksLineSeg (origin, origin, origin, height * 2, 3); _sketchDefinition.EndEdit(); RotateSketch(); }
/// <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(); }
/// <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(); } } } }
/// <summary> /// Метод рисует эскиз в виде части сектора /// </summary> /// <param name="internalArcOfDipRadius">Внутренний диаметр выреза</param> /// <param name="externalArcOfDipRadius">Внещний диаметр выреза</param> /// <param name="m">Модуль жесткости</param> /// <param name="z">Количество зубъев</param> /// <param name="k">Ширина ребер жескости</param> /// <param name="angle54">Угол 54 градусов</param> /// <returns></returns> public bool DrawDipSketch(double internalArcOfDipRadius, double externalArcOfDipRadius, double m, double z, double k, double angle54) { double a0 = _app.Mat.ksAngle(0, 0, 1, 0); double a180 = _app.Mat.ksAngle(0, 0, -1, 0); double x; double y; double l = k / 2; // диаметр большей дуги углубления // диаметр меньшей дуги углубления try { SketchCreator sketchCreator = new SketchCreator(_app); ksSketchDefinition def = sketchCreator.MakeSketch(); ksDocument2D doc = (ksDocument2D)def.BeginEdit(); short mathPoint = (short)StructType2DEnum.ko_MathPointParam; ksMathPointParam p1 = (ksMathPointParam)_app.Kompas.GetParamStruct(mathPoint); // задается проекция толщины ребра жесткости на ось Х p1.x = -l / Math.Sin(angle54); p1.y = 0; // координаты точки на ребре жесткости ksMathPointParam p2 = (ksMathPointParam)_app.Kompas.GetParamStruct(mathPoint); p2.x = (Math.Cos(angle54) * m * z) + p1.x; p2.y = Math.Sin(angle54) * m * z; Point point1 = new Point(p1.x, p1.y); Point point2 = new Point(p2.x, p2.y); // координаты точки пересечения большей дуги углубления // и прямой проходящей вдоль ребра жесткости ksMathPointParam pA = (ksMathPointParam)_app.Kompas.GetParamStruct(mathPoint); PointIntersect pointIntersect = new PointIntersect(_app); pointIntersect.LinArc(point1, point2, internalArcOfDipRadius, a0, a180, pA); // координаты точки пересечения меньшей дуги углубления // и прямой проходящей вдоль ребра жесткости ksMathPointParam pB = (ksMathPointParam)_app.Kompas.GetParamStruct(mathPoint); pointIntersect.LinArc(point1, point2, externalArcOfDipRadius, a0, a180, pB); double lineSegY = m * (z + 3); doc.ksPoint(pB.x, pB.y, 1); ksMathPointParam pC = (ksMathPointParam)_app.Kompas.GetParamStruct(mathPoint); _app.Mat.ksSymmetry(pA.x, pA.y, 0, 0, 0, lineSegY, out x, out y); pC.x = x; pC.y = y; ksMathPointParam pD = (ksMathPointParam)_app.Kompas.GetParamStruct(mathPoint); _app.Mat.ksSymmetry(pB.x, pB.y, 0, 0, 0, lineSegY, out x, out y); pD.x = x; pD.y = y; doc.ksArcByPoint(0, 0, internalArcOfDipRadius, pA.x, pA.y, pC.x, pC.y, 1, 1); doc.ksArcByPoint(0, 0, externalArcOfDipRadius, pB.x, pB.y, pD.x, pD.y, 1, 1); doc.ksLineSeg(pA.x, pA.y, pB.x, pB.y, 1); doc.ksLineSeg(pC.x, pC.y, pD.x, pD.y, 1); def.EndEdit(); return(true); } catch { return(false); } }
/// <summary> /// Метод рисует эскиз для выреза зубьев согласно расчетам в работе 1 по ссылке /// http://edu.ascon.ru/source/files/methods/method_osnovy_autoconstruct.pdf /// </summary> public bool DrawGearTeeth(double m, double baseCircle, double mainCircle, double projectionCircle, double troughsCircle) { try { SketchCreator sketchCreator = new SketchCreator(_app); ksSketchDefinition def = sketchCreator.MakeSketch(); ksDocument2D doc = (ksDocument2D)def.BeginEdit(); // углы double[] angle = new double[4] { 0, 90, 180, 270 }; _pointArraySize = 1; Array.Resize <Point>(ref _pointArray, _pointArraySize); _pointArray[0] = new Point(0, 0); // точка 1 double[] parameters = new double[] { 0, projectionCircle, baseCircle / 2, angle[0], angle[2] }; GetPointIntersect(_linArc, parameters); // точка 2 parameters = new double[] { _mathPointArray[0].x, _mathPointArray[0].y, baseCircle / 2, angle[0], angle[2], 0.5 * Math.PI * m, angle[1], angle[3] }; GetPointIntersect(_arcArc, parameters); // точка 3 parameters = new double[] { _mathPointArray[_mathPointArraySize - 1].x, _mathPointArray[_mathPointArraySize - 1].y, mainCircle / 2, angle[0], angle[2], baseCircle / 6, angle[3], angle[1] }; GetPointIntersect(_arcArc, parameters); // точка С parameters = new double[] { _mathPointArray[_mathPointArraySize - 1].x, _mathPointArray[_mathPointArraySize - 1].y, projectionCircle / 2, angle[0], angle[2], baseCircle / 6, angle[1], angle[3] }; GetPointIntersect(_arcArc, parameters); // точка 4 parameters = new double[] { _mathPointArray[_mathPointArraySize - 2].x, _mathPointArray[_mathPointArraySize - 2].y, mainCircle / 2, angle[0], angle[2], baseCircle / 6, angle[1], angle[3] }; GetPointIntersect(_arcArc, parameters); // точка F parameters = new double[] { _mathPointArray[_mathPointArraySize - 1].x, _mathPointArray[_mathPointArraySize - 1].y, troughsCircle / 2, angle[0], angle[2] }; GetPointIntersect(_linArc, parameters); // точка 5 parameters = new double[] { _mathPointArray[0].x, _mathPointArray[0].y, baseCircle / 2, angle[0], angle[2], 0.75 * Math.PI * m, angle[1], angle[3] }; GetPointIntersect(_arcArc, parameters); // точка А GetSymmetry(3); // точка D GetSymmetry(5); // точка 3' GetSymmetry(2); // точка 4' GetSymmetry(4); _mathPointArraySize++; Array.Resize <ksMathPointParam>(ref _mathPointArray, _mathPointArraySize); short mathPoint = (short)StructType2DEnum.ko_MathPointParam; _mathPointArray[_mathPointArraySize - 1] = (ksMathPointParam)_app.Kompas.GetParamStruct(mathPoint); _mathPointArray[_mathPointArraySize - 1].x = 0; _mathPointArray[_mathPointArraySize - 1].y = 0; doc.ksArcByPoint(_mathPointArray[2].x, _mathPointArray[2].y, baseCircle / 6, _mathPointArray[3].x, _mathPointArray[3].y, _mathPointArray[4].x, _mathPointArray[4].y, 1, 1); doc.ksArcByPoint(_mathPointArray[9].x, _mathPointArray[9].y, baseCircle / 6, _mathPointArray[10].x, _mathPointArray[10].y, _mathPointArray[7].x, _mathPointArray[7].y, 1, 1); doc.ksArcByPoint(_mathPointArray[11].x, _mathPointArray[11].y, troughsCircle / 2, _mathPointArray[5].x, _mathPointArray[5].y, _mathPointArray[8].x, _mathPointArray[8].y, 1, 1); doc.ksArcByPoint(_mathPointArray[11].x, _mathPointArray[11].y, projectionCircle / 2, _mathPointArray[3].x, _mathPointArray[3].y, _mathPointArray[7].x, _mathPointArray[7].y, 1, 1); doc.ksLineSeg(_mathPointArray[4].x, _mathPointArray[4].y, _mathPointArray[5].x, _mathPointArray[5].y, 1); doc.ksLineSeg(_mathPointArray[10].x, _mathPointArray[10].y, _mathPointArray[8].x, _mathPointArray[8].y, 1); def.EndEdit(); return(true); } catch { return(false); } }
/// <summary> /// Функция для рисовки разделителей /// </summary> /// <param name="sketchEdit">Объект рисования эскиза</param> /// <param name="x">Координата х </param> /// <param name="y">Координата у </param> /// <param name="a">Сторона прямоугольника 1</param> /// <param name="b">Сторона прямоугольника 2</param> private void DrawSeptum(ksDocument2D sketchEdit, double x, double y, double a, double b, int type) { if (type == 0) { sketchEdit.ksLineSeg(x, y, x + b, y, 1); sketchEdit.ksLineSeg(x + b, y, x + b, y - a, 1); sketchEdit.ksLineSeg(x + b, y - a, x, y - a, 1); sketchEdit.ksLineSeg(x, y - a, x, y, 1); } if (type == 1) { sketchEdit.ksLineSeg(x, y, x, y - a, 1); sketchEdit.ksLineSeg(x, y - a, x - b, y - a, 1); sketchEdit.ksLineSeg(x - b, y - a, x - b, y, 1); sketchEdit.ksLineSeg(x - b, y, x, y, 1); } if (type == 2) { sketchEdit.ksLineSeg(x, y, x, y + a, 1); sketchEdit.ksLineSeg(x, y + a, x + b, y + a, 1); sketchEdit.ksLineSeg(x + b, y + a, x + b, y, 1); sketchEdit.ksLineSeg(x + b, y, x, y, 1); } }
// Создать вид private void DrawView() { ksViewParam par = (ksViewParam)kompas.GetParamStruct((short)StructType2DEnum.ko_ViewParam); if (par != null) { int number = 5; par.Init(); par.x = 10; par.y = 20; par.scale_ = 0.5; par.angle = 45; par.color = Color.FromArgb(10, 20, 10).ToArgb(); par.state = ldefin2d.stACTIVE; par.name = "User view"; reference v = doc.ksCreateSheetView(par, ref number); number = doc.ksGetViewNumber(v); string buf = string.Format("Создали вид: ref = {0}, number = {1}", v, number); kompas.ksMessage(buf); reference gr = doc.ksNewGroup(0); doc.ksLineSeg(20, 10, 20, 30, 1); doc.ksLineSeg(20, 30, 40, 30, 1); doc.ksLineSeg(40, 30, 40, 10, 1); doc.ksLineSeg(40, 10, 20, 10, 1); int res = doc.ksEndGroup(); doc.ksAddObjGroup(gr, v); kompas.ksMessage("Добавили вид в группу"); kompas.ksMessageBoxResult(); reference p = doc.ksLineSeg(10, 10, 30, 30, 0); doc.ksAddObjGroup(gr, p); kompas.ksMessage("Добавили элемент в группу"); kompas.ksMessageBoxResult(); doc.ksRotateObj(gr, 0, 0, -45); // Взять параметры вида par.Init(); doc.ksGetObjParam(v, par, ldefin2d.ALLPARAM); buf = string.Format("x = {0:.##}, y = {1:.##}, angl = {2:.##}, name = {3}, st = {4}", par.x, par.y, par.angle, par.name, par.state); kompas.ksMessage(buf); // Сделаем текущим системный вид (номер 0) doc.ksOpenView(0); // Состояние вида: только чтение ksLtVariant vart = (ksLtVariant)kompas.GetParamStruct((short)StructType2DEnum.ko_LtVariant); if (vart != null) { vart.Init(); vart.intVal = ldefin2d.stREADONLY; doc.ksSetObjParam(v, vart, ldefin2d.VIEW_LAYER_STATE); } } }
// Работа с документом private void WorkDocument() { 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 = "User";*/ docPar.regime = 0; docPar.type = (short)DocType.lt_DocFragment; /*ksSheetPar shPar = (ksSheetPar)docPar.GetLayoutParam(); * if (shPar != null) * { * shPar.shtType = 1; * shPar.layoutName = string.Empty; * ksStandartSheet stPar = (ksStandartSheet)shPar.GetSheetParam(); * }*/ // Создали документ: лист, формат А4, горизонтально расположенный // и с системным штампом 1 doc.ksCreateDocument(docPar); //int number = 0; ksViewParam par = (ksViewParam)kompas.GetParamStruct((short)StructType2DEnum.ko_ViewParam); ksRectangleParam par1 = (ksRectangleParam)kompas.GetParamStruct((short)StructType2DEnum.ko_RectangleParam); if (par != null) { /*number = 2; * par.Init(); * par.x = 0; * par.y = 0; * //par.scale_ = 0.5; * //par.angle = 45; * par.color = Color.FromArgb(10, 20, 10).ToArgb(); * par.state = ldefin2d.stACTIVE; * //par.name = "User view"; * // У документа создадим вид с номером 2, масштабом 0.5, под углом 45 гр * doc.ksCreateSheetView(par, ref number); * * // Создадим слой с номером 5 * //doc.ksLayer(5);*/ par1.x = 0; par1.y = 0; par1.height = 100; par1.width = 200; doc.ksRectangle(par1); doc.ksLineSeg(20, 10, 40, 10, 1); doc.ksLineSeg(40, 10, 40, 30, 1); doc.ksLineSeg(40, 30, 20, 30, 1); doc.ksLineSeg(20, 30, 20, 10, 1); /*kompas.ksMessage("Нарисовали"); * * Получить параметры документа * doc.ksGetObjParam(doc.reference, docPar1, ldefin2d.ALLPARAM); * ksSheetPar shPar1 = (ksSheetPar)docPar1.GetLayoutParam(); * if (shPar1 != null) * { * ksStandartSheet stPar1 = (ksStandartSheet)shPar.GetSheetParam(); * if (stPar1 != null) * { * short direct = 0; * if (stPar1.direct) * direct = 1; * string buf = string.Format("Type = {0}, f = {1}, m = {2}, d = {3}", docPar1.type, stPar1.format, stPar1.multiply, direct); * kompas.ksMessage(buf); * } * } * * kompas.ksMessage(docPar1.fileName); * kompas.ksMessage(docPar1.comment); * kompas.ksMessage(docPar1.author); * * // Cохраним документ * doc.ksSaveDocument(string.Empty); * //Закрыть документ * doc.ksCloseDocument();*/ } } }
///<summary> ///Создание подструнника ///</summary> private void CreateSnare(bool ExistSnare, int stringSnare, double kadloRadius, double thicknessBottomDrumhead) { // Проверка на существование компонента сборки if (_part != null) { // создадим новый эскиз var SnareSketch = (ksEntity)_part.NewEntity((short)Obj3dType.o3d_sketch); if (SnareSketch != null) { // Получение интерфейса свойств эскиза var definitionSnare = (ksSketchDefinition)SnareSketch.GetDefinition(); if (definitionSnare != null) { // Получение интерфейса базовой плоскости XOY var basePlane = (ksEntity)_part.GetDefaultEntity((short)Obj3dType.o3d_planeXOY); ksEntity entityOffsetPlane = _part.NewEntity((short)Obj3dType.o3d_planeOffset); ksPlaneOffsetDefinition offsetDef = (ksPlaneOffsetDefinition)entityOffsetPlane.GetDefinition(); offsetDef.offset = thicknessBottomDrumhead; offsetDef.direction = false; offsetDef.SetPlane(basePlane); // создаем смещенную плоскость entityOffsetPlane.Create(); ksEntity snare = (ksEntity)_part.NewEntity((short)Obj3dType.o3d_sketch); var defSnare = (ksSketchDefinition)snare.GetDefinition(); defSnare.SetPlane(offsetDef); snare.Create(); ksDocument2D SnareEdit = (ksDocument2D)defSnare.BeginEdit(); // Рисуем основание подструнника SnareEdit.ksLineSeg(-15, kadloRadius - 5, 15, kadloRadius - 5, 1); SnareEdit.ksLineSeg(15, kadloRadius - 5, 15, kadloRadius - 10, 1); SnareEdit.ksLineSeg(15, kadloRadius - 10, -15, kadloRadius - 10, 1); SnareEdit.ksLineSeg(-15, kadloRadius - 10, -15, kadloRadius - 5, 1); SnareEdit.ksLineSeg(-15, -kadloRadius + 5, 15, -kadloRadius + 5, 1); SnareEdit.ksLineSeg(15, -kadloRadius + 5, 15, -kadloRadius + 10, 1); SnareEdit.ksLineSeg(15, -kadloRadius + 10, -15, -kadloRadius + 10, 1); SnareEdit.ksLineSeg(-15, -kadloRadius + 10, -15, -kadloRadius + 5, 1); defSnare.EndEdit(); // Выдавливание подструнника ksEntity entityBossExtr3 = (ksEntity)_part.NewEntity((short)Obj3dType.o3d_bossExtrusion); if (entityBossExtr3 != null) { ksBossExtrusionDefinition bossExtrDef3 = (ksBossExtrusionDefinition)entityBossExtr3.GetDefinition(); if (bossExtrDef3 != null) { // интерфейс структуры параметров выдавливания ksExtrusionParam extrProp3 = (ksExtrusionParam)bossExtrDef3.ExtrusionParam(); if (extrProp3 != null) { // эскиз операции выдавливания bossExtrDef3.SetSketch(snare); // направление выдавливания (обратное) extrProp3.direction = (short)Direction_Type.dtReverse; // тип выдавливания (строго на глубину) extrProp3.typeReverse = (short)End_Type.etBlind; // глубина выдавливания extrProp3.depthReverse = 4; // создадим операцию entityBossExtr3.Create(); } } } // Создание струн подструнника var StringSketch = (ksEntity)_part.NewEntity((short)Obj3dType.o3d_sketch); if (StringSketch != null) { // Получение интерфейса свойств эскиза var definitionString = (ksSketchDefinition)StringSketch.GetDefinition(); if (definitionString != null) { // Получение интерфейса базовой плоскости XOZ var stringPlane = (ksEntity)_part.GetDefaultEntity((short)Obj3dType.o3d_planeXOZ); ksEntity stSnare = (ksEntity)_part.NewEntity((short)Obj3dType.o3d_sketch); var defStringSnare = (ksSketchDefinition)stSnare.GetDefinition(); defStringSnare.SetPlane(stringPlane); stSnare.Create(); ksDocument2D stringSnareEdit = (ksDocument2D)defStringSnare.BeginEdit(); // В ряд рисуются круги (сечение струн) int k = 1; for (double x = -11; x < 12; x += 3) { stringSnareEdit.ksCircle(x, thicknessBottomDrumhead + 2, 1, 1); if (k < stringSnare) { k++; } else { break; } } defStringSnare.EndEdit(); // Выдавливание струн подструнника ksEntity entityBossExtr4 = (ksEntity)_part.NewEntity((short)Obj3dType.o3d_bossExtrusion); if (entityBossExtr4 != null) { ksBossExtrusionDefinition bossExtrDef3 = (ksBossExtrusionDefinition)entityBossExtr4.GetDefinition(); if (bossExtrDef3 != null) { // интерфейс структуры параметров выдавливания ksExtrusionParam extrProp3 = (ksExtrusionParam)bossExtrDef3.ExtrusionParam(); if (extrProp3 != null) { // эскиз операции выдавливания bossExtrDef3.SetSketch(stSnare); // направление выдавливания (обе стороны) extrProp3.direction = (short)Direction_Type.dtBoth; // тип выдавливания (до ближайшей поверхности) extrProp3.typeReverse = (short)End_Type.etUpToNearSurface; extrProp3.typeNormal = (short)End_Type.etUpToNearSurface; // создадим операцию entityBossExtr4.Create(); } } } } } } } } }
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> /// Метод для отрисовки эскиза внутреннего обода в КОМПАС-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 DrawInnerRim(ksDocument2D rimsDoc, double BearingWidth, double InnerRimDiam, double OuterRimDiam, double RimsThickness, double RollingElementDiam, RollingElementForm rollingElementForm, double BearingAxis, double GutterDepth, double GutterWidth) { //ось вращения rimsDoc.ksLineSeg(-BearingWidth / 2, 0, BearingWidth / 2, 0, 3); //основание rimsDoc.ksLineSeg(-BearingWidth / 2, InnerRimDiam / 2, BearingWidth / 2, InnerRimDiam / 2, 1); //левая грань rimsDoc.ksLineSeg(-BearingWidth / 2, InnerRimDiam / 2, -BearingWidth / 2, RimsThickness + InnerRimDiam / 2, 1); //правая грань rimsDoc.ksLineSeg(BearingWidth / 2, InnerRimDiam / 2, BearingWidth / 2, RimsThickness + InnerRimDiam / 2, 1); if (rollingElementForm is RollingElementForm.Ball) { //левая верхняя rimsDoc.ksLineSeg(-BearingWidth / 2, RimsThickness + InnerRimDiam / 2, -GutterWidth, RimsThickness + InnerRimDiam / 2, 1); //правая верхняя rimsDoc.ksLineSeg(BearingWidth / 2, RimsThickness + InnerRimDiam / 2, GutterWidth, RimsThickness + InnerRimDiam / 2, 1); // желоб rimsDoc.ksArcBy3Points(-GutterWidth, RimsThickness + InnerRimDiam / 2, 0, RimsThickness + InnerRimDiam / 2 - GutterDepth, GutterWidth, RimsThickness + InnerRimDiam / 2, 1); } else { rimsDoc.ksLineSeg(-BearingWidth / 2, RimsThickness + InnerRimDiam / 2, -GutterWidth, RimsThickness + InnerRimDiam / 2, 1); rimsDoc.ksLineSeg(BearingWidth / 2, RimsThickness + InnerRimDiam / 2, GutterWidth, RimsThickness + InnerRimDiam / 2, 1); rimsDoc.ksLineSeg(-GutterWidth, RimsThickness + InnerRimDiam / 2, -GutterWidth, RimsThickness + InnerRimDiam / 2 - GutterDepth, 1); rimsDoc.ksLineSeg(GutterWidth, RimsThickness + InnerRimDiam / 2, GutterWidth, RimsThickness + InnerRimDiam / 2 - GutterDepth, 1); rimsDoc.ksLineSeg(-GutterWidth, RimsThickness + InnerRimDiam / 2 - GutterDepth, GutterWidth, RimsThickness + InnerRimDiam / 2 - GutterDepth, 1); } }
/// <summary> /// вырез в нижней части цилиндра /// </summary> /// <param name="param"></param> public void FlatPart(Parameters param) { double Radios1 = param.Radios1; double Cut1 = param.Cut1; double Cut2 = param.Cut2; var doc = (ksDocument3D)_kompas.ActiveDocument3D(); ksPart part3 = (ksPart)doc.GetPart((short)Part_Type.pTop_Part); // новый компонент if (part3 != null) { ksEntity entitySketch3 = (ksEntity)part3.NewEntity((short)Obj3dType.o3d_sketch); if (entitySketch3 != null) { ksSketchDefinition sketchDef3 = (ksSketchDefinition)entitySketch3.GetDefinition(); if (sketchDef3 != null) { ksEntity basePlane = (ksEntity)part3.GetDefaultEntity((short)Obj3dType.o3d_planeXOY); sketchDef3.SetPlane(basePlane); // установим плоскость sketchDef3.angle = 0; entitySketch3.Create(); // создадим эскиз ksDocument2D sketchEdit3 = (ksDocument2D)sketchDef3.BeginEdit(); sketchEdit3.ksLineSeg(Radios1, Radios1, -Radios1, Radios1, 1); sketchEdit3.ksLineSeg(Radios1, Cut1, -Radios1, Cut1, 1); sketchEdit3.ksLineSeg(Radios1, Cut1, Radios1, Radios1, 1); sketchEdit3.ksLineSeg(-Radios1, Cut1, -Radios1, Radios1, 1); sketchDef3.EndEdit(); // завершение редактирования эскиза ksEntity entityCutExtr = (ksEntity)part3.NewEntity((short)Obj3dType.o3d_cutExtrusion); if (entityCutExtr != null) { ksCutExtrusionDefinition cutExtrDef = (ksCutExtrusionDefinition)entityCutExtr.GetDefinition(); if (cutExtrDef != null) { cutExtrDef.SetSketch(entitySketch3); // установим эскиз операции cutExtrDef.directionType = (short)Direction_Type.dtReverse; //прямое направление cutExtrDef.SetSideParam(false, (short)End_Type.etBlind, Cut2, 0, true); cutExtrDef.SetThinParam(false, 0, 0, 0); } entityCutExtr.Create(); // создадим операцию вырезание выдавливанием } } } } ksPart part4 = (ksPart)doc.GetPart((short)Part_Type.pTop_Part); // новый компонент if (part4 != null) { ksEntity entitySketch4 = (ksEntity)part4.NewEntity((short)Obj3dType.o3d_sketch); if (entitySketch4 != null) { ksSketchDefinition sketchDef4 = (ksSketchDefinition)entitySketch4.GetDefinition(); if (sketchDef4 != null) { ksEntity basePlane = (ksEntity)part4.GetDefaultEntity((short)Obj3dType.o3d_planeXOY); sketchDef4.SetPlane(basePlane); // установим плоскость sketchDef4.angle = 0; entitySketch4.Create(); // создадим эскиз ksDocument2D sketchEdit4 = (ksDocument2D)sketchDef4.BeginEdit(); // введем новый эскиз - квадрат sketchEdit4.ksLineSeg(-Radios1, -Radios1, Radios1, -Radios1, 1); sketchEdit4.ksLineSeg(-Radios1, -Cut1, Radios1, -Cut1, 1); sketchEdit4.ksLineSeg(-Radios1, -Cut1, -Radios1, -Radios1, 1); sketchEdit4.ksLineSeg(Radios1, -Cut1, Radios1, -Radios1, 1); sketchDef4.EndEdit(); // завершение редактирования эскиза ksEntity entityCutExtr2 = (ksEntity)part4.NewEntity((short)Obj3dType.o3d_cutExtrusion); if (entityCutExtr2 != null) { ksCutExtrusionDefinition cutExtrDef2 = (ksCutExtrusionDefinition)entityCutExtr2.GetDefinition(); if (cutExtrDef2 != null) { cutExtrDef2.SetSketch(entitySketch4); // установим эскиз операции cutExtrDef2.directionType = (short)Direction_Type.dtReverse; //прямое направление cutExtrDef2.SetSideParam(false, (short)End_Type.etBlind, Cut2, 0, true); cutExtrDef2.SetThinParam(false, 0, 0, 0); } entityCutExtr2.Create(); // создадим операцию вырезание выдавливанием } } } } }