Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Inventor .NET
  STL-Export via iLogic in iPart

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
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


Sehen Sie sich das Profil von herr-kohl an!   Senden Sie eine Private Message an herr-kohl  Schreiben Sie einen Gästebucheintrag für herr-kohl

Beiträge: 42
Registriert: 15.01.2020

Inventor Pro 2022
Celsius Workstation

erstellt am: 03. Dez. 2024 08:10    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities


STLexportVault.txt

 
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




Sehen Sie sich das Profil von rkauskh an!   Senden Sie eine Private Message an rkauskh  Schreiben Sie einen Gästebucheintrag für rkauskh

Beiträge: 2666
Registriert: 15.11.2006

Windows 10 x64, AIP 2020-2025

erstellt am: 03. Dez. 2024 11:30    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für herr-kohl 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von herr-kohl an!   Senden Sie eine Private Message an herr-kohl  Schreiben Sie einen Gästebucheintrag für herr-kohl

Beiträge: 42
Registriert: 15.01.2020

Inventor Pro 2022
Celsius Workstation

erstellt am: 03. Dez. 2024 12:05    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Danke für den Code! Ich kann ihn nicht testen, erhalte die Fehlermeldung:

Zitat:
Regelkompilierungsfehler in STL export Vault, in 0090-000018.ipt

Fehler 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




Sehen Sie sich das Profil von rkauskh an!   Senden Sie eine Private Message an rkauskh  Schreiben Sie einen Gästebucheintrag für rkauskh

Beiträge: 2666
Registriert: 15.11.2006

Windows 10 x64, AIP 2020-2025

erstellt am: 03. Dez. 2024 14:01    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für herr-kohl 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von herr-kohl an!   Senden Sie eine Private Message an herr-kohl  Schreiben Sie einen Gästebucheintrag für herr-kohl

Beiträge: 42
Registriert: 15.01.2020

Inventor Pro 2022
Celsius Workstation

erstellt am: 03. Dez. 2024 15:13    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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




Sehen Sie sich das Profil von rkauskh an!   Senden Sie eine Private Message an rkauskh  Schreiben Sie einen Gästebucheintrag für rkauskh

Beiträge: 2666
Registriert: 15.11.2006

Windows 10 x64, AIP 2020-2025

erstellt am: 03. Dez. 2024 21:13    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für herr-kohl 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von herr-kohl an!   Senden Sie eine Private Message an herr-kohl  Schreiben Sie einen Gästebucheintrag für herr-kohl

Beiträge: 42
Registriert: 15.01.2020

Inventor Pro 2022
Celsius Workstation

erstellt am: 03. Dez. 2024 23:41    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

*DOPPELPOST*

[Diese Nachricht wurde von herr-kohl am 03. Dez. 2024 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

herr-kohl
Mitglied
Konstrukteur


Sehen Sie sich das Profil von herr-kohl an!   Senden Sie eine Private Message an herr-kohl  Schreiben Sie einen Gästebucheintrag für herr-kohl

Beiträge: 42
Registriert: 15.01.2020

Inventor Pro 2022
Celsius Workstation

erstellt am: 03. Dez. 2024 23:41    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2024 CAD.de | Impressum | Datenschutz