Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Inventor
  Blattgröße aus IDW auslesen und in IAM/IPT-iProperties eintragen (mit iLogic)?

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 WIRD VON NVIDIA ZUM HÄNDLER DES JAHRES GEWÄHLT, eine Pressemitteilung
Autor Thema:  Blattgröße aus IDW auslesen und in IAM/IPT-iProperties eintragen (mit iLogic)? (1020 / mal gelesen)
luziano
Mitglied



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

Beiträge: 164
Registriert: 03.02.2005

IV 2016, 2018, 2020, 2023 2024
WIN10(64)
Q9450, 32GB
Quadro K4200

erstellt am: 25. Feb. 2021 10:36    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

Hallo zusammen,
ein (neuer) Kunde benötigt aus den IDWs die Blattgröße in der zugehörigen IAM/IPT. Da wir das nun nicht alles von Hand eintragen möchten die Frage: Kann ich (z.B. via iLogic) in der zur IAM bzw. IPT gehörenden IDW diesen Wert auslesen und als iProperty in die IAM bzw. IPT eintragen? Möglichst ohne die Zeichnung zu öffnen...
Hinweis: Dateiname der IDW ist gleich dem der IAM/IPT.
Meine Vorstellung: iLogic könnte den Dateinamen (z.B. ABCDEF.IAM) der IAM/IPT ermitteln und schauen, ob es eine ABCDEF.IDW gibt im gleichen Verzeichnis und dann dort in den Werten "rumschnüffeln"... Hab leider bisher zu wenig mit iLogic gemacht um das beurteilen zu können.
DANKE für Ideen/Hinweise/Lösungsvorschläge!!! 
Ludger

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

RolandD
Mitglied



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

Beiträge: 559
Registriert: 07.01.2005

i7-9700k
32GB DDR4-RAM
Nvidia RTX 2060
SSD 970 m.2
Win10-64 (21H2)
AIP 2020.3
Dell U3417W

erstellt am: 25. Feb. 2021 11:45    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 luziano 10 Unities + Antwort hilfreich

Hallo Ludger,

du könntest mit dem Apprentice Server arbeiten, da kann auf Dateien zugegriffen werden, ohne diese zu öffnen.
In der IDW die Eigenschaft oDoc.Sheets.Item(1).Size abfragen.
Für DIN-A3 erhältst du kA3DrawingSheetSize. Danach das Benutzer iProperty in der IPT oder IAM entsprechend schreiben. (Was passiert, wenn mehrere Sheets vorhanden sind und die verschiedene Größen haben?)

Edit: Link ergänzt
Infos gibt es z.B. hier zum Nachlesen
------------------
Gruß Roland

[Diese Nachricht wurde von RolandD am 25. Feb. 2021 editiert.]

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

KraBBy
Mitglied
Maschinenbau-Ingenieur


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

Beiträge: 721
Registriert: 19.09.2007

Inventor Professional 2020
WinX

erstellt am: 25. Feb. 2021 12: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 Nur für luziano 10 Unities + Antwort hilfreich

Mein Vorschlag wäre, eine (externe?) iLogic-Regel, die in der Zeichnung ausgelöst wird (z.B. beim Speichern). Blattgröße aus der von Roland genannten Eigenschaft lesen und die Info in das referenzierte Dokument (ipt oder iam; oDoc.ReferencedDocuments.Item(1) ) schreiben.

------------------
Gruß KraBBy

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

KraBBy
Mitglied
Maschinenbau-Ingenieur


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

Beiträge: 721
Registriert: 19.09.2007

Inventor Professional 2020
WinX

erstellt am: 25. Feb. 2021 14: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 luziano 10 Unities + Antwort hilfreich

mein Vorschlag ausgearbeitet:
Code:
'iLogic-Regel für die Zg.Datei, evtl. auch als externe Regel

AddVbFile "iProp_RW.vb"

Sub Main()
    Dim oDoc As Document
'so könnten auch alle geöffneten Dokumente durchlaufen werden
    For Each oDoc In ThisApplication.Documents
If oDoc.DocumentType = Inventor.DocumentTypeEnum.kDrawingDocumentObject Then
        'Call IDW_Formatlesen(oDoc)
Else : 'nix
End If
    Next

'hier der einfache Aufruf, nur für das aktive Dokument
oDoc = ThisApplication.ActiveDocument
If oDoc.DocumentType = Inventor.DocumentTypeEnum.kDrawingDocumentObject Then Call IDW_Formatlesen(oDoc)

