Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Ausgewählte Koordinaten sortieren

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:  Ausgewählte Koordinaten sortieren (957 mal gelesen)
buecherm83
Mitglied
Ingenieur IT Application Software


Sehen Sie sich das Profil von buecherm83 an!   Senden Sie eine Private Message an buecherm83  Schreiben Sie einen Gästebucheintrag für buecherm83

Beiträge: 78
Registriert: 20.09.2011

SIEMENS NX10
CATIA V5 R26
VB7.1
Tecnomatix Process Designer/Simulate<P>Win7 64bit
Office 2016

erstellt am: 08. Apr. 2014 08:49    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,

ich hoffe ihr könnt mir helfen. Ich brauche ein Makro das mir verschiedene Abstände berechnet. Hierzu lasse ich den User in einer Skizze die entsprechenden 2D Curven auswählen. Aus diesen lasse ich mir die Start- und Endpunkte zum Berechnen ausgeben. Soweit läuft alles einwandfrei.

Jetzt habe ich mir überlegt, wie ich die ausgelesenen Koordinaten sortieren kann, wenn der User nach seinem belieben die 2D Curven anwählt oder merkt er hat bei der Selektion was übersprungen. (Meine Makro läuft nur richtig durch, wenn in Leserichtung selektiert wird).

Dies wollte ich mit einem Bubblesort machen. Und an dieser Stelle komme ich nicht weiter. Das Makro läuft durch ohne zu sortieren, d. h. er üerspringt das speichern in eine frei Variable.

Ich möcht am Ende die Koordinaten so sortiert haben, dass die Werte von Minus nach Plus laufen.

Vielleicht könnt ihr mir ja jemand weiter helfen.


Code:

Sub CATMain ()

...

MyLines.Search "CATSketchSearch.2DCurve,sel"

For n = 0 To MyLines.Count2 - 1

AnzahlSelection = MySelection.count * 2 - 1
       
If n = 0 Then
       
ReDim Koordinaten(AnzahlSelection, 1) As Variant
           
Else
End If
   
Set MessElement = MySelection.Item(n + 1).Value
       
Set Templinie = MyLines.Item2(n + 1).Value
Templinie.GetEndPoints Eckpunkte
       
Koordinaten(n * 2, 0) = Eckpunkte(0)
Koordinaten(n * 2, 1) = Eckpunkte(1)
Koordinaten(n * 2 + 1, 0) = Eckpunkte(2)
Koordinaten(n * 2 + 1, 1) = Eckpunkte(3)
               
i = i + 1

... 'Berechnen der erforderlichen Abstände und schreiben in einen Parameter

Next

Bubblesort(Koordinaten())

...

End Sub


Function Bubblesort(Koordinaten() As Variant, AnzahlSelection As Integer)

    Dim i As Long
    Dim k As Long
    Dim m As Long
    Dim lngLow As Long
    Dim lngUp As Long
    Dim varBuffer As Variant
   
    If Not IsArray(Koordinaten()) Then Exit Function
   
    lngLow = LBound(Koordinaten, 1)
    lngUp = UBound(Koordinaten, 1)
   
    For i = lngLow To lngUp
   
        For k = lngUp To i + 1 Step -1
           
            If Koordinaten(i, 1) > Koordinaten(k, 1) Then
           
                For k = 1 To AnzahlSelection
               
                    varBuffer = Koordinaten(k, i)
                    Koordinaten(k, i) = Koordinaten(i, k)
                    Koordinaten(i, k) = varBuffer
               
                Next
               
            End If
           
            m = m + 1
           
        Next
       
    Next
   
    Bubblesort = m
   
End Function



Grüße

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

HoBLila
Mitglied
Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx


Sehen Sie sich das Profil von HoBLila an!   Senden Sie eine Private Message an HoBLila  Schreiben Sie einen Gästebucheintrag für HoBLila

Beiträge: 1118
Registriert: 29.05.2008

DELL PRECISION T3500
Intel(R) Xeon(R) CPU W3540 @ 2.93GHz
12285 MB RAM
NVIDIA Quadro FX 1800
Microsoft Windows 7 Enterprise Service Pack 1
CATIA V5 R19 SP09 HF69
VB6.5
CAA RADE CDC

