예제 #1
0
        // Создание визуального представления дуги
        public DrawingVisual CreateVisual(double scale)
        {
            Vector center = new Vector(Center.X * scale, Center.Y * scale);
            double radius = Radius * scale;
            // найти начальную точку дуги
            Point startPoint = new Point(radius * Math.Cos(StartAngle * DxfHelper.DegToRad) + center.X,
                                         radius * Math.Sin(StartAngle * DxfHelper.DegToRad) + center.Y);
            // найти конечную точку дуги
            Point endPoint = new Point(radius * Math.Cos(EndAngel * DxfHelper.DegToRad) + center.X,
                                       radius * Math.Sin(EndAngel * DxfHelper.DegToRad) + center.Y);

            // определить угол дуги
            double angle = StartAngle < EndAngel ? EndAngel - StartAngle : 360 - (StartAngle - EndAngel);
            // установить флаг, если угол больше 180 градусов - 1, в обратном случае - 0
            byte isLarge = angle > 180 ? (byte)1 : (byte)0;

            // сформировать строку пути
            string str = string.Format("M{0} {1}A{2} {2} {3} {4} {5} {6} {7}", DxfHelper.DoubleToString(startPoint.X),
                                       DxfHelper.DoubleToString(startPoint.Y), DxfHelper.DoubleToString(radius), 0,
                                       isLarge, 1, DxfHelper.DoubleToString(endPoint.X), DxfHelper.DoubleToString(endPoint.Y));

            DrawingVisual visual = new DrawingVisual();

            using (DrawingContext dc = visual.RenderOpen())
            {
                // создать геометрию
                dc.DrawGeometry(null, new Pen(DxfHelper.GetBrush(Color), 2), Geometry.Parse(str));
            }
            // вернуть объект DrawingVisual с созданной геометрией
            return(visual);
        }
예제 #2
0
        // Создание визуального представления точки
        public DrawingVisual CreateVisual(double scale)
        {
            DrawingVisual visual = new DrawingVisual();

            using (DrawingContext dc = visual.RenderOpen())
            {
                dc.DrawRectangle(DxfHelper.GetBrush(Color), null, new Rect(new Point(Coordinates.X * scale - 1, Coordinates.Y * scale - 1), new Size(2, 2)));
            }
            return(visual);
        }
예제 #3
0
        // Создание визуального представления окружности
        public DrawingVisual CreateVisual(double scale)
        {
            DrawingVisual visual = new DrawingVisual();
            double        radius = Radius * scale;
            Point         center = new Point(Center.X * scale, Center.Y * scale);

            using (DrawingContext dc = visual.RenderOpen())
            {
                dc.DrawEllipse(null, new Pen(DxfHelper.GetBrush(Color), 2.0), center, radius, radius);
            }
            return(visual);
        }
예제 #4
0
        // Создание визуального представления линии
        public DrawingVisual CreateVisual(double scale)
        {
            DrawingVisual visual     = new DrawingVisual();
            Point         startPoint = new Point(StartPoint.X * scale, StartPoint.Y * scale);
            Point         endPoint   = new Point(EndPoint.X * scale, EndPoint.Y * scale);

            using (DrawingContext dc = visual.RenderOpen())
            {
                Pen pen = new Pen(DxfHelper.GetBrush(Color), 2);
                dc.DrawLine(pen, startPoint, endPoint);
            }
            return(visual);
        }
예제 #5
0
        // Метод создания визуального представления
        public DrawingVisual CreateVisual(double scale)
        {
            DrawingVisual visual = new DrawingVisual();

            if (IsFull)    // эллипс полный
            {
                Point center = new Point(Center.X * scale, Center.Y * scale);
                using (DrawingContext dc = visual.RenderOpen())
                {
                    // Создать визуальное представление эллипса
                    dc.DrawEllipse(null, new Pen(DxfHelper.GetBrush(Color), 2.0),
                                   center, majorRadius * scale, minorRadius * scale);
                }

                // задать трансформацию объекту DrawingVisual
                visual.Transform = new RotateTransform();
                // определить центр поворота эллипса
                (visual.Transform as RotateTransform).CenterX = center.X;
                (visual.Transform as RotateTransform).CenterY = center.Y;
                // задать угол поворота
                (visual.Transform as RotateTransform).Angle = rotateAngle;
            }
            else                                                                              // часть эллипса
            {
                Vector startPoint = GetVector(StartParam, scale, rotateAngle);                // найти начальную точку эллипса
                Vector endPoint   = GetVector(EndParam, scale, rotateAngle);                  // найти конечную точку
                byte   isLarge    = EndParam - StartParam > DxfHelper.Pi ? (byte)1 : (byte)0; // определить большая дуга или нет

                // создать строку пути для эллиптической дуги
                string str = string.Format("M{0} {1}A{2} {3} {4} {5} {6} {7} {8}", DxfHelper.DoubleToString(startPoint.X),
                                           DxfHelper.DoubleToString(startPoint.Y), DxfHelper.DoubleToString(majorRadius * scale), DxfHelper.DoubleToString(minorRadius * scale),
                                           DxfHelper.DoubleToString(rotateAngle), isLarge, 1, DxfHelper.DoubleToString(endPoint.X), DxfHelper.DoubleToString(endPoint.Y));
                using (DrawingContext dc = visual.RenderOpen())
                {
                    // создать визуальное представление для эллиптической дуги
                    dc.DrawGeometry(null, new Pen(DxfHelper.GetBrush(Color), 2), Geometry.Parse(str));
                }
            }

            return(visual);
        }