AutoCAD VBA创建圆弧

AutoCAD VBA创建圆弧,已经圆心、起点和终点;圆心、起点和角度;三点法;圆心、起点和弧长等。代码如下。

‘模块中代码

Public Function AddArcCSEA(ByVal ptCen As Variant, ByVal radius As Double, ByVal stAng As Double, ByVal enAng As Double) As AcadArc
On errro GoTo errHandle
Dim objArc As AcadArc
Set objArc = ThisDrawing.ModelSpace.AddArc(ptCen, radius, stAng, enAng)
objArc.color = acBlue
objArc.Update
Set AddArcCSEA = objArc
Exit Function
errHandle:
MsgBox Err.Description
End Function
Public Function AddArcCSEP(ByVal ptCen As Variant, ByVal ptSt As Variant, ByVal ptEn As Variant) As AcadArc
Dim objArc As AcadArc
Dim radius As Double
Dim stAng, enAng As Double
radius = GetDistance(ptCen, ptSt)
stAng = ThisDrawing.Utility.AngleFromXAxis(ptCen, ptSt)
enAng = ThisDrawing.Utility.AngleFromXAxis(ptCen, ptEn)
Set objArc = ThisDrawing.ModelSpace.AddArc(ptCen, radius, stAng, enAng)
objArc.color = acCyan
objArc.Update
Set AddArcCSEP = objArc
End Function
Public Function GetDistance(sp As Variant, ep As Variant) As Double
Dim x As Double
Dim y As Double
Dim z As Double
x = sp(0) - ep(0)
y = sp(1) - ep(1)
z = sp(2) - ep(2)
GetDistance = Sqr((x ^ 2) + (y ^ 2) + (z ^ 2))
End Function
Public Function AddArcCSPA(ByVal ptCen As Variant, ByVal ptSt As Variant, ByVal angle As Double) As AcadArc
Dim objArc As AcadArc
Dim ptEn As Variant
Dim angTemp As Double
Dim radius As Double
angTemp = ThisDrawing.Utility.AngleFromXAxis(ptCen, ptSt)
angTemp = angTemp + angle
radius = GetDistance(ptCen, ptSt)
ptEn = ThisDrawing.Utility.PolarPoint(ptCen, angTemp, radius)
Set objArc = AddArcCSEP(ptCen, ptSt, ptEn)
objArc.color = acRed
objArc.Update
Set AddArcCSPA = objArc
End Function
Public Function AddArc3Pt(ByVal ptSt As Variant, ByVal ptSc As Variant, ByVal ptEn As Variant) As AcadArc
Dim objArc As AcadArc
Dim ptCen As Variant
Dim radius As Double
ptCen = GetCenOf3Pt(ptSt, ptSc, ptEn, radius)
Set objArc = AddArcCSEP(ptCen, ptSt, ptEn)
objArc.color = acGreen
objArc.Update
Set AddArc3Pt = objArc
End Function
Public Function GetCenOf3Pt(pt1 As Variant, pt2 As Variant, pt3 As Variant, ByRef radius As Double) As Variant
Dim xysm, xyse, xy As Double
Dim ptCen(2) As Double
xy = pt1(0) ^ 2 + pt1(1) ^ 2
xyse = xy - pt3(0) ^ 2 - pt3(1) ^ 2
xysm = xy - pt2(0) ^ 2 = pt2(1) ^ 2
xy = (pt1(0) - pt2(0)) * (pt1(1) - pt3(1)) - (pt1(0) - pt3(0)) * (pt1(1) - pt2(1))
If Abs(xy) < 0.000001 Then
MsgBox "所输入的参数无法创建图形!"
Exit Function
End If
ptCen(0) = (xysm * (pt1(1) - pt3(1)) - xyse * (pt1(1) - pt2(1))) / (2 * xy)
ptCen(1) = (xyse * (pt1(0) - pt2(0)) - xysm * (pt1(0) - pt3(0))) / (2 * xy)
ptCen(2) = 0
radius = Sqr((pt1(0) - ptCen(0)) * (pt1(0) - ptCen(0)) + (pt1(1) - ptCen(1)) * (pt1(1) - ptCen(1)))
If radius < 0.000001 Then
MsgBox "半径过小!"
Exit Function
End If
GetCenOf3Pt = ptCen
End Function
Public Function AddArcCSPL(ByVal ptCen As Variant, ByVal ptSt As Variant, ByVal length As Double) As AcadArc
Dim objArc As AcadArc
Dim radius As Double
Dim angle As Double
radius = GetDistance(ptCen, ptSt)
angle = length / radius
Set objArc = AddArcCSPA(ptCen, ptSt, angle)
objArc.color = acMagenta
objArc.Update
Set AddArcCSPL = objArc
End Function

‘ThisDrawing中代码

Public Sub TestArc()
Dim ptCen(2) As Double
ptCen(0) = 100: ptCen(1) = 100: ptCen(2) = 0
Dim objArc1 As AcadArc
Set objArc1 = AddArcCSEA(ptCen, 50, 0.8, 2.3)
ptCen(0) = 100: ptCen(1) = 90: ptCen(2) = 0
Dim objArc2 As AcadArc
Set objArc2 = AddArcCSEP(ptCen, objArc1.StartPoint, objArc1.EndPoint)
Dim objarc3 As AcadArc
Set objarc3 = AddArcCSPA(ptCen, objArc1.EndPoint, 2)
Dim pt1(2) As Double
pt1(0) = 140: pt1(1) = 60: pt1(2) = 0
Dim objArc4 As AcadArc
Set objArc4 = AddArc3Pt(objarc3.EndPoint, pt1, objArc2.StartPoint)
Dim pt2(2) As Double
pt2(0) = 70: pt2(1) = 100: pt2(2) = 0
Dim objArc5 As AcadArc
Set objArc5 = AddArcCSPL(ptCen, pt2, 30)
ZoomAll
End Sub

代码完。

和示例上的效果不一样。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
AutoCAD VBA二次开发是指在AutoCAD软件基础上,利用VBA(Visual Basic for Applications)语言进行自动化编程开发的过程。VBA是一种用于编宏的编程语言,它结合了Visual Basic语言的特性和AutoCAD的API接口,可以实现对AutoCAD进行扩展和定制。 AutoCAD VBA二次开发能够实现很多功能,比如自动化生成和修改绘图,快速批量处理绘图数据,自定义绘图命令等。通过编VBA代码,可以利用AutoCAD中的对象模型进行绘图元素的创建、编辑和删除,也可以通过控制命令行和图形界面实现交互操作。 在进行AutoCAD VBA二次开发时,需要熟悉AutoCAD的对象模型和API接口。通过编VBA宏,可以直接在AutoCAD中运行代码,实现自动化操作。VBA还提供了丰富的内置函数和方法,用于处理各种图形和数据,可以让开发者根据自己的需求来编功能齐全的代码。 AutoCAD VBA二次开发的优势在于可以利用AutoCAD强大的绘图和编辑功能,结合VBA的简洁易用性进行快速开发。开发者可以根据自己的需求制定开发计划和目标,用VBA代码实现自定义的功能和工具,提高工作效率和图纸质量。 总而言之,AutoCAD VBA二次开发是一种基于AutoCAD软件和VBA语言的自动化编程开发方法,可以实现自定义功能,提高工作效率。通过学习和熟练掌握AutoCAD的对象模型和VBA语言,可以进行自主开发和定制,满足不同用户的绘图需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值