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
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
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
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 ...