Example #1
0
 public Xline(CADPoint basePoint, CADVector direction)
 {
     _basePoint = basePoint;
     _direction = direction;
 }
Example #2
0
 public Circle2(CADPoint center, double radius)
 {
     this.center = center;
     this.radius = radius;
 }
Example #3
0
 public override void DrawLine(CADPoint startPoint, CADPoint endPoint, bool mdoelToCanvas = true)
 {
     DrawLine(_drawing, thisDC, Selected ? sPen : Pen, startPoint, endPoint);
 }
 public virtual void DrawRay(CADPoint basePoint, CADVector direction, bool mdoelToCanvas = true)
 {
 }
Example #5
0
 public ObjectSnapPoint(ObjectSnapMode type, CADPoint pos)
 {
     Type     = type;
     Position = pos;
 }
 public void DrawEllipse(CADPoint center, double radiusX, double radiusY, bool mdoelToCanvas = true)
 {
     DrawCircle(_drawing, thisDC, FillBrush, Pen, center, radiusX, radiusY, mdoelToCanvas);
 }
 public virtual void DrawRectangle(CADPoint startPoint, double width, double height, bool mdoelToCanvas = true)
 {
     DrawRectangle(_drawing, thisDC, FillBrush, Pen, startPoint, width, height, mdoelToCanvas);
 }
Example #8
0
 public Line(CADPoint startPnt, CADPoint endPnt)
 {
     _startPoint = startPnt;
     _endPoint   = endPnt;
 }
Example #9
0
 public override void Translate(CADVector translation)
 {
     _startPoint += translation;
     _endPoint   += translation;
 }
Example #10
0
 public abstract bool Read(string name, out CADPoint value);
Example #11
0
 public static Point AsWPF(this CADPoint p)
 {
     return(new Point(p.X, p.Y));
 }
Example #12
0
 public abstract bool Write(string name, CADPoint value);
Example #13
0
        internal override bool Cross(Bounding selectBound, Entity entity)
        {
            Arc arc = entity as Arc;

            if (arc == null)
            {
                return(false);
            }

            Bounding arcBounding = arc.Bounding;

            if (selectBound.Contains(arcBounding))
            {
                return(true);
            }

            if (!selectBound.IntersectWith(arcBounding))
            {
                return(false);
            }

            Circle   circle            = new Circle(arc.center, arc.radius);
            CADPoint nearestPntOnBound = new CADPoint(
                System.Math.Max(selectBound.left, System.Math.Min(circle.center.X, selectBound.right)),
                System.Math.Max(selectBound.bottom, System.Math.Min(circle.center.Y, selectBound.top)));

            if (CADPoint.Distance(nearestPntOnBound, circle.center) <= circle.radius)
            {
                double bdLeft   = selectBound.left;
                double bdRight  = selectBound.right;
                double bdTop    = selectBound.top;
                double bdBottom = selectBound.bottom;

                List <CADPoint> pnts = new List <CADPoint>();
                pnts.Add(new CADPoint(bdLeft, bdTop));
                pnts.Add(new CADPoint(bdLeft, bdBottom));
                pnts.Add(new CADPoint(bdRight, bdTop));
                pnts.Add(new CADPoint(bdRight, bdBottom));
                CADVector xp = new CADVector(1, 0);
                foreach (CADPoint pnt in pnts)
                {
                    if (CADPoint.Distance(pnt, circle.center) >= circle.radius)
                    {
                        CADVector v   = pnt - circle.center;
                        double    rad = CADVector.AngleInRadian(xp, v);
                        if (CADVector.Cross(xp, v) < 0)
                        {
                            rad = System.Math.PI * 2 - rad;
                        }

                        if (AngleInRange(rad, arc.startAngle, arc.endAngle))
                        {
                            return(true);
                        }
                    }
                }

                return(false);
            }
            else
            {
                return(false);
            }
        }
Example #14
0
 public override void Translate(CADVector translation)
 {
     _basePoint += translation;
 }
        protected static void DrawRectangle(IDrawing owner, DrawingContext thisDC, Brush fillBrush, Pen pen, CADPoint startPoint, double width, double height, bool mdoelToCanvas = true)
        {
            var p = startPoint;

            if (mdoelToCanvas)
            {
                p = owner.ModelToCanvas(new CADPoint(startPoint.X, startPoint.Y));
            }
            thisDC.DrawRectangle(fillBrush, pen, new Rect(new Point(p.X, p.Y), new Size(width, height)));
        }
