| 
|  |  |  |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |  |  |  |  |  | Cideon auf der SPS in Nürnberg, eine Veranstaltung am 25.11.2025 
 |  
| Autor | Thema:  Blattgröße aus IDW auslesen und in IAM/IPT-iProperties eintragen (mit iLogic)? (1416 /  mal gelesen) |  | luziano Mitglied
 
 
   
 
      Beiträge: 164Registriert: 03.02.2005
 IV 2016, 2018, 2020, 2023 2024WIN10(64)
 Q9450, 32GB
 Quadro K4200
 |    erstellt am: 25. Feb. 2021 10:36  <-- editieren / zitieren -->    Unities abgeben:            
  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
 
 
    
 
      Beiträge: 559Registriert: 07.01.2005
 i7-9700k32GB 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 / zitieren -->    Unities abgeben:           Nur für luziano   
  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änztInfos 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
 
    
 
      Beiträge: 749Registriert: 19.09.2007
 Inventor Professional 2020WinX
 |    erstellt am: 25. Feb. 2021 12:10  <-- editieren / zitieren -->    Unities abgeben:           Nur für luziano   
  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
 
    
 
      Beiträge: 749Registriert: 19.09.2007
 Inventor Professional 2020WinX
 |    erstellt am: 25. Feb. 2021 14:13  <-- editieren / zitieren -->    Unities abgeben:           Nur für luziano   
  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 schreibenCall 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
 
    
 
      Beiträge: 749Registriert: 19.09.2007
 Inventor Professional 2020WinX
 |    erstellt am: 25. Feb. 2021 14:21  <-- editieren / zitieren -->    Unities abgeben:           Nur für luziano   
  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, Master Eng. IT-Security & Forensic
 
        
 
  
 
      Beiträge: 2933Registriert: 15.11.2006
 Windows 10 x64, AIP 2020-2025 |    erstellt am: 26. Feb. 2021 13:15  <-- editieren / zitieren -->    Unities abgeben:           Nur für luziano   
  Hallo @KraBByAuch 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 GmbHwww.RKW-Solutions.com
 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |  | KraBBy Mitglied
 Maschinenbau-Ingenieur
 
    
 
      Beiträge: 749Registriert: 19.09.2007
 Inventor Professional 2020WinX
 |    erstellt am: 26. Feb. 2021 16:50  <-- editieren / zitieren -->    Unities abgeben:           Nur für luziano   
  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
 
 
   
 
      Beiträge: 164Registriert: 03.02.2005
 IV 2016, 2018, 2020, 2023 2024WIN10(64)
 Q9450, 32GB
 Quadro K4200
 |    erstellt am: 26. Feb. 2021 17:45  <-- editieren / zitieren -->    Unities abgeben:            |  | luziano Mitglied
 
 
   
 
      Beiträge: 164Registriert: 03.02.2005
 IV 2016, 2018, 2020, 2023 2024WIN10(64)
 Q9450, 32GB
 Quadro K4200
 |    erstellt am: 26. Feb. 2021 17:49  <-- editieren / zitieren -->    Unities abgeben:            
  ...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 >>)
  |