End Sub

Private Sub IDW_Formatlesen(oDoc As DrawingDocument)
   
    Dim oRefDoc As Document
    If Not 0 = oDoc.ReferencedDocuments.Count Then
        oRefDoc = oDoc.ReferencedDocuments.Item(1)
'Ich nehme hier immer das erste Dokument, auch wenn es mehrere gäbe!
'
'Wenn es Zg. mit mehreren ref.Dokuments gibt, müsste man über die Logik nachdenken
'das iProperty für jedes dieser Dokumente befüllen?
    Else
        'kein referenziertes Dokument
        ' dann gibts wohl auch nix zu tun
        ' ggf. MsgBox ...
        Exit Sub
    End If
   
    Dim sSheetSize As String 'der Text für das iProp mit der "lesbaren Größe"
    sSheetSize = getSheetSize(oDoc.ActiveSheet)
'hier beschränke ich mich auf das aktive Blatt, auch wenn es mehrere gäbe!

    'in iProp schreiben
    Call WriteiProperty(oRefDoc, "Blattformat", sSheetSize, iProp.iPropSetNameEnum.UserDefProp)
   
'nur zur Kontrolle, das iProp. wieder lesen (nach Test die Zeilen auskommentieren)
    Dim tmp
    tmp = ReadiProperty(oRefDoc, "Blattformat", 4)
    MsgBox (tmp,,"iProp. Blattformat")
   
End Sub

Private Function getSheetSize(oDrwSheet As Sheet) As String
'liefert die Blattgröße als String, z.B. "A3"
   
    Dim sSheetSize As String
   
    Select Case oDrwSheet.Size
    Case kA0DrawingSheetSize
        sSheetSize = "A0"
    Case kA1DrawingSheetSize
        sSheetSize = "A1"
    Case kA2DrawingSheetSize
        sSheetSize = "A2"
    Case kA3DrawingSheetSize
        sSheetSize = "A3"
    Case kA4DrawingSheetSize
        sSheetSize = "A4"
    Case Else
        sSheetSize = "?"
        MsgBox ("wtf?", , "SheetSize")
    End Select
   
    Return sSheetSize  'Rückgabewert der Fkt.
   
End Function



In dem File "iProp_RW.vb" (das in einem Verz. für externe iLogic-Regeln liegen muss), habe ich Regeln, um iProperties zu lesen und schreiben.

Code:
' <IsStraightVb>True</IsStraightVb>
' <FireOthersImmediately>False</FireOthersImmediately>
' <SilentOperation>False</SilentOperation>

Imports Inventor

Module iProp

'-------------------- alles nachfolgende, um iProp zu lesen / schreiben ------
' (kein guter Stil, gerade im Hinblick auf die Moeglichkeiten mit vb.net
'  alles nur schnell aus VBA kopiert und hier zum laufen gebracht
' z.B. "On Error" sollte nicht mehr verwendet werden)

Public Enum iPropSetNameEnum
' im Grunde hier ueberfluessig, hilft nur in VBA mit Intellisense
    IVSumInfo = 1
    DocSumInfo = 2
    DesignTrackProp = 3
    UserDefProp = 4
End Enum

Public Function ReadiProperty(ByRef doc As Document , _
ByRef PropertyName As String, Optional PropSet As iPropSetNameEnum = 0& ) As Object
'Wert aus iProp lesen
' aus beliebiegem PropertySet
' erstes gefundenes Element wird zurueckgegeben (sollten mehrere existieren)
' wird der Name in keinem Set gefunden, Rueckgabe -> ""
'  Optional: PropSetName: Es wird nur in dem angegebenen PropSet gesucht

   
    'Default-Rueckgabewert (wenn Prop nicht existiert)
    ReadiProperty = ""
   
    'Optional PropSet auswerten
    Dim bAllSets As Boolean, PropSetName As String
    If 0 = PropSet Then
        bAllSets = True
    Else
        bAllSets = False
        PropSetName = Get_iPropSetName(PropSet)
    End If
    Dim bSetFound As Boolean    'fuer Info, ob angegebenes Set gefunden wurde
    bSetFound = False
   
    Dim prop As Inventor.Property
    Dim customPropSet As PropertySet
    'Set customPropSet = Doc.PropertySets.Item("Inventor User Defined Properties")
   
    For Each customPropSet In doc.PropertySets  'Schleife durch alle PropSets
        If bAllSets Or customPropSet.Name = PropSetName Then
            bSetFound = True
            ' Get the existing property, if it exists.
            On Error Resume Next
            prop = customPropSet.Item(PropertyName)
            ' Check to see if the above call failed.  If it failed then the property doesn't exist.
            If Err.Number <> 0 Then
                ' Failed to get the existing property
            Else
                'Prop existiert, Wert lesen
                ReadiProperty = prop.Value
                Exit For
            End If
            On Error Goto 0 'setzt auch Err zurueck
        End If
    Next 'propSet
   
    'Auswertung bei angegebenem PropSet
    If Not bAllSets Then
        If bSetFound Then
            'angegebenes Set wurde gefunden
        Else
            'angegebenes Set wurde NICHT gefunden
            MsgBox( "Das gesuchte iProperty " & vbCrLf _
                & vbTab & PropertyName & vbCrLf _
                & "konnte nicht gefunden werden, weil schon das angegebene Prop.Set" & vbCrLf _
                & vbTab & PropSetName & vbCrLf _
                & "nicht existiert!", vbInformation, "Info")
        End If
    End If
   
    'Aufraeumen
    On Error Goto 0
    customPropSet = Nothing
    prop = Nothing