Example #16
0
 public override void TransformBy(Matrix3 transform)
 {
     _startPoint = transform * _startPoint;
     _endPoint   = transform * _endPoint;
 }
        public static void DrawXLine(IDrawing owner, DrawingContext thisDC, Pen pen, CADPoint basePoint, CADVector direction, bool mdoelToCanvas = true)
        {
            CADVector dir;
            CADPoint  basePnt;

            if (mdoelToCanvas)
            {
                basePnt = owner.ModelToCanvas(basePoint);
                CADPoint otherPnt = owner.ModelToCanvas(basePoint + direction);
                dir = (otherPnt - basePnt).normalized;
            }
            else
            {
                basePnt = basePoint;
                dir     = direction;
                dir.Normalize();
            }

            double xk = double.MinValue;
            double yk = double.MinValue;

            if (dir.Y != 0)
            {
                double k = basePnt.Y / dir.Y;
                xk = basePnt.X - k * dir.X;
            }
            if (dir.X != 0)
            {
                double k = basePnt.X / dir.X;
                yk = basePnt.Y - k * dir.Y;
            }

            if (xk > 0 ||
                (xk == 0 && dir.X * dir.Y >= 0))
            {
                CADPoint spnt = new CADPoint(xk, 0);
                if (dir.Y < 0)
                {
                    dir = -dir;
                }
                CADPoint epnt = spnt + 10000 * dir;

                DrawLine(owner, thisDC, pen,
                         new CADPoint((float)spnt.X, (float)spnt.Y),
                         new CADPoint((float)epnt.X, (float)epnt.Y), false);
            }
            else if (yk > 0 ||
                     (yk == 0 && dir.X * dir.Y >= 0))
            {
                CADPoint spnt = new CADPoint(0, yk);
                if (dir.X < 0)
                {
                    dir = -dir;
                }
                CADPoint epnt = spnt + 10000 * dir;

                DrawLine(owner, thisDC, pen,
                         new CADPoint((float)spnt.X, (float)spnt.Y),
                         new CADPoint((float)epnt.X, (float)epnt.Y), false);
            }
        }
Example #18
0
 public Selection(ObjectId objectId, CADPoint pickPosition)
 {
     _objectId = objectId;
     _position = pickPosition;
 }
 public virtual void DrawLine(CADPoint startPoint, CADPoint endPoint, bool mdoelToCanvas = true)
 {
     DrawLine(_drawing, thisDC, Pen, startPoint, endPoint, mdoelToCanvas);
 }
Example #20
0
 public Ellipse(CADPoint center, double radiusX, double radiusY)
 {
     _center = center;
     RadiusX = radiusX;
     RadiusY = radiusY;
 }
 public virtual void DrawXLine(CADPoint basePoint, CADVector direction, bool mdoelToCanvas = true)
 {
     DrawXLine(_drawing, thisDC, Pen, basePoint, direction, mdoelToCanvas);
 }
Example #22
0
 public override void Translate(CADVector translation)
 {
     _center += translation;
 }
 public virtual void DrawArc(CADPoint center, double radius, double startAngle, double endAngle, bool mdoelToCanvas = true)
 {
     DrawArc(_drawing, thisDC, Pen, center, radius, startAngle, endAngle, mdoelToCanvas);
 }
        protected static void DrawCircle(IDrawing drawing, DrawingContext thisDC, Brush fillBrush, Pen pen, CADPoint center, double radiusX, double radiusY, bool mdoelToCanvas)
        {
            var p  = center;
            var rx = radiusX;
            var ry = radiusY;

            if (mdoelToCanvas)
            {
                p  = drawing.ModelToCanvas(new CADPoint(center.X, center.Y));
                rx = drawing.ModelToCanvas(radiusX);
                ry = drawing.ModelToCanvas(radiusY);
            }
            thisDC.DrawEllipse(fillBrush, pen, new Point(p.X, p.Y), rx, ry);
        }
