コード例 #1
0
ファイル: Builder.cs プロジェクト: M584/photo_frame
        /// <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);
        }
コード例 #2
0
        /// <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();
        }
コード例 #3
0
ファイル: Builder.cs プロジェクト: M584/photo_frame
        /// <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");
        }
コード例 #4
0
 public void Setup()
 {
     _photoFrame = GeneratePhotoFrameTemplate();
     _checker    = _photoFrame as IChecker;
     _frame      = _photoFrame as IPhotoFrame;
 }
コード例 #5
0
ファイル: Builder.cs プロジェクト: M584/photo_frame
        /// <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();
        }