Как автоматически деактивировать и повторно активировать несколько геометрических наборов и объектов? - PullRequest
0 голосов
/ 11 января 2020

Я написал макрос, который скрывает все в нескольких геометрических наборах, а также объекты и геометрические наборы в этих первых наборах, кроме одной указанной c ветви. Я использую это для сохранения определенного объекта огромного и сложного дерева спецификаций в виде файла STP. (См. Прикрепленный ниже.)

(Небольшое усложнение в этом макросе «Hide_and_Save»: добавление тел в мой выбор скрытия работает хорошо, но для моего выбора показа это не сработало. Почему это произойдет? )

Я также написал макрос, который выполняет итеративные корректировки. Для итераций я использую Do While L oop и некоторые параметры и измерения. Чтобы обновить эти значения, я должен обновлять деталь / объект в каждом цикле. Но есть некоторые конструктивные элементы, которые выдают ошибки, пока l oop не будет успешно завершен. Поэтому я деактивирую все геометрические наборы, которые мне не нужны для итераций (включая все дочерние элементы), и позже я повторно активирую их вручную.

Моя цель - улучшить автоматизацию, поэтому я попытался использовать свой «Hide_and_Save» макрос для деактивации и реактивации. Это не сработало. Когда я записываю процесс, каждый объект указывается в отдельной строке и деактивируется. Поскольку существует более 350 элементов, я бы хотел этого избежать.

Как деактивировать все подэлементы в геометрическом наборе (желательно с дочерними элементами), не обращаясь к каждому элементу по отдельности?

Attribute VB_Name = "Hide_and_Save"

'_______________________________________________________________________________________

'Title:         Hide_and_Save
'Language:      catvba
'_______________________________________________________________________________________

Sub CATMain()
'---------------------------------------------------------------------------------------

    'Select active Part/Document
    Dim myDocument As Document
    Set myDocument = CATIA.ActiveDocument
    Dim myPart As part
    Set myPart = CATIA.ActiveDocument.part

    '--------------------------------------------------------------

    ' Enter file path
    Dim filepath As String
    filepath = InputBox("Please select memory location", "Input filepath", "...")
    If filepath = "" Then 'cancle, abort or empty input
        MsgBox "No valid input / cancle !"
        Exit Sub
    End If

    '--------------------------------------------------------------

    ' Hide/show Objects of Part/Products and save as STEP

    ' Update Model
    CATIA.ActiveDocument.part.Update

    ' Deklaration of Selections and Properties
    Dim selectionShow, selectionHide As Selection
    Set selectionShow = myDocument.Selection
    Set selectionHide = myDocument.Selection

    Dim visPropertySetShow, visPropertySetHide As VisPropertySet
    Set visPropertySetShow = selectionShow.VisProperties
    Set visPropertySetHide = selectionHide.VisProperties

    ' Definition of the collection of geometric sets - HybridBodies
    Dim hybridBodiesInPart, hybridBodiesInProcess As HybridBodies
    Dim hybridBodiesInRS, hybridBodiesInHuelle As HybridBodies

    ' Definition of individual geometric sets - HybridBody
    Dim hybridBodyInPart, hybridBodyProcess, hybridBodyInProcess As HybridBody
    Dim hybridBodyRS, hybridBodyInRS As HybridBody
    Dim hybridBodyHuelle, hybridBodyInHuelle As HybridBody

    ' Definition of the collection of 3D-objects - HybridShapes
    Dim hybridShapesInHuelle As HybridShapes

    ' Definition of individual 3D-objects - HybridShape
    Dim hybridShapeInHuelle, hybridShapeForm As HybridShape

    ' Hide objects
    Set hybridBodiesInPart = myPart.HybridBodies
    For Each hybridBodyInPart In hybridBodiesInPart
        selectionHide.Add hybridBodyInPart
    Next

    Set hybridBodyProcess = hybridBodiesInPart.Item("Process")
    Set hybridBodiesInProcess = hybridBodyProcess.HybridBodies
    For Each hybridBodyInProcess In hybridBodiesInProcess
        selectionHide.Add hybridBodyInProcess
    Next

    Set hybridBodyHuelle = hybridBodiesInProcess.Item("Huelle")
    Set hybridBodiesInHuelle = hybridBodyHuelle.HybridBodies
    For Each hybridBodyInHuelle In hybridBodiesInHuelle
        selectionHide.Add hybridBodyInHuelle
    Next

    Set hybridShapesInHuelle = hybridBodyHuelle.HybridShapes
    For Each hybridShapeInHuelle In hybridShapesInHuelle
        selectionHide.Add hybridShapeInHuelle
    Next

    Set hybridShapeForm = hybridShapesInHuelle.Item("Form")

    visPropertySetHide.SetShow 1 'hide
    selectionHide.Clear

    ' Show objects
    selectionShow.Add hybridBodyProcess
    selectionShow.Add hybridBodyHuelle
    selectionShow.Add hybridShapeForm       
    visPropertySetShow.SetShow 0 'show
    selectionShow.Clear

    ' Data export as STP
    stepAnswer = MsgBox("Should the displayed elements be saved as STEP?", 3 + 0, "Export: Form")
    If stepAnswer = 6 Then
        myDocument.ExportData filepath & "Form" & ".stp", "stp"
    ElseIf stepAnswer = 3 Or stepAnswer = 2 Then 'cancle or abort
        MsgBox "cancle !"
        Exit Sub
    End If

'---------------------------------------------------------------------------------------

    MsgBox "Finished !" & vbCrLf & s

End Sub

(Обычно я работаю с Generative Shape Design и использую VBA для макросов.)

1 Ответ

0 голосов
/ 14 января 2020

У каждой функции есть агрегированный параметр «Activity».

Dim oShape as HybridShape
For Each oShape In oGS.HybridShapes
    Dim oActivity as Parameter
    Set oActivity = oPart.Parameters.SubList(oShape,False).Item("Activity")
    Call oActivity.ValuateFromString("False")
Next

Позвольте мне добавить, что использование функции Activity не рекомендуется. Я НИКОГДА не делаю это сам. Если у вас есть доступ к KBE (Specifically Knowledge Advisor Workbench), вы, вероятно, можете делать то, что вы хотите, с правилами / действиями / реакциями, с меньшим количеством кода и с более надежной моделью в конце.

...