Hot News:

Unser Angebot:

  Foren auf CAD.de (alle Foren)
  Inventor .NET
  Prüfen, ob nur die I-Properties geändert wurden (Geometrie unberührt)

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:  Prüfen, ob nur die I-Properties geändert wurden (Geometrie unberührt) (158 mal gelesen)
mb-ing
Mitglied
F&E-Mangement, MB-Ing. (u)


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

Beiträge: 697
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 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,

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


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

Windows 10 x64, AIP 2022

erstellt am: 01. Dez. 2021 11:08    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 mb-ing 10 Unities + Antwort hilfreich

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)


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

Beiträge: 697
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 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 rkauskh:
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.


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


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

Windows 10 x64, AIP 2022

erstellt am: 01. Dez. 2021 20:38    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 mb-ing 10 Unities + Antwort hilfreich

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


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

Beiträge: 121
Registriert: 21.02.2007

Win7 64-bit NVIDIA Quadro 4000
SE V19 SP11
Inventor 2017
etaCAD.de

erstellt am: 01. Dez. 2021 21: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 Nur für mb-ing 10 Unities + Antwort hilfreich

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)


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

Beiträge: 697
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 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,

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


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

Windows 10 x64, AIP 2022

erstellt am: 02. Dez. 2021 12:55    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 mb-ing 10 Unities + Antwort hilfreich

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)


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

Beiträge: 697
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 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 rkauskh:
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.


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)


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

Beiträge: 697
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 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

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

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