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); }
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; //} }
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; } }
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)); } }
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; }
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); } } }
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); } }
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]); } }