Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Inventor VBA
  Ilogic Regel zur automatischen PDF-Erstellung

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
Autor Thema:  Ilogic Regel zur automatischen PDF-Erstellung (1262 mal gelesen)
chense
Mitglied
Konstrukteur


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

Beiträge: 46
Registriert: 14.04.2020

Inventor 2019 auf Windows 10
Intel Xeon E5-1630, 3,7Ghz
Nvidia Quadro P4000
32GB Ram

erstellt am: 11. Jul. 2021 02: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

Hallo zusammen,

ich habe heute eine etwas ausführlichere Frage an euch.

wir haben immer wieder mal größere Mengen an Zeichnungen (so etwa 100-250 Stück) die schnell in ein PDF mit Datum umgewandelt werden sollen. Das dauert dann zusammen mit der dem Eingeben der Indexierungsnummer und Revision für die Zertifizierung ziemlich lange.

Nachdem mich dass das letzte mal ziemlich genervt hat habe ich schonmal ein kleines Programm das für mich erstmal gut funktioniert hat und folgendermassen abläuft.

Ich suche das Bauteil in der Baugruppe oder nach Bauteilnummer bzw nehme einfach alle Bauteile mit Bauteilnummer drücke jeweils eine Taste - das aktiviert ein VBA-Script das wiederum eine ilogicregel aufruft, die die Zeichnung öffnet. Dort wird über Ereignisauslöser ein PDF mit Datum hintan am Speicherort der Zeichnung erstellt.

Das ist aber rudimentär und so auch etwas mit Vorsicht zu geniessen und ich will es so nicht verteilen.

Den Code liefere ich euch noch nach. Nun zu meinen Fragen. Kann ich das vba-script eliminieren und direkt über den Ereignisauslöser o.ä. eine Taste für das ilogic programmieren?

Ist es möglich alle Bauteile ausser Content Center nacheinander zu öffnen und die Routine zu starten?

Das mit dem Ereignisauslöser bei der Zeichnung für das ilogic auf nach dem öffnen ausführen ist schon sehr hemdsärmelig das muss man dann jedes mal bedenken nachher rauszutun. Lieber wäre es mir das auch über ilogic regeln aufzurufen, aber irgendwie gelingt mir die Verknüpfung nach Namen oder Pfad nicht.

Ganz edel wäre natürlich noch folgendes:
Bevor das PDF gespeichert wird erscheint ein Textfeld in dem man die Indexierungsnummer eingeben kann, sowie den Vorgang abbrechen oder keine Nummer.
Und dann noch noch die Möglichkeit die Revision einzugeben.

Endgültig sollte es dann so aussehen:
Indexnummer_2107-5055Revision-Bauteilname-Datum.pdf
Das teilen habe ich schon halbwegs hinbekommen aber so wie ich es mache speichert es mir die PDFs nicht in den Originalordner.

Ich weiss das ist sehr viel auf einmal ... aber für ein paar Anregungen wäre ich sehr dankbar!

------------------
Für jede Fehlermeldung gibt es eine Lösung

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

chense
Mitglied
Konstrukteur


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

Beiträge: 46
Registriert: 14.04.2020

Inventor 2019 auf Windows 10
Intel Xeon E5-1630, 3,7Ghz
Nvidia Quadro P4000
32GB Ram

erstellt am: 11. Jul. 2021 15:31    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

Zitat:
Original erstellt von chense:
Hallo zusammen,

ich habe heute eine etwas ausführlichere Frage an euch.

wir haben immer wieder mal größere Mengen an Zeichnungen (so etwa 100-250 Stück) die schnell in ein PDF mit Datum umgewandelt werden sollen. Das dauert dann zusammen mit der dem Eingeben der Indexierungsnummer und Revision für die Zertifizierung ziemlich lange.

Nachdem mich dass das letzte mal ziemlich genervt hat habe ich schonmal ein kleines Programm das für mich erstmal gut funktioniert hat und folgendermassen abläuft.

Ich suche das Bauteil in der Baugruppe oder nach Bauteilnummer bzw nehme einfach alle Bauteile mit Bauteilnummer drücke jeweils eine Taste - das aktiviert ein VBA-Script das wiederum eine ilogicregel aufruft, die die Zeichnung öffnet. Dort wird über Ereignisauslöser ein PDF mit Datum hintan am Speicherort der Zeichnung erstellt.