End Function

Private Function Get_iPropSetName(e As iPropSetNameEnum) As String
' das ist der Versuch die Propsets greifbar zu machen
' in Verbindung mit obigem Enumerator
'
'KraBBy 15.10.2018

    Const IVSumInfo As String = "Inventor Summary Information"
    Const DocSumInfo As String = "Inventor Document Summary Information"
    Const DesignTrackProp As String = "Design Tracking Properties"
    Const UserDefProp As String = "Inventor User Defined Properties"
   
    Select Case e
    Case iPropSetNameEnum.DesignTrackProp
        Get_iPropSetName = DesignTrackProp
    Case iPropSetNameEnum.DocSumInfo
        Get_iPropSetName = DocSumInfo
    Case iPropSetNameEnum.IVSumInfo
        Get_iPropSetName = IVSumInfo
    Case iPropSetNameEnum.UserDefProp
        Get_iPropSetName = UserDefProp
    Case Else
        'sollte nicht auftreten
        MsgBox( "vmtl. Fehler in Code!" & vbCrLf _
            & "Case Else in Function Get_iPropSetName", vbCritical, "Fehler!?")
        Get_iPropSetName = ""
    End Select
   
End Function

Public Function WriteiProperty(ByRef doc As Document , _
ByRef PropertyName As String, PropVal as Object, Optional PropSet As iPropSetNameEnum = 0& ) As Boolean
'Wert in iProp schreiben
' in beliebiegem PropertySet
' erstes gefundenes Element wird beschrieben (sollten mehrere existieren)
' wird der Name in keinem Set gefunden, Rueckgabe -> False
'  Optional: PropSetName: Es wird nur in dem angegebenen PropSet gesucht
' wird das PropSet UserDefProp angegeben, wird das Property ggf. auch erstellt

   
    'Default-Rueckgabewert (wenn Prop nicht existiert)
    WriteiProperty = False
   
    'Optional PropSet auswerten
    Dim bAllSets As Boolean, PropSetName As String
    If 0 = PropSet Then
        bAllSets = True
    Else
        bAllSets = False
        PropSetName = Get_iPropSetName(PropSet)
    End If
    Dim bSetFound As Boolean    'fuer Info, ob angegebenes Set gefunden wurde
    bSetFound = False
   
    Dim prop As Inventor.Property
    Dim customPropSet As PropertySet
   
    For Each customPropSet In doc.PropertySets  'Schleife durch alle PropSets
        If bAllSets Or customPropSet.Name = PropSetName Then
            bSetFound = True
            ' Get the existing property, if it exists.
            On Error Resume Next
            prop = customPropSet.Item(PropertyName)
            ' Check to see if the above call failed.  If it failed then the property doesn't exist.
            If Err.Number <> 0 Then
                ' Failed to get the existing property
On Error Goto 0
If PropSet = iPropSetNameEnum.UserDefProp Then
'iProp erstellen
prop = customPropSet.Add(PropVal, PropertyName)
WriteiProperty = True
Else: 'nix tun
End If
            Else
                'Prop existiert, Wert schreiben
                prop.Value = PropVal
