/// <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="doorParameters"></param> /// <param name="doorPart"></param> /// <param name="planeXoY"></param> private void DoorModification(DoorParameters doorParameters, ksPart doorPart, ksEntity planeXoY) { ksEntity eyePlaneOffset = doorPart.NewEntity((short) Obj3dType.o3d_planeOffset); ksPlaneOffsetDefinition eyeDefinition = eyePlaneOffset.GetDefinition(); eyeDefinition.SetPlane(planeXoY); eyeDefinition.offset = doorParameters.WeigthDoor; eyePlaneOffset.Create(); ksEntity eyeSketch = doorPart.NewEntity((short) Obj3dType.o3d_sketch); ksSketchDefinition eyeSketchDefinition = eyeSketch.GetDefinition(); eyeSketchDefinition.SetPlane(eyePlaneOffset); eyeSketch.Create(); ksDocument2D eye = eyeSketchDefinition.BeginEdit(); eye.ksCircle(doorParameters.YEye / 2.0, 0, 15, 1); eyeSketchDefinition.EndEdit(); Cut(doorPart, eyeSketch, doorParameters.WeigthDoor); AnimalDoor(doorParameters, doorPart, eyePlaneOffset); DoorKnob(doorParameters, doorPart, eyePlaneOffset); }
/// <summary> /// Создание двери /// </summary> /// <param name="doorParameters"></param> public void BuildDoor(DoorParameters doorParameters) { ConnectToKompas(); ksDocument3D doc = Kompas3D.Document3D(); doc.Create(); ksPart doorPart = doc.GetPart((short) Part_Type.pTop_Part); ksEntity planeXoY = doorPart.GetDefaultEntity((short) Obj3dType.o3d_planeXOY); ksEntity sketch = doorPart.NewEntity((short) Obj3dType.o3d_sketch); ksSketchDefinition sd = sketch.GetDefinition(); sd.SetPlane(planeXoY); sketch.Create(); ksDocument2D topSketch = sd.BeginEdit(); DrawRectangle(topSketch, -doorParameters.HeightDoor / 2.0, -doorParameters.WidthDoor / 2.0, doorParameters.HeightDoor, doorParameters.WidthDoor, null); sd.EndEdit(); Extrude(doorPart, sketch, doorParameters.WeigthDoor, (short)Direction_Type.dtNormal); DoorModification(doorParameters, doorPart, planeXoY); }
/// <summary> /// Создание головки /// </summary> /// <param name="diameterHead">Диаметр головки </param> /// <param name="lengthHead">Длина головки </param> private void BuildHead(double diameterHead, double lengthHead) { #region Константы для головки const int part = -1; const int sketch = 5; const int planeXOY = 1; const int baseExtrusion = 24; const int shaded = 3; const int etBlind = 0; #endregion //Эскиз головки _part = _doc3D.GetPart(part); _entity = _part.NewEntity(sketch); ksSketchDefinition SketchDefinition = _entity.GetDefinition(); ksEntity EntityPlane = _part.GetDefaultEntity(planeXOY); SketchDefinition.SetPlane(EntityPlane); _entity.Create(); ksDocument2D Document2D = SketchDefinition.BeginEdit(); Document2D.ksCircle(0, 0, diameterHead / 2, 1); SketchDefinition.EndEdit(); //Выдавливание головки ksEntity EntityExtrusion = _part.NewEntity(baseExtrusion); ksBaseExtrusionDefinition BaseExtrusionDefinition = EntityExtrusion.GetDefinition(); BaseExtrusionDefinition.SetSideParam(true, etBlind, lengthHead, 0, true); BaseExtrusionDefinition.SetSketch(_entity); EntityExtrusion.Create(); _doc3D.drawMode = shaded; _doc3D.shadedWireframe = true; }
/// <summary> /// Построение гладкой части /// </summary> private void CreateConnector(ksPart iPatr) { if (_modelelParameters.Parameter(ParametersName.ConnectionLength).Value != 0) { //Получаем интерфейс базовой плоскости ХОY ksEntity planeZOY = (ksEntity)iPatr.GetDefaultEntity((short)Obj3dType.o3d_planeXOZ); //Создаем новый эскиз ksEntity iSketch = (ksEntity)iPatr.NewEntity((short)Obj3dType.o3d_sketch); //Получаем интерфейс свойств эскиза ksSketchDefinition iDefinitionSketch = (ksSketchDefinition)iSketch.GetDefinition(); //Устанавливаем плоскость эскиза iDefinitionSketch.SetPlane(planeZOY); //Создание эскиза iSketch.Create(); //Создание нового 2Д документа ksDocument2D iDocument2D = (ksDocument2D)iDefinitionSketch.BeginEdit(); //Получение радиуса рукояти var rad = _modelelParameters.Parameter(ParametersName.HandleRadius).Value; //Построение круга iDocument2D.ksCircle(0, 0, rad + 0.1, 1); //Создание эскиза iDefinitionSketch.EndEdit(); //Получение глубины выдавливания var depth = _modelelParameters.Parameter(ParametersName.ConnectionLength).Value / 2; //Выдавливание в обе стороны ExctrusionSketch(iPatr, iSketch, depth, false); ExctrusionSketch(iPatr, iSketch, depth, true); } }
///<summary> /// Создание отверстия в кадле ///</summary> 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(); } } } } } }
/// <summary> /// Основание ручки /// </summary> /// <param name="doorParameters"></param> /// <param name="doorPart"></param> /// <param name="eyePlaneOffset"></param> private void HandleBase(DoorParameters doorParameters, ksPart doorPart, ksEntity eyePlaneOffset) { ksEntity keyPlaneOffset = doorPart.NewEntity((short) Obj3dType.o3d_planeOffset); ksPlaneOffsetDefinition pod5 = keyPlaneOffset.GetDefinition(); pod5.SetPlane(eyePlaneOffset); pod5.offset = 25; keyPlaneOffset.Create(); ksEntity keySketch = doorPart.NewEntity((short) Obj3dType.o3d_sketch); ksSketchDefinition keySketchDefinition = keySketch.GetDefinition(); keySketchDefinition.SetPlane(keyPlaneOffset); keySketch.Create(); ksDocument2D key = keySketchDefinition.BeginEdit(); DrawRectangle(key, doorParameters.YKey / 2.0, doorParameters.WidthDoor - 450, 200, 26, -90); keySketchDefinition.EndEdit(); Extrude(doorPart, keySketch, 5, (short)Direction_Type.dtNormal); }
/// <summary> /// Метод создает эскиз правильного шестиугольника /// </summary> /// <param name="rad">Радиус описанной окружности шестиугольника</param> public bool DrawHexagon(double rad) { try { SketchCreator sketch = new SketchCreator(_app); ksSketchDefinition def = sketch.MakeSketch(); ksDocument2D doc = (ksDocument2D)def.BeginEdit(); short polyParam = (short)StructType2DEnum.ko_RegularPolygonParam; ksRegularPolygonParam param = (ksRegularPolygonParam)_app.Kompas.GetParamStruct(polyParam); param.count = 6; param.xc = 0; param.yc = 0; param.ang = 0; param.radius = rad; param.describe = false; param.style = 1; doc.ksRegularPolygon(param, 0); def.EndEdit(); return(true); } catch { return(false); } }
/// <summary> /// Создание отверстий по концентрической сетке /// </summary> /// <param name="coordinate">Координата расположения</param> /// <param name="radius">Радиус отверстия</param> /// <param name="height">Высота вырезания</param> /// <param name="count">Количество отверстий</param> private void CreateArray(double coordinate, double radius, double height, int count) { var document = (ksDocument3D)_kompas.ActiveDocument3D(); var part = (ksPart)document.GetPart((short)Part_Type.pTop_Part); const int coordinateX = 0; const int coordinateY = 0; const int styleLineBase = 1; const int styleLineAuxiliary = 6; const int stepCopy = 360; ksEntity entitySketch = (ksEntity)part.NewEntity((short) Obj3dType.o3d_sketch); ksSketchDefinition sketchDefinition = (ksSketchDefinition) entitySketch.GetDefinition(); ksEntity basePlane = (ksEntity)part.GetDefaultEntity((short) Obj3dType.o3d_planeXOY); sketchDefinition.SetPlane(basePlane); entitySketch.Create(); ksDocument2D sketchEdit = (ksDocument2D)sketchDefinition. BeginEdit(); sketchEdit.ksCircle(coordinateX, coordinateY, coordinate, styleLineAuxiliary); sketchEdit.ksCircle(coordinate, coordinateY, radius, styleLineBase); sketchDefinition.EndEdit(); ksEntity entityCutExtrusion = (ksEntity)part.NewEntity((short) Obj3dType.o3d_cutExtrusion); ksCutExtrusionDefinition cutExtrusionDefinition = (ksCutExtrusionDefinition)entityCutExtrusion.GetDefinition(); cutExtrusionDefinition.directionType = (short)Direction_Type.dtNormal; cutExtrusionDefinition.SetSideParam(true, (short)End_Type.etBlind, height); cutExtrusionDefinition.SetSketch(entitySketch); entityCutExtrusion.Create(); ksEntity circularCopyEntity = (ksEntity)part.NewEntity((short) Obj3dType.o3d_circularCopy); ksCircularCopyDefinition circularCopyDefinition = (ksCircularCopyDefinition)circularCopyEntity.GetDefinition(); circularCopyDefinition.SetCopyParamAlongDir(count, stepCopy, true, false); ksEntity baseAxisOZ = (ksEntity)part.GetDefaultEntity((short) Obj3dType.o3d_axisOZ); circularCopyDefinition.SetAxis(baseAxisOZ); ksEntityCollection entityCollection = (ksEntityCollection) circularCopyDefinition.GetOperationArray(); entityCollection.Add(cutExtrusionDefinition); circularCopyEntity.Create(); }
/// <summary> /// Собачья заслонка /// </summary> /// <param name="doorParameters"></param> /// <param name="doorPart"></param> /// <param name="eyePlaneOffset"></param> private void AnimalDoor(DoorParameters doorParameters, ksPart doorPart, ksEntity eyePlaneOffset) { var x = -doorParameters.HeightDoor / 2; var y = -doorParameters.WidthDoor / 2 + 350; var animalHoleHeight = 200; if (doorParameters.IsOpen == true) { ksEntity animalDoorHoleSketch = doorPart.NewEntity((short) Obj3dType.o3d_sketch); ksSketchDefinition animalDoorHoleSketchDefinition = animalDoorHoleSketch.GetDefinition(); animalDoorHoleSketchDefinition.SetPlane(eyePlaneOffset); animalDoorHoleSketch.Create(); ksDocument2D animalDoorHole = animalDoorHoleSketchDefinition.BeginEdit(); DrawRectangle(animalDoorHole, x, y, animalHoleHeight, animalHoleHeight, null); animalDoorHoleSketchDefinition.EndEdit(); Cut(doorPart, animalDoorHoleSketch, doorParameters.WeigthDoor); ksEntity animalDoorSketch = doorPart.NewEntity((short) Obj3dType.o3d_sketch); ksSketchDefinition animalDoorSketchDefinition = animalDoorSketch.GetDefinition(); animalDoorSketchDefinition.SetPlane(eyePlaneOffset); animalDoorSketch.Create(); ksDocument2D animalDoor = animalDoorSketchDefinition.BeginEdit(); DrawRectangle(animalDoor, x + animalHoleHeight, y, animalHoleHeight / 10.0, animalHoleHeight, null); animalDoorSketchDefinition.EndEdit(); Extrude(doorPart, animalDoorSketch, animalHoleHeight, (short)Direction_Type.dtNormal); } if (doorParameters.IsOpen == false) { ksEntity animalDoorHoleSketch = doorPart.NewEntity((short) Obj3dType.o3d_sketch); ksSketchDefinition animalDoorHoleSketchDefinition = animalDoorHoleSketch.GetDefinition(); animalDoorHoleSketchDefinition.SetPlane(eyePlaneOffset); animalDoorHoleSketch.Create(); ksDocument2D animalDoorHole = animalDoorHoleSketchDefinition.BeginEdit(); DrawRectangle(animalDoorHole, x, y, animalHoleHeight, animalHoleHeight, null); animalDoorHoleSketchDefinition.EndEdit(); Cut(doorPart, animalDoorHoleSketch, 0.2); } }
/// <summary> /// Генерация эскиза основания стакана. /// </summary> /// <param name="sketchDef"> /// Описание эскиза основания стакана.</param> private void GenerateBlank2d(ksSketchDefinition sketchDef) { var draw = (ksDocument2D)sketchDef.BeginEdit(); draw.ksCircle(_startX, _startY, _glass.DiameterBottom / 2.0, 1); sketchDef.EndEdit(); }
/// <summary> /// построение среднего цилиндра детали /// </summary> /// <param name="param"></param> public void MiddleCircle(Parameters param) { double Radios1 = param.Radios1; double Lenght1 = param.Lenght1; double Angle2 = param.Angle2; var doc = (ksDocument3D)_kompas.ActiveDocument3D(); ksPart part1 = (ksPart)doc.GetPart((short)Part_Type.pTop_Part); // новый компонент if (part1 != null) { ksEntity entityOffsetPlane1 = (ksEntity)part1.NewEntity((short)Obj3dType.o3d_planeOffset); ksEntity entitySketch1 = (ksEntity)part1.NewEntity((short)Obj3dType.o3d_sketch); if (entityOffsetPlane1 != null) { // интерфейс свойств смещенной плоскости ksPlaneOffsetDefinition offsetDef1 = (ksPlaneOffsetDefinition)entityOffsetPlane1.GetDefinition(); if (offsetDef1 != null) { offsetDef1.offset = Lenght1; // расстояние от базовой плоскости ksEntity basePlane1 = (ksEntity)part1.GetDefaultEntity((short)Obj3dType.o3d_planeXOY); basePlane1.name = "Смещенная плоскость"; // название для плоскости offsetDef1.SetPlane(basePlane1); // базовая плоскость entityOffsetPlane1.name = "Смещенная плоскость"; // имя для смещенной плоскости entityOffsetPlane1.hidden = true; entityOffsetPlane1.Create(); // создать смещенную плоскость if (entitySketch1 != null) { ksSketchDefinition sketchDef1 = (ksSketchDefinition)entitySketch1.GetDefinition(); if (sketchDef1 != null) { sketchDef1.SetPlane(entityOffsetPlane1); // установим плоскость XOY базовой для эскиза entitySketch1.Create(); // создадим эскиз // интерфейс редактора эскиза ksDocument2D sketchEdit1 = (ksDocument2D)sketchDef1.BeginEdit(); sketchEdit1.ksCircle(0, 0, Radios1, 1); sketchDef1.EndEdit(); // завершение редактирования эскиза ksEntity entityExtr1 = (ksEntity)part1.NewEntity((short)Obj3dType.o3d_baseExtrusion); if (entityExtr1 != null) { ksBaseExtrusionDefinition extrusionDef1 = (ksBaseExtrusionDefinition)entityExtr1.GetDefinition(); if (extrusionDef1 != null) { extrusionDef1.directionType = (short)Direction_Type.dtNormal; extrusionDef1.SetSideParam(true, (short)End_Type.etBlind, 5, Angle2, true); extrusionDef1.SetSketch(entitySketch1); // эскиз операции выдавливания entityExtr1.Create(); // создать операцию } } } } } } } }
/// <summary> /// Нарисовать четырехугольник с непрямыми углами с отверстием некруглым /// </summary> internal void DrawQuadrangleWithNonCircularHole() { if (kompas != null) { kompas.Visible = true; ksDocument3D iDocument3D = (ksDocument3D)kompas.Document3D(); if (iDocument3D.Create(false /*видимый*/, true /*деталь*/)) { iDocument3D.fileName = "With Non-Circular Hole"; ksPart iPart = (ksPart)iDocument3D.GetPart((short)Part_Type.pTop_Part); // новый компонент (.pNew_Part - был) if (iPart != null) { //// получим интерфейс базовой плоскости XOY ksEntity planeXOY = (ksEntity)iPart.GetDefaultEntity((short)Obj3dType.o3d_planeXOY); // 1-интерфейс на плоскость XOY ksEntity iSketch = (ksEntity)iPart.NewEntity((short)Obj3dType.o3d_sketch); if (iSketch != null) { // интерфейс свойств эскиза ksSketchDefinition iDefinitionSketch = (ksSketchDefinition)iSketch.GetDefinition(); if (iDefinitionSketch != null) { iDefinitionSketch.SetPlane(planeXOY); iSketch.Create(); ksDocument2D iDocument2D = (ksDocument2D)iDefinitionSketch.BeginEdit(); iDocument2D.ksLineSeg(-30.0, -30.0, 30.0, -30.0, 1); iDocument2D.ksLineSeg(30.0, -30.0, 0, 30.0, 1); iDocument2D.ksLineSeg(0, 30.0, -60.0, 30.0, 1); iDocument2D.ksLineSeg(-60.0, 30.0, -30.0, -30.0, 1); iDocument2D.ksLineSeg(-10.0, -18.660254, -28.660254, 13.660254, 1); iDocument2D.ksLineSeg(-20, 18.660254, -1.339746, -13.660254, 1); iDocument2D.ksArcByAngle(-24.330127, 16.160254, 5, 30.0, 210.0, 1, 1); iDocument2D.ksArcByAngle(-5.669873, -16.160254, 5, 210.0, 30.0, 1, 1); iDefinitionSketch.EndEdit(); ksEntity entityExtr = (ksEntity)iPart.NewEntity((short)Obj3dType.o3d_bossExtrusion); if (entityExtr != null) { // интерфейс свойств базовой операции выдавливания ksBossExtrusionDefinition extrusionDef = (ksBossExtrusionDefinition)entityExtr.GetDefinition(); // интерфейс базовой операции выдавливания if (extrusionDef != null) { ksExtrusionParam extrProp = (ksExtrusionParam)extrusionDef.ExtrusionParam(); // интерфейс структуры параметров выдавливания if (extrProp != null) { extrusionDef.SetSketch(iSketch); // эскиз операции выдавливания extrProp.direction = (short)Direction_Type.dtNormal; // направление выдавливания (прямое) extrProp.typeNormal = (short)End_Type.etBlind; // тип выдавливания (строго на глубину) extrProp.depthNormal = 10; // глубина выдавливания entityExtr.Create(); // создадим операцию } } } } } } } } }
///<summary> /// Создание отверситий в нижнем ободе ///</summary> private void CreateHolesInRim(double kadloHeight, double rimCenter, int numberMounting) { if (_part != null) { // интерфейс свойств эскиза ksEntity rimHoles = (ksEntity)_part.NewEntity((short)Obj3dType.o3d_sketch); if (rimHoles != null) { // Получение интерфейса свойств эскиза ksSketchDefinition rimSketch = (ksSketchDefinition)rimHoles.GetDefinition(); if (rimSketch != null) { ksEntity basePlane; // Получение интерфейса базовой плоскости XOY basePlane = (ksEntity)_part.GetDefaultEntity((short)Obj3dType.o3d_planeXOY); // установим плоскость базовой для эскиза rimSketch.SetPlane(basePlane); // создадим эскиз rimHoles.Create(); // интерфейс редактора эскиза ksDocument2D sketchEdit = (ksDocument2D)rimSketch.BeginEdit(); int i = 1; for (double phi = 0; phi < 2 * Math.PI; phi += 2 * Math.PI / numberMounting) { double x = rimCenter * Math.Cos(phi); double y = rimCenter * Math.Sin(phi); //круглое отверстие sketchEdit.ksCircle(x, y, 2.5, 1); if (i < numberMounting) { i++; } else { break; } } // завершение редактирования эскиза rimSketch.EndEdit(); // вырежим выдавливанием ksEntity entityCutExtr = (ksEntity)_part.NewEntity((short)Obj3dType.o3d_cutExtrusion); if (entityCutExtr != null) { ksCutExtrusionDefinition cutExtrDef = (ksCutExtrusionDefinition)entityCutExtr.GetDefinition(); if (cutExtrDef != null) { cutExtrDef.cut = true; cutExtrDef.directionType = (short)Direction_Type.dtNormal; cutExtrDef.SetSideParam(true, (short)End_Type.etThroughAll); cutExtrDef.SetSketch(rimSketch); entityCutExtr.Create(); } } } } } }
/// <summary> /// Генерация эскиза вырезанных внутренностей стакана. /// </summary> /// <param name="sketchDef">Описание эскиза вырезаемых /// внутренностей стакана.</param> private void GenerateCutSide2d(ksSketchDefinition sketchDef) { var draw = (ksDocument2D)sketchDef.BeginEdit(); draw.ksCircle(_startX, _startY, _calcParams.DiameterSideCutting / 2, 1); sketchDef.EndEdit(); }
/// <summary> /// построение верхней части цилиндра /// </summary> /// <param name="param"></param> public void UpCircle(Parameters param) { double Radios2 = param.Radios2; double Lenght1 = param.Lenght1; double Lenght2 = param.Lenght2; var doc = (ksDocument3D)_kompas.ActiveDocument3D(); ksPart part2 = (ksPart)doc.GetPart((short)Part_Type.pTop_Part); // новый компонент if (part2 != null) { ksEntity entityOffsetPlane2 = (ksEntity)part2.NewEntity((short)Obj3dType.o3d_planeOffset); ksEntity entitySketch2 = (ksEntity)part2.NewEntity((short)Obj3dType.o3d_sketch); if (entityOffsetPlane2 != null) { ksPlaneOffsetDefinition offsetDef2 = (ksPlaneOffsetDefinition)entityOffsetPlane2.GetDefinition(); if (offsetDef2 != null) { offsetDef2.offset = Lenght1 + 5; // расстояние от базовой плоскости ksEntity basePlane2 = (ksEntity)part2.GetDefaultEntity((short)Obj3dType.o3d_planeXOY); basePlane2.name = "Смещенная плоскость"; // название для плоскости offsetDef2.SetPlane(basePlane2); // базовая плоскость entityOffsetPlane2.name = "Смещенная плоскость"; // имя для смещенной плоскости entityOffsetPlane2.hidden = true; entityOffsetPlane2.Create(); // создать смещенную плоскость if (entitySketch2 != null) { ksSketchDefinition sketchDef2 = (ksSketchDefinition)entitySketch2.GetDefinition(); if (sketchDef2 != null) { sketchDef2.SetPlane(entityOffsetPlane2); // установим плоскость XOY базовой для эскиза entitySketch2.Create(); // создадим эскиз ksDocument2D sketchEdit2 = (ksDocument2D)sketchDef2.BeginEdit(); sketchEdit2.ksCircle(0, 0, Radios2, 1); sketchDef2.EndEdit(); // завершение редактирования эскиза ksEntity entityExtr2 = (ksEntity)part2.NewEntity((short)Obj3dType.o3d_baseExtrusion); if (entityExtr2 != null) { ksBaseExtrusionDefinition extrusionDef2 = (ksBaseExtrusionDefinition)entityExtr2.GetDefinition(); if (extrusionDef2 != null) { extrusionDef2.directionType = (short)Direction_Type.dtNormal; extrusionDef2.SetSideParam(true, (short)End_Type.etBlind, Lenght2, 0, false); extrusionDef2.SetSketch(entitySketch2); // эскиз операции выдавливания entityExtr2.Create(); // создать операцию } } } } } } } }
public override ksEntity Execute() { ksEntity sketch = Part.NewEntity((short)Obj3dType.o3d_sketch); ksSketchDefinition definition = sketch.GetDefinition(); definition.SetPlane(GetPlane()); sketch.Create(); DrawSketch(definition.BeginEdit()); definition.EndEdit(); return(sketch); }
/// <summary> /// Создать полоску на эскизе стакана. /// </summary> /// <param name="sketchDef">Описание эскиза стакана.</param> private void GenerateExtrusionCrimp2d( ksSketchDefinition sketchDef) { var draw = (ksDocument2D)sketchDef.BeginEdit(); var radiusLineCrim = _calcParams.DiameterStripsCrimp / 2; var xc = _calcParams.DiameterFacetedStart * 0.7 / 2; draw.ksCircle(xc, xc, radiusLineCrim, 1); sketchDef.EndEdit(); }
/// <summary> /// Создане выреза крепления /// </summary> /// <param name="diameterBracing">Диаметр крепления</param> /// <param name="lengthBracing">Длина крепления</param> /// <param name="lengthLeg">Длина ножки</param> /// <param name="lengthHead">Длина головки</param> private void BuildBracingCut(double diameterBracing, double lengthBracing, double lengthLeg, double lengthHead) { #region Константы для выреза крепления const int part = -1; const int sketch = 5; const int planeXOY = 1; const int planeOffset = 14; const int rectangleParam = 91; const int shaded = 3; const int etBlind = 0; const int cutExtrusion = 26; #endregion _part = _doc3D.GetPart(part); ksEntity EntityPlane = _part.GetDefaultEntity(planeXOY); //Смещение плоскости ksEntity PlaneOffSet = _part.NewEntity(planeOffset); ksPlaneOffsetDefinition planeOffDefinition = PlaneOffSet.GetDefinition(); planeOffDefinition.direction = true; planeOffDefinition.offset = lengthLeg + lengthHead + lengthBracing; planeOffDefinition.SetPlane(EntityPlane); PlaneOffSet.Create(); //Эскиз ksEntity EntityRectangle = _part.NewEntity(sketch); ksSketchDefinition sketchDefinitionRectangle = EntityRectangle.GetDefinition(); sketchDefinitionRectangle.SetPlane(PlaneOffSet); EntityRectangle.Create(); ksDocument2D Document2 = sketchDefinitionRectangle.BeginEdit(); ksRectangleParam _par; _par = _kompas.GetParamStruct(rectangleParam); _par.height = diameterBracing / 2; _par.width = diameterBracing; _par.x = -(diameterBracing / 2); _par.y = -(diameterBracing / 4); _par.ang = 0; _par.style = 1; Document2.ksRectangle(_par, 0); sketchDefinitionRectangle.EndEdit(); //Вырезание ksEntity EntityCutExtrusion = _part.NewEntity(cutExtrusion); ksCutExtrusionDefinition CutExtrusionDefinition = EntityCutExtrusion.GetDefinition(); CutExtrusionDefinition.cut = true; CutExtrusionDefinition.directionType = 0; CutExtrusionDefinition.SetSideParam(true, etBlind, lengthBracing / 2, 0, false); CutExtrusionDefinition.SetSketch(EntityRectangle); EntityCutExtrusion.Create(); _doc3D.drawMode = shaded; _doc3D.shadedWireframe = true; }
/// <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="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) { // Создание и настройка эскиза // на поверхности формы (смещенной плоскости) ksEntity formSurfaceSketch = part.NewEntity((short)Obj3dType.o3d_sketch); ksSketchDefinition formSurfaceSketchDefinition = formSurfaceSketch.GetDefinition(); formSurfaceSketchDefinition.SetPlane(planeFormSurface); formSurfaceSketch.Create(); // Входим в режим редактирования эскиза ksDocument2D formSurfaceDocument2D = formSurfaceSketchDefinition.BeginEdit(); // Расчитаем положение первой конфеты // Положение других конфет расчитаем путем сдвига первой double[] rectCandyXPoints = new double[] { 0, 0, 0, 0, 0 }; double[] rectCandyYPoints = new double[] { 0, 0, 0, 0, 0 }; InitRectCandyPoints(ref rectCandyXPoints, ref rectCandyYPoints, formTotalLength, formTotalWidth, candySettings); // Рисуем прямоугольные конфеты for (int i = 0; i < candySettings.CandyCount / 2; ++i) { for (int j = 0; j < 2; ++j) { DrawRect(rectCandyXPoints, rectCandyYPoints, formSurfaceDocument2D); rectCandyYPoints = GetShiftedArray(rectCandyYPoints, Length + candySettings.FormDepthByWidth); } rectCandyYPoints = GetShiftedArray(rectCandyYPoints, -2 * (Length + candySettings.FormDepthByWidth)); rectCandyXPoints = GetShiftedArray(rectCandyXPoints, Width + candySettings.FormDepthByLength); } // Выходим из режима редактирования эскиза formSurfaceSketchDefinition.EndEdit(); // Вырезаем прямоугольные конфетки ^_^ CutExtrude(part, formSurfaceSketch, Height); }
/// <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[] cylinderCandyXPoints = new double[] { 0, 0, 0, 0, 0 }; double[] cylinderCandyYPoints = new double[] { 0, 0, 0, 0, 0 }; InitCylinderCandyPoints(ref cylinderCandyXPoints, ref cylinderCandyYPoints, formTotalLength, formTotalWidth, candySettings); 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(); DrawRect(cylinderCandyXPoints, cylinderCandyYPoints, formSurfaceDocument2D, 0); // Выходим из режима редактирования эскиза formSurfaceSketchDefinition.EndEdit(); CutRotated(part, formSurfaceSketch); cylinderCandyYPoints = GetShiftedArray(cylinderCandyYPoints, Length + candySettings.FormDepthByWidth); } cylinderCandyYPoints = GetShiftedArray(cylinderCandyYPoints, -2 * (Length + candySettings.FormDepthByWidth)); cylinderCandyXPoints = GetShiftedArray(cylinderCandyXPoints, Width + candySettings.FormDepthByLength); } }
/// <summary> /// Построение держателя для блинов /// </summary> /// <param name="iPart">Интерфейс детали</param> /// <param name="side">Направление</param> private void CreateHolder(ksPart iPart, bool side) { //Получаем массив граней объекта ksEntityCollection entityCollectionPart = (ksEntityCollection)iPart.EntityCollection((short)Obj3dType.o3d_face); //Получаем длину гладкой части var Y = _modelelParameters.Parameter(ParametersName.ConnectionLength).Value / 2; //Получаем длину места хвата var Y1 = _modelelParameters.Parameter(ParametersName.GripLength).Value / 2; var Y2 = 15; //Сортируем грани по координатам if (side == false) { entityCollectionPart.SelectByPoint(0, -(Y + Y1 + Y2), 0); } if (side == true) { entityCollectionPart.SelectByPoint(0, (Y + Y1 + Y2), 0); } //Получаем первый элемент массива var planeDetal = entityCollectionPart.First(); //Создаем новый эскиз ksEntity iSketch = (ksEntity)iPart.NewEntity((short)Obj3dType.o3d_sketch); //Получаем интерфейс свойств эскиза ksSketchDefinition iDefinitionSketch = (ksSketchDefinition)iSketch.GetDefinition(); //Устанавливаем плоскость эскиза iDefinitionSketch.SetPlane(planeDetal); //Создание эскиза iSketch.Create(); //Создание нового 2Д документа ksDocument2D iDocument2D = (ksDocument2D)iDefinitionSketch.BeginEdit(); //Получение радиуса рукоятки var rad = _modelelParameters.Parameter(ParametersName.HolderRadius).Value; //Создание кругов iDocument2D.ksCircle(0, 0, 3, 1); iDocument2D.ksCircle(0, 0, rad, 1); //Создание эскиза iDefinitionSketch.EndEdit(); //Получение глубины выдавливания var depth = _modelelParameters.Parameter(ParametersName.HolderLength).Value; //Выполнение выдавливания ExctrusionSketch(iPart, iSketch, depth, true); }
/// <summary> /// Метод создает эскиз окружности /// </summary> /// <param name="coor">Координаты центра окружности</param> /// <param name="radius">Радиус окружности</param> /// <param name="lineType">Тип линии</param> /// <returns></returns> public bool DrawCircle(Point coor, double radius, int lineType) { try { SketchCreator sketchCreator = new SketchCreator(_app); ksSketchDefinition def = sketchCreator.MakeSketch(); ksDocument2D doc = (ksDocument2D)def.BeginEdit(); doc.ksCircle(coor.X, coor.Y, radius, lineType); def.EndEdit(); return(true); } catch { return(false); } }
/// <summary> /// Выдавливание конкретной секции /// </summary> /// <param name="height">Высота</param> /// <param name="width">Ширина</param> /// <param name="weigth">Толщина</param> /// <param name="windowPart">Часть окна</param> /// <param name="planeXoy">Плоскость</param> /// <param name="xStart">Начало оси Х</param> /// <param name="yStart">Начало оси Y</param> /// <param name="type"></param> private void ExtrudeOdject(double height, double width, double weigth, ksPart windowPart, ksEntity planeXoy, double xStart, double yStart, Obj3dType type) { ksEntity sketch = windowPart.NewEntity((short)Obj3dType.o3d_sketch); ksSketchDefinition sketchDefinition = sketch.GetDefinition(); sketchDefinition.SetPlane(planeXoy); sketch.Create(); ksDocument2D document2D = sketchDefinition.BeginEdit(); DrawRectangle(document2D, xStart, yStart, height, width, null); sketchDefinition.EndEdit(); Extrusion(windowPart, sketch, weigth, type); }
/// <summary> /// Создание гравировки текста на детали /// </summary> /// <param name="length">Длина нижней части втулки</param> /// <param name="outerRadius">Внешний радиус втулки</param> /// <param name="innerRadius">Внутренний радус втулки</param> private void CreateEngraving(double length, double outerRadius, double innerRadius, string engravingText) { var document = (ksDocument3D)_kompas.ActiveDocument3D(); var part = (ksPart)document.GetPart((short)Part_Type.pTop_Part); double coordinateY = ((outerRadius + innerRadius) / 2) - 1.5; const int coordinateX = 0; const int angle = 0; const double characterHeight = 2; const int textNarrowing = 1; const int bitVector = 0; const int align = 1; const double topHeight = 1; const double bottomHeight = 0; ksEntity entityPlaneOffset = (ksEntity)part.NewEntity((short) Obj3dType.o3d_planeOffset); ksEntity entityPlaneXOY = (ksEntity)part.GetDefaultEntity((short) Obj3dType.o3d_planeXOY); ksPlaneOffsetDefinition planeOffsetDefinition = (ksPlaneOffsetDefinition)entityPlaneOffset.GetDefinition(); planeOffsetDefinition.SetPlane(entityPlaneXOY); planeOffsetDefinition.direction = true; planeOffsetDefinition.offset = length; entityPlaneOffset.Create(); ksEntity entitySketch = (ksEntity)part.NewEntity((short) Obj3dType.o3d_sketch); ksSketchDefinition sketchDefinition = (ksSketchDefinition) entitySketch.GetDefinition(); sketchDefinition.SetPlane(entityPlaneOffset); entitySketch.Create(); ksDocument2D sketchEdit = (ksDocument2D)sketchDefinition. BeginEdit(); int text = sketchEdit.ksText(coordinateX, coordinateY, angle, characterHeight, textNarrowing, bitVector, engravingText); sketchEdit.ksSetTextAlign(text, align); sketchDefinition.EndEdit(); CutExtrusion(part, entitySketch, topHeight, bottomHeight, false); }
/// <summary> /// Создание отверстия крепления /// </summary> /// <param name="diameterBracing">Диаметр крепления</param> /// <param name="lengthBracing">Длина крепления</param> /// <param name="lengthLeg">Длина ножки</param> /// <param name="lengthHead">Длина головки</param> private void BuildBracingHole(double diameterBracing, double lengthBracing, double lengthLeg, double lengthHead) { #region Константы отверстия крепления const int part = -1; const int sketch = 5; const int planeXOY = 1; const int planeOffset = 14; const int shaded = 3; const int etBlind = 0; const int planeXOZ = 2; const int cutExtrusion = 26; #endregion ksEntity EntityPlane = _part.GetDefaultEntity(planeXOY); _part = _doc3D.GetPart(part); ksEntity EntityPlane3 = _part.GetDefaultEntity(planeXOZ); //Смещение плоскости ksEntity PlaneOffHole = _part.NewEntity(planeOffset); ksPlaneOffsetDefinition planeOffsetDefinitionHole = PlaneOffHole.GetDefinition(); planeOffsetDefinitionHole.direction = true; planeOffsetDefinitionHole.offset = diameterBracing / 2; planeOffsetDefinitionHole.SetPlane(EntityPlane3); PlaneOffHole.Create(); //Эскиз отверстия крепения ksEntity EntityHole = _part.NewEntity(sketch); ksSketchDefinition sketchDefinitionHole = EntityHole.GetDefinition(); sketchDefinitionHole.SetPlane(PlaneOffHole); EntityHole.Create(); ksDocument2D DocumentHole = sketchDefinitionHole.BeginEdit(); DocumentHole.ksCircle(0, -(0.75 * lengthBracing + lengthLeg + lengthHead), diameterBracing / 6, 1); sketchDefinitionHole.EndEdit(); //Выдавливание отверстия крепления ksEntity EntityCutExtrusionHole = _part.NewEntity(cutExtrusion); ksCutExtrusionDefinition CutExtrusionDefinitionHole = EntityCutExtrusionHole.GetDefinition(); CutExtrusionDefinitionHole.cut = true; CutExtrusionDefinitionHole.directionType = 0; CutExtrusionDefinitionHole.SetSideParam(true, etBlind, diameterBracing, 0, false); CutExtrusionDefinitionHole.SetSketch(EntityHole); EntityCutExtrusionHole.Create(); _doc3D.drawMode = shaded; _doc3D.shadedWireframe = true; }
/// <summary> /// построение нижнего целиндра детали /// </summary> /// <param name="param"></param> public void DownCircle(Parameters param) { double Radios1 = param.Radios1; double Lenght1 = param.Lenght1; var document = (ksDocument3D)_kompas.Document3D(); document.Create(); var doc = (ksDocument3D)_kompas.ActiveDocument3D(); ksPart part = (ksPart)doc.GetPart((short)Part_Type.pTop_Part); if (part != null) { ksEntity entitySketch = (ksEntity)part.NewEntity((short)Obj3dType.o3d_sketch); if (entitySketch != null) { ksSketchDefinition sketchDef = (ksSketchDefinition)entitySketch.GetDefinition(); if (sketchDef != null) { ksEntity basePlane = (ksEntity)part.GetDefaultEntity((short)Obj3dType.o3d_planeXOY); sketchDef.SetPlane(basePlane); entitySketch.Create(); ksDocument2D sketchEdit = (ksDocument2D)sketchDef.BeginEdit(); sketchEdit.ksCircle(0, 0, Radios1, 1); sketchDef.EndEdit(); ksEntity entityExtr = (ksEntity)part.NewEntity((short)Obj3dType.o3d_baseExtrusion); if (entityExtr != null) { ksBaseExtrusionDefinition extrusionDef = (ksBaseExtrusionDefinition)entityExtr.GetDefinition(); if (extrusionDef != null) { extrusionDef.directionType = (short)Direction_Type.dtNormal; extrusionDef.SetSideParam(true, (short)End_Type.etBlind, Lenght1, 0, false); extrusionDef.SetSketch(entitySketch); // эскиз операции выдавливания entityExtr.Create(); // создать операцию } } } } } }
/// <summary> /// Генерация эскиза граней граненого стакана. /// </summary> /// <param name="sketchDef">Описание эскиза /// граней стакана.</param> private void GenerateCutFaceted2d(ksSketchDefinition sketchDef) { var draw = (ksDocument2D)sketchDef.BeginEdit(); var polygon = _kompas.InitPolygon(); polygon.radius = _calcParams.DiameterFacetedStart / 2; polygon.ang = 0; polygon.style = 1; polygon.describe = false; polygon.xc = _startX; polygon.yc = _startY; polygon.count = _glass.CountFaceted; draw.ksRegularPolygon(polygon); draw.ksCircle(_startX, _startY, _calcParams.DiameterFacetedStart, 1); sketchDef.EndEdit(); }
/// <summary> /// Создание крепления /// </summary> /// <param name="diameterBracing">Диаметр крепления</param> /// <param name="lengthBracing">Длина крепления</param> /// <param name="lengthLeg">Длина ножки</param> /// <param name="lengthHead">Длина головки</param> private void BuildBracing(double diameterBracing, double lengthBracing, double lengthLeg, double lengthHead) { #region Константы для крепления const int part = -1; const int sketch = 5; const int planeXOY = 1; const int planeOffset = 14; const int baseExtrusion = 24; const int shaded = 3; const int etBlind = 0; #endregion _part = _doc3D.GetPart(part); ksEntity EntityPlane = _part.GetDefaultEntity(planeXOY); ///Смещение плоскости ksEntity PlaneOff = _part.NewEntity(planeOffset); ksPlaneOffsetDefinition planeOffsetDefinition = PlaneOff.GetDefinition(); planeOffsetDefinition.direction = true; planeOffsetDefinition.offset = lengthLeg + lengthHead; planeOffsetDefinition.SetPlane(EntityPlane); PlaneOff.Create(); //Эскиз крепления ksEntity Entity = _part.NewEntity(sketch); ksSketchDefinition sketchDefinition = Entity.GetDefinition(); sketchDefinition.SetPlane(PlaneOff); Entity.Create(); ksDocument2D Document2D = sketchDefinition.BeginEdit(); Document2D.ksCircle(0, 0, diameterBracing / 2, 1); sketchDefinition.EndEdit(); //Выдавливание крепления ksEntity EntityExtrusion = _part.NewEntity(baseExtrusion); ksBaseExtrusionDefinition BaseExtrusionDefinition = EntityExtrusion.GetDefinition(); BaseExtrusionDefinition.SetSideParam(true, etBlind, lengthBracing, 0, true); BaseExtrusionDefinition.SetSketch(Entity); EntityExtrusion.Create(); _doc3D.drawMode = shaded; _doc3D.shadedWireframe = true; }