Das ist aber rudimentär und so auch etwas mit Vorsicht zu geniessen und ich will es so nicht verteilen.

Den Code liefere ich euch noch nach. Nun zu meinen Fragen. Kann ich das vba-script eliminieren und direkt über den Ereignisauslöser o.ä. eine Taste für das ilogic programmieren?

Ist es möglich alle Bauteile ausser Content Center nacheinander zu öffnen und die Routine zu starten?

Das mit dem Ereignisauslöser bei der Zeichnung für das ilogic auf nach dem öffnen ausführen ist schon sehr hemdsärmelig das muss man dann jedes mal bedenken nachher rauszutun. Lieber wäre es mir das auch über ilogic regeln aufzurufen, aber irgendwie gelingt mir die Verknüpfung nach Namen oder Pfad nicht.

Ganz edel wäre natürlich noch folgendes:
Bevor das PDF gespeichert wird erscheint ein Textfeld in dem man die Indexierungsnummer eingeben kann, sowie den Vorgang abbrechen oder keine Nummer.
Und dann noch noch die Möglichkeit die Revision einzugeben.

Endgültig sollte es dann so aussehen:
Indexnummer_2107-5055Revision-Bauteilname-Datum.pdf
Das teilen habe ich schon halbwegs hinbekommen aber so wie ich es mache speichert es mir die PDFs nicht in den Originalordner.

Ich weiss das ist sehr viel auf einmal ... aber für ein paar Anregungen wäre ich sehr dankbar!


Hier noch ein kleines Update, nachdem ich mich heute noch einmal kurz hingesetzt habe:

Was ich inzwischen hinbekommen habe ist einmal den Ereignisauslöser insofern zu eliminieren, dass ich auch die zweite Regel aus dem Makro ausführe. Es läuft jetzt also so

Tastendruck - Makro ruft Regel 1 auf -> Zeichung wird geöffnet -> ipt/iam wird geschlossen -> Makro ruft Regel 2 auf -> PDF wird erstellt -> Zeichnung wird geschlossen.

Was ich auch noch geschafft habe ist das Thema mit Indexnummer und Revision im Dateinamen über ein Eingabefeld.

Nun wäre halt noch interessant, ob es eine Möglichkeit für das Thema alle Bauteile aus der IAM öffnen gibt. Hier könnte ich mir alternativ auch gut ein Dropdownmenü vorstellen, wobei auch da gut wäre wenn man die Inhaltscenterteile gleich garnicht anzeigt. Noch besser wäre das auch noch nach Bauteilnummer sortieren zu können.

Außerdem habe ich noch eine Messagebox einprogrammiert die fragt, ob man ein DXF erstellen will. Allerdings endet das erstellen mit einer Fehlermeldung -> Code liefere ich dann morgen nach.

Danke noch einmal herzlich!

------------------
Für jede Fehlermeldung gibt es eine Lösung

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: 601
Registriert: 19.09.2007

Inventor Professional 2020
WinX

erstellt am: 12. Jul. 2021 15:44    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 chense 10 Unities + Antwort hilfreich

Eine Schleife über die Komponenten einer geöffneten Baugruppe geht z.B. so:
Code:

Dim asmDoc As AssemblyDocument = ThisApplication.ActiveDocument
Dim tmpDoc As Document
For Each tmpDoc In asmDoc.AllReferencedDocuments  ' liefert Alle untergeordneten Elemente, inkl. Komp. aus Unterbgr.
'For Each tmpDoc In asmDoc.ReferencedDocuments    ' liefert nur die Komponenten der aktiven Bgr.; oberste Ebene
    If TypeOf tmpDoc Is AssemblyDocument then
        '...
    ElseIf tmpDoc.ComponentDefinition.IsContentMember then
        '...
    Else
        '...
    End If
Next

Die API sollte die Möglichkeiten bieten, die "Ausnahmen" zu erkennen. Schwieriger ist es aber, selbst die verschiedenen Fälle zu erkennen/betrachten und entsprechende Abfragen einzubauen.

[oDoc ist im Bsp. ein IV-Dokument (iam oder ipt) ]
oDoc.ComponentDefinition.IsContentMember
liefert TRUE bei Teilen aus dem ContentCenter (CC)
Gibt es bei euch Teile, die aus dem CC kopiert wurden, aber jetzt eine Zg. besitzen?

