示例#1
0
        public void GetAngleByHeight_Tests(double x1, double x2, double length, double angle)
        {
            DcLineSegment lineSegment = new DcLineSegment(new Point(x1, x2), length, angle);
            var           actual      = DcMath.GetAngleByHeight(lineSegment.Height, lineSegment.Length, lineSegment.X1, lineSegment.Y1, lineSegment.X2, lineSegment.Y2);

            Assert.AreEqual(lineSegment.Angle, actual, 0.0001);
        }
示例#2
0
        public void SetConstraint_Depended_Reference_Added_To_Active()
        {
            // Init
            IDictionary <int, DcPoint> pointCollection = new Dictionary <int, DcPoint>();
            DcLineSegment lineSegment = new DcLineSegment(100, 100, 100, 200);

            PointManager.AddPrimitivePoints(pointCollection, lineSegment);
            DcPoint point = new DcPoint(100, 200, PointHash.CreateHash(1, 1));

            // Action
            point = PointManager.SetConstraint(point, pointCollection);

            var ActiveHash = 0;

            foreach (var item in lineSegment.Points)
            {
                if (item.Value.X == 100 && item.Value.Y == 200)
                {
                    ActiveHash = item.Key;
                }
            }

            DcPoint activePoint = pointCollection[ActiveHash];

            var expected = point.GetHashCode();

            var actual = activePoint.DependedHash;

            Assert.AreEqual(expected, actual);
        }
        public void Add_Sub_Line_Height_When_Has_Length_And_Width_Constraints_No_Points_Constraint_NO_CHANGES(double delta)
        {
            // Init
            _canvas.Clear();
            DcLineSegment lineSegment    = new DcLineSegment(100, 100, 200, 200);
            double        expectedLength = lineSegment.Length;
            double        expectedAngle  = lineSegment.Angle;
            double        expectedX1     = lineSegment.X1;
            double        expectedY1     = lineSegment.Y1;
            double        expectedX2     = lineSegment.X2;
            double        expectedY2     = lineSegment.Y2;

            lineSegment.AddLocalConstraint(Constraints.Length);
            lineSegment.AddLocalConstraint(Constraints.Width);
            _canvas.AddToVisualCollection(lineSegment);

            // Act
            lineSegment.Height += delta;

            Assert.AreEqual(expectedLength, lineSegment.Length);
            Assert.AreEqual(expectedX1, lineSegment.X1);
            Assert.AreEqual(expectedY1, lineSegment.Y1);
            Assert.AreEqual(expectedX2, lineSegment.X2);
            Assert.AreEqual(expectedY2, lineSegment.Y2);
            Assert.AreEqual(expectedAngle, lineSegment.Angle);
        }
示例#4
0
        private void Add_lines(object sender, RoutedEventArgs e)
        {
            Canva.DcLineSegments.Add(new DcLineSegment(100, 100, 100, 200));
            DcLineSegment lineSegment = new DcLineSegment(100, 200, 200, 200);

            lineSegment.AddLocalConstraint(Constraints.Angle);
            Canva.DcLineSegments.Add(lineSegment);
            DcLineSegment lineSegment1 = new DcLineSegment(new Point(200, 100), 100, 180);

            lineSegment1.AddLocalConstraint(Constraints.Angle);
            Canva.DcLineSegments.Add(lineSegment1);
            DcLineSegment lineSegment2 = new DcLineSegment(200, 200, 200, 100);

            //lineSegment2.AddLocalConstraint(Constraints.Angle);
            Canva.DcLineSegments.Add(lineSegment2);

            Mess1.Text = $"ID: {lineSegment.ID}";
            Mess2.Text = $"Length: {lineSegment.Length}";
            Mess3.Text = $"Angle: {lineSegment.Angle}";
            Mess4.Text = $"dX: {lineSegment.Width}";
            Mess5.Text = $"dY: {lineSegment.Height}";
            Mess6.Text = $"X1: {lineSegment.X1}";
            Mess7.Text = $"Y1: {lineSegment.Y1}";
            Mess8.Text = $"X2: {lineSegment.X2}";
            Mess9.Text = $"Y2: {lineSegment.Y2}";

            //Canva.DcLineSegments.Add(new DcLineSegment(new Point(100, 200), 100, 0));
            //Canva.DcLineSegments.Add(new DcLineSegment(new Point(200, 200), 100, 270));
            //Canva.DcLineSegments.Add(new DcLineSegment(200, 100, 100, 100));
        }