WriteiProperty = True
                Exit For
            End If
            On Error Goto 0 'setzt auch Err zurück
        End If
    Next 'propSet
   
    'Auswertung bei angegebenem PropSet
    If Not bAllSets Then
        If bSetFound Then
            'angegebenes Set wurde gefunden
        Else
            'angegebenes Set wurde NICHT gefunden
            MsgBox( "Das gesuchte iProperty " & vbCrLf _
                & vbTab & PropertyName & vbCrLf _
                & "konnte nicht gefunden werden, weil schon das angegebene Prop.Set" & vbCrLf _
                & vbTab & PropSetName & vbCrLf _
                & "nicht existiert!", vbInformation, "Info")
        End If
    End If
   
    'Aufräumen
    On Error Goto 0
    customPropSet = Nothing
    prop = Nothing
End Function

End Module


------------------
Gruß KraBBy

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

KraBBy
Mitglied
Maschinenbau-Ingenieur


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

Beiträge: 721
Registriert: 19.09.2007

Inventor Professional 2020
WinX

erstellt am: 25. Feb. 2021 14:21    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 luziano 10 Unities + Antwort hilfreich

sorry, erst jetzt lese ich "Möglichst ohne die Zeichnung zu öffnen..."
da bin jetzt wohl in die falsche Richtung gelaufen
(also nicht zu viel Zeit verschwenden mit dem Code oben)

Ich kann mir aber auch vorstellen, dass Deine Vorstellung funktioniert

------------------
Gruß KraBBy

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: 2630
Registriert: 15.11.2006

Windows 10 x64, AIP 2020-2025

erstellt am: 26. Feb. 2021 13:15    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 luziano 10 Unities + Antwort hilfreich

Hallo

@KraBBy
Auch ein Apprentice Server öffnet die Zeichnung, um iProps zu schreiben. Von daher finde ich deinen Vorschlag den Weg umzudrehen richtig, wenn es keinen triftigen Grund für die ursprüngliche Ablaufrichtung gibt. Alle erforderlichen Dokumente sind zu dem Zeitpunkt sowieso geöffnet und nach dem Speichern ändert sich die Blattgröße nicht mehr.

------------------
MfG
Ralf

RKW Solutions GmbH
www.RKW-Solutions.com

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

KraBBy
Mitglied
Maschinenbau-Ingenieur


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

Beiträge: 721
Registriert: 19.09.2007

Inventor Professional 2020
WinX

erstellt am: 26. Feb. 2021 16:50    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 luziano 10 Unities + Antwort hilfreich

Vermutlich geht der Wunsch die Richtung: ein Aufruf von der obersten Baugruppe aus, alle UnterBG und Einzelteile durchlaufen, prüfen ob eine Zg existiert, ggf Format auslesen und in iProp vom 3dModell schreiben.
mE geht das, vielleicht ein paar mehr Fallstricke (virtuelle Komponenten, Normteile, schreibgeschützte Dokumente weil wiederverwendet, kA was noch alles)

Bei meinem Vorschlag muss jede Zg. geöffnet werden. Vielleicht kann man da noch etwas weiter automatisieren: liegen alle fraglichen Zg in einem Verzeichnis oder einer Verz.-Struktur? Das könnte man durchsuchen und alle idw öffnen...

------------------
Gruß KraBBy

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

luziano
Mitglied



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

Beiträge: 164
Registriert: 03.02.2005

IV 2016, 2018, 2020, 2023 2024
WIN10(64)
Q9450, 32GB
Quadro K4200

erstellt am: 26. Feb. 2021 17:45    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

WOW - ganz dicken Dank schon mal für eure Beiträge!!! Komme vermutlich Anfang der Woche dazu sie abzuarbeiten.
Und: IDWs und IPTs/IAMs liegen jeweils im gleichen Verzeichnis.

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

luziano
Mitglied



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

Beiträge: 164
Registriert: 03.02.2005

IV 2016, 2018, 2020, 2023 2024
WIN10(64)
Q9450, 32GB
Quadro K4200

erstellt am: 26. Feb. 2021 17:49    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

...und nach einigem Nachdenken:
Es ist vermutlich sogar sinnvoll die Blattgröße in der geöffneten Zeichnung auszulesen und sie dann in die Bauteile einzutragen. So ist der Wert immer aktuell - was umgekehrt nicht zwingend gegeben ist wenn die Zeichnung geändert und das Modell nicht gleich aktualisiert wird. Sowohl bei der Zeichnungserstellung wie auch bei (Blattgröße-)Änderungen ist sie ja eh offen.

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