Macro opslaan als een STEP-assemblage door er een onderdeel van te maken

Hallo, ik ben op zoek naar een optie in VBA om een assemblage in STEP te registreren, maar voordat deze wordt opgeslagen, wordt de assemblage omgezet in een extern oppervlakteonderdeel

Hallo

Ik heb op dit moment geen SW bij de hand om te controleren, maar je zou in staat moeten zijn om de SaveAs3 Method functie (IModelDocExtension) te gebruiken met de optie "ISldWorks::SetUserPreferenceIntegerValue" zoals iets verderop op deze pagina aangegeven:

Vriendelijke groeten

Ik heb het net geprobeerd met dit: 

        If CheckBoxSTEP.Value = True Then

               filename = LblCheminSTEP & ActiveConfig & ".STEP"
            
                boolstatus = swApp.SetUserPreferenceIntegerValue(swStepAP, 214)
                boolstatus = swApp.SetUserPreferenceIntegerValue(swSaveAssemblyAsPartOptions, swSaveAsmAsPart_ExteriorFaces)
                boolstatus = swModelDocExt.SaveAs(filename, 0, 0, swExportData, lErrors, lWarnings)
                
                If boolstatus Then
                    MsgBox "Enregistrement au format STEP réussi" & vbNewLine & filename
                Else
                    MsgBox "Echec de l'enregistrement au format STEP, Error code:" & lErrors, vbCritical, "AVERTISSEMENT"
                End If
        End If

Maar het verandert niets? hij neemt op in STEP, maar hij maakt de verschillende stukken afzonderlijk in de STEP.

Ik denk dat je het in verschillende stappen moet doen zoals in solidworks

1- Registreer het geheel als een onderdeel met een extern oppervlak

2-Open de kamer

Exporteer het onderdeel in 3 stappen

4-Om het onderdeel met het externe oppervlak al dan niet te wissen

1 like

Scheid je stappen zoals sbadenis aangegeven.

Oké, daar ga ik in mee, dank je. 
Maar ik vraag me af hoe ik het ga krijgen om het stuk automatisch op te slaan zodra de stap is gemaakt.

Wat ik doe werkt niet. Als ik de assemblage als onderdeel opsla, ontstaat er net zoveel body/solid als er onderdelen in de assemblage zitten. en ik zou graag willen dat alles wordt "samengevoegd" tot 1 lichaam wanneer ik de assemblage in delen registreer of direct in STEP als het mogelijk is.

Ik zag net dit bericht op het solidworks-forum dat dateert uit 2012.

Om te testen en ons feedback te geven:

https://forum.solidworks.com/thread/55589

 

Hier is het 1e deel om de montage in delen op te slaan

Dim swApp               As SldWorks.SldWorks
Dim swModel             As SldWorks.ModelDoc2
Dim swModelDocExt       As SldWorks.ModelDocExtension
Dim FilePath            As String
Dim sFilePath           As String
Dim PathSize            As Long
Dim PathNoExtension     As String
Dim NewFilePath         As String
Dim nErrors             As Long
Dim nWarnings           As Long

Sub main()

Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swModelDocExt = swModel.Extension

FilePath = swModel.GetPathName
PathSize = Strings.Len(FilePath)
PathNoExtension = Strings.Left(FilePath, PathSize - 6)
NewFilePath = PathNoExtension & "SLDPRT"

swApp.SetUserPreferenceIntegerValue swSaveAssemblyAsPartOptions, swSaveAsmAsPart_ExteriorFaces
swModelDocExt.SaveAs NewFilePath, swSaveAsCurrentVersion, swSaveAsOptions_Silent, Nothing, nErrors, nWarnings

swApp.CloseDoc swModel.GetTitle

Set swModel = swApp.OpenDoc(NewFilePath, swDocPART)
Set swModel = swApp.ActiveDoc

sFilePath = PathNoExtension & "STEP"
 
swModel.SaveAs (sFilePath)

swApp.CloseDoc swModel.GetTitle

End Sub
'------------------

Dan zou je met open doc6 in staat moeten zijn om het te openen en vervolgens in stap te exporteren

Voor het verwijderen van het bestand is het misschien met FSO  haalbaar

Edit: voor het verwijderen van het bestand:

https://forum.solidworks.com/thread/61273

 

Voor open doc6:

http://help.solidworks.com/2018/English/api/sldworksapi/Open_Document_Example_VB.htm

het werkt, het enige probleem is dat het de assemblage transformeert in een oppervlakteonderdeel zoals gevraagd, en wanneer we dit onderdeel vervolgens in STEP opslaan, creëert het lichamen voor mij.

 

Is het niet mogelijk om op te slaan zodat er maar 1 lichaam is (dat alles wordt samengevoegd/gegroepeerd in 1 enkel geïmporteerd blok)?

Hallo

Je moet het volgende doen:

- Het openen van de assemblage.

- Het gedeeltelijk opslaan van deze assemblage.

- Opening van het nieuw gecreëerde deel.

- Combineer de lichamen met de functie InsertCombineFeature Method (IFeatureManager) met de swBodyOperationType_e opsomming ingesteld op 15903 (SWBODYADD). Je hebt HIER een voorbeeld.

- Opslaan als een stap.

Vriendelijke groeten

2 likes

Ik heb net een test gedaan net dat voor het starten van de macro en zodra ik op assemblies die een beetje "complex" zijn, krijg ik deze foutmelding wanneer ik combineer.

 

Hallo

Hebben de lichamen die je probeert te combineren tot 1 enkel lichaam een kruispunt?

Zo niet, dan is dit bericht normaal.

Vriendelijke groeten

1 like

Ja dat klopt, het is hardware (vijzels of schroeven). Er is geen manier voor hem om alles te combineren wat hij met elkaar kan combineren, en wat hij niet kan combineren, jammer dat hij het zo laat en automatisch natuurlijk?

Nou ja, door loops en foutbeheer in je macro uit te voeren ...