erstellt am: 08. Apr. 2014 09:22    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für buecherm83 10 Unities + Antwort hilfreich

Am schnellsten bist Du wahrscheinlich, wenn Du meine Dicstionary-Klasse verwendest:
http://ww3.cad.de/foren/ubb/Forum137/HTML/005045.shtml#000008

Dort sammelst Du in einer Liste Deine Elemente und rufst dann die .sortABC() Methode auf.

Dies ist auch QuickSort, der sollte also deutlich schneller sein als der BubbleSort. :-)

Als Key musst Du dann die Namen der Elemente vergeben.

Einen Nachteil hätte die Sache: Jeder Key darf nur einmal existieren.

Edit: Mir fällt grad auf Du sparst Dir dann auch die ReDim()-Funktion, da Du elemente dynamisch mit .add() hinzufügst.

------------------
Mit freundlichen Grüßen,
Henry Schneider
alias Lila

Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren:
Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen,
die Natur versucht, immer bessere Idioten zu bauen

Xing

[Diese Nachricht wurde von HoBLila am 08. Apr. 2014 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

bgrittmann
Moderator
Konstrukteur


Sehen Sie sich das Profil von bgrittmann an!   Senden Sie eine Private Message an bgrittmann  Schreiben Sie einen Gästebucheintrag für bgrittmann

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 08. Apr. 2014 09:23    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für buecherm83 10 Unities + Antwort hilfreich

Servus
Wie willst du jetzt sortieren? Zunächst nach den X-Werten und dann (falls mehrerer X-Werte gleich) und dann nach den Y-Werten?
Warum übergibst du an den Bubblesort die Anzahl der Element, dies ergibt sich doch aus dem Array?

Gruß
Bernd

PS: hier findest du eine Sortier-Funktion

------------------
Warum einfach, wenn es auch kompliziert geht.

[Diese Nachricht wurde von bgrittmann am 08. Apr. 2014 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

HoBLila
Mitglied
Dipl.-Ing. (BA) praktische Informatik - Senior Entwickler CAx


Sehen Sie sich das Profil von HoBLila an!   Senden Sie eine Private Message an HoBLila  Schreiben Sie einen Gästebucheintrag für HoBLila

Beiträge: 1118
Registriert: 29.05.2008

DELL PRECISION T3500
Intel(R) Xeon(R) CPU W3540 @ 2.93GHz
12285 MB RAM
NVIDIA Quadro FX 1800
Microsoft Windows 7 Enterprise Service Pack 1
CATIA V5 R19 SP09 HF69
VB6.5
CAA RADE CDC

erstellt am: 08. Apr. 2014 09:31    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für buecherm83 10 Unities + Antwort hilfreich

Ich habe herausgelesen dass er nach Namen sortieren möchte. :-D

Ohhh man...

Ich sollte von Lesen nicht auf Worte tippen. :-)

ich schätze Dein Fehler liegt hier:

Code:

For k = 1 To AnzahlSelection

da Du dort k überschreibst.

ich empfehle Dir auch eindeutigere Variablennamen, das ist sehr schwer zu lesen.

Edit: Ich nehme an, dass durch das Überschreiben von k Deine innere Schleife bereits immer am Ende landet und damit beendet ist.
Ich würde, selbst wenn es sich um denselben Inhalt handelt dafür eine neue Variable (mit eindeutligem Namen) einführen um übersichtlicherz u machen, was Du an der Stelel vor hast.

Nach meinem Wissen besteht BubbleSort auch nur aus 2 verschachtelten Schleifen.

Eventuell wäre es auch sehr hilfreich für Deine Koordinaten und Objekte in einer eigenen dafür vorgesehenen Klasse speicherst, das würde es sicher auch übersichtlicher machen und dann kannst Du dort auch Deine eigene Vergleichfunktion für zwei Objekte derselben Klasse implementieren.

------------------
Mit freundlichen Grüßen,
Henry Schneider
alias Lila

Es gibt einen ewigen Wettkampf zwischen der Natur und den Ingenieuren:
Die Ingenieure versuchen, immer idioten-sicherere Systeme zu bauen,
die Natur versucht, immer bessere Idioten zu bauen

Xing

[Diese Nachricht wurde von HoBLila am 08. Apr. 2014 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz