我编写了一个代码(有帮助),可以在AutoCAD VBA中使用,但我想调整它以便我可以从Excel运行它并将其集成到更长的宏中。我尝试用ThisDrawing
替换ACAD.ActiveDocument
,但这不起作用。这是我的完整AutoCAD VBA代码:
Public Sub Section()
Dim SolidObject As Acad3DSolid
Dim NewRegionObject As AcadRegion
Dim PlaneOrigin As Variant
Dim PlaneXaxisPoint As Variant
Dim PlaneYaxisPoint As Variant
Dim PickedPoint As Variant
On Error Resume Next
With ThisDrawing.Utility
.GetEntity SolidObject, PickedPoint, vbCr & "Select solid to cut."
If Err Then
MsgBox "Selected solid must be a 3DSolid"
Exit Sub
End If
PlaneOrigin = .GetPoint(PickedPoint, vbCr & "Select point to define origin.")
PlaneXaxisPoint = .GetPoint(PickedPoint, vbCr & "Select point to define x-axis.")
PlaneYaxisPoint = .GetPoint(PickedPoint, vbCr & "Select point to define y-axis.")
Dim minPoint As Variant, maxPoint As Variant
Set NewRegionObject = SolidObject.SectionSolid(PlaneOrigin, PlaneXaxisPoint, PlaneYaxisPoint)
With NewRegionObject
MsgBox "Area: " & .Area
MsgBox "Perimeter: " & .Perimeter
.GetBoundingBox minPoint, maxPoint
MsgBox "Min Point coordinates: (" & minPoint(0) & "," & minPoint(1) & "," & minPoint(2) & ")"
MsgBox "Max Point coordinates: (" & maxPoint(0) & "," & maxPoint(1) & "," & maxPoint(2) & ")"
End With
End With
End Sub
答案 0 :(得分:2)
您可以使用此功能查看是否有正在运行的AutoCad实例,如果有,请获取它:
Function Set_Acad(Acad As AcadApplication) As Boolean
On Error Resume Next
Set Acad = GetObject(, "AutoCAD.Application") 'Get a running instance of the class AutoCAD.Application
On Error GoTo 0
Set_Acad = Not Acad Is Nothing
End Function
在主代码中被利用如下:
Option Explicit
Public Sub Section()
Dim SolidObject As Acad3DSolid
Dim NewRegionObject As AcadRegion
Dim PlaneOrigin As Variant
Dim PlaneXaxisPoint As Variant
Dim PlaneYaxisPoint As Variant
Dim PickedPoint As Variant
Dim Acad As AcadApplication '<--| declare a variable of type 'AcadApplication'
If Not Set_Acad(Acad) Then Exit Sub '<--| exit if there's no Autocad running instance, otehrwise set 'Acad' variable to it
With Acad.ActiveDocument.Utility '<--| now you can use Acad to reference 'Autocad' application and all its objects/methods/properties
On Error Resume Next
.GetEntity SolidObject, PickedPoint, vbCr & "Select solid to cut."
If Err Then
MsgBox "Selected solid must be a 3DSolid"
Set Acad = Nothing
Exit Sub
End If
On Error GoTo 0
PlaneOrigin = .GetPoint(PickedPoint, vbCr & "Select point to define origin.")
PlaneXaxisPoint = .GetPoint(PickedPoint, vbCr & "Select point to define x-axis.")
PlaneYaxisPoint = .GetPoint(PickedPoint, vbCr & "Select point to define y-axis.")
Dim minPoint As Variant, maxPoint As Variant
Set NewRegionObject = SolidObject.SectionSolid(PlaneOrigin, PlaneXaxisPoint, PlaneYaxisPoint)
With NewRegionObject
MsgBox "Area: " & .area
MsgBox "Perimeter: " & .Perimeter
.GetBoundingBox minPoint, maxPoint
MsgBox "Min Point coordinates: (" & minPoint(0) & "," & minPoint(1) & "," & minPoint(2) & ")"
MsgBox "Max Point coordinates: (" & maxPoint(0) & "," & maxPoint(1) & "," & maxPoint(2) & ")"
End With
End With
Set Acad = Nothing
End Sub
答案 1 :(得分:0)
通过Excel在AutoCAD中创建线(必须打开)
但是您必须进入“工具”->“参考”并添加[ AutoCAD 20xx类型库]
Sub testline()
Dim app
Dim lineObj As AcadLine
Dim startPoint(0 To 2) As Double
Dim endPoint(0 To 2) As Double
On Error Resume Next
Set app = GetObject(, "AutoCAD.Application")
On Error GoTo 0
If (app Is Nothing) Then Exit Sub
startPoint(0) = 100
startPoint(1) = 100
startPoint(2) = 0
endPoint(0) = 200
endPoint(1) = 200
endPoint(2) = 0
Set lineObj = app.Documents(0).ModelSpace.AddLine(startPoint, endPoint)
End Sub