示例#1
0
        //--------------------------------------------------------------------------------------------------

        public void SetAlignedDimension(Pnt2d dimLinePoint, Pnt2d firstPoint, Pnt2d secondPoint)
        {
            DimensionType = Type.Aligned;
            RefPoint0     = dimLinePoint;
            RefPoint3     = firstPoint;
            RefPoint4     = secondPoint;
        }
示例#2
0
        //--------------------------------------------------------------------------------------------------

        public DxfDomDimension(string layer, string blockName, Pnt2d textPointECS, double rotation)
        {
            LayerName  = layer;
            BlockName  = blockName;
            RefPoint1E = textPointECS;
            Rotation   = rotation;
        }
示例#3
0
        //--------------------------------------------------------------------------------------------------

        public void SetLinearDimension(Pnt2d dimLinePoint, Pnt2d firstExtLineStart, Pnt2d secondExtLineStart)
        {
            DimensionType = Type.Linear;
            RefPoint0     = dimLinePoint;
            RefPoint3     = firstExtLineStart;
            RefPoint4     = secondExtLineStart;
        }
示例#4
0
        public static Pnt2d FindEllipseCenterFromEndpoints(Pnt2d startPnt, Pnt2d endPnt, double rX, double rY, double angle, bool sense)
        {
            // https://www.w3.org/TR/SVG/implnote.html#ArcImplementationNotes
            // F.6.5.1
            var matRotation = new Mat2d();

            matRotation.SetRotation(-angle);
            var v1 = new XY(startPnt.X - endPnt.X, startPnt.Y - endPnt.Y)
                     .Multiplied(0.5)
                     .Multiplied(matRotation);

            // F.6.5.2
            var denom = rX.Sqr() * v1.Y.Sqr() + rY.Sqr() * v1.X.Sqr();
            var numer = rX.Sqr() * rY.Sqr() - denom;

            var root = Math.Sqrt(Math.Abs(numer / denom)) * (sense ? -1 : 1);
            var c1   = new XY(rX * v1.Y / rY, -(rY * v1.X / rX)).Multiplied(root);

            // F.6.5.3
            matRotation.SetRotation(angle);
            var c = new XY(startPnt.X + endPnt.X, startPnt.Y + endPnt.Y)
                    .Multiplied(0.5)
                    .Added(c1.Multiplied(matRotation));

            return(c.ToPnt());
        }
        //--------------------------------------------------------------------------------------------------

        void _FinishPivotPoint(ToolAction toolAction)
        {
            if (!(toolAction is PointAction pointAction))
            {
                return;
            }

            _Plane       = WorkspaceController.Workspace.WorkingPlane;
            _PointPlane1 = pointAction.PointOnPlane;
            _PivotPoint  = pointAction.Point;

            pointAction.Stop();
            pointAction = new PointAction(this);
            if (!WorkspaceController.StartToolAction(pointAction))
            {
                return;
            }
            pointAction.Previewed += _PreviewRadius;
            pointAction.Finished  += _FinishRadius;

            _CurrentPhase = Phase.Radius;
            StatusText    = "Select radius.";

            _ValueHudElement = WorkspaceController.HudManager?.CreateElement <ValueHudElement>(this);
            if (_ValueHudElement != null)
            {
                _ValueHudElement.Label         = "Radius:";
                _ValueHudElement.Units         = ValueUnits.Length;
                _ValueHudElement.ValueEntered += _ValueEntered;
            }

            WorkspaceController.HudManager?.SetCursor(Cursors.SetRadius);
        }
示例#6
0
        //--------------------------------------------------------------------------------------------------

        internal override bool Read(XmlReader reader, SvgConverter conv)
        {
            bool   res = false;
            string sx  = reader.GetAttribute("cx") ?? "0";
            string sy  = reader.GetAttribute("cy") ?? "0";
            string srx = reader.GetAttribute("rx");
            string sry = reader.GetAttribute("ry");

            if (!base.Read(reader, conv))
            {
                return(false);
            }

            if (!sx.IsNullOrEmpty() && !sy.IsNullOrEmpty() && !srx.IsNullOrEmpty() && !sry.IsNullOrEmpty())
            {
                var localCenter = new Pnt2d(conv.FromSvgLength(sx), conv.FromSvgLength(sy));
                Center    = localCenter;
                RadiusX   = conv.FromSvgLength(srx);
                RadiusY   = conv.FromSvgLength(sry);
                RimPointX = (localCenter + new Pnt2d(RadiusX, 0));
                RimPointY = (localCenter + new Pnt2d(0, RadiusY));

                conv.Transform(ref Center);
                conv.Transform(ref RimPointX);
                conv.Transform(ref RimPointY);
                res = true;
            }

            conv.PopTransform();
            return(res);
        }
