コード例 #1
0
        public override DrawObjectMouseDown OnMouseDown(ICanvas canvas, UnitPoint point, ISnapPoint snapPoint, MouseEventArgs e)
        {
            OnMouseMove(canvas, point);
            if (this.arcCurrentPointType == ArcCurrentPointType.StartPoint)
            {
                this.arcCurrentPointType = ArcCurrentPointType.MidPoint;
                this.StartMovePoint      = point;
                return(DrawObjectMouseDown.Continue);
            }
            if (this.arcCurrentPointType == ArcCurrentPointType.MidPoint)
            {
                if (this.startPoint != point)
                {
                    this.arcCurrentPointType = ArcCurrentPointType.EndPoint;
                }

                return(DrawObjectMouseDown.Continue);
            }
            if (this.arcCurrentPointType == ArcCurrentPointType.EndPoint)
            {
                this.arcCurrentPointType = ArcCurrentPointType.Done;
                this.IsSelected          = false;
                this.GroupParam.FigureSN = ++GlobalModel.TotalDrawObjectCount;
                this.GroupParam.ShowSN   = this.GroupParam.FigureSN;
                this.IsCompleteDraw      = true;
                this.midPoint            = HitUtil.PointOnCircle(this.Center, this.Radius, HitUtil.DegreesToRadians(this.MidAngle));
                this.EndMovePoint        = this.endPoint;
                return(DrawObjectMouseDown.Done);
            }
            return(DrawObjectMouseDown.Done);
        }
コード例 #2
0
ファイル: NodeHexagon.cs プロジェクト: liyangTeam/WSXCut
        private void SetPoint(Hexagon hexagon, UnitPoint unitPoint)
        {
            #region 变化单个节点
            //hexagon.HexagonPoints[nodeIndex] = unitPoint;

            //double radius0 = hexagon.GetRadius(hexagon.HexagonPoints[0]);
            //double radius = hexagon.GetRadius(unitPoint);
            //double k = radius / radius0;
            //for (int i = 0; i < hexagon.HexagonPoints.Length; i++)
            //{
            //    hexagon.HexagonPoints[i].X = hexagon.HexagonPoints[i].X + (k - 1) * (hexagon.HexagonPoints[i].X - hexagon.CenterPoint.X);
            //    hexagon.HexagonPoints[i].Y = hexagon.HexagonPoints[i].Y + (k - 1) * (hexagon.HexagonPoints[i].Y - hexagon.CenterPoint.Y);
            //}
            #endregion

            double startAngle = HitUtil.LineAngleR(hexagon.CenterPoint, unitPoint, 0);
            double radius     = hexagon.GetRadius(unitPoint);
            hexagon.HexagonPoints[0] = unitPoint;
            for (int i = 1; i < hexagon.SideCount; i++)
            {
                UnitPoint vertexPoint = HitUtil.PointOnCircle(hexagon.CenterPoint, radius, startAngle + hexagon.stepAngle * Math.PI / 180 * i);
                hexagon.HexagonPoints[i] = vertexPoint;
            }

            //double currentNodeAngle = HitUtil.LineAngleR(hexagon.CenterPoint, unitPoint, 0);
            //double startAngle = currentNodeAngle - (nodeIndex * hexagon.stepAngle);
            //double radius = hexagon.GetRadius(unitPoint);
            //for (int i = 0; i < hexagon.SideCount; i++)
            //{
            //    UnitPoint vertexPoint = HitUtil.PointOnCircle(hexagon.CenterPoint, radius, startAngle + hexagon.stepAngle * Math.PI / 180 * i);
            //    hexagon.HexagonPoints[i] = vertexPoint;
            //}
        }
コード例 #3
0
ファイル: Hexagon.cs プロジェクト: liyangTeam/WSXCut
        private void CalculateKeyPoints()
        {
            double startAngle = HitUtil.LineAngleR(this.centerPoint, this.hexagonPoints[0], 0);
            double radius     = this.GetRadius(this.hexagonPoints[0]);

            for (int i = 1; i < this.SideCount; i++)
            {
                UnitPoint vertexPoint = HitUtil.PointOnCircle(this.centerPoint, radius, startAngle + this.stepAngle * Math.PI / 180 * i);
                this.hexagonPoints[i] = vertexPoint;
            }
        }