Example #25
0
 public virtual void SetGripPointAt(int index, GripPoint gripPoint, CADPoint newPosition)
 {
 }
        /// <summary>
        /// https://stackoverflow.com/questions/16667072/how-to-draw-arc-with-radius-and-start-and-stop-angle
        /// </summary>
        /// <param name="drawing"></param>
        /// <param name="thisDC"></param>
        /// <param name="pen"></param>
        /// <param name="center"></param>
        /// <param name="radius"></param>
        /// <param name="startAngle"></param>
        /// <param name="endAngle"></param>
        /// <param name="mdoelToCanvas"></param>
        protected static void DrawArc(IDrawing drawing, DrawingContext thisDC, Pen pen, CADPoint center, double radius, double startAngle, double endAngle, bool mdoelToCanvas = true)
        {
            CADPoint centerInCanvas = mdoelToCanvas ? drawing.ModelToCanvas(center) : center;
            double   radiusInCanvas = mdoelToCanvas ? drawing.ModelToCanvas(radius) : radius;

            double startAngleInCanvas = MathUtils.NormalizeRadianAngle(-startAngle);
            double endAngleInCanvas   = MathUtils.NormalizeRadianAngle(-endAngle);

            //
            double angle = endAngle - startAngle;

            if (endAngle < startAngle)
            {
                angle += Utils.PI * 2;
            }


            if (radiusInCanvas > 0)
            {
                double a0 = startAngleInCanvas < 0 ? startAngleInCanvas + 2 * Math.PI : startAngleInCanvas;
                double a1 = endAngleInCanvas < 0 ? endAngleInCanvas + 2 * Math.PI : endAngleInCanvas;

                if (a1 < a0)
                {
                    a1 += Math.PI * 2;
                }

                SweepDirection d = SweepDirection.Counterclockwise;
                bool           large;

                bool SmallAngle = false;
                if (SmallAngle)
                {
                    large = false;
                    d     = (a1 - a0) > Math.PI ? SweepDirection.Counterclockwise : SweepDirection.Clockwise;
                }
                else
                {
                    large = (Math.Abs(a1 - a0) < Math.PI);
                }

                Point p0 = centerInCanvas.AsWPF() + new Vector(Math.Cos(a0), Math.Sin(a0)) * radiusInCanvas;
                Point p1 = centerInCanvas.AsWPF() + new Vector(Math.Cos(a1), Math.Sin(a1)) * radiusInCanvas;

                List <PathSegment> segments = new List <PathSegment>
                {
                    new ArcSegment(p1, new Size(radiusInCanvas, radiusInCanvas), 0.0, large, d, true)
                };

                List <PathFigure> figures = new List <PathFigure>
                {
                    new PathFigure(p0, segments, true)
                    {
                        IsClosed = false
                    }
                };

                thisDC.DrawGeometry(null, pen, new PathGeometry(figures, FillRule.EvenOdd, null));
            }
        }
Example #27
0
        private void Zoom(IMouseWheelEventArgs e)
        {
            CADPoint globalPnt_UnderMouse = _drawing.CanvasToModel(new CADPoint(e.X, e.Y));
            CADPoint localPnt_UnderMouse  = new CADPoint(e.X, e.Y);
            //
            // Mouse wheel was spinned.
            // Calculate new scale.
            double currentScale = Scale;

            //
            // Delta > 0 - scrolling to user
            // Delta < 0 - from user
            if (e.Delta > 0)
            {
                // zoom out
                if (currentScale >= m_ScaleList[m_ScaleList.Count - 1])
                {
                    return;
                }

                foreach (double rVal in m_ScaleList)
                {
                    if (currentScale < rVal)
                    {
                        Scale = rVal;
                        break;
                    }
                }
            }
            else
            {
                // zoom in
                if (currentScale <= m_ScaleList[0])
                {
                    return;
                }

                int iIndex = m_ScaleList.Count - 1;
                while (iIndex >= 0)
                {
                    if (currentScale > m_ScaleList[iIndex])
                    {
                        Scale = m_ScaleList[iIndex];
                        break;
                    }
                    --iIndex;
                }
            }

            //
            // Need to save cursor position - cursor should been placed over same point in global coordiantes.
            globalPnt_UnderMouse.X *= Scale;
            globalPnt_UnderMouse.Y *= Scale;

            // reverse Y
            // read comment in GetLocalPoint()
            globalPnt_UnderMouse.Y *= -1;

            _drawing.Origin = globalPnt_UnderMouse - localPnt_UnderMouse;

            // reverse Y
            _drawing.Origin.Y *= -1;

            // m_TempOffsetVector.X = 0;
            //  m_TempOffsetVector.Y = 0;

            _drawing.Canvas.Redraw();
        }
        protected static void DrawLine(IDrawing owner, DrawingContext thisDC, Pen pen, CADPoint startPoint, CADPoint endPoint, bool mdoelToCanvas = true)
        {
            var p1 = startPoint;
            var p2 = endPoint;

            if (mdoelToCanvas)
            {
                p1 = owner.ModelToCanvas(new CADPoint(startPoint.X, startPoint.Y));
                p2 = owner.ModelToCanvas(new CADPoint(endPoint.X, endPoint.Y));
            }
            thisDC.DrawLine(pen, new Point(p1.X, p1.Y), new Point(p2.X, p2.Y));
        }
Example #29
0
 public void AddVertexAt(int index, CADPoint point)
 {
     _vertices.Insert(index, point);
 }
Example #30
0
 public Ray(CADPoint basePoint, CADVector direction)
 {
     _basePoint = basePoint;
     _direction = direction.normalized;
 }