コード例 #1
0
            //---------------------------------------------------------------------------------------------------------
            /// <summary>
            /// Обновление данных геометрии
            /// </summary>
            //---------------------------------------------------------------------------------------------------------
            public override void Update()
            {
                CCadSegment current_figure = mSegments[0];

                mGraphicsPath.StartFigure();

                Int32 current_new_figure = 0;

                for (Int32 i = 0; i < mSegments.Count; i++)
                {
                    CCadSegment current_segment = mSegments[i];

                    // Если новая фигура
                    if (current_segment.IsNewFigure && current_new_figure != i)
                    {
                        // Закрывает текущую фигуру
                        mGraphicsPath.CloseFigure();

                        // Открываем новую фигуру
                        mGraphicsPath.StartFigure();

                        current_figure     = current_segment;
                        current_new_figure = i;
                    }

                    switch (current_segment.SegmentType)
                    {
                    case TCadSegmentType.Points:
                    {
                        CCadSegmentPoints points = current_segment as CCadSegmentPoints;
                        mGraphicsPath.AddLines(points.Points.ConvertToDrawingPointsF());
                    }
                    break;

                    case TCadSegmentType.Line:
                    {
                        CCadSegmentLine line = current_segment as CCadSegmentLine;
                        //mGraphicsPath.AddLine(line.StartPoint, line.EndPoint);
                    }
                    break;

                    case TCadSegmentType.Arc:
                    {
                        CCadSegmentArc arc = current_segment as CCadSegmentArc;
                        mGraphicsPath.AddArc(arc.BasePoint.X, arc.BasePoint.Y, arc.RadiusX * 2, arc.RadiusY * 2,
                                             arc.RotationAngle, 12);
                    }
                    break;

                    case TCadSegmentType.Bezier:
                        break;

                    default:
                        break;
                    }
                }

                //mBoundsRect = new Rect2Df(mGraphicsPath.GetBounds());
            }
コード例 #2
0
            //---------------------------------------------------------------------------------------------------------
            /// <summary>
            /// Обновление данных геометрии
            /// </summary>
            //---------------------------------------------------------------------------------------------------------
            public override void Update()
            {
                using (StreamGeometryContext sgc = mGeometry.Open())
                {
                    CCadSegment current_figure = mSegments[0];

                    sgc.BeginFigure(current_figure.BasePoint, current_figure.IsFilled, current_figure.IsClosed);

                    Int32 current_new_figure = 0;

                    for (Int32 i = 0; i < mSegments.Count; i++)
                    {
                        CCadSegment current_segment = mSegments[i];

                        // Если новая фигура
                        if (current_segment.IsNewFigure && current_new_figure != i)
                        {
                            // Закрывает текущую фигуру

                            // Открываем новую фигуру
                            sgc.BeginFigure(current_segment.BasePoint, current_segment.IsFilled, current_segment.IsClosed);

                            current_figure     = current_segment;
                            current_new_figure = i;
                        }

                        switch (current_segment.SegmentType)
                        {
                        case TCadSegmentType.Points:
                        {
                            CCadSegmentPoints points = current_segment as CCadSegmentPoints;
                            sgc.PolyLineTo(points.Points.ConvertToWindowsPoints(), mIsStroked, true);
                        }
                        break;

                        case TCadSegmentType.Line:
                        {
                            CCadSegmentLine line = current_segment as CCadSegmentLine;
                            sgc.LineTo(line.EndPoint, mIsStroked, true);
                        }
                        break;

                        case TCadSegmentType.Arc:
                        {
                            CCadSegmentArc arc = current_segment as CCadSegmentArc;
                            sgc.ArcTo(arc.EndPoint, new Size(arc.RadiusX, arc.RadiusY),
                                      arc.RotationAngle, arc.IsLargeArc, arc.IsClockwiseDirection ? SweepDirection.Clockwise :
                                      SweepDirection.Counterclockwise, mIsStroked, true);
                        }
                        break;

                        case TCadSegmentType.Bezier:
                            break;

                        default:
                            break;
                        }
                    }

                    // Закрывает текущую фигуру
                    sgc.Close();
                }

                mBoundsRect = new Rect2Df(mGeometry.Bounds);
            }
コード例 #3
0
            //---------------------------------------------------------------------------------------------------------
            /// <summary>
            /// Обновление данных геометрии
            /// </summary>
            //---------------------------------------------------------------------------------------------------------
            public override void Update()
            {
                XDisposer.SafeDispose(ref mD2DGeometry);
                mD2DGeometry     = new Direct2D.PathGeometry(XDirect2DManager.D2DFactory);
                mD2DGeometrySink = mD2DGeometry.Open();

                CCadSegment current_figure = mSegments[0];

                mD2DGeometrySink.BeginFigure(current_figure.BasePoint.ToRawVector2(), current_figure.IsFilled ? Direct2D.FigureBegin.Filled :
                                             Direct2D.FigureBegin.Hollow);

                Int32 current_new_figure = 0;

                for (Int32 i = 0; i < mSegments.Count; i++)
                {
                    CCadSegment current_segment = mSegments[i];

                    // Если новая фигура
                    if (current_segment.IsNewFigure && current_new_figure != i)
                    {
                        // Закрывает текущую фигуру
                        mD2DGeometrySink.EndFigure(current_figure.IsClosed ? Direct2D.FigureEnd.Closed : Direct2D.FigureEnd.Open);

                        // Открываем новую фигуру
                        mD2DGeometrySink.BeginFigure(current_segment.BasePoint.ToRawVector2(),
                                                     current_segment.IsFilled ? Direct2D.FigureBegin.Filled : Direct2D.FigureBegin.Hollow);

                        current_figure     = current_segment;
                        current_new_figure = i;
                    }

                    switch (current_segment.SegmentType)
                    {
                    case TCadSegmentType.Points:
                    {
                        CCadSegmentPoints points = current_segment as CCadSegmentPoints;
                        mD2DGeometrySink.AddLines(points.Points.ConvertToDirect2DRawVectors());
                    }
                    break;

                    case TCadSegmentType.Line:
                    {
                        CCadSegmentLine line = current_segment as CCadSegmentLine;
                        mD2DGeometrySink.AddLine(line.EndPoint.ToRawVector2());
                    }
                    break;

                    case TCadSegmentType.Arc:
                    {
                        CCadSegmentArc      arc         = current_segment as CCadSegmentArc;
                        Direct2D.ArcSegment arc_segment = new Direct2D.ArcSegment();

                        arc_segment.ArcSize        = arc.mIsLargeArc ? Direct2D.ArcSize.Large : Direct2D.ArcSize.Small;
                        arc_segment.Point          = arc.mEndPoint.ToRawVector2();
                        arc_segment.RotationAngle  = arc.mRotationAngle;
                        arc_segment.Size           = new Size2F(arc.mRadiusX, arc.mRadiusY);
                        arc_segment.SweepDirection = arc.mIsClockwiseDirection ? Direct2D.SweepDirection.Clockwise : Direct2D.SweepDirection.CounterClockwise;

                        mD2DGeometrySink.AddArc(arc_segment);
                    }
                    break;

                    case TCadSegmentType.Bezier:
                        break;

                    default:
                        break;
                    }
                }

                // Закрывает текущую фигуру
                mD2DGeometrySink.EndFigure(current_figure.IsClosed ? Direct2D.FigureEnd.Closed : Direct2D.FigureEnd.Open);

                mD2DGeometrySink.Close();

                XDisposer.SafeDispose(ref mD2DGeometrySink);
                mBoundsRect = mD2DGeometry.GetWidenedBounds(2).ToRect();
            }