コード例 #4
0
ファイル: PolygonCommon.cs プロジェクト: liyangTeam/WSXCut
        private void CalculateVertexPoints(UnitPoint centerPoint, UnitPoint vertexPoint)
        {
            double startAngle = HitUtil.LineAngleR(centerPoint, vertexPoint, 0);
            double radius     = HitUtil.Distance(centerPoint, vertexPoint, true);
            double stepAngle  = 360 / this.SideCount;

            for (int i = 0; i < this.SideCount; i++)
            {
                UnitPoint point = HitUtil.PointOnCircle(centerPoint, radius, startAngle + stepAngle * Math.PI / 180 * i);
                this.Points.Add(new UnitPointBulge(point));
            }
        }
コード例 #5
0
        private void GetCircleLeadLineParams(IDrawObject drawObject, LineInOutParamsModel leadInOutParamsModel)
        {
            Circle circle = (Circle)drawObject;
            double angle  = HitUtil.LineAngleR(circle.Center, this.p2, 0);

            leadInOutParamsModel.FigureTotalLength = (float)(angle / (Math.PI * 2));
            this.p2 = HitUtil.PointOnCircle(circle.Center, circle.Radius, angle);
            bool isInner;

            leadInOutParamsModel.LineInAngle  = DrawingOperationHelper.GetLeadLineAngleArc(this.p1, this.p2, circle.Center, circle.IsClockwise, out isInner);
            leadInOutParamsModel.LineInLength = (float)HitUtil.Distance(this.p1, this.p2);
            circle.IsInnerCut = isInner;
        }
コード例 #6
0
ファイル: StarCommon.cs プロジェクト: liyangTeam/WSXCut
        private void CalculateVertexPoints2(UnitPoint centerPoint, UnitPoint vertexPoint)
        {
            double startAngle = HitUtil.LineAngleR(centerPoint, this.Points[1].Point, 0);
            double r          = HitUtil.Distance(centerPoint, vertexPoint, true);
            double stepAngle  = 360 / this.SideCount;

            for (int i = 0; i < this.Points.Count; i++)
            {
                if (i % 2 != 0)
                {
                    UnitPoint point = HitUtil.PointOnCircle(centerPoint, r, startAngle + stepAngle * Math.PI / 180 * (i / 2));
                    this.Points[i] = new UnitPointBulge(point);
                }
            }
        }
コード例 #7
0
ファイル: Hexagon.cs プロジェクト: liyangTeam/WSXCut
        public void CalOverCuttingPoints(UnitPoint startPoint, UnitPoint p2, double length, int index)
        {
            double distance = HitUtil.Distance(startPoint, p2);

            if (length > distance)
            {
                this.OverCuttingPoints.Add(p2);
                length -= distance;
                index  += 1;
                this.CalOverCuttingPoints(p2, this.MachinePoints[index], length, index);
            }
            else
            {
                double    angle     = HitUtil.LineAngleR(startPoint, p2, 0);
                UnitPoint unitPoint = HitUtil.PointOnCircle(startPoint, length, angle);
                this.OverCuttingPoints.Add(unitPoint);
            }
        }
コード例 #8
0
ファイル: NodeHexagon.cs プロジェクト: liyangTeam/WSXCut
        private void SetNewStartMovePoint()
        {
            double cloneStartAngle     = HitUtil.LineAngleR(this.clone.CenterPoint, this.clone.HexagonPoints[0], 0);
            double offsetAngle         = cloneStartAngle - HitUtil.LineAngleR(this.owner.CenterPoint, this.owner.HexagonPoints[0], 0);
            double cloneStartMoveAngle = HitUtil.LineAngleR(this.owner.CenterPoint, this.owner.StartMovePoint, 0) + offsetAngle;

            if (cloneStartMoveAngle > 2 * Math.PI)
            {
                cloneStartMoveAngle -= 2 * Math.PI;
            }
            else if (cloneStartMoveAngle < 0)
            {
                cloneStartMoveAngle += 2 * Math.PI;
            }
            this.clone.StartMovePoint = HitUtil.PointOnCircle(this.clone.CenterPoint, this.clone.GetRadius(this.clone.HexagonPoints[0]), cloneStartMoveAngle);
            if (this.owner.StartMovePointIndex != this.owner.HexagonPoints.Length - 1)
            {
                this.clone.StartMovePoint = HitUtil.FindApparentIntersectPoint(this.clone.CenterPoint, this.clone.StartMovePoint, this.clone.HexagonPoints[this.owner.StartMovePointIndex], this.clone.HexagonPoints[this.owner.StartMovePointIndex + 1]);
            }
            else
            {
                this.clone.StartMovePoint = HitUtil.FindApparentIntersectPoint(this.clone.CenterPoint, this.clone.StartMovePoint, this.clone.HexagonPoints[this.owner.StartMovePointIndex], this.clone.HexagonPoints[0]);
            }
        }