| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | | | PNY bietet das umfangreichste Ökosystem von B2B als auch B2C-Lösungen für IT-Akteure auf dem Markt, eine Pressemitteilung
|
Autor
|
Thema: maximale Abmessungen (Bauraum) von Bauteil auslesen (2227 mal gelesen)
|
yamaha Mitglied Konstrukteur
Beiträge: 384 Registriert: 19.05.2004 Autocad/Inventor 2019, Windows 7 Pro 64Bit
|
erstellt am: 30. Apr. 2014 14:00 <-- editieren / zitieren --> Unities abgeben:
|
RolandD Mitglied
Beiträge: 558 Registriert: 07.01.2005
|
erstellt am: 30. Apr. 2014 17:56 <-- editieren / zitieren --> Unities abgeben: Nur für yamaha
Hallo Jörn, im US-Forum gibt es gerade einen ziemlich aktuellen Beitrag hier
Code: 'calculate length of part in x axis and place this dimension in length custom parameter 'length = Measure.ExtentsHeight 'MsgBox( length)doc = ThisDoc.Document def = doc.ComponentDefinition 'assume the part has only one surface body sb = def.SurfaceBodies(1) 'rangebox minPt = sb.RangeBox.MinPoint maxPt = sb.RangeBox.MaxPoint 'calculate the range along X-Y-Z 'the unit of core API uses centimeter, so needs to convert it to unit of document oUOM = doc.UnitsOfMeasure ' X is extent length: X = Math.abs(minPt.X - maxPt.X) length = oUOM.ConvertUnits(X,"cm" ,oUOM.LengthUnits ) ' Y is extent width: Y = Math.abs(minPt.Y - maxPt.Y) width = oUOM.ConvertUnits(Y,"cm" ,oUOM.LengthUnits ) ' Z is extent height: Z = Math.abs(minPt.Z - maxPt.Z) height = oUOM.ConvertUnits(Z,"cm" ,oUOM.LengthUnits )
------------------ Gruß Roland Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2580 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 01. Mai. 2014 06:42 <-- editieren / zitieren --> Unities abgeben: Nur für yamaha
Hallo Man sollte dabei die Einschränkungen der RangeBox nicht unerwähnt lassen. Die RangeBox garantiert nur nicht kleiner zu sein als das Bauteil. Sie kann aber größer sein. Somit wären die Abmessungen falsch. Sichtbare Arbeitselemente und Skizzen werden in die Rangebox mit einbezogen und können dadurch die Abmessungen verfälschen. Die RangeBox ist am Koordinatensystem ausgerichtet. Liegt das Bauteil, z.B. weil es über eine abgeleitete Komponenten erzeugt wurde, verdreht im Koordinatensystem, ermittelt die RangeBox auch nicht das was man vielleicht als Anwender erwartet.
------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
yamaha Mitglied Konstrukteur
Beiträge: 384 Registriert: 19.05.2004 Autocad/Inventor 2019, Windows 7 Pro 64Bit
|
erstellt am: 05. Mai. 2014 10:39 <-- editieren / zitieren --> Unities abgeben:
Hallo Roland, vielen Dank für den Tip. Hab den Code noch etwas angepaßt und bin direkt von der ComponentDefinition zur Rangebox gegangen. Für meinen anwendungsfall ist das OK. => Ralf, auch danke für deinen Hinweis. Code:
'Groesse des Models berechnen '======================================================================================= 'calculate length of part in x axis and place this dimension in length custom parameter Dim objDef As Inventor.ComponentDefinition objDef = oDocAktuell.ComponentDefinition 'rangebox Dim objMinPoint As Inventor.Point Dim objMaxPoint As Inventor.Point objMinPoint = objDef.RangeBox.MinPoint objMaxPoint = objDef.RangeBox.MaxPoint 'calculate the range along X-Y-Z 'the unit of core API uses centimeter, so needs to convert it to unit of document Dim objUnitsOfMeasure As Inventor.UnitsOfMeasure objUnitsOfMeasure = oDocAktuell.UnitsOfMeasure ' X is extent length: Dim dblWertX As Double dblWertX = Math.Abs(objMinPoint.X - objMaxPoint.X) Dim dbLaengeX As Double dbLaengeX = Math.Round(objUnitsOfMeasure.ConvertUnits(dblWertX, "cm", objUnitsOfMeasure.LengthUnits), 0) ' Y is extent width: Dim dblWertY As Double dblWertY = Math.Abs(objMinPoint.Y - objMaxPoint.Y) Dim dbLaengeY As Double dbLaengeY = Math.Round(objUnitsOfMeasure.ConvertUnits(dblWertY, "cm", objUnitsOfMeasure.LengthUnits), 0) ' Z is extent height: Dim dblWertZ As Double dblWertZ = Math.Abs(objMinPoint.Z - objMaxPoint.Z) Dim dbLaengeZ As Double dbLaengeZ = Math.Round(objUnitsOfMeasure.ConvertUnits(dblWertZ, "cm", objUnitsOfMeasure.LengthUnits), 0) LabelMaxModelX.Text = Format(dbLaengeX, "#,##0") & " mm" LabelMaxModelY.Text = Format(dbLaengeY, "#,##0") & " mm" LabelMaxModelZ.Text = Format(dbLaengeZ, "#,##0") & " mm"
10 Points for you. And have an nice Day. Gruss Jörn ------------------ Gruß Jörn Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
PaulSchuepbach Mitglied Programmierer
Beiträge: 1005 Registriert: 01.10.2003
|
erstellt am: 12. Mai. 2014 14:43 <-- editieren / zitieren --> Unities abgeben: Nur für yamaha
@Ralf und Jörn, die Aussagen bez. RangeBox und Arbeitselementen treffen nur teilweise zu: Die RangeBox der ComponentDefinition (wie in Jörn's Code) beinhalten auch alle Arbeitselemente. Das ist einfach zu prüfen, indem die RangeBox abgefragt und danach eine Arbeitsebene gösser gezogen wird - die RangeBox 'wächst' dann mit. Die RangeBox im Code von Roland bezieht sich aber auf die ComponentDefinition.SurfaceBodies[1].RangeBox - also die Abmasse des reinen Körpers, was Jörn ja auch haben will. Nur ein kleiner Schönheitsfehler: der RangeBox kommt dann aber nur für den 1. SurfaceBody - was machst Du bei einem Multi-Body Part ? Und was bei einem Flächen-Modell ? ...da musst nochmal ran, Jörn... Grüsse, Paul ------------------ Grüsse, Paul Inventor-Programmierung Online 3D-Ersatzteilkataloge - CAD Toolkit released... Kostenmanagement mittels NLPP Analyse Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2580 Registriert: 15.11.2006 Windows 10 x64, AIP 2020-2025
|
erstellt am: 12. Mai. 2014 18:36 <-- editieren / zitieren --> Unities abgeben: Nur für yamaha
Hallo Stimmt, das es über den SurfaceBody geht hab ich schlicht überlesen. Aber in Jörn's Code trifft's wieder zu. Ich werf's beim Thema RangeBox einfach gern dazwischen, da wir leidvoll erst nach ein paar Wochen drauf gekommen sind. Ich hab mal einen Blog von Philippe Leefsma dazu gesehen, den man sich ansehen sollte. ------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|