| | | 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: Werte der OrientedMinimumRangeBox nach Größe sortieren (266 / mal gelesen)
|
Roland Schröder Ehrenmitglied V.I.P. h.c. Dr.-Ing. Maschinenbau, Entwicklung & Konstruktion von Spezialmaschinen
Beiträge: 13438 Registriert: 02.04.2004 AIP2013SP2.2 XPproSP2 MS-IntelliMouse-Optical SpacePilot DellM4600 2,13GHz 2GB FxGo1400 1920x1200 am Dock Dell2711
|
erstellt am: 17. Jul. 2024 18:49 <-- editieren / zitieren --> Unities abgeben:
Moin! Ich benutze ja oft und gern die OrientedMinimumRangeBox, nur erscheint mir die Reihenfolge der drei ermittlten Maße irgendwie zufällig zu sein. Ich würde die gern von groß nach klein sortiert bekommen, aber das ist nicht der Fall. Die drei Zahlen kommen zwar als oOBox.DirectionOne.Length, oOBox.DirectionTwo.Length und oOBox.DirectionThree.Length, aber im Gegensetz z. B. zu der in der Dynamik üblichen Indizierung der Trägheitsachsen ist hier nicht die erste die größte. Da ich nicht annehmen, dass sich das leicht ändern lässt, muss ich sie im Code wohl selber sortieren. Daher meine Frage: Wie kann ich drei beliebige vorliegende Zahlenwerte der Größe nach sortiert drei Ausgabevariablen zuordnen? ------------------ Roland www.Das-Entwicklungsbuero.de It's not the hammer - it's the way you hit! 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: 17. Jul. 2024 20:09 <-- editieren / zitieren --> Unities abgeben: Nur für Roland Schröder
Moin Stimmt, die Reihenfolge läßt sich nicht beeinflussen. Wie die Reihenfolge zustande kommt, hat sich mir auch noch nicht erschlossen. Probier mal, es in ein Array einzulesen und dort zu sortieren. Etwa so: Code:
Option ExplicitPrivate Sub sort() Dim oPartDoc As PartDocument Set oPartDoc = ThisApplication.ActiveDocument Dim oSB As SurfaceBody Set oSB = oPartDoc.ComponentDefinition.SurfaceBodies(1) Dim oArr(2) As Double oArr(0) = oSB.OrientedMinimumRangeBox.DirectionOne.Length oArr(1) = oSB.OrientedMinimumRangeBox.DirectionTwo.Length oArr(2) = oSB.OrientedMinimumRangeBox.DirectionThree.Length Dim i As Integer Dim j As Integer Dim dTemp As Double For i = 0 To 2 For j = i + 1 To 2 If oArr(i) < oArr(j) Then dTemp = oArr(j) oArr(j) = oArr(i) oArr(i) = dTemp End If Next Next MsgBox ("LxBxH: " & oArr(0) & " x " & oArr(1) & " x " & oArr(2)) End Sub
------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Roland Schröder Ehrenmitglied V.I.P. h.c. Dr.-Ing. Maschinenbau, Entwicklung & Konstruktion von Spezialmaschinen
Beiträge: 13438 Registriert: 02.04.2004 AIP2013SP2.2 XPproSP2 MS-IntelliMouse-Optical SpacePilot DellM4600 2,13GHz 2GB FxGo1400 1920x1200 am Dock Dell2711
|
erstellt am: 18. Jul. 2024 00:21 <-- editieren / zitieren --> Unities abgeben:
Prima, Danke, ist schon eingebaut und funktioniert super. Aber wo wir grad dabei sind: Funktioniert die OrientedMinimumRangeBox eigentlich auch für Assemblies? Wenn ich den Code, wie er jetzt ist, in einer iam aufrufe, gibt es Mecker bei "Set oPartDoc = oApp.ActiveDocument", was ich auch verstehe, denn ein Asm ist kein Part. Der alte Code für die xyz-box hatte eine Unterscheidung nach ipt oder iam und nahm dann entsprechend oPart... oder oAsm... Das krieg ich noch kopiert, ich weiß aber nicht, ob der Aufruf der OrientedMinimumRangeBox dann nicht anders erfolgen muss und ob er für iam überhaupt funktioniert. ------------------ Roland www.Das-Entwicklungsbuero.de It's not the hammer - it's the way you hit! 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: 18. Jul. 2024 11:05 <-- editieren / zitieren --> Unities abgeben: Nur für Roland Schröder
Moin Ja, das geht auch für Baugruppen. Man kann sich dabei die automatische Typkonvertierung von VBA zu Nutze machen, die ein Document je nach Bedarf später in ein PartDocument bzw. AssemblyDocument umwandelt. Mir ist noch ein Fehler aufgefallen. Bei Bauteilen würde nur der erste Volumenkörper berücksichtigt. Das stimmt bei MBP's dann möglicherweise nicht. Ich hatte übersehen, dass die ComponentDefinition diese Box für den Gesamtkörper bereitstellt. Für leere Bauteile und Baugruppen ist noch eine Fehlerbehandlung dazugekommen. Code:
Option ExplicitPrivate Sub sort() If Not ThisApplication.ActiveDocumentType = kAssemblyDocumentObject And Not ThisApplication.ActiveDocumentType = kPartDocumentObject Then Call MsgBox("Funktion nur in Baugruppen und Bauteilen Verfügbar.", vbExclamation, "OrientedMinnimumBox") Exit Sub End If Dim oDoc As Document Set oDoc = ThisApplication.ActiveDocument Dim oCompDef As ComponentDefinition Set oCompDef = oDoc.ComponentDefinition On Error Resume Next Dim oOMB As OrientedBox Set oOMB = oCompDef.OrientedMinimumRangeBox If Err.Number <> 0 Then MsgBox ("L x B x H: 0 x 0 x 0") Exit Sub End If On Error GoTo 0 Dim oArr(2) As Double oArr(0) = oCompDef.OrientedMinimumRangeBox.DirectionOne.Length oArr(1) = oCompDef.OrientedMinimumRangeBox.DirectionTwo.Length oArr(2) = oCompDef.OrientedMinimumRangeBox.DirectionThree.Length Dim i As Integer Dim j As Integer Dim dTemp As Double For i = 0 To 2 For j = i + 1 To 2 If oArr(i) < oArr(j) Then dTemp = oArr(j) oArr(j) = oArr(i) oArr(i) = dTemp End If Next Next MsgBox ("L x B x H: " & oArr(0) & " x " & oArr(1) & " x " & oArr(2)) End Sub
------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|