示例#7
0
        public void SmoothCorner_BezierArc()
        {
            var sketch      = Sketch.Create();
            var p1          = sketch.AddPoint(new Pnt2d(0, 0));
            var p2          = sketch.AddPoint(new Pnt2d(2, 9));
            var p3          = sketch.AddPoint(new Pnt2d(10, 10));
            var p4          = sketch.AddPoint(new Pnt2d(20, 0));
            var p5          = sketch.AddPoint(new Pnt2d(18, 7));
            var bezier1     = new SketchSegmentBezier(p1, p2, p3);
            var s1          = sketch.AddSegment(bezier1);
            var arc         = new SketchSegmentArc(p3, p4, p5);
            var s2          = sketch.AddSegment(arc);
            var constraint1 = new SketchConstraintSmoothCorner(p3, true);
            var c1          = sketch.AddConstraint(constraint1);

            Assert.IsTrue(sketch.SolveConstraints(true));

            var tan1      = new Vec2d(sketch.Points[p2], sketch.Points[p3]);
            var parameter = new double[2];
            var circle    = arc.GetCircle(sketch.Points, parameter);
            var pnt       = new Pnt2d();
            var tan2      = new Vec2d();

            ElCLib.D1(parameter[0], circle, ref pnt, ref tan2);
            Assert.IsTrue(tan1.IsParallel(tan2, 0.01));
        }
示例#8
0
        //--------------------------------------------------------------------------------------------------

        bool _CalcArcRimPoints(Pnt2d endPoint, int mergeCandidateIndex = -1)
        {
            // Project end point on circle
            if ((_StartPoint.Distance(endPoint) <= 0) || (endPoint.Distance(_CenterPoint) <= 0) || (_StartPoint.Distance(_CenterPoint) <= 0))
            {
                return(false);
            }

            var ellipse = Core.Geom.Geom2dUtils.MakeEllipse(_CenterPoint, _StartPoint, endPoint, _ArcDirection);

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

            // If the last parameter was small (a*0.25), and the current is  high (a*0.5), toggle direction
            var startParameter = ElCLib.Parameter(ellipse, _StartPoint);
            var endParameter   = ElCLib.Parameter(ellipse, endPoint);
            var maxParameter   = Math.Max(startParameter, endParameter);

            if (((startParameter > endParameter) && _LastParameterWasEnd) ||
                ((startParameter < endParameter) && !_LastParameterWasEnd))
            {
                _LastEndParameter    = maxParameter;
                _LastParameterWasEnd = !_LastParameterWasEnd;
            }
            else
            {
                if (maxParameter > 0.0001)
                {
                    var qa = ellipse.MajorRadius() / 4;
                    if (((_LastEndParameter < qa) && (maxParameter > qa * 2)) ||
                        ((maxParameter < qa) && (_LastEndParameter > qa * 2)))
                    {
                        _ArcDirection = !_ArcDirection;
                        ellipse       = Core.Geom.Geom2dUtils.MakeEllipse(_CenterPoint, _StartPoint, endPoint, _ArcDirection);
                        // Debug.WriteLine("Toggle direction");
                    }
                    // Debug.WriteLine("New: {0}     Last: {1}", maxParameter, _LastEndParameter);
                    _LastEndParameter = maxParameter;
                }
            }

            // Catch points
            if (_ArcDirection)
            {
                _Points[1]            = _StartPoint;
                _MergePointIndices[1] = _StartPointMergeIndex;
                _Points[2]            = endPoint;
                _MergePointIndices[2] = mergeCandidateIndex;
            }
            else
            {
                _Points[1]            = endPoint;
                _MergePointIndices[1] = mergeCandidateIndex;
                _Points[2]            = _StartPoint;
                _MergePointIndices[2] = _StartPointMergeIndex;
            }
            return(true);
        }
