SolidWorks-macro en vergelijking

Hallo

Ik heb een klein probleem met het maken van een macro waarmee ik hoopte een globale variabele te gebruiken die was gedefinieerd toen het onderdeelbestand werd gemaakt. Mijn teleurstelling was groot.
Ik voeg een beschrijving van het probleem bij dat in het bijgevoegde document wordt gevonden.
pb macro.pdf (138,3 Kb)
Ik probeerde te biasen zoals bij geparametriseerde curves, door eerst een schets te maken waarvan de dimensie de globale variabele als waarde had en vervolgens de macro te vragen deze dimensie te nemen. Ik kwam leeg aan.

Bedankt voor je hulp en een hele fijne dag

Ik heb het bestand dat het probleem beschrijft opnieuw gedaan, zodat het explicieter is.
Bedankt en een fijne zondag
pb macro.pdf (234.3 KB)

Goedenavond

Waarom een macro gebruiken? Dit doe ik via een formulier. Ik voer al mijn afmetingen in en het onderdeel genereert en wijzigt het dienovereenkomstig. Ik zal je een voorbeeld geven van een stuk als ik achter de computer zit.

1 like

Hier is een dienblad dat kan worden ingesteld via de aangepaste eigenschappen die ik had gemaakt, in de hoop dat het je kan helpen.


Bac.SLDPRT (135.1 KB)

Goedenavond ac_cobra _427,
Dank u voor uw antwoord. Ik ben mij terdege bewust van uw voorstel, dat ik op grote schaal gebruik maak omdat het zeer relevant is.
In mijn geval, als ik een macro wil, is dat omdat het me veel klikken zou besparen. Ik doe lasersnijden van multiplex. Dus ik heb een sjabloon (*.dot) met een multiplextextuur en een globale variabele die de dikte aangeeft. Ik teken mijn onderdelen om ze in dxf-formaat naar de snijtafel te sturen. Ik kon tevreden zijn met het maken van alleen de schetsen, maar om een globaal overzicht van het product te hebben en de assemblage (montage, kinetische simulatie, enz.) te garanderen, modelleer ik ze in 3D. Deze modellering is alleen gebaseerd op extrusies in het middenvlak, met de dikte als waarde, vandaar het belang dat het een globale variabele is en dus toegankelijk voor de vergelijkingen. Als ik deze extrusies met één klik zou kunnen doen, zou het voor mij comfortabeler zijn omdat het snel repetitief wordt. Dus ik zou graag een macro willen hebben met het pictogram dat ik in de functiebanner zal plaatsen, en hop klik klik het is voorbij.

Hallo

Ik heb het waarschijnlijk verkeerd begrepen, maar als je een globale variabele hebt en de waarde 4 is in overeenstemming met de extrusiewaarde, waarom dan een globale variabele??

Als het doel is om deze diktewaarde later te kunnen wijzigen, is het sneller om de afmeting direct te wijzigen met:
klik op de extrusie in de as + klik op de afmeting + 4 + enter ",
Om een variabele te wijzigen, moet u:
Open de vergelijkingen + klik op de variabele + 4 + voer in om de variabele te valideren + voer in of klik om het vergelijkingsvenster te valideren en te sluiten".

Een variabele kost 1 klik meer dan via de offerte.

Hallo

Het probleem voor de macro is het feit dat je de extrusie niet kunt koppelen aan de diktevariabele buiten een plaatwerkfunctie.
Misschien proberen door de waarde van de diktedimensie te krijgen en een tekst van het type " = Dikte " te plaatsen

Hallo

Probeer deze macro, het zou moeten werken.

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swSketch As SldWorks.SketchManager
Dim swFeature As SldWorks.Feature
Dim swDimension As SldWorks.Dimension
Dim userInput As String
Dim newLength As Double
Dim newWidth As Double
Dim newHeight As Double

Sub main()
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    
    If swModel Is Nothing Then
        MsgBox "Aucune pièce ouverte.", vbExclamation, "Erreur"
        Exit Sub
    End If
    
    ' Demande les nouvelles dimensions
    userInput = InputBox("Entrez la longueur (en mm) :", "Modification de la pièce")
    If IsNumeric(userInput) Then newLength = CDbl(userInput) / 1000 Else Exit Sub

    userInput = InputBox("Entrez la largeur (en mm) :", "Modification de la pièce")
    If IsNumeric(userInput) Then newWidth = CDbl(userInput) / 1000 Else Exit Sub

    userInput = InputBox("Entrez la hauteur (en mm) :", "Modification de la pièce")
    If IsNumeric(userInput) Then newHeight = CDbl(userInput) / 1000 Else Exit Sub

    ' Sélection de l'esquisse "Esquisse1"
    Set swFeature = swModel.FeatureByName("Esquisse1")
    If swFeature Is Nothing Then
        MsgBox "L'esquisse 'Esquisse1' n'a pas été trouvée.", vbExclamation, "Erreur"
        Exit Sub
    End If

    swFeature.Select2 False, 0
    swModel.EditSketch

    ' Mise à jour des dimensions
    Set swDimension = swModel.Parameter("D1@Esquisse1")
    If Not swDimension Is Nothing Then swDimension.SystemValue = newLength
    
    Set swDimension = swModel.Parameter("D2@Esquisse1")
    If Not swDimension Is Nothing Then swDimension.SystemValue = newWidth
    
    Set swDimension = swModel.Parameter("D1@Boss.-Extru.1")
    If Not swDimension Is Nothing Then swDimension.SystemValue = newHeight

    ' Validation de l'esquisse et mise à jour
    swModel.EditRebuild3
    swModel.SetSaveFlag
    swModel.EditSketch
    
    MsgBox "Dimensions mises à jour avec succès.", vbInformation, "Succès"
End Sub


Diension piece.swp (40 KB)

2 likes

Goedenavond @pierre_mihailovic1 ,

Met de bijgevoegde macro, extrusie in twee muisklikken van een bestaande schets, door midplane en dikte beheerd door een globale variabele:

  • de eerste klik om de schets te selecteren;
  • de tweede om de macro uit te voeren (als er een knop bestaat).

De globale variabele wordt in de macro gedefinieerd door een constante met de naam " Thick ". Het moet natuurlijk wel in het document (of beter, in het sjabloon) staan. PRTDOT). De classificatie van de extrusiedikte verwijst wel naar de algemene variabele.

Opmerking: Pogingen om de notatie " Dikte " te gebruiken, resulteren in fouten in de vergelijkingsmanager. Misschien is het een woord dat is gereserveerd voor plaatwerk.

ExtrusionEpais.zip (76.7 KB)

3 likes

Ja, het lijkt mij dat deze term is gereserveerd voor plaatwerk. Ik denk dat ik dit probleem al ben tegengekomen!

1 like

Hallo

Ja, het heeft te maken met het plaatwerk, maar in " normaal " bedrijf wanneer u link naar dikte op een extrusiefunctie selecteert, wordt er nog steeds rekening gehouden met deze globale variabele. Aan de andere kant kan het niet worden gewijzigd, het kan alleen worden gewijzigd door een plaatwerkfunctie in te stellen.
Vandaar, denk ik, het feit dat deze functie niet toegankelijk is via macro buiten een plaatwerk.

2 likes

Dank aan jullie allemaal. Ik ga kijken naar de macro voorgesteld door ac_cobra_427.
Ik werk veel met globale variabelen die worden aangestuurd door een extern bestand. Hierdoor kan ik een assemblage maken met N-onderdelen, allemaal lasergesneden in een multiplex van gangbare dikte, om alle overlappingen in één keer te wijzigen.
Fijne dag