| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | | | PNY präsentiert die neue NVIDIA RTX A400 und die A1000 Grafikkarte, eine Pressemitteilung
|
Autor
|
Thema: Public Interface AssemblyDocument erweitern? (483 / mal gelesen)
|
mb-ing Mitglied F&E-Mangement, MB-Ing. (u)
Beiträge: 774 Registriert: 06.09.2012 Inventor 2021 WIN 10 (64bit), Dell Precision T1650, 16GB (Pro.File 8.7)
|
erstellt am: 25. Nov. 2021 08:56 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, oftmals ist es ja so, dass die vorhandenen Funktionen eines Interfaces der Inventor API nicht ausreichend sind Gibt es eigentlich die Möglichkeit in .NET ein Interface, wie z. B. AssemblyDocument, selbst zu erweitern, ohne den Zwang sämtliche Funktionen vorhalten zu müssen? Der Wunsch wäre ein eigens Interface, welches von AssemblyDocument alles erbt, aber beispielsweise eine eigene Funktion zusätzlich bereitstellt. 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: 2630 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 25. Nov. 2021 16:02 <-- editieren / zitieren --> Unities abgeben: Nur für mb-ing
|
mb-ing Mitglied F&E-Mangement, MB-Ing. (u)
Beiträge: 774 Registriert: 06.09.2012 Inventor 2021 WIN 10 (64bit), Dell Precision T1650, 16GB (Pro.File 8.7)
|
erstellt am: 25. Nov. 2021 19:28 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von rkauskh: HalloHab's selbst noch nicht ausprobiert, aber Erweiterungsmethoden?
Hi Ralf, vielen herzlichen Dank für Deine klasse Antwort und Hilfe. Habe es mal schnell ausprobiert: ExtensionAssemblyDocument.vb
Code: Imports System.Runtime.CompilerServices ''' <summary> ''' Erweiterung des Inventor.AssemblyDocuments-Interfaces ''' <remarks> ''' Beschreibung von Erweiterungen siehe <see cref="https://docs.microsoft.com/de-de/previous-versions/visualstudio/visual-studio-2008/bb384936(v=vs.90)?redirectedfrom=MSDN"/> ''' </remarks> ''' </summary> Public Module ExtensionAssemblyDocument ''' <summary> ''' Öffentliche Funktion GetTotalSurface() gibt die Oberfläche der Baugruppe als <see cref="String"/> zurück ''' </summary> ''' <remarks> ''' Die Oberfläche der Baugruppe wird ermittelt und drei Stellen nach den Komma gerundet. Das Ergebnis wird in DM² als String zurückgegeben. ''' </remarks> ''' <param name="assemblyDocument">Der übergebene Parameter enthält die Baugruppe als <see cref="Inventor.AssemblyDocument"/>, deren Oberfläche ermittelt werden soll</param> ''' <returns>Gibt die Oberfläche der Baugruppe als <see cref="String"/> zurück</returns> #Region "GetTotalSurface() » Ermittlung der Obberfläche der Baugruppe" <Extension()> Public Function GetTotalSurface(assemblyDocument As Inventor.AssemblyDocument) As String Dim dArea As Double dArea = assemblyDocument.ComponentDefinition.MassProperties.Area ' in cm^2 dArea /= 100 ' in dm^2 Return Math.Round(dArea, 3) 'Auf 3-Stellen hinter dem Komma runden End Function #End RegionEnd Module
Utilities.vb
Code: ... Dim model As Inventor.AssemblyDocument = inventorAPP.ActiveDocument model.GetTotalSurface() ...
Klappt wunderbar bis jetzt und sogar IntelliSense funzt Siehst Du da irgendwie einen Haken oder sogar ein Anti-Pattern? 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: 2630 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 25. Nov. 2021 21:09 <-- editieren / zitieren --> Unities abgeben: Nur für mb-ing
Hallo Nö, seh ich nicht. Man fügt ja nur eine Methode hinzu. Aber deine Funktion soll String zurückgeben und
Code: Return Math.Round(dArea, 3)
ist aber ein Double. Die einschränkende Konvertierung sollte gehen, aber ich würde Code: Return Math.Round(dArea, 3).ToString
daraus machen. Erst habe ich noch gedacht, da müssen unbedingt noch ein paar Punkte berücksichtigt werden. Unter anderem: - Wie ist das, wenn die phys. Eigenschaften gerade nicht aktuell sind? Oder werden die automatisch bei der Abfrage aktualisiert? - Man sollte unbedingt noch den UpToDate und DeferUpdates Status prüfen, sonst kann da ein völlig falscher Wert herauskommen. - Was macht du bei mehreren Modelstates bzw. bei 2021 mehreren LoD? Andererseits gehört das nicht unbedingt in die Methode, sondern ist Teil der jeweiligen Implementierung.
------------------ 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: 774 Registriert: 06.09.2012 Inventor 2021 WIN 10 (64bit), Dell Precision T1650, 16GB (Pro.File 8.7)
|
erstellt am: 26. Nov. 2021 07:07 <-- editieren / zitieren --> Unities abgeben:
Hi Ralf, vielen Dank für Dein Input. Die Funktion habe ich nur auf die Schnelle geschrieben, um zu sehen, ob es überhaupt geht. Diese werde ich sehr wahrscheinlich in eine andere Extension (z. B. Extension3dModell.vb) packen, die für IAM und IPT gelten wird. Das Ganze soll dann in Richtung Polymorphismus gehen... Aber mit dem kleinem Beispiel konnte ich den Nachweis erbringen, dass es grundsätzlich geht. Ein Nachteil der aktuellen Umsetzung ist, dass man auf die "Beständigkeit" des Interfaces Inventor.AssemblyDocument angewiesen ist. Wobei die Volatilität da vermutlich eher gering ist, und wenn, dann wird dieses eher nur erweitert. Nochmals vielen herzlichen Dank für Deine Hilfe! Ich habe eine Stunde gesucht und nichts gefunden Suchbegriffe: ".NET Extend Interface", ".NET Inherit Interface", ".NET Extend Interface without modifying" Aber man muss nur einen kompetenten Mann fragen und zack hat man die Antwort. 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: 774 Registriert: 06.09.2012 Inventor 2021 WIN 10 (64bit), Dell Precision T1650, 16GB (Pro.File 8.7)
|
erstellt am: 26. Nov. 2021 08:44 <-- editieren / zitieren --> Unities abgeben:
Zitat: Original erstellt von rkauskh: HalloNö, seh ich nicht. Man fügt ja nur eine Methode hinzu. Aber deine Funktion soll String zurückgeben und
Code: Return Math.Round(dArea, 3)
ist aber ein Double. Die einschränkende Konvertierung sollte gehen, aber ich würde
Code: Return Math.Round(dArea, 3).ToString
daraus machen.Erst habe ich noch gedacht, da müssen unbedingt noch ein paar Punkte berücksichtigt werden. Unter anderem: - Wie ist das, wenn die phys. Eigenschaften gerade nicht aktuell sind? Oder werden die automatisch bei der Abfrage aktualisiert? - Man sollte unbedingt noch den UpToDate und DeferUpdates Status prüfen, sonst kann da ein völlig falscher Wert herauskommen. - Was macht du bei mehreren Modelstates bzw. bei 2021 mehreren LoD? Andererseits gehört das nicht unbedingt in die Methode, sondern ist Teil der jeweiligen Implementierung.
Hi Ralf, bezüglich der Aktualität des Models geht folgende Abfrage auch, oder? Code: ... GetTotalSurface(model As Object) As String If model.RequiresUpdate Then model.Update End If 'Fläche ermitteln Dim dArea As Double ...
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: 2630 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 26. Nov. 2021 10:29 <-- editieren / zitieren --> Unities abgeben: Nur für mb-ing
Hallo Also das Inventor.AssemblyDocument wegfällt bezweifle ich. Das ist in Stein gemeißelt. Darunter wird es immer mal wieder Ergänzungen und Änderungen geben, aber die stören ja nicht weiter. Außer Autodesk integriert eine identische Methode. Ja, RequiresUpdate kannst du nehmen. Aber das ignoriert eine eventuell vorhandene aufgeschobene Aktualisierung der Baugruppe. Wenn DeferUpdates wahr ist, würde ich mit Meldung an den User abbrechen. Die Fläche des nicht aktuellen Modells ist mit hoher Wahrscheinlichkeit veraltet und falsch. Mit ist dann kein Wert lieber. Ich meine mich zu erinnern, dass die ganzen MassProperties beim Zugriff über die API automatisch neu berechnet werden. Das ist vermutlich unabhängig vom Modellzustand. Es wird der aktuelle Zustand genommen. Das Berechnen setzt mW auch das Dirty-Flag im Document. Das läßt sich verhindern, indem man MassProperties.CacheResultsOnCompute auf false setzt. Ist für solche reinen API Abfragen vielleicht sinnvoll. ------------------ 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: 774 Registriert: 06.09.2012 Inventor 2021 WIN 10 (64bit), Dell Precision T1650, 16GB (Pro.File 8.7)
|
erstellt am: 26. Nov. 2021 10:36 <-- editieren / zitieren --> Unities abgeben:
|
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2630 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 26. Nov. 2021 15:54 <-- editieren / zitieren --> Unities abgeben: Nur für mb-ing
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|