2017-03-07 2 views
0

본질적으로 장식 기능이있는 원통형 튜브 인 복잡한 굴뚝의 3D 모델이 있습니다. 그 길이에 따라 여러 지점에서 단면 특성을 찾는 VBA 스크립트를 작성하고 싶습니다만 어떻게해야하는지 잘 모르겠습니다.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.") 
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 

내 새로 만든 섹션 MASSPROP를 실행하려면이 코드를 얻을 수 있다면 좋은 나는 굴뚝을 따라 여러 지점에서 자동으로 처리 할 적응할 수 있어야한다 그래서 내가의 한 줄 것 같아 코드를 끈다. 당신의 도움에 대한

감사합니다, 톰

+0

당신은 정말 코드 들여 쓰기를해야한다. 'Sub ... End Sub'는 블록입니다. 'With ... With With '는 또 다른 것입니다. –

+0

[API] (http://help.autodesk.com/view/ACD/2016/ENU/?guid=GUID-DFE47717-F7AF-443B-AD78-4E0BB60121C7)가 도움이 되었기를 바랍니다. .sendCommand에서 반환 된 객체이므로 어떤 방법 으로든 region 객체를 '찾거나' '찾는'함수로 다시 작성하십시오. –

답변

0

당신은 더 나은 AutoCAD를 개체 모델을 활용할 것 :

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

안녕하세요, 귀하의 도움에 너무 감사드립니다! 코드가 잘 작동하지만 Excel VBA에서 작동하도록 고심하고 있습니다. 나는 'ThisDrawing'을 'ACAD.ActiveDocument'로 바꾸려고했지만 작동하지 않는 것 같습니다. 내 새 코드를 표시하기 위해 원래 게시물을 편집했습니다. –

+0

당신은 오신 것을 환영합니다. 문제에 대한 해결책을받은 후 질문을 변경하면 여기에 허용되지 않는 "샬레 온"질문에 이르게됩니다. 그래서, 귀하의 질문 _original_ 버전을 재개하고 나의 대답이 그것을 해결했다면 받아 들인 것으로 표시하시기 바랍니다. 새로운 문제에 대한 새로운 게시물을 만들고 싶을 수 있습니다. 고마워요 – user3598756

+0

죄송합니다, 저는이 말을 처음 접했는데 이제는 괜찮을 것입니다. –