Makro Einfügen aus einem Auswahlsatz erzwingen

Hallo

Ich arbeite an Solidworks 2019 Prenium... Ergänzung " Simulation "

Ich möchte ein Makro erstellen, das eine Kraft in automatisch einfügt. Die Idee...

  • Abrufen eines bereits erstellten Auswahlsatzes mit mehreren Flächen
  • eine Kraft von 1N auf jede Fläche des Auswahlsatzes einfügen
  • " Verstecken " Sie die Macht, da es mehr als 1000 Gesichter im Auswahlspiel geben kann

Ich habe es geschafft, eine Kraft pro Seite zu erzeugen, indem ich die Steuerung in eine Schleife versetzt habe, aber plötzlich wird der Simulationsbericht sehr schwer und unlesbar.

Wenn ich die Simulationsstudie manuell erstelle, ist hier meine Methode:

  • Ich wähle eine der Flächen des Auswahlsatzes aus
  • Ich setze eine Kraft von 1N ein
  • Ich " verstecke " die Macht
  • Ich bearbeite die Kraft
    - Ich lösche die zuvor ausgewählte Fläche
    - Ich wähle das Auswahlset aus (alle Seiten des Sets passen in eine einzige Kraft"

Die Idee wird auch sein, das Gleiche mit den festen Auflageflächen in einem 2. Schritt zu machen...

Hilfe! Vielen Dank im Voraus an alle Programmierprofis!

Hallo
Hier ist derjenige, der die Macht am besten beherrscht, @OBI_WAN ! Aber ich glaube nicht, dass er dir helfen wird, junger Padawan.

(sorry, ich musste es machen)

3 „Gefällt mir“

Hallo;

Arbeiten Sie an einer Baugruppe oder einem Teil? Und welche Art? (Balken(e),geringe Dicke, mechanisch geschweißt... Sonstiges)

Es wäre interessant, eine Vorstellung von der Geometrie (1000 Flächen ???) zu haben, auf die Sie Ihre Kraft von 1N (1Newton, das ist nicht viel... Wäre es nicht einfacher, mit der Schwerkraft oder mit der Masse zu spielen?
… Meine Neugier hat nichts gegen einen kleinen Screenshot ... oder besser die *.sld-Datei... (Solidworks 2019 (das ist altmodisch: 2019) hat den Vorteil, dass es von einer großen Anzahl der hier anwesenden Forenteilnehmer genutzt werden kann... :yum:

Herzliche Grüße.

1 „Gefällt mir“

Vielen Dank für das Interesse an dem Thema!
Die statische Studie wird entweder in einer Teiledatei oder an einem Teil in einer Baugruppe durchgeführt.
In allen Fällen hat das Teil ein Volumen (Extrusion) von ca. 1,6 mm Dicke.
Ich kann bei Bedarf eine sld-Datei in einer privaten Nachricht bereitstellen.

1000 Flächen, 1,6 mm dick... Handelt es sich um ein Stück von der Art, das gegrillt, gerändelt, geprägt wird?

Die Wetten sind aus!
Nein, es handelt sich um den elektronischen Kartentyp

Arf das weiß ich nur... Das erklärt das 1,6mm, ich hätte dran denken können, aber wenn es 1000 Flächen gibt, hat es entweder eine verdammt originelle Form, voller Löcher und Ausschnitte, oder man bezieht die Komponenten mit ein, aber da ändert es alles an der Simulation.

Ich denke, die festen Stützpunkte, von denen Sie sprechen, sind die Bereiche, in denen die Leiterplatte gehalten und fixiert wird.

Besteht der Zweck der Simulation darin, eine Verformung der Leiterplatte zu simulieren, wenn sie sich z.B. in einem flexiblen Gehäuse befindet, oder ihre Verformung zu simulieren, wenn ein Objekt darauf drückt?

@Sylk messe ich mich mit der Macht und ihren außergewöhnlichen Fähigkeiten wie Telekinese, Hellsehen und Gedankenmanipulation auseinander. Ich wurde in der Kunst der Selbstbeherrschung und Meditation geschult.
aber mit SOLIDWORKS befinden wir uns in einer anderen Welt, nur Dassault hat die Kontrolle darüber... in der Tat, nein, ich glaube, dass selbst wir es nicht :rofl: :rofl: wissen :rofl:

6 „Gefällt mir“

Zu Ihrer Information, hier ist der Code, den ich verwende, um die Kraft an jeder Oberfläche in der Schleife einzufügen:

Dim swApp As Object

Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

Sub insert_force(DispatchObj1 As Object)

Set swApp = Application.SldWorks

Set Part = swApp.ActiveDoc
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()

DispArray = Array(DispatchObj1)             'Récupération de la surface

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)

' Redraw
Part.GraphicsRedraw2
Set StudyManagerObj = Nothing
Set ActiveDocObj = Nothing
Set CWAddinCallBackObj = Nothing
Set COSMOSWORKSObj = Nothing
End Sub

Aber wie " gruppiert " man mehrere Flächen zu einem " Batch ", der mit dem Einfügebefehl aufgerufen wird???
Es sei denn, es ist nicht die richtige Logik??

Seien Sie vorsichtig für den Code, verwenden Sie das Tag:
image
Andernfalls richtet die Übersetzung von bing Schaden an:
image
Im Übrigen keine Ideen für Ihre Sorgen.

2 „Gefällt mir“

Sie können " Auswahlliste " ausprobieren, aber ich weiß nicht, ob Sie es mit " Simulation " anwenden können:
https://help.solidworks.com/2019/english/api/sldworksapi/Selection_Lists_VB.htm
oder

[Off-Topic-EIN]
Du hast die Zeitreise vergessen @OBI_WAN ...
[Off-Topic-AUS]

2 „Gefällt mir“

Vielleicht gehen Sie stattdessen durch eine " for", " until  " oder "  while " Schleife, um jedes Gesicht zu sammeln/zu beeinflussen?

Oder besser, ich lasse die Makro-Profis antworten. Es ist schon zu lange her, dass ich eine Zeile codiert habe...

Hallo fgauvreau,
Versuchen Sie dies. Es wird sich durch die Auswahlspiele ziehen und eine verborgene Kraft für alle erzeugen (allerdings ohne den Schritt, sie nur auf der ersten Seite zu erstellen. Ich habe den Grund für diesen Schritt vielleicht nicht verstanden)

Option Explicit
Dim swApp As SldWorks.SldWorks
Sub main()
    Dim swModel As SldWorks.ModelDoc2
    Dim swFeat As SldWorks.Feature
    Dim swSelectionSetFolder As SldWorks.SelectionSetFolder
    Dim vSels As Variant
    Dim vSel As Variant
    Dim swSelSet As SldWorks.SelectionSet
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swFeat = swModel.FirstFeature

    While Not swFeat Is Nothing
        If swFeat.Name = "Selection Sets" Then
            Set swSelectionSetFolder = swFeat.GetSpecificFeature2
            vSels = swSelectionSetFolder.GetSelectionSets
            For Each vSel In vSels
                Set swSelSet = vSel
                Debug.Print "Nom du jeu de Selection: " & swSelSet.GetName
                swModel.ClearSelection2 True
                CreateForce swSelSet
            Next
        End If
        Set swFeat = swFeat.GetNextFeature
    Wend
End Sub

Sub CreateForce(swSelSet As SldWorks.SelectionSet)
    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

    vSelItems = swSelSet.GetSelectionSetItems
    vSelItemTypes = swSelSet.GetSelectionSetItemTypes

    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
3 „Gefällt mir“

Vielen Dank!
Das war genau das, was ich brauchte...
Ich war in der Lage, den Code in mein Makro zu integrieren, indem ich den Wert der Kraft entsprechend dem Auswahlspiel verwaltete und feste Stützen nach dem gleichen Prinzip erstellte.

StudyObj.ShowOrHideForce = FalschTexte préformaté
Nickel zur Aufhellung der Behandlung!

1 „Gefällt mir“