示例#9
0
        internal override bool Read(XmlReader reader, SvgConverter conv)
        {
            bool   res = false;
            string sx  = reader.GetAttribute("x") ?? "0";
            string sy  = reader.GetAttribute("y") ?? "0";
            string sw  = reader.GetAttribute("width") ?? "0";
            string sh  = reader.GetAttribute("height") ?? "0";
            string srx = reader.GetAttribute("rx") ?? "0";
            string sry = reader.GetAttribute("ry") ?? "0";

            if (!base.Read(reader, conv))
            {
                return(false);
            }

            if (!(sx.IsNullOrEmpty() && sy.IsNullOrEmpty() && sw.IsNullOrEmpty() && sh.IsNullOrEmpty()))
            {
                Start = new Pnt2d(conv.FromSvgLength(sx), conv.FromSvgLength(sy));
                conv.Transform(ref Start);
                Width         = conv.FromSvgLength(sw);
                Height        = -conv.FromSvgLength(sh);
                CornerRadiusX = conv.FromSvgLength(srx);
                CornerRadiusY = -conv.FromSvgLength(sry);
                res           = true;
            }

            conv.PopTransform();
            return(res);
        }
示例#10
0
        //--------------------------------------------------------------------------------------------------

        #endregion

        #region Elements

        public int AddPoint(Pnt2d point)
        {
            var index = Points.Keys.Any() ? Points.Keys.Max() + 1 : 0;

            Points.Add(index, point);
            return(index);
        }
示例#11
0
        //--------------------------------------------------------------------------------------------------

        void IDrawingRenderer.Text(string text, Pnt2d position, double rotation)
        {
            var fontSize = (_CurrentFontStyle?.Size ?? 3.0) / 1.3; // assumed EU/EO = 0.3 * H
            var entity   = new DxfDomText(_CurrentLayerName, position, fontSize, -rotation, text);

            _AddEntity(entity);
        }
示例#12
0
        //--------------------------------------------------------------------------------------------------

        #endregion

        #region Paths

        protected void InitPathExport()
        {
            CurrentPath        = new SvgPathElement();
            _PathStart         = new Pnt2d();
            _PathPosition      = new Pnt2d();
            _SubPathStartIndex = 0;
        }
示例#13
0
        //--------------------------------------------------------------------------------------------------

        bool _AddEllipicalArcSegment(SketchSegmentEllipticalArc arcSegment, Pnt2d start, Pnt2d end)
        {
            var parameters = new double[2];
            var ellipse    = arcSegment.GetEllipse(_Sketch.Points, parameters);

            if (ellipse == null)
            {
                return(false);
            }
            double rotAngle = ellipse.XAxis().Angle(new Ax2d(ellipse.Location(), Dir2d.DX));
            double length   = parameters[1] - parameters[0];
            var    size     = length < Math.PI ? SvgArcSize.Small : SvgArcSize.Large;
            var    sense    = ellipse.Axis().Sense() > 0;

            if (start == _Sketch.Points[arcSegment.EndPoint])
            {
                sense = !sense; // Sense was inverted by interchanged start/end point
            }
            var sweep = sense ? SvgArcSweep.Positive : SvgArcSweep.Negative;

            var svgSegment = new SvgPathSegArc(start, ellipse.MajorRadius(), ellipse.MinorRadius(), rotAngle.ToDeg(), size, sweep, end);

            _CurrentPath.Segments.Add(svgSegment);
            return(true);
        }
示例#14
0
        //--------------------------------------------------------------------------------------------------

        void _FinishPivotPoint(ToolAction toolAction)
        {
            if (!(toolAction is PointAction pointAction))
            {
                return;
            }

            _ClearPreviews();

            _Plane       = WorkspaceController.Workspace.WorkingPlane;
            _PointPlane1 = pointAction.PointOnPlane;

            pointAction.Stop();
            pointAction            = new PointAction(this);
            pointAction.Previewed += _PreviewBaseRect;
            pointAction.Finished  += _FinishBaseRect;
            if (!WorkspaceController.StartToolAction(pointAction))
            {
                return;
            }

            _CurrentPhase = Phase.BaseRect;
            StatusText    = "Select opposite corner point.";

            _MultiValueHudElement = WorkspaceController.HudManager?.CreateElement <MultiValueHudElement>(this);
            if (_MultiValueHudElement != null)
            {
                _MultiValueHudElement.Label1             = "Length:";
                _MultiValueHudElement.Units1             = ValueUnits.Length;
                _MultiValueHudElement.Label2             = "Width:";
                _MultiValueHudElement.Units2             = ValueUnits.Length;
                _MultiValueHudElement.MultiValueEntered += _MultiValueEntered;
            }
        }
