- UID
- 25232
- 积分
- 2113
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2003-1-12
- 最后登录
- 1970-1-1
|
发表于 2005-3-19 22:48:13
|
显示全部楼层
我写了函数:[php]
Public Function Arc_StPtEnPtR(StartPoint As Variant, EndPoint As Variant, R As Double, Bool As Boolean) As AcadArc
'起点、终点、半径画圆弧
'Bool为True,逆时针画弧;Bool为False,顺时针画弧
Dim X As Double, D As Double, Ang As Double
Const PI = 3.1415926535897
D = dis(StartPoint, EndPoint)
If R < 0.5 * D Then
MsgBox ("圆弧不存在!")
End
End If
Dim CenAng As Double, StartAng As Double, EndAng As Double, CenPoint As Variant
Ang = ThisDrawing.Utility.AngleFromXAxis(StartPoint, EndPoint)
X = 2 * Atn(0.5 * D / Sqr(R * R - 0.25 * D * D))
CenAng = Ang - X * 0.5 + PI / 2
CenPoint = ThisDrawing.Utility.PolarPoint(StartPoint, CenAng, R)
StartAng = CenAng + PI
EndAng = StartAng + X
Dim ArcObj1 As AcadArc, ArcObj2 As AcadArc
Set ArcObj1 = ThisDrawing.ModelSpace.AddArc(CenPoint, R, StartAng, EndAng)
Set Arc_StPtEnPtLength = ArcObj1
If Bool = False Then
Set ArcObj2 = ArcObj1.Mirror(StartPoint, EndPoint)
ArcObj1.Delete
Set Arc_StPtEnPtR = ArcObj2
End If
End Function
Public Function dis(Pa, Pb As Variant) As Double
'两点的距离
dis = ((Pa(0) - Pb(0)) ^ 2 + (Pa(1) - Pb(1)) ^ 2 + (Pa(2) - Pb(2)) ^ 2) ^ 0.5
End Function[/php] |
|