Wstawianie siły makro ze zbioru wskazań

Witam

Pracuję na Solidworks 2019 prenium... Dodatek " Symulacja "

Chcę utworzyć makro, które wstawia siłę w trybie automatycznym. Pomysł...

  • Pobieranie już utworzonego zbioru wskazań zawierającego wiele powierzchni
  • wstawić siłę 1N na każdej powierzchni zbioru wskazań
  • " Ukryj " Siłę, ponieważ w grze selekcyjnej może być więcej niż 1000 twarzy

Udało mi się wytworzyć siłę na stronę, umieszczając sterowanie w pętli, ale nagle raport z symulacji staje się bardzo ciężki i nieczytelny.

Ręcznie, kiedy tworzę badanie symulacyjne, oto moja metoda:

  • Wybieram jedną ze ścian zbioru wskazań
  • Wstawiam siłę 1N
  • Ja " ukrywam " moc
  • Edytuję siłę
    - Usuwam poprzednio wybraną twarz
    - Wybieram zbiór wskazań (wszystkie boki zbioru mieszczą się w jednej sile"

Pomysł będzie również polegał na tym, aby zrobić to samo ze stałymi obszarami podparcia w 2. kroku...

Pomoc! Z góry dziękujemy wszystkim profesjonalistom w dziedzinie programowania!

Witam
Tutaj tym, który najlepiej opanuje Moc, jest @OBI_WAN ! Ale nie sądzę, żeby ci pomógł, młody padawanie.

(przepraszam, musiałem to zrobić)

3 polubienia

Witam;

Pracujesz nad zespołem lub częścią? A jaki? (Belka(e), mała grubość, spawana mechanicznie... inne)

Byłoby interesujące mieć pojęcie o geometrii (1000 ścian ???), na którą przykładasz swoją siłę 1N (1Newton, to niewiele... Czy nie byłoby łatwiej pobawić się grawitacją lub masami?
… Moja ciekawość nie będzie miała nic przeciwko małemu zrzutowi ekranu... lub lepiej plik *.sld... (Solidworks 2019 (to staromodny: 2019) ma tę zaletę, że może być wykorzystywany przez dużą liczbę obecnych tutaj forumowiczów... :yum:

Pozdrowienia.

1 polubienie

Dzięki za zainteresowanie tematem!
Badanie statyczne jest wykonywane albo w pliku części, albo na części w zespole.
We wszystkich przypadkach część ma objętość (wytłoczenie) o grubości około 1,6 mm.
W razie potrzeby mogę dostarczyć plik sld w wiadomości prywatnej.

1000 ścian, grubość 1,6 mm... Czy jest to kawałek z gatunku tych, które są grillowane, radełkowane, tłoczone?

Zakłady są wyłączone!
Nie, to typ karty elektronicznej

Arf Wiem tylko to, że... To wyjaśnia 1,6 mm, mógłbym o tym pomyśleć, ale żeby było 1000 twarzy, albo ma cholernie oryginalny kształt, pełen dziur i wycięć, albo dołączasz komponenty, ale tam wszystko zmienia się w symulacji.

Domyślam się, że stałe punkty podparcia, o których mówisz, to obszary, w których płytka drukowana jest trzymana i mocowana.

Czy celem symulacji jest symulacja deformacji płytki drukowanej, jeśli na przykład znajduje się ona w elastycznej obudowie, czy też symulacja jej deformacji, jeśli obiekt na nią naciska?

@Sylk mierzę Moc i jej niezwykłe zdolności, takie jak telekineza, jasnowidzenie i manipulacja umysłem. Zostałem wyszkolony w sztuce samokontroli i medytacji.
ale z solidworks jesteśmy w innym świecie, tylko Dassault ma nad nim kontrolę... w rzeczywistości nie myślę, że nawet my nie :rofl: :rofl: wiemy :rofl:

6 polubień

FYI, oto kod, którego używam do wstawiania siły na każdej powierzchni w pętli:

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

Ale jak " zgrupować " kilka powierzchni w " partię ", która byłaby wywoływana przez polecenie wstawiania???
Chyba, że to nie jest właściwa logika?

Uważaj na kod, użyj tagu:
image
W przeciwnym razie tłumaczenie bing wyrządzi szkody:
image
Co do reszty, nie ma pomysłów na twoje zmartwienia.

2 polubienia

Możesz spróbować " Lista wyboru ", ale nie wiem, czy możesz ją zastosować za pomocą " Symulacji ":
https://help.solidworks.com/2019/english/api/sldworksapi/Selection_Lists_VB.htm
lub

[Nie na temat-WŁ.]
Zapomniałeś o podróży w czasie @OBI_WAN ...
[Nie na temat-WYŁ.]

2 polubienia

Może zamiast tego przejdź przez pętlę " for", " until  " lub " while ", aby zebrać/wpłynąć na każdą twarz?

Albo lepiej, pozwolę odpowiedzieć profesjonalistom od makro. Minęło zbyt dużo czasu, odkąd zakodowałem linię...

Witaj fgauvreau,
Spróbuj tego. Będzie przebiegać przez gry selekcyjne i tworzyć ukrytą siłę dla każdego (choć bez etapu tworzenia jej tylko po pierwszej stronie. Być może nie zrozumiałem powodu tego kroku)

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 polubienia

Dziękuję bardzo!
To jest dokładnie to, czego potrzebowałem...
Udało mi się zintegrować kod z moim makrem, zarządzając wartością siły zgodnie z grą wyboru i tworząc stałe podpory na tej samej zasadzie.

StudyObj.ShowOrHideForce = FałszTexte préformaté
nikiel, aby rozjaśnić zabieg!

1 polubienie