| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Prüfen, ob nur die I-Properties geändert wurden (Geometrie unberührt) (938 / mal gelesen)
|
mb-ing Mitglied F&E-Mangement, MB-Ing. (u)
Beiträge: 723 Registriert: 06.09.2012 Inventor 2021 WIN 10 (64bit), Dell Precision T1650, 16GB (Pro.File 8.7)
|
erstellt am: 30. Nov. 2021 16:51 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, wie kann ich bei einem Inventor-Dokument herausfinden, ob nur die I-Properties geändert wurden und beispielsweise nicht die eigentliche Geometrie (IPT) oder Abhängigkeiten (IAM) etc.? Vorrangig würde mich dies bei IPTs interessieren. Wenn man es auch bei IAM und IDW anwenden kann, umso besser Theoretisch gibt es ja das Attribut "RecentChanges" am Dokument. Ist das für mein Anliegen zielführend und zuverlässig? Ich habe die Eigenschaft mal mit folgendem Code analysiert:
Code: ... [Enum].GetName(GetType(Inventor.CommandTypesEnum), g_inventorApplication.ActiveEditDocument.RecentChanges)Dim enumType As Inventor.EnumType = g_inventorApplication.TestManager.GetEnumType("CommandTypesEnum") Dim index As Integer = 0 Do While index < enumType.Count Debug.Print(enumType.ValueName) Debug.Print(enumType.Value) enumType.MoveNext() index += 1 Loop ...
Die Konsole wirft nur ein paar wenige Ausgaben raus :( Kann das generell an dem TestManager liegen? Auch ist der Wert Code: [Enum].GetName(GetType(Inventor.CommandTypesEnum), g_inventorApplication.ActiveEditDocument.RecentChanges)
nach dem manuellen Ändern der I-Properties unterschiedlich Hintergrund: Ich reagiere mit einem Trigger auf das Speichern des Dokuments und aktualisiere im Zuge dessen die I-Properties. Problem: Es gibt eine Funktion der PDM-CAD-Integration, welche PDM-Relevante I-Properties aktualisiert. (Funktion wird manuell ausgelöst...) Werden dann die "modifizierten" Dokumente gespeichert, soll meine Funktion die I-Properties nicht erneut aktualisieren. Dazu müsste ich natürlich bei jedem Dokument prüfen, ob nur die I-Properties verändert wurden Bei einem einzelnen Teil (IPT) ist das natürlich egal, aber wenn der Kollege eine Baugruppe komplett traversiert, sieht es gleich anders aus Danke und Grüße MB-Ing. ------------------ Wissen ist Macht. Nichts wissen macht auch nichts Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 01. Dez. 2021 11:08 <-- editieren / zitieren --> Unities abgeben: Nur für mb-ing
Moin Was ist der TestManager? Der Wert von RecentChanges sollte nach dem Ändern eines iProps mW eigentlich immer 10 sein. Die 10 ist die Summe der beiden CommandTypesEnumeratoren 8 (kFilePropertyEditCmdType) und 2 (kQueryOnlyCmdType). Alles darüber sollten Änderungen am Modell und/oder den Referenzen sein. Ich habe keine Erfahrung wie zuverlässig die Angabe ist. Man kann in den eigenen ControlDefinitions ja selbst definieren welcher CommandType das angeblich ist. Da würde ich definitiv mal testen, einem Command nur ein kQueryOnlyCmdType zu verpassen, das die Geometrie ändert (falls das geht). Alternativ: Das Abfragen von iPropertywerten verbraucht nur minimal Zeit. Wenn du vor dem Schreiben den bestehenden und den neuen Wert vergleichst und nur neu schreibst wenn sie differieren, kannst du deutlich Zeit sparen. Ich hab vor Jahren mal irgendwo gelesen, das man hier von Zehnerpotenzen Geschwindigkeitsunterschied ausgehen kann. ------------------ MfG Ralf RKW Solutions GmbH www.RKW-Solutions.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mb-ing Mitglied F&E-Mangement, MB-Ing. (u)
Beiträge: 723 Registriert: 06.09.2012 Inventor 2021 WIN 10 (64bit), Dell Precision T1650, 16GB (Pro.File 8.7)
|
erstellt am: 01. Dez. 2021 14:45 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von rkauskh: MoinWas ist der TestManager? Der Wert von RecentChanges sollte nach dem Ändern eines iProps mW eigentlich immer 10 sein. Die 10 ist die Summe der beiden CommandTypesEnumeratoren 8 (kFilePropertyEditCmdType) und 2 (kQueryOnlyCmdType). Alles darüber sollten Änderungen am Modell und/oder den Referenzen sein. Ich habe keine Erfahrung wie zuverlässig die Angabe ist. Man kann in den eigenen ControlDefinitions ja selbst definieren welcher CommandType das angeblich ist. Da würde ich definitiv mal testen, einem Command nur ein kQueryOnlyCmdType zu verpassen, das die Geometrie ändert (falls das geht). Alternativ: Das Abfragen von iPropertywerten verbraucht nur minimal Zeit. Wenn du vor dem Schreiben den bestehenden und den neuen Wert vergleichst und nur neu schreibst wenn sie differieren, kannst du deutlich Zeit sparen. Ich hab vor Jahren mal irgendwo gelesen, das man hier von Zehnerpotenzen Geschwindigkeitsunterschied ausgehen kann.
Hi Ralf, vielen Dank für Deine Antwort. Der TestManager ist ein "Hidden Object"... In VBA zwecks der Gaudi einfach mal unter "ThisApplication.TestManager." schmöckern Woher weißt Du sowas, wie die Summer gebildet wird? Unglaublich Ändere mal Dein Namen auf Ralfipedia :P Was meinst Du mit eigene "CommandTypes" definieren? Interessanter Ansatz mit dem Vergleichen der I-Properties-Values... Ich ermittle zum Beispiel Länge, Breite und Höhe über die "RangeBox". Diese Ermittlung müsste ich ja erst durchführen bevor ich den Wert für das I-Property zum Vergleich habe. Denkst Du, dass ich da immer noch einen Zeitvorteil habe, als wenn ich dann gleich den Wert reinschreibe? Danke und Grüße ------------------ Wissen ist Macht. Nichts wissen macht auch nichts Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 01. Dez. 2021 20:38 <-- editieren / zitieren --> Unities abgeben: Nur für mb-ing
Hallo Da is nix unglaublich, das steht alles so in der API Hilfe. Gut das mit dem zusammen addieren jetzt nicht direkt, aber wenn man sich die Werte so anschaut... Zitat:
CommandTypesEnum Enumerator Description Constants that stand for the different types of commands. Methods Name Value Description kEditMaskCmdType 57 Commands that cause the document to become 'dirty'. Includes ShapeEdit, FilePropertyEdit, NonShapeEdit and UpdateWithReferences commands. kFileOperationsCmdType 4 Commands that manage file operations - e.g. File Save. kFilePropertyEditCmdType 8 Commands that edit File Properties (a.k.a Document Properties). kModelStateUpdatesCmdType 256 Commands that cause model state updates (e.g. generate model state member document). kNonShapeEditCmdType 32 Commands that edit data (other than File Properties) that is not directly related to the geometry of the model (e.g. color, style). kQueryOnlyCmdType 2 Commands that purely query data. These do not 'dirty' the document. kReferencesChangeCmdType 64 Commands that cause this document to change which files it references. kSchemaChangeCmdType 128 Commands that change the format of the data, but do not change it otherwise (e.g. from the format of one Inventor release to another). kShapeEditCmdType 1 Commands that can affect the geometry of the model. kUpdateWithReferencesCmdType 16 Commands that cause this document to recalculate its contents with respect to changes that may have occurred in files it is referencing.
Da hast mich falsch verstanden. Man kann bei der Definition eines eigenen Buttons (ControlDefinition) die Classification angeben.
Code: ControlDefinitions.AddButtonDefinition( DisplayName As String, InternalName As String, Classification As CommandTypesEnum, [ClientId] As Variant, [DescriptionText] As String, [ToolTipText] As String, [StandardIcon] As Variant, [LargeIcon] As Variant, [ButtonDisplay] As ButtonDisplayEnum ) As ButtonDefinition
Wenn der Versuch mit RecentChanges funktioniert, ist das definitiv das schnellste Vorgehen. Ich vermute aber, eure User werden eher selten die Dateien öffnen, den PDM-SchreibmeineIProps-Button drücken und speichern. Da wird vermutlich meistens noch irgendwas geändert. Und dann musst du deine iProps prüfen, hilft nix. Ich hab nochmal gesucht, es aber leider nicht mehr gefunden. Ich bin mir aber sicher das Brian Ekins in seinem Blog auf modthemachine.com das Lesen und Schreiben von iProps mal verglichen hat. Das Abfragen der Rangeboxproperties und Vergleich mit den vorhandenen Werten in den iProps ist nur ein Bruchteil des Schreibvorganges. Brian Ekins aht das damals mit zusätzlich dabei ablaufenden Transaktionen und dem Aktualisieren interner Caches usw. erklärt, die alle Zeit brauchen.
------------------ MfG Ralf RKW Solutions GmbH www.RKW-Solutions.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bwr Mitglied Konstrukteur
Beiträge: 129 Registriert: 21.02.2007
|
erstellt am: 01. Dez. 2021 21:31 <-- editieren / zitieren --> Unities abgeben: Nur für mb-ing
Hallo mb-ing, alternativ gibt es auch die ModelGeomertyVersion (ComponentDefinition.ModelGeometryVersion), die sich bei Bearbeitungen ständig ändert. Die Eigenschaft gibt's für alle Typen von Documenten. Dazu muss der aktuelle Wert beim Speichern in die Datei geschrieben werden (iProperty oder Attribut). Später kannst du diesen Wert dann mit dem aktuellen Wert vergleichen. Bei Änderungen an den iProperties bleibt der Wert gleich, ansonsten ändert er sich. ------------------ Grüße Andreas etaCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mb-ing Mitglied F&E-Mangement, MB-Ing. (u)
Beiträge: 723 Registriert: 06.09.2012 Inventor 2021 WIN 10 (64bit), Dell Precision T1650, 16GB (Pro.File 8.7)
|
erstellt am: 02. Dez. 2021 09:55 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, vielen herzlichen Dank für Euren Input. Vielleicht noch ergänzend: Die Funktion der PDM-CAD-Integration, welche PDM-Relevante I-Properties aktualisiert, bereitet mir nur Probleme, wenn diese in einer Baugruppe ausgeführt wird. Die Funktion durchläuft von der Baugruppe aus alle Komponenten und aktualisiert deren I-Properties, sodass beim Schließen der Baugruppe die Komponenten auch gespeichert werden wollen und meine getriggerte Funktion anspringt. @Ralf: Der Knopf für die Funktion der PDM-CAD-Integration ist von einem Drittanbieter Add-In also dem PDM-System... Soll ich den Button nachträglich eine Classification zuweisen? @Andreas: Sehr interessanter Ansatz, den muss ich mir mal durchdenken Da viele Dateien Schreibgeschützt (im PDM freigegeben) sind, wird müsste ich das Attribut bei jedem Öffnen schreiben, oder? Danke und Grüße MB-Ing. ------------------ Wissen ist Macht. Nichts wissen macht auch nichts Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 02. Dez. 2021 12:55 <-- editieren / zitieren --> Unities abgeben: Nur für mb-ing
Hallo Nein, du kommst mW an die Eigenschaft nur in der Activate Sub des Addins heran. Da brauchst/kannst du nichts ändern. Mir ging es darum, das du für deine eigenen Buttons weißt wofür diese Option ist und woher RecentChanges seine Werte bekommt. ------------------ MfG Ralf RKW Solutions GmbH www.RKW-Solutions.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mb-ing Mitglied F&E-Mangement, MB-Ing. (u)
Beiträge: 723 Registriert: 06.09.2012 Inventor 2021 WIN 10 (64bit), Dell Precision T1650, 16GB (Pro.File 8.7)
|
erstellt am: 02. Dez. 2021 13:55 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von rkauskh: HalloNein, du kommst mW an die Eigenschaft nur in der Activate Sub des Addins heran. Da brauchst/kannst du nichts ändern. Mir ging es darum, das du für deine eigenen Buttons weißt wofür diese Option ist und woher RecentChanges seine Werte bekommt.
Hi Ralf, danke, ah again what learned. Danke und Grüße MB-Ing. ------------------ Wissen ist Macht. Nichts wissen macht auch nichts Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mb-ing Mitglied F&E-Mangement, MB-Ing. (u)
Beiträge: 723 Registriert: 06.09.2012 Inventor 2021 WIN 10 (64bit), Dell Precision T1650, 16GB (Pro.File 8.7)
|
erstellt am: 02. Dez. 2021 16:57 <-- editieren / zitieren --> Unities abgeben:
Ok, jetzt bin ich schlauer Werden wirklich nur die I-Properties modifiziert ist der Wert für "RecentChanges" immer 10. Aber die Funktion der PDM-CAD-Integration, welche vorrangig PDM-Relevante I-Properties aktualisiert, überschreibt anscheinend auch beispielsweise den DisplayName, etc., so dass die Summe für "RecentChanges" eine andere ist. Ansonsten ändert die Funktion auch weitere Sachen, so dass sehr oft unterschiedliche Werte rauskommen. Aber sie ändert eben nie etwas an der Geometrie... Das Wegschreiben der ModelGeomertyVersion (ComponentDefinition.ModelGeometryVersion) in ein AttributeSet wäre wahrscheinlich eine zuverlässige Lösung. Jedoch scheint mir das mit einem größeren Aufwand einherzugehen, so dass ich noch nicht implementieren möchte. Vielen herzlichen Dank für Eure tolle Hilfe und Input. Danke und Grüße MB-Ing.
------------------ Wissen ist Macht. Nichts wissen macht auch nichts Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CIDEON-RGH Mitglied
Beiträge: 1 Registriert: 27.04.2022
|
erstellt am: 27. Apr. 2022 10:02 <-- editieren / zitieren --> Unities abgeben: Nur für mb-ing
|
mb-ing Mitglied F&E-Mangement, MB-Ing. (u)
Beiträge: 723 Registriert: 06.09.2012 Inventor 2021 WIN 10 (64bit), Dell Precision T1650, 16GB (Pro.File 8.7)
|
erstellt am: 28. Apr. 2022 07:30 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von CIDEON-RGH: Alternativ könnte man auch probieren in ApplicationEvents.OnDocumentChange den Context auswerten und schauen ob iProperties betroffen sind.
Danke für Ihre Antwort. Klingt sehr interessant, das werde ich mir mal anschauen. Danke und Grüße MB-Ing. ------------------ Wissen ist Macht. Nichts wissen macht auch nichts Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|