oDoc.ComponentDefinition.IsiPartFactory
oDoc.ComponentDefinition.IsiPartMember
falls iParts ein Thema sind...

virtuelle Komponenten
Weiß ich nicht, ob die bei den .ReferencedDocuments auftauchen

Vielleicht ist es möglich, statt der vielen verschiedenen Fälle alles auf 1 Frage zu reduzieren: Existiert eine zugehörige Zeichnung?
JA -> pdf erzeugen
NEIN -> nichts tun

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

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

chense
Mitglied
Konstrukteur


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

Beiträge: 46
Registriert: 14.04.2020

Inventor 2019 auf Windows 10
Intel Xeon E5-1630, 3,7Ghz
Nvidia Quadro P4000
32GB Ram

erstellt am: 12. Jul. 2021 19:51    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

Herzichen Dank erst einmal für deine Antwort! Ich denke hier habe ich schon einen Ansatzpunkt.

Ich zäume das Ganze einmal von hinten auf:

Die Abfrage - ist eine Zeichnung vorhanden dann gehe weiter hatte ich mir auch schon überlegt, allerdings hätte ich da jetzt bei bestimmten Baugruppen Angst, dass uns die Rechner total in die Knie gehen. Wir haben manchmal auch so tolle Montagebaugruppen in denen eigentlich nur ein paar Bleche verbaut sind aber dafür 100 Schrauben aus dem CC.

Zu deinen Fragen:
Wir arbeiten zu 99,9% nur mit "normalen" ipts und iams und unveränderten CC-Bauteilen ohne Zeichnung. Wenn wir wirklich seltenst mal ein CC-Teil haben das eine Zeichnung erhält, wird das zu einem normalen IPT gemacht.

Auch mit virtuellen Komponenten wird bei den Baugruppen um die es hier geht nicht gearbeitet - Es sind meist Baugruppen für Zertifizierungen die halt dann mitsamt allen EXC und Sicherheitsbauteilen als PDF in die Zertifizierung eingehen.

Ich habe heute auch nochmal ein wenig mit den Kollegen die das Tool mit mir einsetzen wollen geschwätzt. Der Traum wäre sogar statt einfach alles zu Öffnen und PDFs zu erzeugen, die Möglichkeit eine nach Bauteilnummer sortierte Liste in der Baugruppe zu haben und dort selbst auszusuchen was gespeichert werden soll. Entweder mit Drop-Down oder Multiple-Choice.

Den Code habe ich übrigens leider wieder vergessen ... mea culpa und eine dicke Entschuldigung an alle!

------------------
Für jede Fehlermeldung gibt es eine Lösung

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

Windows 10 x64, AIP 2022

erstellt am: 13. Jul. 2021 11:19    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 chense 10 Unities + Antwort hilfreich

Hallo

Deine Auswahlliste könnte man über eine Windows.Forms.CheckedListBox machen. Diese gibt es in iLogic selbst aber nicht. Entweder erstellst du die Form manuell und lädst sie über deine iLogic Regel oder du wechselst jetzt zu einem Addin. Dort hast du dann auch die Möglichkeit einen Button ins Ribbonmenü zu setzen usw.
Da du von verteilen und somit vermutlich auch von aktualisieren, pflegen und warten sprichst, empfehle ich zu einem Addin zu wechseln. Ein Tastenkürzel das ein VBA-Script dass eine iLogic Regel aufruft und eine weitere iLogic Regel die über den Ereignisauslöser ausgelöst wird, aber vorher aktiviert und hinterher wieder entfernt werden muss ... das halte ich für keine konstant und zuverlässig funktionierende Lösung.

------------------
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: 601
Registriert: 19.09.2007

Inventor Professional 2020
WinX

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

Den Gedanken von Ralf bzgl. CheckedListBox hab ich mal aufgegriffen und etwas gebastelt. Ich bin aber bzgl. iLogic /VB.NET bestenfalls Laie, eher weniger. Das als Warnung.

Ich bin nicht sicher, ob Ralf das so gemeint hat ("Form selber erstellen und per iLogic laden"). Mein Punkt hier ist, dass es möglich ist, per iLogic auf die Welt von .NET zuzugreifen.
Sowas sollte sich noch als Externe Regel verwalten und verteilen lassen.

Code:
Option Explicit On

AddReference "System.Drawing"

