| |
| 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: Koordinaten sortieren. (1640 mal gelesen)
|
FiRePhoeniX Mitglied Bauzeichner Fachgebiet Tief−, Straßen− und Landschaftsbau
Beiträge: 127 Registriert: 22.04.2007 AutoCad 2007
|
erstellt am: 12. Feb. 2009 14:20 <-- editieren / zitieren --> Unities abgeben:
Hallo Forum, wünsche euch erst mal guten Tag. Wollte fragen ob ihr wir mal wieder aus der Patsche helfen könnt. Lange rede kurzer sinn. Kommen wir zu Problem. Ich habe eine Koordinaten Liste mit X,Y,X – werten. Diese hab ich in eine Variable als Liste geschrieben. Wollte euch jetzt fragen ob es möglich ist die Koordinaten aufsteiget oder absteigend zu sortieren. Es soll mit dem befehl vl.sort gehen. Ich kenne mich aber nicht mit den vl- befehlen aus. Kann wir da jemand vielleicht helfen ? Mit freundlichen Grüßen Firephoenix
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 12. Feb. 2009 14:26 <-- editieren / zitieren --> Unities abgeben: Nur für FiRePhoeniX
Was ist für dich aufsteigend ?? Entfernung zum Koordinatenursprung ( oder einen andern Punkt ) ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1763 Registriert: 11.10.2004 Window 11 ACAD 2021 CIVIL 2021 BricsCAD ab V14 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz 32.0GB RAM NVIDIA GeForce MX450<P>
|
erstellt am: 12. Feb. 2009 14:46 <-- editieren / zitieren --> Unities abgeben: Nur für FiRePhoeniX
Hallo Firephoenix, ich habe anhand des Gedankes von Cadmium mal 3 Varianten geschrieben (sind aber ungetestet) Code:
(defun c:koord:sort:ursprung ( / liste) (setq liste '((123.123 456.456 12.12) (345.345 333.333 34.34))) (vl-sort liste '(lambda(e1 e2) (< (distance '(0.0 0.0)e1) (distance '(0.0 0.0)e2))))) (defun c:koord:sort:x ( / liste) (setq liste '((123.123 456.456 12.12) (345.345 333.333 34.34))) (vl-sort liste '(lambda(e1 e2) (< (car e1)) (car e2)))) (defun c:koord:sort:y ( / liste) (setq liste '((123.123 456.456 12.12) (345.345 333.333 34.34))) (vl-sort liste '(lambda(e1 e2) (< (cadr e1)) (cadr e2))))
------------------ viele Grüße Jörn http://www.bosse-engineering.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 12. Feb. 2009 14:50 <-- editieren / zitieren --> Unities abgeben: Nur für FiRePhoeniX
vl-sort schmeißt doppelte Einträge raus , besser ist vl-sort-i (hängt aber vom konkreten Einsatzfall ab) eine Funktion, die die Koordinaten in Abhängigkeit von der Entfernung zur "minimalsten" Ecke des umschließenden Quaders sortiert wäre z.B: (setq LISTE '((0 1 2) (2 5 4) (7 12 0) (-23 12 9))) (setq MINX (car(vl-sort (mapcar 'car LISTE) '< ))) (setq MINY (car(vl-sort (mapcar 'cadr LISTE) '< ))) (setq MINZ (car(vl-sort (mapcar 'caddr LISTE) '< ))) (setq LISTE1(mapcar '(lambda(X)(cons (distance X (list MINX MINY MINZ))X))LISTE)) (mapcar '(lambda(Y) (cdr(nth Y LISTE1)) ) (vl-sort-i LISTE1 '(lambda(X1 X2) (< (car X1) (car X2)))) ) Denke , der Codeschnipsel bringt dich auf die Spur
------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
FiRePhoeniX Mitglied Bauzeichner Fachgebiet Tief−, Straßen− und Landschaftsbau
Beiträge: 127 Registriert: 22.04.2007 AutoCad 2007
|
erstellt am: 12. Feb. 2009 14:54 <-- editieren / zitieren --> Unities abgeben:
Hallo CADmium, hab es mal wieder vergessen mein Problem richtig zu beschreiben. Was ich mit aufsteiget meine ist das die kleinste Koordinate nach oben gesetzt wird. Dann folgt die nächst größte nach wider die nächste größte. Und so weiter. Ich vermute mal das geht nicht so einfach wie ich mir das vorgestellt habe. Wenn das nicht möglich ist muss ich das wohl mit schleifen bewerkstelligen. Ich hoffe ich kann an dieser stelle direkt eine andere Frage stellen. Hab eine variable mit der string „3402000.00“. Will diese in eine Realzahl umwandeln. Dafür nehme ich den Befehl atof. Am ende komm aber ein komischer wert raus „3.02e+006“. Und das soll eine real zahl sein. Weiß jemand rat? FirephoeniX
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 12. Feb. 2009 15:00 <-- editieren / zitieren --> Unities abgeben: Nur für FiRePhoeniX
Was ist für dich die kleinste Koordnate, die mit dem kleinsten x-Wert, die mit dem kleinsten Y-Wert, die mit dem kleinsten Z-Wert, die mit dem kleinsten Abstand zu 0,0,0 .... ???? und 3.02e+006 ist eine andere Schreibweise für 3.02* 10^6 = 3020000.0 und das ist ne Realzahl ... kannste ja testen mit (type (atof "3402000.00"))
------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1763 Registriert: 11.10.2004 Window 11 ACAD 2021 CIVIL 2021 BricsCAD ab V14 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz 32.0GB RAM NVIDIA GeForce MX450<P>
|
erstellt am: 12. Feb. 2009 15:00 <-- editieren / zitieren --> Unities abgeben: Nur für FiRePhoeniX
|
FiRePhoeniX Mitglied Bauzeichner Fachgebiet Tief−, Straßen− und Landschaftsbau
Beiträge: 127 Registriert: 22.04.2007 AutoCad 2007
|
erstellt am: 12. Feb. 2009 15:06 <-- editieren / zitieren --> Unities abgeben:
Danke erst mal für die schnelle Antwort CADmium. Nach kurzen überlegen brauche ich eigentlich nur die X und Y achse. Also der kleinste punkte ist der am nächsten zu dem null punkt ist. Ich glaube deine Code müsste reichen teste ich gleich mal. Danke noch mal an alle. Firephoenix
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1763 Registriert: 11.10.2004 Window 11 ACAD 2021 CIVIL 2021 BricsCAD ab V14 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz 32.0GB RAM NVIDIA GeForce MX450<P>
|
erstellt am: 12. Feb. 2009 15:07 <-- editieren / zitieren --> Unities abgeben: Nur für FiRePhoeniX
@CADmium nochmal Zitat: vl-sort schmeißt doppelte Einträge raus , besser ist vl-sort-i (hängt aber vom konkreten Einsatzfall ab)
Ist das nur der Fall, wenn ich einzelne Element in der Liste habe??? bei folgender Liste wird (zum Glück) nichts rausgeschmissen: Befehl: (setq liste '((1000 2000)(1000 2000))) ((1000 2000) (1000 2000)) Befehl: (vl-sort liste '(lambda(e1 e2)(< (car e1)(car e2)))) ((1000 2000) (1000 2000)) Da schon:
Befehl: (setq liste '(1000 1000)) (1000 1000) Befehl: (vl-sort liste '(lambda(e1 e2)(< e1 e2))) (1000) ------------------ viele Grüße Jörn http://www.bosse-engineering.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
FiRePhoeniX Mitglied Bauzeichner Fachgebiet Tief−, Straßen− und Landschaftsbau
Beiträge: 127 Registriert: 22.04.2007 AutoCad 2007
|
erstellt am: 13. Feb. 2009 12:34 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich hoffe ich kann euch noch mal was Fragen. Hab den befehl von CADmium ausprobiert und der geht auch teils. Habe es mal mit meiner liste Probiert. Code: (setq MINX (car(vl-sort (mapcar 'car GSListe) '< ))) (setq MINY (car(vl-sort (mapcar 'cadr GSListe) '< ))) (setq LISTESORT(mapcar '(lambda(X)(cons (distance X (list MINX MINY))X))GSListe)) (mapcar '(lambda(Y) (cdr(nth Y LISTESORT)) ) (vl-sort-i LISTESORT '(lambda(X1 X2) (< (car X1) (car X2)))) ) Liste: ((34024.0 56684.0) (34024.0 56683.0) (34024.0 56682.0) (34024.0 56681.0) (34024.0 56680.0) (34023.0 56700.0) (34023.0 56684.0) (34023.0 56683.0) (34023.0 56682.0) (34023.0 56681.0) (34023.0 56680.0) (34022.0 56684.0) (34022.0 56683.0) (34022.0 56682.0) (34022.0 56681.0) (34022.0 56680.0) (34021.0 56684.0) (34021.0 56683.0) (34021.0 56682.0) (34021.0 56681.0) (34021.0 56680.0) (34020.0 56684.0) (34020.0 56683.0) (34020.0 56682.0) (34020.0 56681.0) (34020.0 56680.0) Ergebnis: ((5.65685 34024.0 56684.0) (5.0 34024.0 56683.0) (4.47214 34024.0 56682.0) (4.12311 34024.0 56681.0) (4.0 34024.0 56680.0) (20.2237 34023.0 56700.0) (5.0 34023.0 56684.0) (4.24264 34023.0 56683.0) (3.60555 34023.0 56682.0) (3.16228 34023.0 56681.0) (3.0 34023.0 56680.0) (4.47214 34022.0 56684.0) (3.60555 34022.0 56683.0) (2.82843 34022.0 56682.0) (2.23607 34022.0 56681.0) (2.0 34022.0 56680.0) (4.12311 34021.0 56684.0) (3.16228 34021.0 56683.0) (2.23607 34021.0 56682.0) (1.41421 34021.0 56681.0) (1.0 34021.0 56680.0) (4.0 34020.0 56684.0) (3.0 34020.0 56683.0) (2.0 34020.0 56682.0) (1.0 34020.0 56681.0) (0.0 34020.0 56680.0)) Hab den Code ein bisschen geändert. Weil ich nicht die Z- achse nicht brauche. Hab ich einfach vergessen was raus zu nehmen? Kann mir vielleicht jemand Helfen.
Mit freundlichen Grüßen Firephoenix
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung
Beiträge: 1763 Registriert: 11.10.2004 Window 11 ACAD 2021 CIVIL 2021 BricsCAD ab V14 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz 32.0GB RAM NVIDIA GeForce MX450<P>
|
erstellt am: 13. Feb. 2009 12:44 <-- editieren / zitieren --> Unities abgeben: Nur für FiRePhoeniX
Hallo Firephoenix, auf den ersten Blick ist alles ok: Code:
(defun sort ( / GSLISTE LISTESORT MINX MINY X Y) (setq GSListe '((34024.0 56684.0) (34024.0 56683.0) (34024.0 56682.0) (34024.0 56681.0) (34024.0 56680.0) (34023.0 56700.0) (34023.0 56684.0) (34023.0 56683.0) (34023.0 56682.0) (34023.0 56681.0) (34023.0 56680.0) (34022.0 56684.0) (34022.0 56683.0) (34022.0 56682.0) (34022.0 56681.0) (34022.0 56680.0) (34021.0 56684.0) (34021.0 56683.0) (34021.0 56682.0) (34021.0 56681.0) (34021.0 56680.0) (34020.0 56684.0) (34020.0 56683.0) (34020.0 56682.0) (34020.0 56681.0) (34020.0 56680.0)))(setq MINX (car(vl-sort (mapcar 'car GSListe) '< ))) (setq MINY (car(vl-sort (mapcar 'cadr GSListe) '< ))) (setq LISTESORT(mapcar '(lambda(X)(cons (distance X (list MINX MINY))X))GSListe)) (mapcar '(lambda(Y) (cdr(nth Y LISTESORT)) ) (vl-sort-i LISTESORT '(lambda(X1 X2) (< (car X1) (car X2)))) ))
;;;ergebnis '( (34020.0 56680.0) (34020.0 56681.0) (34021.0 56680.0) (34021.0 56681.0) (34020.0 56682.0) (34022.0 56680.0) (34021.0 56682.0) (34022.0 56681.0) (34022.0 56682.0) (34020.0 56683.0) (34023.0 56680.0) (34021.0 56683.0) (34023.0 56681.0) (34022.0 56683.0) (34023.0 56682.0) (34020.0 56684.0) (34024.0 56680.0) (34021.0 56684.0) (34024.0 56681.0) (34023.0 56683.0) (34022.0 56684.0) (34024.0 56682.0) (34023.0 56684.0) (34024.0 56683.0) (34024.0 56684.0) (34023.0 56700.0))------------------ viele Grüße Jörn http://www.bosse-engineering.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 13. Feb. 2009 12:46 <-- editieren / zitieren --> Unities abgeben: Nur für FiRePhoeniX
(setq MINX (car(vl-sort (mapcar 'car GSListe) '< ))) (setq MINY (car(vl-sort (mapcar 'cadr GSListe) '< ))) (setq LISTESORT(mapcar '(lambda(X)(cons (distance X (list MINX MINY))X))GSListe)) (setq LISTESORT(mapcar '(lambda(Y) (cdr(nth Y LISTESORT)) ) (vl-sort-i LISTESORT '(lambda(X1 X2) (< (car X1) (car X2)))) ) ) ) du hast vermutlich LISTESORT abgefragt, aber das Ergebnis des letzten Mapcarausdrucks nicht zugewiesen ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
FiRePhoeniX Mitglied Bauzeichner Fachgebiet Tief−, Straßen− und Landschaftsbau
Beiträge: 127 Registriert: 22.04.2007 AutoCad 2007
|
erstellt am: 13. Feb. 2009 13:26 <-- editieren / zitieren --> Unities abgeben:
Super ihr seit die besten. CADmium du hattest recht mit deiner Annahme. Das der Mapcarausdrucks nicht zugewiesen. Danke an alle noch mal. Kann ich vielleicht an dieser stelle noch eine andere Frage stellen. Ist auch die letzte für heute. Wollte Fragen ob ich über lisp nach einen Block suchen. Der Hintergrund ist der, wenn ich den Befehl ( Command –einfüge ) anwende. Und der Block den ich einfügen will nicht im Support Verzeichnis ist. Bricht Lisp mir den Befehl ab. Kann ich es vielleicht so geigseln das vor den Command Befehl ein Prüfung durchführt wird. Ob der Block verfügbar ist oder nicht ? Mit freundlichen Grüßen Firephoenix
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 13. Feb. 2009 13:32 <-- editieren / zitieren --> Unities abgeben: Nur für FiRePhoeniX
als Anstoß: (if(or(tblobjname "BLOCK" "BLOCKNAME") (findfile (strcat "BLOCKNAME" ".dwg")) ) (command "_insert" ..) (prompt "\nBLOCK nicht gefunden\n") )
------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
FiRePhoeniX Mitglied Bauzeichner Fachgebiet Tief−, Straßen− und Landschaftsbau
Beiträge: 127 Registriert: 22.04.2007 AutoCad 2007
|
erstellt am: 13. Feb. 2009 13:37 <-- editieren / zitieren --> Unities abgeben:
|