/// <summary> /// Построить модель фоторамки в САПР Компас 3D /// </summary> /// <param name="photoFrame">Шаблон фоторамки</param> /// <param name="checker">Проверяющий параметры фоторамки</param> /// <exception cref="InvalidOperationException"> /// Вызывается тогда, когда параметры фоторамки /// имеют недопустимые значения.</exception> public void Build(IPhotoFrame photoFrame, IChecker checker) { if (checker.IsValid == false) { var msg = $"Шаблон фоторамки имеет" + $" недопустимые параметры для построения."; throw new InvalidOperationException(msg); } ShowCAD(); _startX = 0; _startY = _startX; var doc = (ksDocument3D)_kompas.Document3D(); doc.Create(); var part = (ksPart)doc.GetPart((short)Part_Type.pTop_Part); if (part == null) { return; } GenerateBlockOnHeight(photoFrame, part); GenerateBlockOnWidth(photoFrame, part); }
/// <summary> /// Инициализация параметров представления модели. /// </summary> public PhotoFrameViewModel() { const double minHeight = 1.0f; const double minForLengthAndWidth = 5.0f; const double max = 100.0f; const double maxInterval = 6.0f; const double value = 5.0f; var outerWidth = new BorderConditions(minForLengthAndWidth, max, max); var outerHeight = new BorderConditions(minHeight, value, minForLengthAndWidth); var outerLength = new BorderConditions(minForLengthAndWidth, max, max); var innerHeight = new BorderConditions(minHeight, value, minForLengthAndWidth); var interval = new BorderConditions(minHeight, value, maxInterval); _photoFrame = new PhotoFrameTemplate(outerWidth, outerHeight, outerLength, innerHeight, interval); _builder = new BuilderPhotoFrame(); }
/// <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"); }
public void Setup() { _photoFrame = GeneratePhotoFrameTemplate(); _checker = _photoFrame as IChecker; _frame = _photoFrame as IPhotoFrame; }
/// <summary> /// Создает модели брусков сторон фоторамки по внешней высоте /// </summary> /// <param name="photoFrame">Шаблон фоторамки</param> /// <param name="part">Текущая сборка детали</param> private void GenerateBlockOnWidth(IPhotoFrame photoFrame, ksPart part) { var basePlane = (ksEntity)part.GetDefaultEntity( (short)Obj3dType.o3d_planeYOZ); var sketch = (ksEntity)part.NewEntity((short)Obj3dType.o3d_sketch); if (sketch == null) { return; } sketch.name = "Эскиз брусков по ширине"; var sketchDef = (ksSketchDefinition)sketch.GetDefinition(); if (sketchDef == null) { return; } sketchDef.SetPlane(basePlane); sketch.Create(); var draw = (ksDocument2D)sketchDef.BeginEdit(); var offsetX = photoFrame.OuterLength; var offsetY = photoFrame.OuterHeight; var dx = photoFrame.OuterLength; DrawSketchBlock(photoFrame, draw, offsetX, offsetY, dx); sketchDef.EndEdit(); var extr = (ksEntity)part.NewEntity( (short)Obj3dType.o3d_bossExtrusion); if (extr == null) { return; } extr.name = "Выдавить бруски по ширине"; var extrDef = (ksBossExtrusionDefinition)extr.GetDefinition(); extrDef.SetSketch(sketch); if (extrDef == null) { return; } extrDef.directionType = (short)Direction_Type.dtReverse; var depthExtrusion = photoFrame.OuterWidth; var angle = 0.0f; extrDef.SetSideParam(false, (short)End_Type.etBlind, depthExtrusion, angle, false); extrDef.SetSketch(sketch); extr.Create(); }