| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| Auf dem Weg zur digitalen Auftragsmappe. , ein Anwenderbericht
|
Autor
|
Thema: STL Export pro Volumenkörper (3857 / mal gelesen)
|
aquadody Mitglied Konstrukteur
Beiträge: 100 Registriert: 21.01.2008 Dell Precision 7540 32GB RAM Windows 10 NVIDIA Quadro RTX3000 Inventor 2020.1 Vault 2020
|
erstellt am: 25. Sep. 2019 11:29 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich bin gerade verzweifelt auf der Suche nach einer Möglichkleit aus einem Mehrkörperbauteil mehrere STL Datein zu erzeugen(eine STL pro Volumenkörper). Im Moment mache ich das über Komponente erstellen, dabei jeweils ein Bauteil pro Volumenkörper und dann in der neuen Baugruppe Kopie speichern unter als stl und Pro Bauteil dann eine STL Datei.
geht das nicht einfacher? Leider finde ich nichts wie ich einzele Volumenkörper aus dem Bauteil raus bekommen.... MFG Uwe
------------------ mfg Uwe Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Leo Laimer Moderator CAD-Dienstleister
Beiträge: 26123 Registriert: 24.11.2002 IV bis 2019
|
erstellt am: 25. Sep. 2019 11:46 <-- editieren / zitieren --> Unities abgeben: Nur für aquadody
Hätte gedacht dass das die Aufgabenplanung erledigen könnte. Leider reichen meine 25 Jahre CAD-Erfahrung nicht aus um dieses witzlose Glumpert überhaupt in Gang setzen zu können, aber vielleicht geht's Dir ja besser damit. Ich mach es immer so, dass ich alle zu bearbeitenden Dateien gleichzeitig öffne, und dann eine nach der anderen mit dem gewünschten Befehl abarbeite. Normalerweise kann man denselben Befehl nach Weiterspringen auf die nächste Datei gleich mit <Enter> wieder aufrufen, sodass das Ganze eine reine Tastaturorgie ist (viel effizienter als das Mausgefummle). ------------------ mfg - Leo Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MacFly8 Ehrenmitglied V.I.P. h.c. Konstrukteur Kessel- & Feuerungsbau
Beiträge: 2027 Registriert: 13.08.2007 HP Z17; 64GB RAM; Nvidia Quadro RTX3000; Inventor Professional PDSU 2012/2020 Mechanical 2012/2020
|
erstellt am: 25. Sep. 2019 12:08 <-- editieren / zitieren --> Unities abgeben: Nur für aquadody
|
Leo Laimer Moderator CAD-Dienstleister
Beiträge: 26123 Registriert: 24.11.2002 IV bis 2019
|
erstellt am: 25. Sep. 2019 12:30 <-- editieren / zitieren --> Unities abgeben: Nur für aquadody
|
freierfall Ehrenmitglied V.I.P. h.c. Techniker
Beiträge: 11582 Registriert: 30.04.2004 WIN10 64bit, 32GB RAM IV bis 2022
|
erstellt am: 25. Sep. 2019 12:34 <-- editieren / zitieren --> Unities abgeben: Nur für aquadody
|
KraBBy Mitglied Maschinenbau-Ingenieur
Beiträge: 721 Registriert: 19.09.2007 Inventor Professional 2020 WinX
|
erstellt am: 25. Sep. 2019 12:41 <-- editieren / zitieren --> Unities abgeben: Nur für aquadody
es müsste reichen, jeweils nur einen Körper sichtbar zu haben und mehrmals STL zu exportieren. -> Es landet nur der sichtbare Körper im Export. Das ließe sich natürlich auch automatisieren (iLogic oder VBA). ------------------ Gruß KraBBy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
aquadody Mitglied Konstrukteur
Beiträge: 100 Registriert: 21.01.2008 Dell Precision 7540 32GB RAM Windows 10 NVIDIA Quadro RTX3000 Inventor 2020.1 Vault 2020
|
erstellt am: 25. Sep. 2019 14:27 <-- editieren / zitieren --> Unities abgeben:
Hi KraBBy, so mach ich das auch immer gemacht, hat nur den Nachteil das ich jede erstellte STL umbenennen muß. Ich bin etwas verwöhnt, für einfache Teile hab ich eine Ilogic Regel die das STL ablegen übernimmt, babei wird der Dateiname der STL Datei aus dem Dateinamen der Ursprungsdatei und der Beschreibung gebildet. Wenn das mit den einzelnen Volumenkörpern nicht geht, kommt man denn per Ilogic an die Bezeichnung der Volumenkörper ran? Das würde die Manuelle Ablage etwas vereinfachen.
------------------ mfg Uwe Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Leo Laimer Moderator CAD-Dienstleister
Beiträge: 26123 Registriert: 24.11.2002 IV bis 2019
|
erstellt am: 25. Sep. 2019 14:50 <-- editieren / zitieren --> Unities abgeben: Nur für aquadody
Irgendwann wirst Du jedem Ding den richtigen Namen geben müssen. Wenn Du die Volumenkörper richtig benannt hast, entstehen IMHO ebenso benannte Einzeldateien daraus, und dieser Dateiname wird als Vorgabe für die Exportdatei verwendet. Sollte zumindest so sein, probiert hab ich das jetzt nicht im Detail. ------------------ mfg - Leo Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
aquadody Mitglied Konstrukteur
Beiträge: 100 Registriert: 21.01.2008 Dell Precision 7540 32GB RAM Windows 10 NVIDIA Quadro RTX3000 Inventor 2020.1 Vault 2020
|
erstellt am: 25. Sep. 2019 15:01 <-- editieren / zitieren --> Unities abgeben:
Wenn man es über die Funktion Komponente erstellen macht dann macht das der Inventor so. Ich fänd es toll wenn das auch gehen würde wenn ich die STL aus dem Bauteil erzeuge. Aber es scheintz die einfachste Lösung zu sein wenn mann es über Komponente erstellen macht, dann hat man weniger klickerei.
------------------ mfg Uwe Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
MacFly8 Ehrenmitglied V.I.P. h.c. Konstrukteur Kessel- & Feuerungsbau
Beiträge: 2027 Registriert: 13.08.2007 HP Z17; 64GB RAM; Nvidia Quadro RTX3000; Inventor Professional PDSU 2012/2020 Mechanical 2012/2020
|
erstellt am: 25. Sep. 2019 15:12 <-- editieren / zitieren --> Unities abgeben: Nur für aquadody
Zitat: Ich halt mich jetzt aber zurück und sag nichts mehr...
Zitat: Irgendwann wirst Du jedem Ding den richtigen Namen geben müssen.Wenn Du die Volumenkörper richtig benannt hast, entstehen IMHO [In my humble opinion (Meiner Meinung nach)] ebenso benannte Einzeldateien daraus, und dieser Dateiname wird als Vorgabe für die Exportdatei verwendet. Sollte zumindest so sein, probiert hab ich das jetzt nicht im Detail.
Da ging es darum aus dem multibodypart zu exportieren und da bekommen die alle den Namen des Multibodypart Bei uns sind die Volumenkörper nach folgendem Schema benannt. MultibodypartName_VK_fortlaufendeNummer dafür habe ich ne Ilogic Regel Nach dem benutzen von "Komponente erstellen" die entstandene Baugruppe mit X Teilen speichern. Anschließend Aufgabenplannung mit STL export. Hat gerade mit einem Multibodypart mit 40 Volumenkörpern ca. 15min gedauert. MfG MacFly ------------------ - - - der Erleuchtung ist es egal wie du Sie erlangst - - - - - - Wir leben alle unter demselben Himmel, aber wir haben nicht alle denselben Horizont - - - (K. Adenauer) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KraBBy Mitglied Maschinenbau-Ingenieur
Beiträge: 721 Registriert: 19.09.2007 Inventor Professional 2020 WinX
|
erstellt am: 25. Sep. 2019 19:21 <-- editieren / zitieren --> Unities abgeben: Nur für aquadody
Zitat: Original erstellt von aquadody: Ich bin etwas verwöhnt, für einfache Teile hab ich eine Ilogic Regel die das STL ablegen übernimmt, babei wird der Dateiname der STL Datei aus dem Dateinamen der Ursprungsdatei und der Beschreibung gebildet.Wenn das mit den einzelnen Volumenkörpern nicht geht, kommt man denn per Ilogic an die Bezeichnung der Volumenkörper ran? Das würde die Manuelle Ablage etwas vereinfachen.
-> Eine (neue) iLogic Regel, die alle STLs abspeichert und dabei die Benennung automatisch anpasst. Das meine ich ja mit Automatisierung. Die Benennung der Volumen lässt sich natürlich auslesen. Heute mittag habe ich das mal in VBA zusammen gebastelt. Kannst du das brauchen? Oder muss es iLogic sein? Ggf ist es sinnvoll, wenn ich auf deinem iLogic Code aufsetze, damit die Benennung etc. an deine Wünsche angelehnt wird. ------------------ Gruß KraBBy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
aquadody Mitglied Konstrukteur
Beiträge: 100 Registriert: 21.01.2008 Dell Precision 7540 32GB RAM Windows 10 NVIDIA Quadro RTX3000 Inventor 2020.1 Vault 2020
|
erstellt am: 25. Sep. 2019 21:36 <-- editieren / zitieren --> Unities abgeben:
|
KraBBy Mitglied Maschinenbau-Ingenieur
Beiträge: 721 Registriert: 19.09.2007 Inventor Professional 2020 WinX
|
erstellt am: 26. Sep. 2019 07:52 <-- editieren / zitieren --> Unities abgeben: Nur für aquadody
wie angedroht... Code: Sub IPT_Multibody_Export_STL_Main() ' KraBBy 25.09.2019 Dim oDoc As PartDocument Set oDoc = ThisApplication.ActiveDocument 'Sichtbarkeitsstatus aller Körper merken 'auch alle unsichtbar schalten Dim i As Long, iMax As Long iMax = oDoc.ComponentDefinition.SurfaceBodies.Count Dim abVisible() As Boolean 'Array mit dem Sichtbarkeitsstatus ReDim abVisible(1 To iMax) Dim oBody As SurfaceBody For i = 1 To iMax Set oBody = oDoc.ComponentDefinition.SurfaceBodies(i) If oBody.Visible Then abVisible(i) = True oBody.Visible = False 'unsichtbar schalten Else abVisible(i) = False End If Next i 'jetzt ist alles unsichtbar 'Export der einzelnen Volumen For i = 1 To iMax Set oBody = oDoc.ComponentDefinition.SurfaceBodies(i) If abVisible(i) Then oBody.Visible = True 'sichtbar schalten Call ExpSTL_mitDatname(oDoc, oBody.Name) '-> Export oBody.Visible = False 'wieder unsichtbar End If Next i 'Sichtbarkeitsstatus wiederherstellen For i = 1 To iMax Set oBody = oDoc.ComponentDefinition.SurfaceBodies(i) If abVisible(i) Then oBody.Visible = True 'sichtbar schalten Next i 'Schlussmeldung MsgBox "STL Datei(en) erzeugt", vbInformation, "Fertig" End SubPrivate Sub ExpSTL_mitDatname(oDoc As PartDocument, sSuffix As String) ' Bildung von Dateiname und Pfad (als Konstante) ' Aufruf der Export-Prozedur Dim sPfad As String sPfad = "C:\Temp\" Dim sName As String sName = oDoc.DisplayName sName = sName & "_" & sSuffix 'Suffix (Name des Volumens) anhängen sName = clear_DatName(sName) 'Dateiname bereinigen 'Prüfung, ob die Datei schon existiert fehlt evtl.! Call ExportToSTL(sPfad, sName, oDoc) End Sub
und noch die Funktionen/Subs die ich schon in Verwendung habe und oben aufrufe
Code: Private Function clear_DatName(str As String) As String ' wandelt einen gegebenen Text in einen "konformen Text" ' dieser neue Wert wird zurückgegeben Dim name_alt As String Dim name_neu As String name_alt = str name_neu = Replace(name_alt, " ", "_") 'alle Leerz. ersetzen 'name_neu = Replace(name_neu, "-", "_") 'Bindestriche ersetzen name_neu = Replace(name_neu, ".", "_") 'Punkte ersetzen name_neu = Replace(name_neu, ",", "_") name_neu = Replace(name_neu, "ä", "ae") 'Umlaute... name_neu = Replace(name_neu, "Ä", "Ae") name_neu = Replace(name_neu, "ö", "oe") name_neu = Replace(name_neu, "Ö", "Oe") name_neu = Replace(name_neu, "ü", "ue") name_neu = Replace(name_neu, "Ü", "Ue") name_neu = Replace(name_neu, "ß", "ss") name_neu = Replace(name_neu, "^", "_") name_neu = Replace(name_neu, "°", "_") name_neu = Replace(name_neu, """", "_") 'Anführungszeichen (") 'name_neu = Replace(name_neu, "§", "_") 'name_neu = Replace(name_neu, "$", "_") 'name_neu = Replace(name_neu, "%", "_") 'name_neu = Replace(name_neu, "&", "_") name_neu = Replace(name_neu, "/", "_") ' nicht für Dateinamen zugelassen name_neu = Replace(name_neu, "\", "_") ' nicht für Dateinamen zugelassen name_neu = Replace(name_neu, "=", "_") name_neu = Replace(name_neu, "?", "_") ' nicht für Dateinamen zugelassen name_neu = Replace(name_neu, "*", "_") ' nicht für Dateinamen zugelassen name_neu = Replace(name_neu, "~", "_") name_neu = Replace(name_neu, "<", "_") ' nicht für Dateinamen zugelassen name_neu = Replace(name_neu, ">", "_") ' nicht für Dateinamen zugelassen name_neu = Replace(name_neu, "|", "_") ' nicht für Dateinamen zugelassen name_neu = Replace(name_neu, ":", "_") ' nicht für Dateinamen zugelassen name_neu = Replace(name_neu, "[", "(") name_neu = Replace(name_neu, "]", ")") dErsetzen name_neu 'Sub, doppelte __ ersetzen, rekursiv 'Rückgabewert clear_DatName = name_neu End Function Private Sub dErsetzen(ByRef txt) ' doppelte Unterstriche "__" werden durch einfache "_" ersetzt ' rekursiv If Not (0 = InStr(txt, "__")) Then txt = Replace(txt, "__", "_") 'doppelte __ ersetzen End If If Not (0 = InStr(txt, "__")) Then dErsetzen txt 'Rekursion End Sub Private Sub ExportToSTL(Optional sPfad As String, Optional sDatName As String, Optional oDok As Document) ' Option Item Type Default Value Supporting Translators ' "OutputFileType" int 0 (Binary) STL ' "ExportUnits" int 4 (Centimeter) STL 'hier 5 (mm) setzen! ' "ExportFileStructure" int 0 (One File) STL ' "Resolution" int 1 (Medium) STL 'hier 0 (high) setzen! ' "SurfaceDeviation" int N/A STL ' "NormalDeviation" int N/A STL ' "MaxEdgeLength" int N/A STL ' "AspectRatio" int N/A STL ' "AllowMoveMeshNode" Bool False STL ' Values: ' OutputFileType BINARY = 0 ASCII = 1 ' ExportUnits INCH = 2 FOOT = 3 CENTIMETER = 4 MILLIMETER = 5 METER = 6 MICRON = 7 ' ExportFileStructure ONE FILE = 0 ONE FILE PER PART INSTANCE = 1 ' Resolution HIGH = 0 MEDIUM = 1 LOW = 2 Custom = 3 ' SurfaceDeviation Range 1 to 100. Value is used if Resolution is CUSTOM (3), otherwise value is ignored. ' NormalDeviation Range 1 to 100. Value is used if Resolution is CUSTOM (3), otherwise value is ignored. ' MaxEdgeLength Range 1 to 100. Value is used if Resolution is CUSTOM (3), otherwise value is ignored. ' AspectRatio Range 1 to 100. Value is used if Resolution is CUSTOM (3), otherwise value is ignored. If "" = sPfad Then sPfad = "C:\Temp\" sDatName = "temptest" End If
If oDok Is Nothing Then 'wenn referenz nicht übergeben wird (weil optional) Set oDok = ThisApplication.ActiveDocument End If ' Get the translator Add-In. Dim oSTLTranslator As TranslatorAddIn Set oSTLTranslator = ThisApplication.ApplicationAddIns.ItemById("{533E9A98-FC3B-11D4-8E7E-0010B541CD80}") ' aus Überwachung von "ThisApplication.ApplicationAddIns" raus gesucht ': ClassIdString : "{533E9A98-FC3B-11D4-8E7E-0010B541CD80}" If oSTLTranslator Is Nothing Then MsgBox "Could not access STL translator." Exit Sub End If Dim oContext As TranslationContext Set oContext = ThisApplication.TransientObjects.CreateTranslationContext Dim oOptions As NameValueMap Set oOptions = ThisApplication.TransientObjects.CreateNameValueMap If oSTLTranslator.HasSaveCopyAsOptions(oDok, oContext, oOptions) Then oOptions.Value("ExportUnits") = 5 'mm oOptions.Value("Resolution") = 0 'high oOptions.Value("OutputFileType") = 0 'binary oOptions.Value("ExportFileStructure") = 0 'one file oContext.Type = kFileBrowseIOMechanism Dim oData As DataMedium Set oData = ThisApplication.TransientObjects.CreateDataMedium oData.Filename = sPfad & sDatName & ".stl" 'Export On Error Resume Next Call oSTLTranslator.SaveCopyAs(oDok, oContext, oOptions, oData) 'Schlussmeldung bzw. Fehlerbehandlung If Err.Number = 0 Then 'MsgBox "Export erfolgt" & vbCrLf & oData.filename, vbInformation, "STL Fertig" Else MsgBox "Fehler bei STL:" & vbCrLf & Err.Description, vbCritical, "Fehler:" & Err.Number End If End If 'Aufräumen Set oSTLTranslator = Nothing Set oContext = Nothing Set oOptions = Nothing Set oData = Nothing End Sub
------------------ Gruß KraBBy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KraBBy Mitglied Maschinenbau-Ingenieur
Beiträge: 721 Registriert: 19.09.2007 Inventor Professional 2020 WinX
|
erstellt am: 26. Sep. 2019 08:35 <-- editieren / zitieren --> Unities abgeben: Nur für aquadody
vielleicht sollte ich auch noch ein par erklärende Worte zum Code oben verlieren:
- Es werden nur die Volumenkörper exportiert, die beim Makrostart sichtbar sind.
- Da das Makro die Sichtbarkeiten der Volumen hin u. her schaltet, wird die Datei "dirty" und möchte gespeichert werden.
- die STLs werden unter einem fixen Pfad abgelegt -> "C:\temp\" im Sub ExpSTL_mitDatname
das könnte man natürlich noch anpassen, ggf. auch abhängig vom Speicherort der IPT.
- Als Dateiname habe ich willkürlich folgenden Aufbau gewählt: [DisplayName]_[Name Volumen].stl
- Der Dateiname wird "bereinigt" (Function clear_DatName), dabei werden nicht erlaubte Zeichen durch Unterstriche ersetzt. Es werden auch Umlaute und Leerzeichen ersetzt. Könnte sein, dass Dir das zu weit geht.
- Es wird nicht geprüft, ob die Datei schon existiert. ggf. wird überschrieben!
- Man könnte das ganze noch ergänzen, abhängig von Deinem Workflow. z.B. Pfad am Ende im Dateiexplorer öffnen; Dateien einzeln oder gemeinsam zippen (falls sie versendet werden)
------------------ Gruß KraBBy Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
aquadody Mitglied Konstrukteur
Beiträge: 100 Registriert: 21.01.2008 Dell Precision 7540 32GB RAM Windows 10 NVIDIA Quadro RTX3000 Inventor 2020.1 Vault 2020
|
erstellt am: 26. Sep. 2019 12:25 <-- editieren / zitieren --> Unities abgeben:
|
aquadody Mitglied Konstrukteur
Beiträge: 100 Registriert: 21.01.2008 Dell Precision 7540 32GB RAM Windows 10 NVIDIA Quadro RTX3000 Inventor 2020.1 Vault 2020
|
erstellt am: 30. Sep. 2019 08:04 <-- editieren / zitieren --> Unities abgeben:
Moin Moin, was müsste ich denn am Macro ändern um die STL Datei im gleichen Pfad der orginaldatei ab zu legen? Wenn ich bei "sPfad" "ThisDoc.Path\" eintrage dann erstell er mir nen Ordner mit dem Namen ThisDoc.Path...ohne "\" packt er ThisDoc.Path in den Dateinamen.... ------------------ mfg Uwe Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Lothar Boekels Ehrenmitglied V.I.P. h.c. Dipl.-Ing. Maschinenbau und CAD-Trainer
Beiträge: 3835 Registriert: 15.02.2001 DELL Precision 7520 Win10Pro-64 Inventor mit Vault Professional 2024 --------------------- Während man es aufschiebt, verrinnt das Leben. Lucius Annaeus Seneca (ca. 4 v. Chr - 65 n. Chr.)
|
erstellt am: 30. Sep. 2019 08:40 <-- editieren / zitieren --> Unities abgeben: Nur für aquadody
Hi Uwe, Das ist hier ja auch kein iLogic, sondern VBA. Da kannst Du mit der Funktion hier den Pfad ermitteln: Code:
Public Function FilePath(ByVal sFullFilename As String) As String Dim iStart As Long iStart = InStrRev(sFullFilename, "\", -1, vbTextCompare) FilePath = Mid$(sFullFilename, 1, iStart)End Function
Aufrufen kannst Du die Funktion mit: Code:
Dim sFilePath As String sFilePath = FilePath(ThisApplication.ActiveDocument.FullFileName)
------------------ mit freundlichem Gruß aus der Burggemeinde Brüggen Lothar Boekels Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KraBBy Mitglied Maschinenbau-Ingenieur
Beiträge: 721 Registriert: 19.09.2007 Inventor Professional 2020 WinX
|
erstellt am: 30. Sep. 2019 09:16 <-- editieren / zitieren --> Unities abgeben: Nur für aquadody
Im Sub ExpSTL_mitDatname(...) folgende beide Zeilen Dim sPfad As String sPfad = "C:\Temp\" ersetzen durch:
Code: Dim sPfad As String, s As String s = oDoc.fullFilename 'Dateiname inkl. Pfad sPfad = Left(s, InStrRev(s, "\")) 'alles links vom letzten "\" -> nur Pfad
Edit: ist im Grunde das gleiche, was Lothar vorschlägt (ich war nur zu langsam, deshalb die Überschneidung) ------------------ Gruß KraBBy [Diese Nachricht wurde von KraBBy am 30. Sep. 2019 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
aquadody Mitglied Konstrukteur
Beiträge: 100 Registriert: 21.01.2008 Dell Precision 7540 32GB RAM Windows 10 NVIDIA Quadro RTX3000 Inventor 2020.1 Vault 2020
|
erstellt am: 05. Nov. 2019 11:35 <-- editieren / zitieren --> Unities abgeben:
|