2017-03-07 11 views
0

Ich habe ein 3D-Modell eines komplizierten Schornsteins, der im Wesentlichen eine zylindrische Röhre mit dekorativen Merkmalen ist. Ich würde gerne ein VBA-Skript schreiben, das die Schnitteigenschaften an mehreren Punkten entlang seiner Länge findet, aber ich bin mir nicht sicher, wie es gemacht wird.AutoCAD VBA: Auswählen von Objekten

Von Online-Suchen, ich habe es geschafft, einen Code zu schreiben, der in einem Abschnitt an einem Punkt setzt, auf dem ich dann MASSPROP ausführen kann, aber ich bin nicht ganz sicher, wie man es beendet ... Ich denke, ich ' m nur eine Codezeile entfernt. Ich muss nur den Abschnitt auswählen, den ich gerade erstellt habe.

Mein fast vollständiger Code ist unten mit einem Kommentar zu der Zeile, die ich brauche mit Hilfe.

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.") 
Set NewRegionObject = SolidObject.SectionSolid(PlaneOrigin, PlaneXaxisPoint, PlaneYaxisPoint) 
End With 
ThisDrawing.SendCommand ("qaflags" & vbCr & "2" & vbCr) 'This is needed for the operation 
ThisDrawing.SendCommand ("massprop" & vbCr) 
'How do I select my NewRegionObject??? 
ThisDrawing.SendCommand (vbCr & vbCr & "y" & vbCr & vbCr & "y" & vbCr) 
End Sub 

Wenn ich diesen Code bekommen MASSEIG mit meinem neu erstellten Abschnitt gut laufen soll ich in der Lage sein, es zu adaptieren entlang des Schornsteins den Prozess automatisch an mehreren Stellen zu tun, so denke ich, ich bin nur eine Zeile Code aus.

Danke für Ihre Hilfe, Tom

+0

Sie wirklich Ihren Code einrücken werden sollte. 'Sub ... End Sub' ist ein Block. 'With ... End With' ist ein anderes - nicht nur' If ... End If'! –

+0

Hoffentlich hilft die [API] (http://help.autodesk.com/view/ACD/2016/ENU/?guid=GUID-DFE47717-F7AF-443B-AD78-4E0BB60121C7) Ihnen, aber Sie bekommen nicht ein Objekt, das von .sendCommand zurückgegeben wird, also entweder versuchen, es mit einer Funktion neu zu schreiben, die das Region-Objekt mit beliebigen Mitteln findet oder "findet". –

Antwort

0

Sie würden besser Autocad Object Model ausnutzen:

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) & ")" 
    MsgBox "Centroid coordinates: (" & .Centroid(0) & "," & .Centroid(1) & ")" 
    MsgBox "Moments of Inertia: (" & .MomentOfInertia(0) & "," & .MomentOfInertia(1) & "," & .MomentOfInertia(2) & ")" 
    '.. and so on 
End With 
+0

Hallo, vielen Dank für Ihre Hilfe! Der Code funktioniert jetzt gut, aber ich habe Mühe, es von Excel VBA arbeiten zu arbeiten. Ich habe versucht, "ThisDrawing" durch "ACAD.ActiveDocument" zu ersetzen, aber es scheint nicht zu funktionieren. Ich habe meinen ursprünglichen Beitrag bearbeitet, um meinen neuen Code anzuzeigen. –

+0

Gern geschehen. Bitte beachten Sie, dass das Ändern einer Frage nach dem Erhalt der Lösung für das Original zu den sogenannten "chamaleon" -Fragen führt, die hier nicht erlaubt sind. Also, setze deine Frage _original_Version fort und wenn meine Antwort sie gelöst hat, dann bitte als akzeptiert markieren. Vielleicht möchten Sie einen neuen Post für Ihr neues Problem erstellen. Danke – user3598756

+0

Entschuldigung, ich bin neu, es sollte jetzt in Ordnung sein –

Verwandte Themen