Macro Force Invoegen uit een selectieset

Hallo

Ik werk aan Solidworks 2019 prenium... Supplement " Simulatie "

Ik wil een macro maken die een kracht invoegt in automatisch. Het idee...

  • Een reeds gemaakte selectieset met meerdere gezichten ophalen
  • voeg een kracht van 1N in op elk vlak van de selectieset
  • " Verberg " de Kracht, want er kunnen meer dan 1000 gezichten in het selectiespel zijn

Het lukte me om een kracht per kant te maken door de besturing in een lus te zetten, maar ineens wordt het simulatieverslag erg zwaar en onleesbaar.

Handmatig, wanneer ik de simulatiestudie maak, is hier mijn methode:

  • Ik selecteer een van de vlakken van de selectieset
  • Ik voeg een kracht van 1N toe
  • Ik " verberg " de kracht
  • Ik bewerk de kracht
    - Ik verwijder het eerder geselecteerde gezicht
    - Ik selecteer de selectieset (alle zijden van de set passen in één kracht"

Het idee zal ook zijn om in een 2e stap hetzelfde te doen met de vaste steungebieden...

Help! Bij voorbaat dank aan alle programmeerprofessionals!

Hallo
Hier is degene die de kracht het beste beheerst @OBI_WAN ! Maar ik denk niet dat hij je zal helpen, jonge padawan.

(sorry, ik moest het doen)

3 likes

Hallo;

Werk je aan een assemblage of onderdeel? En welk type? (Balk(en),Lage dikte, mechanisch gelast... andere)

Het zou interessant zijn om een idee te hebben van de geometrie (1000 vlakken ???) waarop je je kracht van 1N (1Newton, het is niet veel... Zou het niet makkelijker zijn om met de zwaartekracht te spelen, of met de massa?
… Mijn nieuwsgierigheid zal het niet erg vinden om een kleine screenshot te maken ... of beter het *.sld-bestand... (Solidworks 2019 (dat is ouderwets: 2019) heeft het voordeel dat het door een groot aantal van de hier aanwezige forumisten kan worden uitgebuit... :yum:

Vriendelijke groeten.

1 like

Bedankt voor de interesse in het onderwerp!
De statische studie wordt gedaan in een onderdeelbestand of op een onderdeel in een assemblage.
In alle gevallen is het onderdeel een volume (extrusie) van ongeveer 1,6 mm dik.
Ik kan indien nodig een sld-bestand in een privébericht verstrekken.

1000 vlakken, 1,6 mm dik... Is het een stuk van het type dat wordt gegrild, gekarteld, in reliëf gemaakt?

De weddenschappen zijn uitgeschakeld!
Nee, het is het type elektronische kaart

Arf: Ik weet alleen dat... Dat verklaart de 1,6 mm, ik had het kunnen bedenken, maar om er 1000 gezichten te hebben, heeft het ofwel een verdomd originele vorm, vol gaten en uitsparingen, of je neemt de componenten op, maar daar verandert het alles aan de simulatie.

Ik denk dat de vaste steunpunten waar je het over hebt, de gebieden zijn waar de printplaat wordt vastgehouden en vastgezet.

Is het doel van de simulatie om een vervorming van de printplaat te simuleren, als deze zich bijvoorbeeld in een flexibele behuizing bevindt, of om de vervorming ervan te simuleren als een object erop drukt?

@Sylk ik kennismaken met de Force en zijn buitengewone vermogens, zoals telekinese, helderziendheid en manipulatie van de geest. Ik ben getraind in de kunst van zelfbeheersing en meditatie.
maar met solidworks zijn we in een andere wereld, alleen Dassault heeft er controle over... in feite, nee, ik denk dat zelfs wij het niet :rofl: :rofl: weten :rofl:

6 likes

Ter info, hier is de code die ik gebruik om de kracht op elk oppervlak in de lus in te voegen:

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

Maar hoe " groepeer je " verschillende oppervlakken " in een " batch " die zou worden aangeroepen door het insert commando???
Tenzij het niet de juiste logica is??

Wees voorzichtig met de code, gebruik de tag:
image
Anders richt de vertaling van bing schade aan:
image
Voor de rest geen ideeën voor je zorgen.

2 likes

Je kunt proberen " Selectielijst " maar ik weet niet of je het kunt toepassen met " Simulatie ":
https://help.solidworks.com/2019/english/api/sldworksapi/Selection_Lists_VB.htm
of

[Off-topic-AAN]
je bent het tijdreizen vergeten @OBI_WAN ...
[Off-topic-UIT]

2 likes

Misschien ga je in plaats daarvan door een " voor", " tot  " of " terwijl " lus om elk gezicht te verzamelen/beïnvloeden?

Of beter, ik laat de macro-profs antwoorden. Het is te lang geleden dat ik een regel heb gecodeerd...

Hallo fgauvreau,
Probeer dit eens. Het zal door de selectiespellen lopen en een verborgen kracht voor iedereen creëren (hoewel zonder de stap om het alleen aan de eerste kant te creëren. Ik heb de reden voor deze stap misschien niet begrepen)

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 likes

Hartelijk dank!
Dat is precies wat ik nodig had...
Ik was in staat om de code in mijn macro te integreren door de waarde van de kracht te beheren volgens het selectiespel en vaste steunen te creëren volgens hetzelfde principe.

StudyObj.ShowOrHideForce = OnwaarTexte préformaté
nikkel om de behandeling te verlichten!

1 like