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; } } }
public void CreateSpout(ksPart iPart, KompasObject _kompas, TeaPotParams teaPotParams) { double spout = (teaPotParams.TeaPotDiameter / 5); double offset = teaPotParams.TeaPotHeight - spout * 1.5; double width = spout; // spoutWidth double height = spout; // spoutHeigth ksEntity iSketch; ksSketchDefinition iDefinitionSketch; CreateSketch(out iSketch, out iDefinitionSketch, offset); // Интерфейс для рисования = на скетче; ksDocument2D iDocument2D = (ksDocument2D)iDefinitionSketch.BeginEdit(); // Построить прямоугольник (x1,y1, x2,y2, style) ksRectangleParam par1 = (ksRectangleParam)_kompas.GetParamStruct((short)StructType2DEnum.ko_RectangleParam); par1.x = (teaPotParams.TeaPotDiameter / 2) - 5; par1.height = width; // spoutWidth. par1.y = -(par1.height / 2); par1.width = teaPotParams.TeaPotSpoutLength; //spoutLength par1.style = 1; // При нуле не видно деталь. iDocument2D.ksRectangle(par1); // Закончить редактировать эскиз iDefinitionSketch.EndEdit(); int X = Convert.ToInt32(teaPotParams.TeaPotHandleColor); ExctrusionSketch(iPart, iSketch, height, true, X); Fillet(iPart, 7, width / 2, teaPotParams); }
/// <summary> /// Метод, рисующий линии черной клавиши для эскиза. /// </summary> /// <param name="sketch">Указатель на эскиз.</param> /// <param name="data">Указатель на данные.</param> /// <param name="currentKey">Текущая клавиша.</param> private KeyCreatorBase KeyLineDraw(ksDocument2D sketch, KeyNote currentKey) { switch (currentKey) { case KeyNote.Db: { return(new KeyCreatorDb(sketch, _marginLeft)); } case KeyNote.Eb: { return(new KeyCreatorEb(sketch, _marginLeft)); } case KeyNote.Gb: { return(new KeyCreatorGb(sketch, _marginLeft)); } case KeyNote.Ab: { return(new KeyCreatorAb(sketch, _marginLeft)); } case KeyNote.Bb: { return(new KeyCreatorBb(sketch, _marginLeft)); } default: { throw new Exception("TODO"); } } }
public bool OpenFileKompas(string fileName, out string result, bool visual = true) { var fileopen = false; if (_kompasObj != null) { _doc2D = (ksDocument2D)_kompasObj.Document2D(); if (_doc2D != null) { fileopen = _doc2D.ksOpenDocument(fileName, false); } if (!fileopen) { result = "Error: Не могу открыть файл"; AddLog(result); return(false); } _kompasObj.Visible = visual; var err = _kompasObj.ksReturnResult(); if (err != 0) { _kompasObj.ksResultNULL(); } } else { result = "Warning: Подключение с Компасом не установлено"; AddLog(result); return(false); } result = string.Empty; return(true); }
/// <summary> /// Создать паз /// </summary> /// <param name="shim">Параметры шайбы</param> /// <param name="part">Компонент сборки</param> private void CreateGroove(ShimSettings shim, ksPart part) { // Создаем эскиз для паза ksEntity sketchGroove; ksSketchDefinition sketchGrooveDefinition; CreateSketch(part, out sketchGroove, out sketchGrooveDefinition, (short)Obj3dType.o3d_planeXOZ); // Рисуем паз на эскизе ksDocument2D GrooveEdit = sketchGrooveDefinition.BeginEdit(); GrooveEdit.ksCircle(shim.InnerRadius, 0, shim.GrooveRadius, 1); sketchGrooveDefinition.EndEdit(); // Вырезаем паз ksEntity cutGrooveExtrude = part.NewEntity((short)Obj3dType.o3d_cutExtrusion); ksCutExtrusionDefinition cutGrooveExtrudeDefinition = cutGrooveExtrude.GetDefinition(); cutGrooveExtrudeDefinition.directionType = (short)Direction_Type.dtBoth; cutGrooveExtrudeDefinition.SetSketch(sketchGroove); ksExtrusionParam cutGrooveExtrudeParam = cutGrooveExtrudeDefinition.ExtrusionParam(); cutGrooveExtrudeParam.depthNormal = shim.Height; cutGrooveExtrudeParam.depthReverse = shim.Height; cutGrooveExtrude.Create(); }
/// <summary> /// Построение гладкой части /// </summary> private void CreateConnector(ksPart iPatr) { if (_modelelParameters.Parameter(ParametersName.ConnectionLength).Value != 0) { //Получаем интерфейс базовой плоскости ХОY ksEntity planeZOY = (ksEntity)iPatr.GetDefaultEntity((short)Obj3dType.o3d_planeXOZ); //Создаем новый эскиз ksEntity iSketch = (ksEntity)iPatr.NewEntity((short)Obj3dType.o3d_sketch); //Получаем интерфейс свойств эскиза ksSketchDefinition iDefinitionSketch = (ksSketchDefinition)iSketch.GetDefinition(); //Устанавливаем плоскость эскиза iDefinitionSketch.SetPlane(planeZOY); //Создание эскиза iSketch.Create(); //Создание нового 2Д документа ksDocument2D iDocument2D = (ksDocument2D)iDefinitionSketch.BeginEdit(); //Получение радиуса рукояти var rad = _modelelParameters.Parameter(ParametersName.HandleRadius).Value; //Построение круга iDocument2D.ksCircle(0, 0, rad + 0.1, 1); //Создание эскиза iDefinitionSketch.EndEdit(); //Получение глубины выдавливания var depth = _modelelParameters.Parameter(ParametersName.ConnectionLength).Value / 2; //Выдавливание в обе стороны ExctrusionSketch(iPatr, iSketch, depth, false); ExctrusionSketch(iPatr, iSketch, depth, true); } }
/// <summary> /// Добавление элементов на полотно двери /// </summary> /// <param name="doorParameters"></param> /// <param name="doorPart"></param> /// <param name="planeXoY"></param> private void DoorModification(DoorParameters doorParameters, ksPart doorPart, ksEntity planeXoY) { ksEntity eyePlaneOffset = doorPart.NewEntity((short) Obj3dType.o3d_planeOffset); ksPlaneOffsetDefinition eyeDefinition = eyePlaneOffset.GetDefinition(); eyeDefinition.SetPlane(planeXoY); eyeDefinition.offset = doorParameters.WeigthDoor; eyePlaneOffset.Create(); ksEntity eyeSketch = doorPart.NewEntity((short) Obj3dType.o3d_sketch); ksSketchDefinition eyeSketchDefinition = eyeSketch.GetDefinition(); eyeSketchDefinition.SetPlane(eyePlaneOffset); eyeSketch.Create(); ksDocument2D eye = eyeSketchDefinition.BeginEdit(); eye.ksCircle(doorParameters.YEye / 2.0, 0, 15, 1); eyeSketchDefinition.EndEdit(); Cut(doorPart, eyeSketch, doorParameters.WeigthDoor); AnimalDoor(doorParameters, doorPart, eyePlaneOffset); DoorKnob(doorParameters, doorPart, eyePlaneOffset); }
/// <summary> /// Рисует окружность. /// </summary> /// <param name="sketchEdit">Эскиз для рисования.</param> public void DrawCircle(ksDocument2D sketchEdit) { foreach (PointF center in PointsList) { sketchEdit.ksCircle(center.X, center.Y, Radius, 1); } }
/// <summary> /// Основание ручки /// </summary> /// <param name="doorParameters"></param> /// <param name="doorPart"></param> /// <param name="eyePlaneOffset"></param> private void HandleBase(DoorParameters doorParameters, ksPart doorPart, ksEntity eyePlaneOffset) { ksEntity keyPlaneOffset = doorPart.NewEntity((short) Obj3dType.o3d_planeOffset); ksPlaneOffsetDefinition pod5 = keyPlaneOffset.GetDefinition(); pod5.SetPlane(eyePlaneOffset); pod5.offset = 25; keyPlaneOffset.Create(); ksEntity keySketch = doorPart.NewEntity((short) Obj3dType.o3d_sketch); ksSketchDefinition keySketchDefinition = keySketch.GetDefinition(); keySketchDefinition.SetPlane(keyPlaneOffset); keySketch.Create(); ksDocument2D key = keySketchDefinition.BeginEdit(); DrawRectangle(key, doorParameters.YKey / 2.0, doorParameters.WidthDoor - 450, 200, 26, -90); keySketchDefinition.EndEdit(); Extrude(doorPart, keySketch, 5, (short)Direction_Type.dtNormal); }
/// <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); }
public void act() { Type c = Type.GetTypeFromProgID("KOMPAS.Application.5"); kompas = (KompasObject)Activator.CreateInstance(c); documentParam = (ksDocumentParam)kompas.GetParamStruct((short)StructType2DEnum.ko_DocumentParam); //для активации нового листа и добавление рамки к чертежу documentParam.type = (int)DocType.lt_DocSheetStandart; documentParam.regime = 0; sheetPar = (ksSheetPar)documentParam.GetLayoutParam(); str = kompas.ksSystemPath(0) + @"\graphic.lyt"; sheetPar.layoutName = str; sheetPar.shtType = 1; standartSheet = (ksStandartSheet)sheetPar.GetSheetParam(); standartSheet.direct = true; standartSheet.format = 3; standartSheet.multiply = 1; dock = (ksDocument2D)kompas.Document2D(); dock.ksCreateDocument(documentParam); //dock = (ksDocument2D)kompas.Document2D(); // ДЛЯ СТАРОГО КОМПАСА //dock.ksCreateDocument(documentParam); // ДЛЯ СТАРОГО КОМПАСА //sheetOptions = (ksSheetOptions)kompas.GetParamStruct((short)StructType2DEnum.ko_SheetOptions); // ДЛЯ СТАРОГО КОМПАСА //dock.ksGetDocOptions(SHEET_OPTIONS_EX, sheetOptions); // ДЛЯ СТАРОГО КОМПАСА //sheetOptions.sheetType = false; // ДЛЯ СТАРОГО КОМПАСА //standartSheet = (ksStandartSheet)sheetOptions.GetSheetParam(false); // ДЛЯ СТАРОГО КОМПАСА //standartSheet.format = 3; // ДЛЯ СТАРОГО КОМПАСА //standartSheet.direct = true; // ДЛЯ СТАРОГО КОМПАСА //sheetOptions.sheetType = true; // ДЛЯ СТАРОГО КОМПАСА //dock.ksSetDocOptions(SHEET_OPTIONS_EX, sheetOptions); // ДЛЯ СТАРОГО КОМПАСА kompas.Visible = true; }
/// <summary> /// Создание головки /// </summary> /// <param name="diameterHead">Диаметр головки </param> /// <param name="lengthHead">Длина головки </param> private void BuildHead(double diameterHead, double lengthHead) { #region Константы для головки const int part = -1; const int sketch = 5; const int planeXOY = 1; const int baseExtrusion = 24; const int shaded = 3; const int etBlind = 0; #endregion //Эскиз головки _part = _doc3D.GetPart(part); _entity = _part.NewEntity(sketch); ksSketchDefinition SketchDefinition = _entity.GetDefinition(); ksEntity EntityPlane = _part.GetDefaultEntity(planeXOY); SketchDefinition.SetPlane(EntityPlane); _entity.Create(); ksDocument2D Document2D = SketchDefinition.BeginEdit(); Document2D.ksCircle(0, 0, diameterHead / 2, 1); SketchDefinition.EndEdit(); //Выдавливание головки ksEntity EntityExtrusion = _part.NewEntity(baseExtrusion); ksBaseExtrusionDefinition BaseExtrusionDefinition = EntityExtrusion.GetDefinition(); BaseExtrusionDefinition.SetSideParam(true, etBlind, lengthHead, 0, true); BaseExtrusionDefinition.SetSketch(_entity); EntityExtrusion.Create(); _doc3D.drawMode = shaded; _doc3D.shadedWireframe = true; }
public bool OpenFileKompas(string fileName, out string result) { var fileopen = false; if (_kompasObj != null) { _doc2D = (ksDocument2D)_kompasObj.Document2D(); if (_doc2D != null) fileopen = _doc2D.ksOpenDocument(fileName, false); if (!fileopen) { result = "Error: Не могу открыть файл"; AddLog(result); return false; } _kompasObj.Visible = true; var err = _kompasObj.ksReturnResult(); if (err != 0) _kompasObj.ksResultNULL(); } else { result = "Warning: Подключение с Компасом не установлено"; AddLog(result); return false; } result = string.Empty; return true; }
/// <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(); } } } } } }
/// <summary> /// Метод, создающий осовной эскиз самой ручки /// </summary> /// <param name="backRadius">Радиус задней части руки</param> /// <param name="backLenght">Длина задней части ручки</param> /// <param name="frontLenght">Длина передней части ручки</param> /// <param name="holeRadius">Радиус тверстия ручки</param> private void CreateMainSketch (double backRadius, double backLenght, double frontLenght, double holeRadius) { CreateEntitySketch((short)Obj3dType.o3d_planeYOZ); _sketchEdit = (ksDocument2D)_sketchDefinition.BeginEdit(); _sketchEdit.ksLineSeg (-backLenght + 3, -holeRadius, -backLenght, -holeRadius - 4, 1); _sketchEdit.ksLineSeg (-backLenght, -holeRadius - 4, -backLenght, -backRadius, 1); _sketchEdit.ksLineSeg (-backLenght, -backRadius, 0, -backRadius, 1); _sketchEdit.ksLineSeg (0, -backRadius, 0, -20, 1); _sketchEdit.ksLineSeg (0, -20, 6.5, -30, 1); _sketchEdit.ksLineSeg (6.5, -30, frontLenght - 6.5, -30, 1); _sketchEdit.ksLineSeg (frontLenght - 6.5, -30, frontLenght, -20, 1); _sketchEdit.ksLineSeg (frontLenght, -20, frontLenght, -holeRadius - 4, 1); _sketchEdit.ksLineSeg (frontLenght, -holeRadius - 4, frontLenght - 3, -holeRadius, 1); _sketchEdit.ksLineSeg (frontLenght - 3, -holeRadius, -backLenght + 3, -holeRadius, 1); _sketchEdit.ksLineSeg (-45, 0, 45, 0, 3); _sketchDefinition.EndEdit(); }
public string createDoc() { if (_kompas != null) { // создать новый документ // первый параметр - тип открываемого файла // 0 - лист чертежа // 1 - фрагмент // 2 - текстовый документ // 3 - спецификация // 4 - 3D-модель // второй параметр указывает на необходимость выдачи запроса "Файл изменен. Сохранять?" при закрытии файла // третий параметр - указатель на IDispatch, по которому Графие вызывает уведомления об изенении своего состояния // ф-ия возвращает HANDLE открытого документа ksDocument2D doc = (ksDocument2D)_kompas.Document2D(); if (doc != null) { ksDocumentParam docParam = (ksDocumentParam)_kompas.GetParamStruct((short)StructType2DEnum.ko_DocumentParam); if (docParam != null) { docParam.Init(); //docParam.type = (int)DocType.lt_DocSheetStandart; docParam.type = (int)DocType.lt_DocFragment; doc.ksCreateDocument(docParam); } } return(null); } else { return("Программа не инициализирована"); } }
/// <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> /// Метод для отрисовки эскиза внешнего обода в КОМПАС-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> private void CreateNotchSketch() { CreateEntitySketch((short)Obj3dType.o3d_planeXOY); _sketchEdit = (ksDocument2D)_sketchDefinition.BeginEdit(); _sketchEdit.ksCircle(0, 40, 19, 1); _sketchDefinition.EndEdit(); }
/// <summary> /// Собачья заслонка /// </summary> /// <param name="doorParameters"></param> /// <param name="doorPart"></param> /// <param name="eyePlaneOffset"></param> private void AnimalDoor(DoorParameters doorParameters, ksPart doorPart, ksEntity eyePlaneOffset) { var x = -doorParameters.HeightDoor / 2; var y = -doorParameters.WidthDoor / 2 + 350; var animalHoleHeight = 200; if (doorParameters.IsOpen == true) { ksEntity animalDoorHoleSketch = doorPart.NewEntity((short) Obj3dType.o3d_sketch); ksSketchDefinition animalDoorHoleSketchDefinition = animalDoorHoleSketch.GetDefinition(); animalDoorHoleSketchDefinition.SetPlane(eyePlaneOffset); animalDoorHoleSketch.Create(); ksDocument2D animalDoorHole = animalDoorHoleSketchDefinition.BeginEdit(); DrawRectangle(animalDoorHole, x, y, animalHoleHeight, animalHoleHeight, null); animalDoorHoleSketchDefinition.EndEdit(); Cut(doorPart, animalDoorHoleSketch, doorParameters.WeigthDoor); ksEntity animalDoorSketch = doorPart.NewEntity((short) Obj3dType.o3d_sketch); ksSketchDefinition animalDoorSketchDefinition = animalDoorSketch.GetDefinition(); animalDoorSketchDefinition.SetPlane(eyePlaneOffset); animalDoorSketch.Create(); ksDocument2D animalDoor = animalDoorSketchDefinition.BeginEdit(); DrawRectangle(animalDoor, x + animalHoleHeight, y, animalHoleHeight / 10.0, animalHoleHeight, null); animalDoorSketchDefinition.EndEdit(); Extrude(doorPart, animalDoorSketch, animalHoleHeight, (short)Direction_Type.dtNormal); } if (doorParameters.IsOpen == false) { ksEntity animalDoorHoleSketch = doorPart.NewEntity((short) Obj3dType.o3d_sketch); ksSketchDefinition animalDoorHoleSketchDefinition = animalDoorHoleSketch.GetDefinition(); animalDoorHoleSketchDefinition.SetPlane(eyePlaneOffset); animalDoorHoleSketch.Create(); ksDocument2D animalDoorHole = animalDoorHoleSketchDefinition.BeginEdit(); DrawRectangle(animalDoorHole, x, y, animalHoleHeight, animalHoleHeight, null); animalDoorHoleSketchDefinition.EndEdit(); Cut(doorPart, animalDoorHoleSketch, 0.2); } }
/// <summary> /// Создание отверстий по концентрической сетке /// </summary> /// <param name="coordinate">Координата расположения</param> /// <param name="radius">Радиус отверстия</param> /// <param name="height">Высота вырезания</param> /// <param name="count">Количество отверстий</param> private void CreateArray(double coordinate, double radius, double height, int count) { var document = (ksDocument3D)_kompas.ActiveDocument3D(); var part = (ksPart)document.GetPart((short)Part_Type.pTop_Part); const int coordinateX = 0; const int coordinateY = 0; const int styleLineBase = 1; const int styleLineAuxiliary = 6; const int stepCopy = 360; ksEntity entitySketch = (ksEntity)part.NewEntity((short) Obj3dType.o3d_sketch); ksSketchDefinition sketchDefinition = (ksSketchDefinition) entitySketch.GetDefinition(); ksEntity basePlane = (ksEntity)part.GetDefaultEntity((short) Obj3dType.o3d_planeXOY); sketchDefinition.SetPlane(basePlane); entitySketch.Create(); ksDocument2D sketchEdit = (ksDocument2D)sketchDefinition. BeginEdit(); sketchEdit.ksCircle(coordinateX, coordinateY, coordinate, styleLineAuxiliary); sketchEdit.ksCircle(coordinate, coordinateY, radius, styleLineBase); sketchDefinition.EndEdit(); ksEntity entityCutExtrusion = (ksEntity)part.NewEntity((short) Obj3dType.o3d_cutExtrusion); ksCutExtrusionDefinition cutExtrusionDefinition = (ksCutExtrusionDefinition)entityCutExtrusion.GetDefinition(); cutExtrusionDefinition.directionType = (short)Direction_Type.dtNormal; cutExtrusionDefinition.SetSideParam(true, (short)End_Type.etBlind, height); cutExtrusionDefinition.SetSketch(entitySketch); entityCutExtrusion.Create(); ksEntity circularCopyEntity = (ksEntity)part.NewEntity((short) Obj3dType.o3d_circularCopy); ksCircularCopyDefinition circularCopyDefinition = (ksCircularCopyDefinition)circularCopyEntity.GetDefinition(); circularCopyDefinition.SetCopyParamAlongDir(count, stepCopy, true, false); ksEntity baseAxisOZ = (ksEntity)part.GetDefaultEntity((short) Obj3dType.o3d_axisOZ); circularCopyDefinition.SetAxis(baseAxisOZ); ksEntityCollection entityCollection = (ksEntityCollection) circularCopyDefinition.GetOperationArray(); entityCollection.Add(cutExtrusionDefinition); circularCopyEntity.Create(); }
/// <summary> /// построение среднего цилиндра детали /// </summary> /// <param name="param"></param> public void MiddleCircle(Parameters param) { double Radios1 = param.Radios1; double Lenght1 = param.Lenght1; double Angle2 = param.Angle2; var doc = (ksDocument3D)_kompas.ActiveDocument3D(); ksPart part1 = (ksPart)doc.GetPart((short)Part_Type.pTop_Part); // новый компонент if (part1 != null) { ksEntity entityOffsetPlane1 = (ksEntity)part1.NewEntity((short)Obj3dType.o3d_planeOffset); ksEntity entitySketch1 = (ksEntity)part1.NewEntity((short)Obj3dType.o3d_sketch); if (entityOffsetPlane1 != null) { // интерфейс свойств смещенной плоскости ksPlaneOffsetDefinition offsetDef1 = (ksPlaneOffsetDefinition)entityOffsetPlane1.GetDefinition(); if (offsetDef1 != null) { offsetDef1.offset = Lenght1; // расстояние от базовой плоскости ksEntity basePlane1 = (ksEntity)part1.GetDefaultEntity((short)Obj3dType.o3d_planeXOY); basePlane1.name = "Смещенная плоскость"; // название для плоскости offsetDef1.SetPlane(basePlane1); // базовая плоскость entityOffsetPlane1.name = "Смещенная плоскость"; // имя для смещенной плоскости entityOffsetPlane1.hidden = true; entityOffsetPlane1.Create(); // создать смещенную плоскость if (entitySketch1 != null) { ksSketchDefinition sketchDef1 = (ksSketchDefinition)entitySketch1.GetDefinition(); if (sketchDef1 != null) { sketchDef1.SetPlane(entityOffsetPlane1); // установим плоскость XOY базовой для эскиза entitySketch1.Create(); // создадим эскиз // интерфейс редактора эскиза ksDocument2D sketchEdit1 = (ksDocument2D)sketchDef1.BeginEdit(); sketchEdit1.ksCircle(0, 0, Radios1, 1); sketchDef1.EndEdit(); // завершение редактирования эскиза ksEntity entityExtr1 = (ksEntity)part1.NewEntity((short)Obj3dType.o3d_baseExtrusion); if (entityExtr1 != null) { ksBaseExtrusionDefinition extrusionDef1 = (ksBaseExtrusionDefinition)entityExtr1.GetDefinition(); if (extrusionDef1 != null) { extrusionDef1.directionType = (short)Direction_Type.dtNormal; extrusionDef1.SetSideParam(true, (short)End_Type.etBlind, 5, Angle2, true); extrusionDef1.SetSketch(entitySketch1); // эскиз операции выдавливания entityExtr1.Create(); // создать операцию } } } } } } } }
private bool liniya_s_obrivom(Stupica master, double multiply, ksDocument2D doc) { ksLBreakDimParam param = (ksLBreakDimParam)_kompas.GetParamStruct((short)StructType2DEnum.ko_LBreakDimParam); if (param == null) { return(true); } ksBreakDimDrawing dPar = (ksBreakDimDrawing)param.GetDPar(); ksLBreakDimSource sPar = (ksLBreakDimSource)param.GetSPar(); ksDimTextParam tPar = (ksDimTextParam)param.GetTPar(); if (dPar == null || sPar == null || tPar == null) { return(true); } dPar.Init(); dPar.textPos = 5; dPar.pl = false; dPar.pt = 1; //стрелка внутри dPar.angle = 90; dPar.length = 10; sPar.Init(); //точка размер чего строим sPar.x1 = master.l - master.b1; sPar.y1 = -(master.d / 2); //точки размерной линии sPar.x2 = master.l + 15 / multiply; sPar.y2 = -(master.d / 2); sPar.x3 = master.l + 15 / multiply; sPar.y3 = 0; tPar.Init(false); tPar.bitFlag = 0; //выводится только номинал tPar.style = 3; //текст размерной надписи???? tPar.stringFlag = false; tPar.sign = 1; //diametr ksChar255 str = (ksChar255)_kompas.GetParamStruct((short)StructType2DEnum.ko_Char255); ksDynamicArray arrText = (ksDynamicArray)tPar.GetTextArr(); if (str == null || arrText == null) { return(true); } str.str = master.d.ToString(); arrText.ksAddArrayItem(-1, str); int obj = doc.ksLinBreakDimension(param); //отрисовка return(false); }
///<summary> /// Создание отверситий в нижнем ободе ///</summary> private void CreateHolesInRim(double kadloHeight, double rimCenter, int numberMounting) { if (_part != null) { // интерфейс свойств эскиза ksEntity rimHoles = (ksEntity)_part.NewEntity((short)Obj3dType.o3d_sketch); if (rimHoles != null) { // Получение интерфейса свойств эскиза ksSketchDefinition rimSketch = (ksSketchDefinition)rimHoles.GetDefinition(); if (rimSketch != null) { ksEntity basePlane; // Получение интерфейса базовой плоскости XOY basePlane = (ksEntity)_part.GetDefaultEntity((short)Obj3dType.o3d_planeXOY); // установим плоскость базовой для эскиза rimSketch.SetPlane(basePlane); // создадим эскиз rimHoles.Create(); // интерфейс редактора эскиза ksDocument2D sketchEdit = (ksDocument2D)rimSketch.BeginEdit(); int i = 1; for (double phi = 0; phi < 2 * Math.PI; phi += 2 * Math.PI / numberMounting) { double x = rimCenter * Math.Cos(phi); double y = rimCenter * Math.Sin(phi); //круглое отверстие sketchEdit.ksCircle(x, y, 2.5, 1); if (i < numberMounting) { i++; } else { break; } } // завершение редактирования эскиза rimSketch.EndEdit(); // вырежим выдавливанием ksEntity entityCutExtr = (ksEntity)_part.NewEntity((short)Obj3dType.o3d_cutExtrusion); if (entityCutExtr != null) { ksCutExtrusionDefinition cutExtrDef = (ksCutExtrusionDefinition)entityCutExtr.GetDefinition(); if (cutExtrDef != null) { cutExtrDef.cut = true; cutExtrDef.directionType = (short)Direction_Type.dtNormal; cutExtrDef.SetSideParam(true, (short)End_Type.etThroughAll); cutExtrDef.SetSketch(rimSketch); entityCutExtr.Create(); } } } } } }
/// <summary> /// Нарисовать четырехугольник с непрямыми углами с отверстием некруглым /// </summary> internal void DrawQuadrangleWithNonCircularHole() { if (kompas != null) { kompas.Visible = true; ksDocument3D iDocument3D = (ksDocument3D)kompas.Document3D(); if (iDocument3D.Create(false /*видимый*/, true /*деталь*/)) { iDocument3D.fileName = "With Non-Circular Hole"; ksPart iPart = (ksPart)iDocument3D.GetPart((short)Part_Type.pTop_Part); // новый компонент (.pNew_Part - был) if (iPart != null) { //// получим интерфейс базовой плоскости XOY ksEntity planeXOY = (ksEntity)iPart.GetDefaultEntity((short)Obj3dType.o3d_planeXOY); // 1-интерфейс на плоскость XOY ksEntity iSketch = (ksEntity)iPart.NewEntity((short)Obj3dType.o3d_sketch); if (iSketch != null) { // интерфейс свойств эскиза ksSketchDefinition iDefinitionSketch = (ksSketchDefinition)iSketch.GetDefinition(); if (iDefinitionSketch != null) { iDefinitionSketch.SetPlane(planeXOY); iSketch.Create(); ksDocument2D iDocument2D = (ksDocument2D)iDefinitionSketch.BeginEdit(); iDocument2D.ksLineSeg(-30.0, -30.0, 30.0, -30.0, 1); iDocument2D.ksLineSeg(30.0, -30.0, 0, 30.0, 1); iDocument2D.ksLineSeg(0, 30.0, -60.0, 30.0, 1); iDocument2D.ksLineSeg(-60.0, 30.0, -30.0, -30.0, 1); iDocument2D.ksLineSeg(-10.0, -18.660254, -28.660254, 13.660254, 1); iDocument2D.ksLineSeg(-20, 18.660254, -1.339746, -13.660254, 1); iDocument2D.ksArcByAngle(-24.330127, 16.160254, 5, 30.0, 210.0, 1, 1); iDocument2D.ksArcByAngle(-5.669873, -16.160254, 5, 210.0, 30.0, 1, 1); iDefinitionSketch.EndEdit(); ksEntity entityExtr = (ksEntity)iPart.NewEntity((short)Obj3dType.o3d_bossExtrusion); if (entityExtr != null) { // интерфейс свойств базовой операции выдавливания ksBossExtrusionDefinition extrusionDef = (ksBossExtrusionDefinition)entityExtr.GetDefinition(); // интерфейс базовой операции выдавливания if (extrusionDef != null) { ksExtrusionParam extrProp = (ksExtrusionParam)extrusionDef.ExtrusionParam(); // интерфейс структуры параметров выдавливания if (extrProp != null) { extrusionDef.SetSketch(iSketch); // эскиз операции выдавливания extrProp.direction = (short)Direction_Type.dtNormal; // направление выдавливания (прямое) extrProp.typeNormal = (short)End_Type.etBlind; // тип выдавливания (строго на глубину) extrProp.depthNormal = 10; // глубина выдавливания entityExtr.Create(); // создадим операцию } } } } } } } } }
/// <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); }
void close_file() { Console.WriteLine("ЗАКРЫТИЕ ДОКУМЕНТЫ"); ksDocument2D doc = (ksDocument2D)kompas.ActiveDocument2D(); if (doc != null) { doc.ksCloseDocument(); } }
protected override void DrawSketch(ksDocument2D sketchEdit) { var m = Model; var p1 = Point.Pnt(-m.GripWidth / 2 - m.ButtWidth / 2, -m.GripHeight / 2); var p2 = Point.Pnt(-m.GripWidth / 2 - m.ButtWidth / 2, m.GripHeight / 2); var p3 = Point.Pnt(m.GripWidth / 2 - m.ButtWidth / 2, m.GripHeight / 2); var p4 = Point.Pnt(m.GripWidth / 2 - m.ButtWidth / 2, -m.GripHeight / 2); DrawLine(sketchEdit, p1, p2, p3, p4, p1); }
/// <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); }
protected override void DrawSketch(ksDocument2D sketchEdit) { var p1 = Point.Pnt(-12, -Model.BladeHeight / 2); var p2 = Point.Pnt(-Model.BladeLength * .8, -Model.BladeHeight / 2); var p3 = Point.Pnt(-Model.BladeLength, Model.BladeHeight * .2); DrawLine(sketchEdit, p1, p2); sketchEdit.ksArcBy3Points(p2.Coordinate1, p2.Coordinate2, p2.Coordinate1 - 1, p2.Coordinate2, p3.Coordinate1, p3.Coordinate2, 1); }