Ich habe ein Makro erstellt, um automatisch Kräfte aus einem Flächenauswahlsatz in ein Bauteil einzufügen. In einigen Fällen muss ich das Gleiche tun, aber im Kontext einer Assembly. Die Auswahlsätze befinden sich immer in einem der Teile der Baugruppe. Der Befehl funktioniert, aber es ist keine Oberfläche ausgewählt...
Ich füge den Code ein, der zur Info verwendet wird:
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
Meine Schlussfolgerung zum Ursprung dieser Verweigerung, eine Anstrengung zu erzeugen: Die Adressen der Objekte, die von den " Items " der Auswahlmenge zurückgegeben werden, zeigen nicht auf die Flächen der Auswahl. Es scheint notwendig, die Methode " GetCorrespondingItem " des Elements zu verwenden, um die richtige Adresse zu erhalten.
Ich möchte hinzufügen, dass die Anzahl und Vielfalt der Parameter der Funktion " AddEffort3 " bei der Erkundung nicht hilfreich ist...
Ich schlage eine funktionierende Lösung im angehängten Makro vor, in dem ich versucht habe, CW-typisierte Variablen anstelle von "Objekt "-Typen zu verwenden, indem ich die " Solidworks Simulation 20XX -Typbibliothek " zur Liste der Referenzen hinzugefügt habe. Die Parameter des Aufwands unterscheiden sich ein wenig von denen Ihres ursprünglichen Vorschlags (Aufwand mit Richtungsbezug), aber das Makro funktioniert und kann als Vergleichsgrundlage verwendet werden, um zu versuchen, Fehlfunktionen zu identifizieren.
Das Makro verwendet zwei Ansätze zur Selektion von Objekten, entweder mit den klassischen Funktionen des SelectionManagers des Modells oder mit den " Items " des Auswahlsatzes.
Leider funktioniert keines davon, wenn das Auswahlset zu einem Raum gehört. Die Auswahl führt nicht zu dem gleichen Verhalten wie bei der Zugehörigkeit zur Baugruppe. Obwohl die Entitäten identifiziert wurden, sind sie nicht konform (?), und die Funktion " AddEffort3 " gibt einen Fehlercode zurück.
Makroanhang, sowie das Montagedokument, das für meine Tests verwendet wurde (SW2022). Das Auswahlset verfügt über 3 flache Flächen.
Vielen Dank für Ihre Antwort und die aufgewendete Zeit. Ich gebe zu, dass ich " ein wenig " unter Ihrem Niveau in der Programmierung bin... Ich konnte Ihre Dateien nicht verwenden, da ich derzeit die Version 2019 verwende.
In der Solidworks API-Hilfe werden keine Funktionen erwähnt, mit denen ein Auswahlsatz (ISselectionSetFolder) erstellt werden kann. Weder in einem Teil, noch in einer Baugruppe. Eine mögliche Lösung wäre, die im Raum enthaltenen Spielentitäten auszuwählen und sie in einem Array zu halten, um sich um sie zu bemühen.
Nachteil: Der Auswahlsatz wird nicht auf der Ebene des Baugruppenbaubaums für eine mögliche spätere Verwendung gehalten, so dass die Elemente leicht gefunden werden können.
Zusammenfassend fällt es mir schwer, das Interesse dieses Ansatzes im Vergleich zu den Funktionen der SW-Simulation zu erkennen, die bei der Erstellung von Aufwänden eine Mehrfachauswahl ermöglichen.
Ich habe ein Makro, das Teileoberflächen nach bestimmten Kriterien in Auswahlsätzen gruppiert. Es ist normal, dass man Schwierigkeiten hat, den Sinn einer solchen Anfrage zu verstehen, wenn man nur wenige Kräfte einsetzen muss... Aber stellen Sie sich vor, Sie haben mehrere hundert...
Hunderte!? Schnell, ein Bild, um das Ding zu veranschaulichen und zu würdigen...
Davon abgesehen verstehe ich Ihr Interesse an Auswahlsets besser.
Im Gegensatz zu dem, was ich zuvor erwähnt habe, ist es möglich, Auswahlsätze in VBA zu erstellen/löschen. Die Funktionen befinden sich in der IModelDocExtension-Oberfläche des Dokuments. Sie werden als SaveSelection und DeleteSelection2 bezeichnet.
Alles, was bleibt, ist, sich ein kleines Verwaltungsmodul vorzustellen, das es Ihnen ermöglicht, " SetSelection " auszuwählen, die zu Teilen gehören, und sie dann einzeln oder gruppiert in die Baugruppe einzufügen...