- UID
- 400347
- 积分
- 81
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2006-3-14
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
我写的一个利用任意三点绘制圆弧的函数Add3pointArc:
Public Function GetPointAR(ByVal ptBase As Variant, ByVal angle As Double, ByVal length As Double) As Variant
Dim pt(0 To 2) As Double
pt(0) = ptBase(0) + length * Cos(angle)
pt(1) = ptBase(1) + length * Sin(angle)
pt(2) = ptBase(2)
GetPointAR = pt
End Function
Public Function Add3pointArc(ByVal FirstPoint, ByVal NextPoint, ByVal ThreePoint) As AcadArc '此圆弧三点为逆时针方向输入
Dim CPt As Variant
Dim CenterPoint(0 To 2) As Double
Dim Line1 As AcadLine
Dim Line2 As AcadLine
Dim TemPt1(0 To 2) As Double
Dim TemPt2(0 To 2) As Double
Dim Angle1, Angle2 As Double
pi = 4 * Atn(1)
α1 = ThisDrawing.Utility.AngleFromXAxis(FirstPoint, NextPoint)
α2 = ThisDrawing.Utility.AngleFromXAxis(NextPoint, ThreePoint)
β1 = α1 + pi / 2
β2 = α2 + pi / 2
Length1 = 10
TemPt1(0) = (FirstPoint(0) + NextPoint(0)) / 2
TemPt1(1) = (FirstPoint(1) + NextPoint(1)) / 2
TemPt1(2) = 0
TemPt2(0) = (NextPoint(0) + ThreePoint(0)) / 2
TemPt2(1) = (NextPoint(1) + ThreePoint(1)) / 2
TemPt2(2) = 0
Set Line1 = AddLineR(TemPt1, β1, Length1)
Set Line2 = AddLineR(TemPt2, β2, Length1)
CPt = Line1.IntersectWith(Line2, acExtendBoth)
Line1.Delete
Line2.Delete
CenterPoint(0) = CPt(0)
CenterPoint(1) = CPt(1)
CenterPoint(2) = CPt(2)
Angle1 = ThisDrawing.Utility.AngleFromXAxis(CenterPoint, FirstPoint)
Angle2 = ThisDrawing.Utility.AngleFromXAxis(CenterPoint, ThreePoint)
r1 = Sqr((FirstPoint(0) - CenterPoint(0)) ^ 2 + (FirstPoint(1) - CenterPoint(1)) ^ 2)
Set Add3pointArc = ThisDrawing.ModelSpace.AddArc(CenterPoint, r1, Angle1, Angle2)
End Function
Sub test3PArc()
Add3pointArc ThisDrawing.Utility.GetPoint, ThisDrawing.Utility.GetPoint, ThisDrawing.Utility.GetPoint
End Sub
请斑竹看看有没有不妥的地方。有没有更简单的方法? |
|