Imports System
'Imports System.ComponentModel
Imports System.Windows.Forms

Public Class myForm
Inherits Form

Dim WithEvents button1 As System.Windows.Forms.Button
Dim lb1 As System.Windows.Forms.CheckedListBox

Public Sub New()
'Constructor of the Class

'initial size of the Form
Me.Size = New System.Drawing.Size(350, 500)

'Button
button1  = New Button()
button1.Size = New System.Drawing.Size(150, 40)
button1.Location = New Drawing.Point(10, 20)
button1.Text = "Click me"
Me.Controls.Add(button1)

'checkedListBox
' https://docs.microsoft.com/de-de/dotnet/api/system.windows.forms.checkedlistbox?view=net-5.0
lb1 = New CheckedListBox()
lb1.CheckOnClick = True 'change selection mode from double-click to single click
lb1.Items.Add("Test1") 'add a single element
lb1.Items.Add("Test2", True) 'add & check
Dim myArray() As String = {"el 1", "el 2", "el 3" }  'define a list
lb1.Items.AddRange(myArray) 'add a list of elements
lb1.Location = New System.Drawing.Point(10, 80)
lb1.Size = New System.Drawing.Size(120, 180)
Me.Controls.Add(lb1)

End Sub

Private Sub button1_Click() Handles button1.Click

Dim msg As String = "The following elements are checked: " & vbCrLf & vbCrLf
Dim o
For Each o In lb1.CheckedItems
msg += o.ToString & vbCrLf
Next
If 0=lb1.CheckedItems.Count Then msg += "[ -nothing- ]"
MessageBox.Show(msg)

End Sub


End Class

Sub Main

System.Windows.Forms.Application.EnableVisualStyles() 'needed?
System.Windows.Forms.Application.Run(New myForm)

End Sub


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

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

erwinosius
Mitglied
Konstrukteur


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

Beiträge: 21
Registriert: 19.01.2015

erstellt am: 11. Nov. 2021 11:52    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 chense 10 Unities + Antwort hilfreich

Servus chense,
ist das Thema noch interessant? Ich habe vielleicht einige ilogics, die zusammengefügt dein Problem lösen könnten:

1. Skript geht durch die Stückliste und prüft ob für die Teile eine Zeichnung vorhanden ist. Hier fallen nur Teile raus die als IPART die Zeichnung im FamilyPart haben. Diese wird in diesem Fall nicht ausgegeben. (Das stand schon lange auf der ToDo Liste).

2. Ein Skript, das benutzerdefinierte Parameter in die Teile schreibt. Hier werden alle Contentcenterparts ausgeblendet, da hier das schreiben ja nicht möglich ist

3. Ein Skrpit, dass für alle Blechteile in der Baugruppe eine DXF und eine Step Datei erzeugt.

Falls noch Bedarf besteht kann ich hier gerne die Skripte hochladen und beim Zusammenstellen behilflich sein.

Gruß
erwin

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

chense
Mitglied
Konstrukteur


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

Beiträge: 46
Registriert: 14.04.2020

Inventor 2019 auf Windows 10
Intel Xeon E5-1630, 3,7Ghz
Nvidia Quadro P4000
32GB Ram

erstellt am: 17. Nov. 2021 17:04    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 erwin,

danke für deine Rückmeldung!

Inzwischen bin ich einen ganzen Schritt weiter und habe aus dem einfachen Skript einen quasi-kompletten Freigabeprozess vom Projektstart bis zu dem Punkt an dem das Bauteil aus dem Pool ausgeschieden wird erstellt der gerade getestet wird.

Was in diesem Zuge für mich interessant wären die ersten beiden Skripte, da ich derzeit noch auf relativ rudimentärem Weg (über die ohnehin im Laufe der Freigabe exportierte) Stückliste prüfe, ob es sich um Bauteile handelt die eine Freigabe benötigen (also alles was entweder eine Zeichnung hat (Bauteilnummer entspricht unserer Zeichnungsnummersyntax) oder in einer Schweißzeichnung verbaut ist (hat im IProperty Bestandsnummer einen Vermerk).

Villeicht könnte ich die Selektion mit deinen Skripten etwas "robuster" gestalten.

Beste Grüße
Thomas

------------------
Für jede Fehlermeldung gibt es eine Lösung

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)2023 CAD.de | Impressum | Datenschutz