示例#5
0
        public void XoffsetByTan_Tests(double x1, double x2, double length, double angle, double dx)
        {
            DcLineSegment lineSegment = new DcLineSegment(new Point(x1, x2), length, angle);

            var actual = DcMath.XoffsetByTan(lineSegment.Height, lineSegment.Angle);

            Assert.AreEqual(dx, actual, 0.000001);
        }
示例#6
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="lineSegment"></param>
        /// <returns></returns>
        static public double GetLineSegmentAngle(DcLineSegment lineSegment)
        {
            double dX = lineSegment.X2 - lineSegment.X1;
            double dY = lineSegment.Y2 - lineSegment.Y1;

            double angle = RadianToDegree(Math.Atan(dY / dX));

            if (dX < 0)
            {
                angle += 180;
            }

            return(angle < 0 ? angle + 360 : angle);
        }
示例#7
0
        public void Add_Line_Width_No_Local_Constraint_No_Points_Constraint(double x1, double y1, double x2, double y2, double newX1, double newX2, double newAngle)
        {
            // Init
            _canvas.Clear();
            DcLineSegment lineSegment = new DcLineSegment(x1, y1, x2, y2);

            _canvas.AddToVisualCollection(lineSegment);

            // Act
            lineSegment.Width += 10;

            Assert.AreEqual(148.660687, lineSegment.Length, 0.000001);
            Assert.AreEqual(newX1, lineSegment.X1, 0.000001);
            Assert.AreEqual(y1, lineSegment.Y1);
            Assert.AreEqual(newX2, lineSegment.X2, 0.000001);
            Assert.AreEqual(y2, lineSegment.Y2);
            Assert.AreEqual(newAngle, lineSegment.Angle, 0.000001);
        }
        public void Subtract_Line_Height_No_Local_Constraint_No_Points_Constraint(double x1, double y1, double x2, double y2, double newY1, double newY2, double newAngle)
        {
            // Init
            _canvas.Clear();
            DcLineSegment lineSegment = new DcLineSegment(x1, y1, x2, y2);

            _canvas.AddToVisualCollection(lineSegment);

            // Act
            lineSegment.Height -= 10;

            Assert.AreEqual(134.53624, lineSegment.Length, 0.000001);
            Assert.AreEqual(x1, lineSegment.X1);
            Assert.AreEqual(newY1, lineSegment.Y1, 0.000001);
            Assert.AreEqual(x2, lineSegment.X2);
            Assert.AreEqual(newY2, lineSegment.Y2, 0.000001);
            Assert.AreEqual(newAngle, lineSegment.Angle, 0.000001);
        }
示例#9
0
        public void SetConstraint_No_Active_References()
        {
            // Init
            IDictionary <int, DcPoint> pointCollection = new Dictionary <int, DcPoint>();
            DcLineSegment lineSegment = new DcLineSegment(100, 100, 100, 200);

            PointManager.AddPrimitivePoints(pointCollection, lineSegment);
            DcPoint point = new DcPoint(110, 200, PointHash.CreateHash(1, 1));

            // Action
            point = PointManager.SetConstraint(point, pointCollection);

            var expected = 0;

            var actual = point.ActiveHash;

            Assert.AreEqual(expected, actual);
        }
