//---------------------------------------------------------------------------------------------------------
            /// <summary>
            /// Конструктор копирования
            /// </summary>
            /// <param name="source">Источник копии</param>
            /// <param name="add_to_draft">Добавлять ли в чертеж источника</param>
            //---------------------------------------------------------------------------------------------------------
            public CCadShapeLine(CCadShapeLine source, Boolean add_to_draft = true)
                : base(source, add_to_draft)
            {
                mStartPoint = source.mStartPoint;
                mEndPoint   = source.mEndPoint;

                mHandleRects.Add(Rect2Df.Empty);
                mHandleRects.Add(Rect2Df.Empty);
                mHandleRects.Add(Rect2Df.Empty);

                mPrimitive = source.mPrimitive.Duplicate() as CCadPrimitiveLine;
            }
            //---------------------------------------------------------------------------------------------------------
            /// <summary>
            /// Окончание захвата от управления курсора
            /// </summary>
            /// <param name="point">Точка в координатах канвы</param>
            //---------------------------------------------------------------------------------------------------------
            public override void EndCapturePosition(ref Vector2Df point)
            {
                // Если была включена привязка
                if (XCadManager.CanvasViewer.SnapIsExsisting)
                {
                    // Смещение курсора мыши в координатах канвы от текущей точки привязки
                    Vector2Df snap_offset = XCadManager.CanvasViewer.SnapMouseOffsetCanvas;
                    snap_offset -= XCadManager.Editor.CapturePointOffset;

                    if (this == XCadManager.Editor.CaptureElement)
                    {
                        // Корректируем на величину смещения от опорной точки элемента
                        Vector2Df snap_point = XCadManager.CanvasViewer.SnapPoint - XCadManager.Editor.CapturePointOffset;
                        UpdateCapturePosition(ref snap_point, ref snap_offset);
                    }
                    else
                    {
                        // Графический элемент в составе множества - только перемещение
                        // Перемещаем графический элемент
                        mStartPoint += snap_offset;
                        mEndPoint   += snap_offset;
                    }

                    SetHandleRects();
                }

                // Если было включено копирование
                if (XCadManager.Editor.ModifyIsCopy)
                {
                    // 1) Создаем новый объект
                    CCadShapeLine line = Duplicate() as CCadShapeLine;
                    //mBaseDocument.AddExistingElement(line);
                    line.UpdateBoundsRect();

                    // 2) Восстанавливаем старые координаты
                    mStartPoint = mCachedStartPoint;
                    mEndPoint   = mCachedEndPoint;

                    // 3) Добавляем новый в объекты копирования
                    //XCadManager.Editor.CopyElements.Add(line);
                }

                UpdateBoundsRect();
                NotifyPropertyChanged(PropertyArgsStartPoint);
                NotifyPropertyChanged(PropertyArgsEndPoint);
                NotifyPropertyChanged(PropertyArgsLocation);

                mHandleIndex = -1;
                SetHandleCursor();

                // Обновляем канву
                //XCadManager.Canvas.Update();
            }
            //---------------------------------------------------------------------------------------------------------
            /// <summary>
            /// Окончание захвата от управления курсора
            /// </summary>
            /// <param name="point">Точка в координатах канвы</param>
            //---------------------------------------------------------------------------------------------------------
            public override void EndCapturePosition(ref Vector2Df point)
            {
                // Если была включена привязка
                if (XCadManager.CanvasViewer.SnapIsExsisting)
                {
                    if (this == XCadManager.Editor.CaptureElement)
                    {
                        //Vector2Df snap_point = //XCadManager.CanvasViewer.SnapPoint;
                        //Vector2Df snap_offset = //XCadManager.CanvasViewer.SnapMouseOffsetCanvasOfCapture;

                        //UpdateCapturePosition(ref snap_point, ref snap_offset);
                    }
                    else
                    {
                        // Графический элемент в составе множества - только перемещение
                        // Перемещаем графический элемент
                        //Vector2Df delta = XCadManager.CanvasViewer.SnapMouseOffsetCanvasOfCapture;
                        //mStartPoint += delta;
                        //mEndPoint += delta;
                    }

                    SetHandleRects();
                }

                // Если было включено копирование
                if (XCadManager.Editor.ModifyIsCopy)
                {
                    // 1) Создаем новый объект
                    CCadShapeLine line = Duplicate() as CCadShapeLine;
                    //mBaseDocument.AddExistingElement(line);
                    line.UpdateBoundsRect();

                    // 2) Восстанавливаем старые координаты
                    //mStartPoint = mCachedStartPoint;
                    //mEndPoint = mCachedEndPoint;

                    // 3) Добавляем новый в объекты копирования
                    //XCadManager.Editor.CopyElements.Add(line);
                }

                //UpdateBoundsRect();
                NotifyPropertyChanged(PropertyArgsStartPoint);
                NotifyPropertyChanged(PropertyArgsEndPoint);

                mHandleIndex = -1;
                SetHandleCursor();
            }
Esempio n. 4
0
            //---------------------------------------------------------------------------------------------------------
            /// <summary>
            /// Создание фигуры
            /// </summary>
            /// <param name="type_name">Имя типа фигуры</param>
            /// <param name="shape_name">Имя фигуры</param>
            /// <returns>Созданная фигура</returns>
            //---------------------------------------------------------------------------------------------------------
            public static ICadShape CreateShape(String type_name, String shape_name)
            {
                ICadShape shape = null;

                if (type_name.IndexOf("ShapeLine") > -1)
                {
                    shape = new CCadShapeLine(Vector2Df.Zero, new Vector2Df(10, 10));
                }

                if (type_name.IndexOf("ShapeRect") > -1)
                {
                    shape = new CCadShapeRect(Vector2Df.Zero, 10, 10, shape_name);
                }

                if (type_name.IndexOf("ShapeImage") > -1)
                {
                    shape = new CCadShapeImage(Vector2Df.Zero, TCadImageSource.Empty, shape_name);
                }

                if (type_name.IndexOf("ShapeText") > -1)
                {
                    shape = new CCadShapeText(Vector2Df.Zero, "Текст", shape_name);
                }

                if (type_name.IndexOf("ShapeEllipse") > -1)
                {
                    shape = new CCadShapeEllipse(Vector2Df.Zero, 1, 1, shape_name);
                }

                if (type_name.IndexOf("ShapeArc") > -1)
                {
                    shape = new CCadShapeArc();
                }

                if (type_name.IndexOf("ShapePolyline") > -1)
                {
                    shape = new CCadShapePolyline();
                }

                if (type_name.IndexOf("ShapeTable") > -1)
                {
                    shape = new CCadShapeTable();
                }

                return(shape);
            }