示例#15
0
        //--------------------------------------------------------------------------------------------------

        bool _AddLineSegment(SketchSegmentLine segment, Pnt2d start, Pnt2d end)
        {
            var svgSegment = new SvgPathSegLineto(start, end);

            _CurrentPath.Segments.Add(svgSegment);
            return(true);
        }
示例#16
0
        //--------------------------------------------------------------------------------------------------

        void _SetEndPoint(Pnt2d point, int mergeCandidateIndex)
        {
            // End point
            if (_Points[0].Distance(point) < 0.001)
            {
                // Minimum length not met
                _PointAction.Reset();
                return;
            }

            _Points[1]            = point;
            _Points[2]            = point;
            _MergePointIndices[2] = mergeCandidateIndex;

            _Segment = new SketchSegmentBezier(0, 1, 2);

            _Element            = new SketchEditorSegmentElement(_SketchEditorTool, -1, _Segment, _SketchEditorTool.Transform, _SketchEditorTool.Sketch.Plane);
            _Element.IsCreating = true;
            _Element.OnPointsChanged(_Points, null);

            _HintLine.Remove();
            _HintLine = null;

            _SketchEditorTool.WorkspaceController.HudManager?.RemoveElement(_ValueHudElement);
            _ValueHudElement = null;

            _SketchEditorTool.StatusText = "Select control point for line.";

            _PointAction.Reset();
            pointsFinished++;

            _SketchEditorTool.WorkspaceController.Invalidate();
            _SketchEditorTool.WorkspaceController.UpdateSelection();
        }
        public static IEnumerable <SvgPathSegment> Create(SvgPathSegment lastSegment, string commandString, SvgConverter conv)
        {
            if (!conv.TrySplitValues(commandString.Substring(1), out var values, false))
            {
                yield break;
            }

            int valuePos = 0;

            while (valuePos < values.Length)
            {
                var start = new Pnt2d();
                if (lastSegment != null)
                {
                    start = lastSegment.End;
                }

                double      rx    = values[0] * conv.Scale;
                double      ry    = values[1] * conv.Scale;
                double      angle = values[2];
                SvgArcSize  size  = values[3] == 0 ? SvgArcSize.Small : SvgArcSize.Large;
                SvgArcSweep sweep = values[4] == 0 ? SvgArcSweep.Negative : SvgArcSweep.Positive;
                Pnt2d       end   = new Pnt2d(values[5] * conv.Scale, values[6] * conv.Scale);
                if (char.IsLower(commandString[0]))
                {
                    end += start;
                }
                valuePos += 7;

                lastSegment = new SvgPathSegArc(start, rx, ry, angle, size, sweep, end);
                yield return(lastSegment);
            }
        }
        //--------------------------------------------------------------------------------------------------

        void _SetSecondPoint(Pnt2d point, int mergeCandidateIndex)
        {
            if (Math.Abs(_Points[0].X - point.X) < 0.001 ||
                Math.Abs(_Points[0].Y - point.Y) < 0.001)
            {
                // Minimum length not met
                _PointAction.Reset();
                return;
            }

            _PointAction.Stop();

            _UpdateCornerPoints(point);
            _MergePointIndices[1] = -1;
            _MergePointIndices[2] = mergeCandidateIndex;
            _MergePointIndices[3] = -1;

            var constraints = new SketchConstraintPerpendicular[4];

            constraints[0] = new SketchConstraintPerpendicular(0, 1);
            constraints[1] = new SketchConstraintPerpendicular(1, 2);
            constraints[2] = new SketchConstraintPerpendicular(2, 3);
            constraints[3] = new SketchConstraintPerpendicular(3, 0);

            _SketchEditorTool.FinishSegmentCreation(_Points, _MergePointIndices, _Segments, constraints);
        }
示例#19
0
        //--------------------------------------------------------------------------------------------------

        void _ImportArc(DxfDomCircle dxfCircle)
        {
            Pnt2d  center = dxfCircle.CenterPoint;
            double radius = dxfCircle.Radius;

            if (radius <= 0)
            {
                return;
            }

            var startParam = dxfCircle.StartAngle.ToRad();
            var endParam   = dxfCircle.EndAngle.ToRad();

            if (endParam < startParam)
            {
                endParam += 2 * Math.PI;
            }

            var geomCircle = new Geom2d_Circle(new Ax2d(center, Dir2d.DX), radius);

            var startIndex = _AddPoint(geomCircle.Value(startParam));
            var endIndex   = _AddPoint(geomCircle.Value(endParam));
            var rimIndex   = _AddPoint(geomCircle.Value(startParam.Lerp(endParam, 0.5)), false);

            if (startIndex != endIndex)
            {
                _Segments.Add(new SketchSegmentArc(startIndex, endIndex, rimIndex));
            }
        }
