| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | | | PNY präsentiert die neue NVIDIA RTX A400 und die A1000 Grafikkarte, eine Pressemitteilung
|
Autor
|
Thema: STL-Export via iLogic in iPart (165 / mal gelesen)
|
herr-kohl Mitglied Konstrukteur
Beiträge: 42 Registriert: 15.01.2020 Inventor Pro 2022 Celsius Workstation
|
erstellt am: 03. Dez. 2024 08:10 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich hoffe, das ist das richtige Forum für meine Frage. Ich habe mir eine iLogic-Regel "zusammenkopiert" und angepasst, die den Vault-Status (Freigegeben, oder nicht) eines Bauteils abfragt und, wenn freigegeben: - bei einem single-body Bauteil den Volumenkörper mit dem Schema "Filename" + "Revision" + "Description" an einem vorgegebenen Ort als STL speichert - bei einem Multi-Body Bauteil jeden einzelnen Volumenkörper mit dem Schema "Filename" + "Revision" + "Volumenkörper-Name" + "Description" an einem vorgegebenen Ort als STL speichert Gern würde ich die Regel auch für den Export von iParts nutzen. Also eigentlich genau so wie beim MultiBody, nur dass hier alle Varianten durchgegangen und exportiert werden. Schema ebenfalls wie beim MultiBody, nur halt den Varianten-Namen statt des Volumenkörper-Namens. Anbei ist meine Regel. Könnt ihr mir hierbei helfen? MfG, René Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2666 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 03. Dez. 2024 11:30 <-- editieren / zitieren --> Unities abgeben: Nur für herr-kohl
Moin Den Vaultteil kann ich nicht testen, aber so sollte es gehen. Als generelle Empfehlung: Wenn mehrere Dokument durchlaufen werden (so wie bei den iPartmembern oder allen Baugruppenkomponenten), von iLogicfunktionen wie ThisDoc, iproperties usw. weg bleiben. Die benutzen als Ausgangspunkt das Dokument von dem aus die Regel aufgerufen wurde und liefern dementsprechend falsche Werte zurück. Code:
Option Explicit On AddReference "Autodesk.Connectivity.WebServices.dll" Imports AWS = Autodesk.Connectivity.WebServices AddReference "Autodesk.DataManagement.Client.Framework.Vault.dll" Imports VDF = Autodesk.DataManagement.Client.Framework AddReference "Connectivity.Application.VaultBase.dll" Imports VB = Connectivity.Application.VaultBase Private Sub Main() Dim mVltCon As VDF.Vault.Currency.Connections.Connection mVltCon = VB.ConnectionManager.Instance.Connection If mVltCon Is Nothing Then MessageBox.Show("Not Logged In to Vault! - Login first and repeat executing this rule.") Exit Sub End If Dim VaultPath As String = ThisDoc.PathAndFileName(True) VaultPath = VaultPath.Replace("D:\$WorkingFolder\", "$/") 'flip the slashes VaultPath = VaultPath.Replace("\", "/") Dim VaultPaths() As String = New String() {VaultPath} Dim wsFiels() As AWS.File = mVltCon.WebServiceManager.DocumentService.FindLatestFilesByPaths(VaultPaths) Dim mFileIt As VDF.Vault.Currency.Entities.FileIteration = New VDF.Vault.Currency.Entities.FileIteration(conn,wsFiels(0)) Dim lifeCycleInfo As VDF.Vault.Currency.Entities.FileLifecycleInfo = mFileIt.LifecycleInfo 'MessageBox.Show(lifeCycleInfo.StateName) If lifeCycleInfo.StateName = "In Bearbeitung" Then MessageBox.Show("Die Datei ist nicht freigegeben. Nur freigegebene Dateien können für die Herausgabe exportiert werden.", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error) Exit Sub Else If lifeCycleInfo.StateName <> "Freigegeben" Then MessageBox.Show("Die Datei hat einen unbekannten Bearbeitungsstatus. Nur freigegebene Dateien können für die Herausgabe exportiert werden.", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error) Exit Sub End If Dim oDoc As PartDocument = ThisDoc.Document If oDoc.ComponentDefinition.IsiPartFactory=True Then TraverseiPartMember(oDoc) ElseIf oDoc.ComponentDefinition.IsiPartMember = True Then oDoc = oDoc.ComponentDefinition.iPartMember.ParentFactory.Parent TraverseiPartMember(oDoc) Else TraverseSolids(oDoc) End If End Sub Private Sub TraverseiPartMember(ByVal oDoc As PartDocument) Dim i As Integer Dim oTableRow As iPartTableRow For Each oTableRow In oDoc.ComponentDefinition.iPartFactory.TableRows oDoc.ComponentDefinition.iPartFactory.DefaultRow = oTableRow TraverseSolids(oDoc, oTableRow.MemberName) Next End Sub
Private Sub TraverseSolids(ByVal oDoc As PartDocument, Optional ByVal sFileName As String = "") Dim Dir As String = "Y:\ZZ per-form" & "\" 'ThisDoc.Path & "\" Dim oCD As ComponentDefinition = oDoc.ComponentDefinition Dim oSolidA As SurfaceBody,oSolidB As SurfaceBody Dim sFullFilename, sSolidName As String Dim iCount As Integer = oDoc.ComponentDefinition.SurfaceBodies.Count
If sFileName = "" Then sFileName = System.IO.Path.GetFileNameWithoutExtension(oDoc.FullFileName) For Each oSolidB In oCD.SurfaceBodies oSolidB.Visible = False Next For i As Integer = 1 To oCD.SurfaceBodies.Count oSolidA = oCD.SurfaceBodies.Item(i) oSolidA.Visible = True sSolidName = oSolidA.Name If iCount = 1 sFullFilename = Dir & sFileName & "-" & "R" & oDoc.PropertySets(1).Item(7).Value & "-" & oDoc.PropertySets(3).Item(14).Value & ".stl" Else sFullFilename = Dir & sFileName & "-" & "R" & oDoc.PropertySets(1).Item(7).Value & "-" & sSolidName & " - " & oDoc.PropertySets(3).Item(14).Value & ".stl" End If Export(oDoc, sFullFilename) oSolidA.Visible=False Next For Each oSolidB In oCD.SurfaceBodies oSolidB.Visible = True Next End Sub Sub Export(oDoc As Document, sFullFilename As String) Dim oTranslator As TranslatorAddIn oTranslator = ThisApplication.ApplicationAddIns.ItemById("{533E9A98-FC3B-11D4-8E7E-0010B541CD80}") If oTranslator Is Nothing Then MsgBox ("Could not access STL translator.") Exit Sub End If Dim oContext As TranslationContext = ThisApplication.TransientObjects.CreateTranslationContext oContext.Type = IOMechanismEnum.kFileBrowseIOMechanism Dim oData As DataMedium = ThisApplication.TransientObjects.CreateDataMedium oData.FileName = sFullFilename Dim oOptions As NameValueMap = ThisApplication.TransientObjects.CreateNameValueMap If oTranslator.HasSaveCopyAsOptions (ThisApplication.ActiveDocument, oContext, oOptions) Then oOptions.Value("ExportUnits") = 5 'Millimeter oOptions.Value("Resolution") = 0 'High End If Call oTranslator.SaveCopyAs(oDoc, oContext, oOptions, oData) End Sub
------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
herr-kohl Mitglied Konstrukteur
Beiträge: 42 Registriert: 15.01.2020 Inventor Pro 2022 Celsius Workstation
|
erstellt am: 03. Dez. 2024 12:05 <-- editieren / zitieren --> Unities abgeben:
Danke für den Code! Ich kann ihn nicht testen, erhalte die Fehlermeldung: Zitat: Regelkompilierungsfehler in STL export Vault, in 0090-000018.iptFehler in Zeile 30 : "conn" ist nicht deklariert. Auf das Objekt kann aufgrund der Schutzstufe möglicherweise nicht zugegriffen werden.
conn kommt auch in meiner ursprünglichen Version vor und verursacht dort keine Fehler. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2666 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 03. Dez. 2024 14:01 <-- editieren / zitieren --> Unities abgeben: Nur für herr-kohl
Moin Vermutlich weil ich im Header ein "Option Explicit On" ergänzt habe, um Variablendeklaration zu erzwingen. Ich bin mir relativ sicher, in Zeile 30 statt "conn" eigentlich "mVltCon" stehen muss. So wie ich das verstehe, stellt die Variable die Verbindung zum Vault dar. ------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
herr-kohl Mitglied Konstrukteur
Beiträge: 42 Registriert: 15.01.2020 Inventor Pro 2022 Celsius Workstation
|
erstellt am: 03. Dez. 2024 15:13 <-- editieren / zitieren --> Unities abgeben:
Du hast Recht, mit "mVltCon" läuft dein Code. Vielen Dank dafür! Eine Sache bekomme ich jedoch nicht korrigiert: Das Schema der Dateibenennung ist jetzt "iPartMemberName" + "Revision" + "Description". Also Filename der ausführenden "Mutter" ist jetzt durch den Namen des iPart ersetzt. Bekommst du das geändert in "FileName" + "Revision" + "Descritption" + "iPartMemberName"? Ich pflege die STLs nicht im Vault und brauche daher den ursprünglichen Filename. Nachtrag: Nutzt du für den Export andere Einstellungen? Der Slicer meckert beim import der Daten aus einem iPart, dass diese in Zoll definiert seien, was aber nicht stimmt. Daten aus Single- und Multibody, erzeugt mit dem gleichen Code, nimmt er ohne Probleme und die Größe stimmt auch. [Diese Nachricht wurde von herr-kohl am 03. Dez. 2024 editiert.] [Diese Nachricht wurde von herr-kohl am 03. Dez. 2024 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2666 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 03. Dez. 2024 21:13 <-- editieren / zitieren --> Unities abgeben: Nur für herr-kohl
Moin Die Änderung für den Dateinamen ist drin. Der Export ist immer der gleiche. Da gibt es keine unterschiedlichen Einstellungen. Es soll immer mit Millimeter exportiert werden. Kannst du mal vergleichen, ob in den Dokumenteinstellungen von iPart und normalem Teil unterschiedliche Längeneinheiten eingestellt sind? Code:
Option Explicit On AddReference "Autodesk.Connectivity.WebServices.dll" Imports AWS = Autodesk.Connectivity.WebServices AddReference "Autodesk.DataManagement.Client.Framework.Vault.dll" Imports VDF = Autodesk.DataManagement.Client.Framework AddReference "Connectivity.Application.VaultBase.dll" Imports VB = Connectivity.Application.VaultBase Private Sub Main() Dim mVltCon As VDF.Vault.Currency.Connections.Connection mVltCon = VB.ConnectionManager.Instance.Connection If mVltCon Is Nothing Then MessageBox.Show("Not Logged In to Vault! - Login first and repeat executing this rule.") Exit Sub End If Dim VaultPath As String = ThisDoc.PathAndFileName(True) VaultPath = VaultPath.Replace("D:\$WorkingFolder\", "$/") 'flip the slashes VaultPath = VaultPath.Replace("\", "/") Dim VaultPaths() As String = New String() {VaultPath} Dim wsFiels() As AWS.File = mVltCon.WebServiceManager.DocumentService.FindLatestFilesByPaths(VaultPaths) Dim mFileIt As VDF.Vault.Currency.Entities.FileIteration = New VDF.Vault.Currency.Entities.FileIteration(mVltCon, wsFiels(0)) Dim lifeCycleInfo As VDF.Vault.Currency.Entities.FileLifecycleInfo = mFileIt.LifecycleInfo 'MessageBox.Show(lifeCycleInfo.StateName) If lifeCycleInfo.StateName = "In Bearbeitung" Then MessageBox.Show("Die Datei ist nicht freigegeben. Nur freigegebene Dateien können für die Herausgabe exportiert werden.", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error) Exit Sub Else If lifeCycleInfo.StateName <> "Freigegeben" Then MessageBox.Show("Die Datei hat einen unbekannten Bearbeitungsstatus. Nur freigegebene Dateien können für die Herausgabe exportiert werden.", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error) Exit Sub End If Dim oDoc As PartDocument = ThisDoc.Document If oDoc.ComponentDefinition.IsiPartFactory=True Then TraverseiPartMember(oDoc) ElseIf oDoc.ComponentDefinition.IsiPartMember = True Then oDoc = oDoc.ComponentDefinition.iPartMember.ParentFactory.Parent TraverseiPartMember(oDoc) Else TraverseSolids(oDoc) End If End Sub Private Sub TraverseiPartMember(ByVal oDoc As PartDocument) Dim i As Integer Dim oTableRow As iPartTableRow For Each oTableRow In oDoc.ComponentDefinition.iPartFactory.TableRows oDoc.ComponentDefinition.iPartFactory.DefaultRow = oTableRow TraverseSolids(oDoc, oTableRow.MemberName) Next End Sub
Private Sub TraverseSolids(ByVal oDoc As PartDocument, Optional ByVal sMemberName As String = "") Dim sDir As String = "Y:\ZZ per-form" & "\" 'ThisDoc.Path & "\" Dim oCD As ComponentDefinition = oDoc.ComponentDefinition Dim oSolidA As SurfaceBody, oSolidB As SurfaceBody Dim sFileName As String = System.IO.Path.GetFileNameWithoutExtension(oDoc.FullFileName) Dim sFullFilename, sSolidName As String Dim iCount As Integer = oDoc.ComponentDefinition.SurfaceBodies.Count
If Not sMemberName = "" Then sMemberName = "-" & sMemberName For Each oSolidB In oCD.SurfaceBodies oSolidB.Visible = False Next For i As Integer = 1 To oCD.SurfaceBodies.Count oSolidA = oCD.SurfaceBodies.Item(i) oSolidA.Visible = True sSolidName = oSolidA.Name 'oDoc = ThisApplication.ActiveDocument If iCount = 1 sFullFilename = sDir & sFileName & "-" & "R" & oDoc.PropertySets(1).Item(7).Value & "-" & oDoc.PropertySets(3).Item(14).Value & sMemberName & ".stl" Else sFullFilename = sDir & sFileName & "-" & "R" & oDoc.PropertySets(1).Item(7).Value & "-" & sSolidName & " - " & oDoc.PropertySets(3).Item(14).Value & sMemberName & ".stl" End If Export(oDoc, sFullFilename) oSolidA.Visible=False Next For Each oSolidB In oCD.SurfaceBodies oSolidB.Visible = True Next End Sub Sub Export(oDoc As Document, sFullFilename As String) Dim oTranslator As TranslatorAddIn oTranslator = ThisApplication.ApplicationAddIns.ItemById("{533E9A98-FC3B-11D4-8E7E-0010B541CD80}") If oTranslator Is Nothing Then MsgBox ("Could not access STL translator.") Exit Sub End If Dim oContext As TranslationContext = ThisApplication.TransientObjects.CreateTranslationContext oContext.Type = IOMechanismEnum.kFileBrowseIOMechanism Dim oData As DataMedium = ThisApplication.TransientObjects.CreateDataMedium oData.FileName = sFullFilename Dim oOptions As NameValueMap = ThisApplication.TransientObjects.CreateNameValueMap If oTranslator.HasSaveCopyAsOptions (ThisApplication.ActiveDocument, oContext, oOptions) Then oOptions.Value("ExportUnits") = 5 'Millimeter oOptions.Value("Resolution") = 0 'High End If Call oTranslator.SaveCopyAs(oDoc, oContext, oOptions, oData) End Sub
------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
herr-kohl Mitglied Konstrukteur
Beiträge: 42 Registriert: 15.01.2020 Inventor Pro 2022 Celsius Workstation
|
erstellt am: 03. Dez. 2024 23:41 <-- editieren / zitieren --> Unities abgeben:
|
herr-kohl Mitglied Konstrukteur
Beiträge: 42 Registriert: 15.01.2020 Inventor Pro 2022 Celsius Workstation
|
erstellt am: 03. Dez. 2024 23:41 <-- editieren / zitieren --> Unities abgeben:
Jetzt passt alles, hervorragend. Vielen Dank für deine Unterstützung! Zu den Einheiten: Die iParts haben die gleichen Einheiten (mm, g, s) wie normale Bauteile. Ich habe jetzt wiederholt versucht den Fehler erneut zu provozieren, ohne Erfolg. Scheinbar lag das Problem irgendwo anders. Läuft alles tadellos. Nochmals Danke Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|