[Interfejs API Solidworks] Nazwa zespołu nadrzędnego jak w BOM

Witam

Posiadam pewną wiedzę na temat VBA, ale jestem nowy w API Solidworks i muszę zmodyfikować makro kolegi, uruchomione na rysunku z wybranym komponentem.

Oto, co wydaje mi się być problemem z kodem:

swEnt = swSelMgr.GetSelectedObject5(iSel)

swSelComp = swEnt.GetComponent

swSelModel = swSelComp.GetModelDoc

Nazwa = swSelModel. GetTitle (DostaćTytuł)

Nazwa zawiera następnie nazwę wybranej części, gdzie chciałbym zwrócić nazwę jej zespołu macierzystego, ponieważ bryła bardzo dobrze sprawdza się w zestawieniu komponentów.

Zaznaczam, że kod działa, gdy konfiguracje zestawu są ustawione w następujący sposób:

Wyświetlanie komponentów potomnych używanych jako podzespół: "pokaż"

i że chcemy go zmodyfikować tak, aby działał również wtedy, gdy ustawimy na "ukryj"

 

Dziękuję za wszelką pomoc, której możesz mi udzielić! 

Błędna odpowiedź...

Proszę umieścić kod w całości, jest łatwiejszy do zrozumienia, nawet jeśli w tekście mówisz tylko o części.

Ale w rzeczywistości nie jest to część, która dotyczy twojej prośby. (Otrzymujesz nazwę wybranej części w złożeniu)

Pełny kod ma kilka tysięcy wierszy, ale ta część jest niezależna, po prostu wyciąłem kilka poprzednich linii, które zajmują się wieloma wyborami. 

Zaraz po skopiowanym fragmencie porównujemy wartość nazwy zmiennej z każdym oznaczeniem w nomenklaturze. I oczywiście, ponieważ zestawienie komponentów pokazuje tylko nazwę zespołu nadrzędnego, wszystko się zatrzymuje. 

Jeśli dobrze rozumiem Twoją odpowiedź sbadenis, tak długo, jak komponenty potomne są ukryte w konfiguracji mojego zestawu, żadna metoda zastosowana do swSelModel nie będzie w stanie "przejść" do właściwości rodzica? 

Szukałem czegoś w rodzaju swSelModel."GetParent", który pozwoliłby mi wrócić do właściwości górnego zespołu tak jak w mojej nomenklaturze. 

Gdy elementy podrzędne są wyświetlane we właściwościach konfiguracji, po kliknięciu tej samej części MEP, zwraca nazwę zespołu nadrzędnego.

Nie sprecyzowałem tego, ale właściwość nie jest bezpośrednio sprawdzana w zakładce właściwości, kierujemy wartością $JAMAIS_DEVELOPPER_IN_NOMENCLATURE przez rodzinę części.  Jest to Y lub N z tego, co widzę w pomocy API; Wydaje się, że nie ma wartości, aby przełączyć się na "promowanie", czego w rezultacie nie przetestowałem. 

 

 

 

 

Jeśli chcesz mieć 'GetParent':

 

http://help.solidworks.com/2018/english/api/sldworksapi/SolidWorks.Interop.sldworks~SolidWorks.Interop.sldworks.IComponent2~GetParent.html

1 polubienie

Dziękuję mandragorze! Testowałem,  ale nie robi postępów. 

Ustaw swParentComp = swSelComp.GetParent

Ustaw swSelModel2 = swParentComp.GetModelDoc

 Nazwa = swSelModel2.GetTitle

Ale nazwa nadal zawiera nazwę części, tak jakby GetParent nie istniał (nie zwraca jednak wartości NULL) 

 

Co się stanie, jeśli przejdziesz bezpośrednio do Name = swParentComp.GetTitle ?

 

Masz tutaj wszystkie informacje o komponencie/rodzicu, powinieneś być w stanie znaleźć to, czego szukasz, jest też zarządzanie konfiguracją.

http://help.solidworks.com/2018/english/api/sldworksapi/solidworks.interop.sldworks~solidworks.interop.sldworks.iconfiguration~getrootcomponent3.html

1 polubienie

Dzięki Mandragore, udało mi się uruchomić GetParent w jednym kroku:

Nazwa = swSelComp.GetParent.GetModelDoc.GetTitle

Już pierwsza część, swSelComp.GetParent, była dla mnie problemem, prawdopodobnie z powodu problemów z deklaracją typu.

 

Doskonały! Osobiście unikam używania selekcji przed akcją. Oprogramowanie teoretycznie wie, gdzie jest, myślę, że unika niepotrzebnych linii. 

 

Wreszcie, nie zrobiłem wielu interfejsów API w solidworks, głównie zajmuję się ponownym składaniem lub zarządzaniem plikami. Nie czytam ani nie piszę dla nomenklatur.