Utworzyłem makro do automatycznego wstawiania sił ze zbioru wyboru powierzchni do elementu. W niektórych przypadkach muszę zrobić to samo, ale w kontekście zgromadzenia. Zbiory wskazań znajdują się zawsze w jednej z części zespołu. Polecenie działa, ale nie jest wybrana żadna powierzchnia...
Wstawię kod używany do informacji:
Public Sub CreateForce200(swSelSet As SldWorks.SelectionSet)
Dim swApp As Object
Set swApp = Application.SldWorks
Dim COSMOSWORKSObj As Object
Dim CWAddinCallBackObj As Object
Set CWAddinCallBackObj = swApp.GetAddInObject("CosmosWorks.CosmosWorks")
Set COSMOSWORKSObj = CWAddinCallBackObj.CosmosWorks
Dim ActiveDocObj As Object
Dim StudyManagerObj As Object
Dim LoadsAndRestraintsManagerObj As Object
Dim ErrorCodeObj As Long
Dim ContactManagerObj As Object
Set ActiveDocObj = COSMOSWORKSObj.ActiveDoc()
Set StudyManagerObj = ActiveDocObj.StudyManager()
Dim StudyObj As Object
Set StudyObj = StudyManagerObj.GetStudy(0)
Set LoadsAndRestraintsManagerObj = StudyObj.LoadsAndRestraintsManager()
Dim vSelItems As Variant
Dim vSelItemTypes As Variant
Dim swSelItem As SldWorks.SelectionSetItem
Dim swFace As SldWorks.Face2
Dim j As Integer
Dim errors As Long
vSelItems = swSelSet.GetSelectionSetItems
vSelItemTypes = swSelSet.GetSelectionSetItemTypes
Debug.Print "Nom du jeu de Selection: " & swSelSet.GetName
'Contrôle pièce activée
'Dim swPart As SldWorks.PartDoc
'Set swPart = swApp.ActivateDoc3(nameCarte2, True, swRebuildOnActivation_e.swUserDecision, errors)
Dim DispArray As Variant
Dim cnt As Long
cnt = UBound(vSelItems)
Dim myArray()
ReDim Preserve myArray(cnt)
For j = 0 To cnt
Set swSelItem = vSelItems(j)
If vSelItemTypes(j) = swSelectType_e.swSelFACES Then
Set myArray(j) = swSelItem.GetCorrespondingItem
End If
Next
DispArray = myArray
Dim CWForceObj As Object
Dim DistanceValues As Variant
Dim ForceValues As Variant
Dim ComponentValues As Variant
Dim data(6) As Double
data(0) = 1: data(1) = 1: data(2) = 1: data(3) = 1: data(4) = 1: data(5) = 1
ComponentValues = data
Set CWForceObj = LoadsAndRestraintsManagerObj.AddForce3(1, 0, -1, 0, 0, 0, (DistanceValues), (ForceValues), 0, False, 0, 0, 0, 1, (ComponentValues), False, False, (DispArray), Nothing, False, ErrorCodeObj)
StudyObj.ShowOrHideForce = False
Set StudyManagerObj = Nothing
Set ActiveDocObj = Nothing
Set CWAddinCallBackObj = Nothing
Set COSMOSWORKSObj = Nothing
End Sub
Mój wniosek na temat pochodzenia tej odmowy tworzenia wysiłku: adresy obiektów zwracanych przez " Elementy " zbioru selekcji nie wskazują na twarze wyboru. Wydaje się, że konieczne jest użycie metody " GetCorrespondingItem " przedmiotu, aby uzyskać poprawny adres.
Dodam jeszcze, że ilość i różnorodność parametrów funkcji " AddEffort3 " nie pomaga w eksploracji...
Proponuję działające rozwiązanie w załączonym makrze, w którym starałem się użyć zmiennych typu CW, a nie typów "obiektowych " , dodając do listy odniesień " bibliotekę typów Solidworks Simulation 20XX". Parametry wysiłku są nieco inne niż te z twojej początkowej propozycji (wysiłek z odniesieniem do kierunku), ale makro działa i może być wykorzystane jako podstawa do porównania w celu zidentyfikowania usterek.
Makro wykorzystuje dwa podejścia do wybierania obiektów, albo za pomocą klasycznych funkcji SelectionManager modelu, albo za pomocą " Elementów " zbioru wskazań.
Niestety, żaden z nich nie zadziała, jeśli zbiór zaznaczeń należy do pomieszczenia. Jego wybór nie daje takiego samego zachowania, jak w przypadku, gdy należy do zespołu. Mimo że jednostki są zidentyfikowane, nie są zgodne (?), a funkcja " AddEffort3 " zwraca kod błędu.
Załącznik do makra, a także dokument montażowy używany do moich testów (SW2022). Zbiór wskazań składa się z 3 płaskich ścian.
Bardzo dziękuję za odpowiedź i poświęcony czas. Przyznaję, że jestem " trochę " poniżej twojego poziomu w programowaniu... Nie mogłem użyć twoich plików, ponieważ obecnie używam wersji 2019.
Pomoc API Solidworks nie wspomina o żadnych funkcjach, które mogą utworzyć zbiór wskazań (ISselectionSetFolder). Ani w części, ani w zespole. Możliwym rozwiązaniem byłoby wybranie elementów gry znajdujących się w pokoju i trzymanie ich w tablicy, aby zastosować do nich wysiłek.
Wada: zbiór wskazań nie jest przechowywany na poziomie drzewa konstrukcyjnego zespołu w celu ewentualnego późniejszego wykorzystania, co pozwala na łatwe odnalezienie elementów.
Podsumowując, trudno mi dostrzec zainteresowanie tym podejściem w porównaniu z funkcjami symulacji oprogramowania, które pozwalają na wielokrotny wybór podczas tworzenia wysiłków.
Mam makro, które grupuje powierzchnie części według określonych kryteriów w zbiorach wskazań. To normalne, że masz problem ze zrozumieniem sensu takiego żądania, jeśli masz tylko kilka sił do włożenia... Ale wyobraź sobie, że masz kilkaset...
Setki!? Szybki, obraz, aby zilustrować i docenić rzecz...
Biorąc to pod uwagę, lepiej rozumiem twoje zainteresowanie zbiorami wyboru.
W przeciwieństwie do tego, o czym wspomniałem wcześniej, w VBA możliwe jest tworzenie/usuwanie zbiorów wskazań. Funkcje znajdują się w interfejsie IModelDocExtension dokumentu. Są one nazywane SaveSelection i DeleteSelection2.
Pozostaje tylko wyobrazić sobie mały moduł zarządzania, który pozwoliłby wybrać " SetSelection " należące do części, a następnie wstawić je do zespołu, jedna po drugiej lub zgrupowane razem...