示例#20
0
        //--------------------------------------------------------------------------------------------------

        public override bool OnMouseDown(MouseEventData data)
        {
            if (data.DetectedEntities.Count == 0)
            {
                double u = 0, v = 0;
                if (Gizmo.IsPartDetected(AIS_TranslationGizmo2D.Part.Part_Plane))
                {
                    _MoveConstraintX = false;
                    _MoveConstraintY = false;
                    _Moving          = true;
                }
                else if (Gizmo.IsPartDetected(AIS_TranslationGizmo2D.Part.Part_XAxis))
                {
                    _MoveConstraintX = false;
                    _MoveConstraintY = true;
                    _Moving          = true;
                }
                else if (Gizmo.IsPartDetected(AIS_TranslationGizmo2D.Part.Part_YAxis))
                {
                    _MoveConstraintX = true;
                    _MoveConstraintY = false;
                    _Moving          = true;
                }
                if (_Moving)
                {
                    ElSLib.Parameters(_Sketch.Plane, data.PointOnPlane, ref u, ref v);
                    _MoveStartPoint = new Pnt2d(u, v);
                    return(true);
                }
            }
            return(base.OnMouseDown(data));
        }
示例#21
0
        //--------------------------------------------------------------------------------------------------

        bool _CalcArcRimPoints(Pnt2d endPoint)
        {
            // Project end point on circle
            var startPoint = _Points[0];

            if ((startPoint.Distance(endPoint) <= 0) || (endPoint.Distance(_CenterPoint) <= 0) || (startPoint.Distance(_CenterPoint) <= 0))
            {
                return(false);
            }

            var xAxis        = new Ax2d(_CenterPoint, new Dir2d(new Vec2d(_CenterPoint, startPoint)));
            var radius       = _CenterPoint.Distance(startPoint);
            var circ         = new gp_Circ2d(xAxis, radius, _ArcDirection);
            var projEndPoint = new Geom2dAPI_ProjectPointOnCurve(endPoint, new Geom2d_Circle(circ)).NearestPoint();

            // Check if we should toggle the direction
            var endParameter = ElCLib.Parameter(circ, projEndPoint);

            // If the last parameter was very small (~PI/2), and the current is very high (~PI*1.5), toggle direction
            if (((_LastEndParameter < 1) && (endParameter > 5)) ||
                ((endParameter < 1) && (_LastEndParameter > 5)))
            {
                _ArcDirection = !_ArcDirection;
                circ          = new gp_Circ2d(xAxis, radius, _ArcDirection);
                endParameter  = ElCLib.Parameter(circ, projEndPoint);
            }
            _LastEndParameter = endParameter;

            // Calc rim point
            var rimPoint = ElCLib.Value(endParameter / 2, circ);

            _Points[1] = projEndPoint;
            _Points[2] = rimPoint;
            return(true);
        }
示例#22
0
        //--------------------------------------------------------------------------------------------------

        internal override bool Read(XmlReader reader, SvgConverter conv)
        {
            bool   res = false;
            string sx1 = reader.GetAttribute("x1") ?? "0";
            string sy1 = reader.GetAttribute("y1") ?? "0";
            string sx2 = reader.GetAttribute("x2") ?? "0";
            string sy2 = reader.GetAttribute("y2") ?? "0";

            if (!base.Read(reader, conv))
            {
                return(false);
            }

            if (!(sx1.IsNullOrEmpty() && sy1.IsNullOrEmpty() && sx2.IsNullOrEmpty() && sy2.IsNullOrEmpty()))
            {
                Start = new Pnt2d(conv.FromSvgLength(sx1), conv.FromSvgLength(sy1));
                conv.Transform(ref Start);
                End = new Pnt2d(conv.FromSvgLength(sx1), conv.FromSvgLength(sy1));
                conv.Transform(ref End);
                res = true;
            }

            conv.PopTransform();
            return(res);
        }