示例#10
0
        public void Add_Line_Width_When_No_Local_Constraint_And_Has_First_Point_Constraint(double x1, double y1, double x2, double y2, double newX2, double newLength, double newAngle)
        {
            // Init
            _canvas.Clear();
            DcLineSegment lineSegment = new DcLineSegment(x1, y1, x2, y2);

            _canvas.AddToVisualCollection(new DcLineSegment(50, 100, 100, 100));
            _canvas.AddToVisualCollection(lineSegment);

            // Act
            lineSegment.Width += 10;

            Assert.AreEqual(newLength, lineSegment.Length, 0.000001);
            Assert.AreEqual(x1, lineSegment.X1);
            Assert.AreEqual(y1, lineSegment.Y1);
            Assert.AreEqual(newX2, lineSegment.X2, 0.000001);
            Assert.AreEqual(y2, lineSegment.Y2);
            Assert.AreEqual(newAngle, lineSegment.Angle, 0.000001);
        }
        public void Subtract_Line_Length_No_Local_Constraint_No_Points_Constraint(double x1, double y1, double x2, double y2, double newX1, double newY1, double newX2, double newY2)
        {
            // Init
            _canvas.Clear();
            DcLineSegment lineSegment   = new DcLineSegment(x1, y1, x2, y2);
            double        expectedAngle = lineSegment.Angle;

            _canvas.AddToVisualCollection(lineSegment);

            // Act
            lineSegment.Length -= 10;

            Assert.AreEqual(131.421356, lineSegment.Length, 0.000001);
            Assert.AreEqual(newX1, lineSegment.X1, 0.000001);
            Assert.AreEqual(newY1, lineSegment.Y1, 0.000001);
            Assert.AreEqual(newX2, lineSegment.X2, 0.000001);
            Assert.AreEqual(newY2, lineSegment.Y2, 0.000001);
            Assert.AreEqual(expectedAngle, lineSegment.Angle);
        }
        public void Add_Line_Length_When_Has_Height_Constraint_No_Points_Constraint(double x1, double y1, double x2, double y2, double newX1, double newX2, double newAngle)
        {
            // Init
            _canvas.Clear();
            DcLineSegment lineSegment = new DcLineSegment(x1, y1, x2, y2);

            lineSegment.AddLocalConstraint(Constraints.Heigth);
            _canvas.AddToVisualCollection(lineSegment);

            // Act
            lineSegment.Length += 10;

            Assert.AreEqual(151.421356, lineSegment.Length, 0.000001);
            Assert.AreEqual(newX1, lineSegment.X1, 0.000001);
            Assert.AreEqual(y1, lineSegment.Y1);
            Assert.AreEqual(newX2, lineSegment.X2, 0.000001);
            Assert.AreEqual(y2, lineSegment.Y2);
            Assert.AreEqual(newAngle, lineSegment.Angle, 0.000001);
        }
        public void Subtract_Line_Height_When_No_Local_Constraint_And_Has_Second_Point_Constraint(double x1, double y1, double x2, double y2, double newY1, double newLength, double newAngle)
        {
            // Init
            _canvas.Clear();
            DcLineSegment lineSegment = new DcLineSegment(x1, y1, x2, y2);

            _canvas.AddToVisualCollection(new DcLineSegment(100, 150, 200, 200));
            _canvas.AddToVisualCollection(lineSegment);

            // Act
            lineSegment.Height -= 10;

            Assert.AreEqual(newLength, lineSegment.Length, 0.000001);
            Assert.AreEqual(x1, lineSegment.X1);
            Assert.AreEqual(newY1, lineSegment.Y1, 0.000001);
            Assert.AreEqual(x2, lineSegment.X2);
            Assert.AreEqual(y2, lineSegment.Y2);
            Assert.AreEqual(newAngle, lineSegment.Angle, 0.000001);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="currentPoint"></param>
        /// <param name="canvas"></param>
        /// <returns></returns>
        public void DrawFantom(Point currentPoint, DrCanvas canvas)
        {
            if (_pointCounter == 2)
            {
                Point _secondPoint = new Point(currentPoint.X, canvas.Height - currentPoint.Y);

                if (_fantom != null)
                {
                    _fantom.X2 = _secondPoint.X;
                    _fantom.Y2 = _secondPoint.Y;
                    canvas.Update();
                }
                else
                {
                    _fantom = new DcLineSegment(_firstPoint.X, _firstPoint.Y, _secondPoint.X, _secondPoint.Y);
                    canvas.AddToVisualCollection(_fantom);
                }
            }
        }
        public void Subtract_Line_Length_When_Has_Width_Constraint_No_Points_Constraint(double x1, double y1, double x2, double y2, double newY1, double newY2, double newAngle)
        {
            // Init
            _canvas.Clear();
            DcLineSegment lineSegment = new DcLineSegment(x1, y1, x2, y2);

            lineSegment.AddLocalConstraint(Constraints.Width);
            _canvas.AddToVisualCollection(lineSegment);

            // Act
            lineSegment.Length -= 10;

            Assert.AreEqual(131.421356, lineSegment.Length, 0.000001);
            Assert.AreEqual(x1, lineSegment.X1);
            Assert.AreEqual(newY1, lineSegment.Y1, 0.000001);
            Assert.AreEqual(x2, lineSegment.X2);
            Assert.AreEqual(newY2, lineSegment.Y2, 0.000001);
            Assert.AreEqual(newAngle, lineSegment.Angle, 0.000001);
        }
示例#16
0
        public void Subtract_Line_Width_When_Has_Angle_LocalConstraint_And_Has_First_Point_Constraint(double x1, double y1, double x2, double y2, double newX2, double newY2, double newLength, double newHeight)
        {
            // Init
            _canvas.Clear();
            DcLineSegment lineSegment = new DcLineSegment(x1, y1, x2, y2);

            lineSegment.AddLocalConstraint(Constraints.Angle);
            _canvas.AddToVisualCollection(new DcLineSegment(50, 100, 100, 100));
            _canvas.AddToVisualCollection(lineSegment);

            // Act
            lineSegment.Width -= 10;

            Assert.AreEqual(newLength, lineSegment.Length, 0.000001);
            Assert.AreEqual(x1, lineSegment.X1);
            Assert.AreEqual(y1, lineSegment.Y1);
            Assert.AreEqual(newX2, lineSegment.X2, 0.000001);
            Assert.AreEqual(newY2, lineSegment.Y2, 0.000001);
            Assert.AreEqual(newHeight, lineSegment.Height, 0.000001);
        }
        public void Subtract_Line_Height_When_Has_Length_Constraint_No_Points_Constraint(double x1, double y1, double x2, double y2, double newX1, double newY1, double newX2, double newY2, double newAngle)
        {
            // Init
            _canvas.Clear();
            DcLineSegment lineSegment    = new DcLineSegment(x1, y1, x2, y2);
            double        expectedLength = lineSegment.Length;

            lineSegment.AddLocalConstraint(Constraints.Length);
            _canvas.AddToVisualCollection(lineSegment);

            // Act
            lineSegment.Height -= 10;

            Assert.AreEqual(expectedLength, lineSegment.Length);
            Assert.AreEqual(newX1, lineSegment.X1, 0.000001);
            Assert.AreEqual(newY1, lineSegment.Y1, 0.000001);
            Assert.AreEqual(newX2, lineSegment.X2, 0.000001);
            Assert.AreEqual(newY2, lineSegment.Y2, 0.000001);
            Assert.AreEqual(newAngle, lineSegment.Angle, 0.000001);
        }
示例#18
0
        public void Add_Line_Width_When_Has_Angle_Constraint_No_Points_Constraint(double x1, double y1, double x2, double y2, double newX1, double newY1, double newX2, double newY2, double newLength)
        {
            // Init
            _canvas.Clear();
            DcLineSegment lineSegment   = new DcLineSegment(x1, y1, x2, y2);
            double        expectedAngle = lineSegment.Angle;

            lineSegment.AddLocalConstraint(Constraints.Angle);
            _canvas.AddToVisualCollection(lineSegment);

            // Act
            lineSegment.Width += 10;

            Assert.AreEqual(newLength, lineSegment.Length, 0.000001);
            Assert.AreEqual(newX1, lineSegment.X1, 0.000001);
            Assert.AreEqual(newY1, lineSegment.Y1, 0.000001);
            Assert.AreEqual(newX2, lineSegment.X2, 0.000001);
            Assert.AreEqual(newY2, lineSegment.Y2, 0.000001);
            Assert.AreEqual(expectedAngle, lineSegment.Angle);
        }
        public void Add_Line_Length_No_Local_Constraint_And_Has_First_Point_Constraint(double x1, double y1, double x2, double y2, double newX2, double newY2)
        {
            // Init
            _canvas.Clear();
            DcLineSegment lineSegment   = new DcLineSegment(x1, y1, x2, y2);
            double        expectedAngle = lineSegment.Angle;

            _canvas.AddToVisualCollection(new DcLineSegment(50, 100, 100, 100));
            _canvas.AddToVisualCollection(lineSegment);

            // Act
            lineSegment.Length += 10;

            Assert.AreEqual(151.421356, lineSegment.Length, 0.000001);
            Assert.AreEqual(x1, lineSegment.X1);
            Assert.AreEqual(y1, lineSegment.Y1);
            Assert.AreEqual(newX2, lineSegment.X2, 0.000001);
            Assert.AreEqual(newY2, lineSegment.Y2, 0.000001);
            Assert.AreEqual(expectedAngle, lineSegment.Angle);
        }
        public void Add_Line_Length_When_Has_Width_Constraint_And_Has_Second_Point_Constraint(double x1, double y1, double x2, double y2, double newY1, double newAngle)
        {
            // Init
            _canvas.Clear();
            DcLineSegment lineSegment = new DcLineSegment(x1, y1, x2, y2);

            lineSegment.AddLocalConstraint(Constraints.Width);
            _canvas.AddToVisualCollection(new DcLineSegment(100, 150, 200, 200));
            _canvas.AddToVisualCollection(lineSegment);

            // Act
            lineSegment.Length += 10;

            Assert.AreEqual(151.421356, lineSegment.Length, 0.000001);
            Assert.AreEqual(x1, lineSegment.X1);
            Assert.AreEqual(newY1, lineSegment.Y1, 0.000001);
            Assert.AreEqual(x2, lineSegment.X2);
            Assert.AreEqual(y2, lineSegment.Y2);
            Assert.AreEqual(newAngle, lineSegment.Angle, 0.000001);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="currentPoint"></param>
        /// <param name="canvas"></param>
        /// <returns></returns>
        public IPrimitiveCreator Create(Point currentPoint, DrCanvas canvas)
        {
            if (_pointCounter == 1)
            {
                _firstPoint = new Point(currentPoint.X, canvas.Height - currentPoint.Y);
                _pointCounter++;
                return(this);
            }
            else if (_pointCounter == 2)
            {
                _fantom.X2 = currentPoint.X;
                _fantom.Y2 = canvas.Height - currentPoint.Y;
                canvas.Update();

                _pointCounter = 1;
                _fantom       = null;
                return(this);
            }
            return(null);
        }
        public void Change_Line_Angle_No_Local_Constraint_No_Points_Constraint_Or_First_Point_Has_Constraint_2(double newAngle, double expectedAngle, double newX2, double newY2)
        {
            // Init
            _canvas.Clear();
            DcLineSegment lineSegment    = new DcLineSegment(new Point(100, 100), 100, 10);
            double        expectedLength = lineSegment.Length;
            double        expectedX1     = lineSegment.X1;
            double        expectedY1     = lineSegment.Y1;

            _canvas.AddToVisualCollection(lineSegment);

            // Act
            lineSegment.Angle = newAngle;

            Assert.AreEqual(expectedLength, lineSegment.Length);
            Assert.AreEqual(expectedX1, lineSegment.X1);
            Assert.AreEqual(expectedY1, lineSegment.Y1);
            Assert.AreEqual(newX2, lineSegment.X2, 0.000001);
            Assert.AreEqual(newY2, lineSegment.Y2, 0.000001);
            Assert.AreEqual(expectedAngle, lineSegment.Angle, 0.000001);
        }
        public void Add_Line_Height_When_Has_Angle_LocalConstraint_And_Has_Second_Point_Constraint(double x1, double y1, double x2, double y2, double newX1, double newY1, double newLength, double newWidth)
        {
            // Init
            _canvas.Clear();
            DcLineSegment lineSegment   = new DcLineSegment(x1, y1, x2, y2);
            double        expectedAngle = lineSegment.Angle;

            lineSegment.AddLocalConstraint(Constraints.Angle);
            _canvas.AddToVisualCollection(new DcLineSegment(100, 150, 200, 200));
            _canvas.AddToVisualCollection(lineSegment);

            // Act
            lineSegment.Height += 10;

            Assert.AreEqual(newLength, lineSegment.Length, 0.000001);
            Assert.AreEqual(newX1, lineSegment.X1, 0.000001);
            Assert.AreEqual(newY1, lineSegment.Y1, 0.000001);
            Assert.AreEqual(x2, lineSegment.X2);
            Assert.AreEqual(y2, lineSegment.Y2);
            Assert.AreEqual(expectedAngle, lineSegment.Angle);
            Assert.AreEqual(newWidth, lineSegment.Width, 0.000001);
        }
        public void Add_Line_Height_When_Has_Length_LocalConstraint_And_Has_First_Point_Constraint(double x1, double y1, double x2, double y2, double newX2, double newY2, double newAngle, double newWidth)
        {
            // Init
            _canvas.Clear();
            DcLineSegment lineSegment    = new DcLineSegment(x1, y1, x2, y2);
            double        expectedLength = lineSegment.Length;

            lineSegment.AddLocalConstraint(Constraints.Length);
            _canvas.AddToVisualCollection(new DcLineSegment(50, 100, 100, 100));
            _canvas.AddToVisualCollection(lineSegment);

            // Act
            lineSegment.Height += 10;

            Assert.AreEqual(expectedLength, lineSegment.Length);
            Assert.AreEqual(x1, lineSegment.X1);
            Assert.AreEqual(y1, lineSegment.Y1);
            Assert.AreEqual(newX2, lineSegment.X2, 0.000001);
            Assert.AreEqual(newY2, lineSegment.Y2, 0.000001);
            Assert.AreEqual(newAngle, lineSegment.Angle, 0.000001);
            Assert.AreEqual(newWidth, lineSegment.Width, 0.000001);
        }