![]() |
|
Bitte drücken Sie nicht mehrfach auf "Antwort speichern".
*Ist HTML- und/oder UBB-Code aktiviert, dann können Sie HTML und/oder UBB Code in Ihrem Beitrag verwenden.
Beiträge: 712 / 0 Inventor 2021 WIN 10 (64bit), Dell Precision T1650, 16GB (Pro.File 8.7) 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.? Theoretisch gibt es ja das Attribut "RecentChanges" am Dokument. Ich habe die Eigenschaft mal mit folgendem Code analysiert: Dim enumType As Inventor.EnumType = g_inventorApplication.TestManager.GetEnumType("CommandTypesEnum") Die Konsole wirft nur ein paar wenige Ausgaben raus :( Auch ist der Wert Hintergrund: Problem: 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 ------------------ Beiträge: 2038 / 0 Windows 10 x64, AIP 2022 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. Alternativ: ------------------ RKW Solutions GmbH Beiträge: 712 / 0 Inventor 2021 WIN 10 (64bit), Dell Precision T1650, 16GB (Pro.File 8.7) 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. Alternativ: Hi Ralf, vielen Dank für Deine Antwort. Der TestManager ist ein "Hidden Object"... Woher weißt Du sowas, wie die Summer gebildet wird? Unglaublich Was meinst Du mit eigene "CommandTypes" definieren? Interessanter Ansatz mit dem Vergleichen der I-Properties-Values... Danke und Grüße ------------------ Beiträge: 2038 / 0 Windows 10 x64, AIP 2022 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... Description Methods Da hast mich falsch verstanden. Man kann bei der Definition eines eigenen Buttons (ControlDefinition) die Classification angeben. ------------------ RKW Solutions GmbH Beiträge: 125 / 0 Win7 64-bit NVIDIA Quadro 4000 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. ------------------ Beiträge: 712 / 0 Inventor 2021 WIN 10 (64bit), Dell Precision T1650, 16GB (Pro.File 8.7) vielen herzlichen Dank für Euren Input. Vielleicht noch ergänzend: @Ralf: @Andreas: Danke und Grüße ------------------ Beiträge: 2038 / 0 Windows 10 x64, AIP 2022 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. ------------------ RKW Solutions GmbH Beiträge: 712 / 0 Inventor 2021 WIN 10 (64bit), Dell Precision T1650, 16GB (Pro.File 8.7) 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 ------------------ Beiträge: 712 / 0 Inventor 2021 WIN 10 (64bit), Dell Precision T1650, 16GB (Pro.File 8.7) 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. Vielen herzlichen Dank für Eure tolle Hilfe und Input. Danke und Grüße ------------------ Beiträge: 1 / 0 Beiträge: 712 / 0 Inventor 2021 WIN 10 (64bit), Dell Precision T1650, 16GB (Pro.File 8.7) Danke für Ihre Antwort. Danke und Grüße ------------------mb-ing Hallo zusammen,
Vorrangig würde mich dies bei IPTs interessieren. Wenn man es auch bei IAM und IDW anwenden kann, umso besser
Ist das für mein Anliegen zielführend und zuverlässig?Code:
...
[Enum].GetName(GetType(Inventor.CommandTypesEnum), g_inventorApplication.ActiveEditDocument.RecentChanges)
Dim index As Integer = 0
Do While index < enumType.Count
Debug.Print(enumType.ValueName)
Debug.Print(enumType.Value)
enumType.MoveNext()
index += 1
Loop
...
Kann das generell an dem TestManager liegen?Code:
nach dem manuellen Ändern der I-Properties unterschiedlich
[Enum].GetName(GetType(Inventor.CommandTypesEnum), g_inventorApplication.ActiveEditDocument.RecentChanges)
Ich reagiere mit einem Trigger auf das Speichern des Dokuments und aktualisiere im Zuge dessen die I-Properties.
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
MB-Ing.
Wissen ist Macht. Nichts wissen macht auch nichts rkauskh Moin
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).
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
www.RKW-Solutions.commb-ing Zitat:
Original erstellt von rkauskh:
Moin
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).
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.
In VBA zwecks der Gaudi einfach mal unter "ThisApplication.TestManager." schmöckern Ändere mal Dein Namen auf Ralfipedia :P
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?
Wissen ist Macht. Nichts wissen macht auch nichts rkauskh Hallo Zitat:
CommandTypesEnum Enumerator
Constants that stand for the different types of commands.
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. 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
www.RKW-Solutions.combwr
SE V19 SP11
Inventor 2017
etaCAD.deHallo mb-ing,
Grüße
Andreas
etaCADmb-ing Hallo zusammen,
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.
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?
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?
MB-Ing.
Wissen ist Macht. Nichts wissen macht auch nichts rkauskh Hallo
MfG
Ralf
www.RKW-Solutions.commb-ing Zitat:
Original erstellt von rkauskh:
Hallo
MB-Ing.
Wissen ist Macht. Nichts wissen macht auch nichts mb-ing Ok, jetzt bin ich schlauer
Jedoch scheint mir das mit einem größeren Aufwand einherzugehen, so dass ich noch nicht implementieren möchte.
MB-Ing.
Wissen ist Macht. Nichts wissen macht auch nichts CIDEON-RGH Alternativ könnte man auch probieren in ApplicationEvents.OnDocumentChange den Context auswerten und schauen ob iProperties betroffen sind. mb-ing Zitat:
Original erstellt von CIDEON-RGH:
Alternativ könnte man auch probieren in ApplicationEvents.OnDocumentChange den Context auswerten und schauen ob iProperties betroffen sind.
Klingt sehr interessant, das werde ich mir mal anschauen.
MB-Ing.
Wissen ist Macht. Nichts wissen macht auch nichts