示例#23
0
        //--------------------------------------------------------------------------------------------------

        void _AddBSplineCurve(Geom2d_BSplineCurve bspline, double first, double last)
        {
            // Cut spline
            bspline = Geom2dConvert.SplitBSplineCurve(bspline, first, last, 0.00001);

            if (_Document.Flags.HasFlag(DxfFlags.ExportSplineAsPolygon))
            {
                _AddPolygonCurve(bspline);
                return;
            }

            if (bspline.Degree() > 3)
            {
                // Try to reduce the order of the curve
                var continuity = bspline.Continuity();
                if (continuity != GeomAbs_Shape.GeomAbs_C0)
                {
                    continuity = GeomAbs_Shape.GeomAbs_C1;
                }

                var converter = new Geom2dConvert_ApproxCurve(bspline, _Precision * 10.0, continuity, 100, 3);
                if (!(converter.IsDone() && converter.HasResult()))
                {
                    Messages.Warning("DxfExporter: BSpline curve has an undecreasable degree of " + bspline.Degree() + ".");
                    return;
                }

                bspline = converter.Curve();
            }

            var knotSource  = bspline.KnotSequence();
            var knots       = new double[knotSource.Length()];
            int sourceStart = knotSource.Lower();

            for (int i = 0; i < knots.Length; i++)
            {
                knots[i] = knotSource.Value(sourceStart + i);
            }

            var points  = new Pnt2d[bspline.NbPoles()];
            var weights = new double[points.Length];

            for (int i = 0; i < bspline.NbPoles(); i++)
            {
                points[i]  = bspline.Pole(i + 1);
                weights[i] = bspline.Weight(i + 1);
            }

            var flags = DxfDomSpline.SplineFlags.None;

            if (bspline.IsRational())
            {
                flags = flags.Added(DxfDomSpline.SplineFlags.IsRational);
            }

            var entity = new DxfDomSpline(_CurrentLayer, bspline.Degree(), knots, points, weights, flags);

            _Document.Entities.Add(entity);
        }
        //--------------------------------------------------------------------------------------------------

        void _UpdateCornerPoints(Pnt2d second)
        {
            var first = _Points[0];

            _Points[1] = new Pnt2d(first.X, second.Y);
            _Points[2] = new Pnt2d(second.X, second.Y);
            _Points[3] = new Pnt2d(second.X, first.Y);
        }
示例#25
0
        //--------------------------------------------------------------------------------------------------

        void _PointActionOnConstraintPoint(SketchPointAction sender, ref Pnt2d point)
        {
            if (_PointsCompleted == 2)
            {
                _CalcArcRimPoints(point);
                point = _Points[1];
            }
        }
示例#26
0
        public void Scale()
        {
            var p2 = new Pnt2d(1, 2);

            Assert.AreEqual(new Pnt2d(0, 2), p2.Scaled(new Pnt2d(2, 2), 2));
            p2.Scale(new Pnt2d(2, 2), 2);
            Assert.AreEqual(new Pnt2d(0, 2), p2);
        }
示例#27
0
        public void TranslatePnt2dPnt2d()
        {
            var p2 = new Pnt2d(1, 2);

            Assert.AreEqual(new Pnt2d(0, 2), p2.Translated(new Pnt2d(2, 2), new Pnt2d(1, 2)));
            p2.Translate(new Pnt2d(2, 2), new Pnt2d(1, 2));
            Assert.AreEqual(new Pnt2d(0, 2), p2);
        }
示例#28
0
        public void MirrorPnt2d()
        {
            var p2 = new Pnt2d(1, 2);

            Assert.AreEqual(new Pnt2d(3, 2), p2.Mirrored(new Pnt2d(2, 2)));
            p2.Mirror(new Pnt2d(2, 2));
            Assert.AreEqual(new Pnt2d(3, 2), p2);
        }
示例#29
0
        //--------------------------------------------------------------------------------------------------

        void _SetSecondPoint(Pnt2d second)
        {
            var first = _Points[0];

            _Points[1] = new Pnt2d(first.X, second.Y);
            _Points[2] = new Pnt2d(second.X, second.Y);
            _Points[3] = new Pnt2d(second.X, first.Y);
        }
示例#30
0
        public void Distance()
        {
            var p1 = new Pnt2d(1, 2);
            var p2 = new Pnt2d(4, 5);

            Assert.AreEqual(18, p1.SquareDistance(p2));
            Assert.AreEqual(Math.Sqrt(18), p1.Distance(p2));
        }