| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
| PNY wird von NVIDIA zum Händler des Jahres gewählt – zum dritten Mal in Folge, eine Pressemitteilung
|
Autor
|
Thema: Geometriedaten auslesen (194 / mal gelesen)
|
ThomasHenkel24 Mitglied
Beiträge: 4 Registriert: 31.10.2024
|
erstellt am: 04. Nov. 2024 12:03 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, Ich versuche aus einem kPartDocumentObject die Geometriedaten eines Rohrs auszulesen. Die Länge habe ich gefunden:
Code:
Dim partDef As PartComponentDefinition Set partDef = ThisApplication.ActiveDocument.ComponentDefinition'get distance Dim extrude As ExtrudeFeature For Each extrude In partDef.Features.ExtrudeFeatures Dim extrudeDef As ExtrudeDefinition Set extrudeDef = extrude.Definition If extrudeDef.ExtentType = kDistanceExtent Then Dim distanceEx As DistanceExtent Set distanceEx = extrudeDef.Extent Debug.Print "Extrusion Name: " & extrude.Name Debug.Print "Distance: " & CStr(Format(distanceEx.distance.Value * 10, "0.000 ")) & CStr(distanceEx.distance.Units) End If Next
Jetzt fehlen mir noch die Innen- und Außendurchmesser. Ein Beispieldatei und ein Bild mit den gesuchten Maßen habe ich angehängt. Kann jemand helfen und mir sagen, wie ich an diese Daten komme? Thomas [Diese Nachricht wurde von ThomasHenkel24 am 04. Nov. 2024 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ThomasHenkel24 Mitglied
Beiträge: 4 Registriert: 31.10.2024
|
erstellt am: 04. Nov. 2024 15:07 <-- editieren / zitieren --> Unities abgeben:
Habe mittlerweile folgendes gefunden: Code:
Debug.Print "Parameter" Dim oParameter As Parameter For Each oParameter In ThisApplication.ActiveDocument.ComponentDefinition.Parameters Debug.Print "- " & oParameter.Name & " = " & oParameter.Value * 10 & " " & oParameter.Units Next
Das hilft mir erst mal weiter. PS: Ich habe im obigen Post 3 Dateien angehängt (ein Bild, eine ipt und ein zip). Angezeigt wird mir im Forum aber nur die letzte. Seht ihr alle drei? Thomas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ThomasHenkel24 Mitglied
Beiträge: 4 Registriert: 31.10.2024
|
erstellt am: 05. Nov. 2024 10:41 <-- editieren / zitieren --> Unities abgeben:
Die Bezeichnung der Variablen und ihre Reihenfolge hängt tatsächlich von der Art der Konstruktion ab. Nachfolgend zwei Beispiele für einfache Rohre: Beispiel 1
Code:
• d0: = 114,3 mm -> Außendurchmesser • d1: = 2 mm -> Wandstärke • d2: = 1949 mm -> Länge • d3: = 0 grd
Beispiel 2
Code:
• d3: = 2 mm -> Wandstärke • d4: = 2800 mm -> Länge • d5: = 0 grd • d6: = 349 mm -> Innendurchmesser
Die Zuordnung habe ich hier manuell vorgenommen. Wie kann ich diese per Script auslesen? Inventor weiß ja, dass d6 z.B. der Innendurchmesser ist - wie komme ich an diese Information? Thomas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2638 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 05. Nov. 2024 11:12 <-- editieren / zitieren --> Unities abgeben: Nur für ThomasHenkel24
Moin Die Informationen stecken im Extrusionsprofil. Für einen klar definierten Fall, wie ein Rohr, kann man das recht einfach rausziehen. Code:
Option ExplicitPrivate Sub Geometriedaten() Dim oApp As Inventor.Application Set oApp = ThisApplication Dim oDoc As PartDocument Set oDoc = oApp.ActiveDocument Dim oExtrude As ExtrudeFeature Set oExtrude = oDoc.ComponentDefinition.Features.ExtrudeFeatures(1) Dim dLength As Double Dim dOuterDiam As Double Dim dInnerDiam As Double dLength = oDoc.UnitsOfMeasure.ConvertUnits(oExtrude.Extent.Distance.Value, UnitsTypeEnum.kDatabaseLengthUnits, UnitsTypeEnum.kDefaultDisplayLengthUnits) If oExtrude.Profile.Item(1).Item(1).Curve.Radius < oExtrude.Profile.Item(2).Item(1).Curve.Radius Then dInnerDiam = 2 * oDoc.UnitsOfMeasure.ConvertUnits(oExtrude.Profile.Item(1).Item(1).Curve.Radius, UnitsTypeEnum.kDatabaseLengthUnits, UnitsTypeEnum.kDefaultDisplayLengthUnits) dOuterDiam = 2 * oDoc.UnitsOfMeasure.ConvertUnits(oExtrude.Profile.Item(2).Item(1).Curve.Radius, UnitsTypeEnum.kDatabaseLengthUnits, UnitsTypeEnum.kDefaultDisplayLengthUnits) Else dInnerDiam = 2 * oDoc.UnitsOfMeasure.ConvertUnits(oExtrude.Profile.Item(2).Item(1).Curve.Radius, UnitsTypeEnum.kDatabaseLengthUnits, UnitsTypeEnum.kDefaultDisplayLengthUnits) dOuterDiam = 2 * oDoc.UnitsOfMeasure.ConvertUnits(oExtrude.Profile.Item(1).Item(1).Curve.Radius, UnitsTypeEnum.kDatabaseLengthUnits, UnitsTypeEnum.kDefaultDisplayLengthUnits) End If MsgBox ("Länge: " & dLength & "mm" & vbCrLf & "Außen: " & dOuterDiam & "mm" & vbCrLf & "Innen: " & dInnerDiam & "mm") End Sub
------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ThomasHenkel24 Mitglied
Beiträge: 4 Registriert: 31.10.2024
|
erstellt am: 06. Nov. 2024 10:04 <-- editieren / zitieren --> Unities abgeben:
Vielen Dank Ralf. Nach dem gleichen Schema versuche ich jetzt mal die Daten anderer Geometrien aus den RevolverFeatures und den entsprechenden CurveTypen auszulesen. Wie du schon geschrieben hast, kann das aber bei nicht trivialen Formen sehr schnell aus dem Ruder laufen. Thomas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2638 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 06. Nov. 2024 14:53 <-- editieren / zitieren --> Unities abgeben: Nur für ThomasHenkel24
Moin Die Fragte ist wo du schlußendlich hin möchtest. Wenn du versuchst eine universelle Abmessungsermittlung zu erstellen, ist das Vorgehen vermutlich nicht zielführend. Es gibt einfach zu viele Varianten ein und dasselbe Endergebnis zu erreichen bzw. mehrdeutige Egebnisse. ------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |