Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Punkt aus Auswahlsatz filtern

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
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Punkt aus Auswahlsatz filtern (1377 mal gelesen)
AB
Mitglied



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

Beiträge: 255
Registriert: 24.05.2002

Mechanical Desktop 6
AutoCAD 2002

erstellt am: 08. Okt. 2002 09:30    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 habe zwei Auswahlsätze erstellt, die ein paar Punkte enthalten.
(defun c:fgh ()
  (setq as_Punkte_gelb (ssget"X" '((8 . "PUNKTE_1")(0 . "POINT"))))
  (setq as_Punkte_rot (ssget"X" '((8 . "STARTFADEN")(0 . "POINT"))))
)

Nun möchte ich, auf den ersten Punkt der Liste as_Punkte_gelb zugreifen. Wie filtere ich den noch mal raus?

Viele Grüße
Andrea

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

UJJ
Mitglied
 


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

Beiträge: 190
Registriert: 05.03.2002

erstellt am: 08. Okt. 2002 09:34    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 AB 10 Unities + Antwort hilfreich

(car as_Punkte_gelb) gibt dir den ersten Punkt zurück, wenn was im Auswahlsatz ist, ansonsten nil.

gruss
Uwe

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

AB
Mitglied



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

Beiträge: 255
Registriert: 24.05.2002

Mechanical Desktop 6
AutoCAD 2002

erstellt am: 08. Okt. 2002 09:38    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

Nee, das komische ist ja, dass ich so folgende Fehlermeldung erhalte:
"Fehler Fehlerhafter Argumenttyp: consp <Selection set: d7a>"Dies macht alles rückgängig. OK? <J>

Was ist demnach falsch?

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

UJJ
Mitglied
 


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

Beiträge: 190
Registriert: 05.03.2002

erstellt am: 08. Okt. 2002 10:34    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 AB 10 Unities + Antwort hilfreich

Sorry, ich habelänger nichts mehr in LISP gemacht.

Auf Auswahlsätze kann man mit den Listenfunktionen nicht zugreifen, sondern man muss die SS* Funktionen verwenden.

Das erste Element aus deinem Auswahlsatz bekommt man mit
(ssname setq as_Punkte_gelb  0)

Gruss Uwe

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

AB
Mitglied



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

Beiträge: 255
Registriert: 24.05.2002

Mechanical Desktop 6
AutoCAD 2002

erstellt am: 08. Okt. 2002 11:11    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

Das funktioniert aber immer noch nicht.

Jetzt habe ich in einem Buch diesen Befehl gefunden:
(ssname (ssget as_Punkte_gelb) 0)

Aber auch das funtioniert nicht.


Hast Du vielleicht noch eine Idee?

Gruß
Andrea

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

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 08. Okt. 2002 11:24    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 AB 10 Unities + Antwort hilfreich

Hallo Andrea,

versuche doch mal in der vlisp-Hilfe nach 'vl-sort' zu suchen. Wenn mich nichts täuscht, ist dort das Sortieren von Punkten nach einer Koordinate sogar als Beispiel enthalten.

Wenn du nicht klar kommst, dann melde dich und ich suche mal in meinen Routinen.

Grüße Holger

------------------
Holger Brischke
CADlon

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

UJJ
Mitglied
 


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

Beiträge: 190
Registriert: 05.03.2002

erstellt am: 08. Okt. 2002 11:32    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 AB 10 Unities + Antwort hilfreich

Neuer Versuch (das kommt davon wenn mal faul ist, kopiert und nicht aufpasst):

(ssname as_Punkte_gelb 0)

Du bekommst dann den Objektnamen. Mit (entget(ssname as_punkte_gelb 0)) bekommst du dann eine Liste, in der das Objekt dann beschrieben ist.

gruss Uwe

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

AB
Mitglied



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

Beiträge: 255
Registriert: 24.05.2002

Mechanical Desktop 6
AutoCAD 2002

erstellt am: 08. Okt. 2002 13:34    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

Also die Idee mit dem vl-sort Befehl wäre schon super.
Allerdings weiß ich trotzdem nicht, wie ich an die x,y und z-Werte der einzelnen Punkte kommen. Der Befehl vl-sort benötigt ja die einzelnen Puntkepaare, aber wie erhalte ich sie in dem entsprechenden Format.

(defun c:sorti ()
(setq as_Punkte_gelb (ssget"X" '((8 . "PUNKTE_1")(0 . "POINT")))
      Punkte_gelb_Liste_1 (ssname as_Punkte_gelb 0)
; hiermit erhalte ich immer nur eine Koordinate und nicht die aller Punkte
      Punkte_gelb_Liste (entget as_Punkte_gelb)
      Punkte_gelb (cdr (assoc 10 Punkte_gelb_Liste))
)
(vl-sort '(as_Punkte_gelb)
            (function (lambda (e1 e2)
                        (< (car e1) (car e2)))))
)

Könnte ihr mir vielleicht noch mal weiterhelfen. Ich habe es nämlich auch schon mit dem BEfehl "_list" probiert, dass hat mich aber auch nicht weitergebracht.
(command "_list" (ssget"X" '((8 . "PUNKTE_1")(0 . "POINT")))"")

Viele Grüße
Andrea

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

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 08. Okt. 2002 13:46    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 AB 10 Unities + Antwort hilfreich

Hallo Andrea,

ff die Lösung:

Code:

(defun c:sorti ()
  (setq as_Punkte_gelb (ssget "X" '((8 . "PUNKTE_1")(0 . "POINT")))
Punkte_gelb_Liste_1
(mapcar '(lambda (EL)
    (cdr(assoc 10 EL))
    )
(mapcar 'entget (bau_elemli as_Punkte_gelb)))
)
  (vl-sort Punkte_gelb_Liste_1
  (function (lambda (e1 e2)
      (< (car e1) (car e2)))))
  )
(defun bau_elemli (asatz / n elemli)
  (setq n 0)
  (repeat (sslength asatz)
    (setq elemli(cons (ssname asatz n) elemli)
  n (1+ n))
    )
  elemli
  )

Grüße Holger

------------------
Holger Brischke
CADlon

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

AB
Mitglied



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

Beiträge: 255
Registriert: 24.05.2002

Mechanical Desktop 6
AutoCAD 2002

erstellt am: 08. Okt. 2002 14:11    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 Holger,

vielen Dank für die Hilfe.
Auf diese Lösung wäre ich im Leben nicht gekommen. Ganz schön frustrierend so etwas, aber da muss ich wohl durch.

Viele Grüße
Andrea

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

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 08. Okt. 2002 14:39    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 AB 10 Unities + Antwort hilfreich

Hallo Andrea,

ich denke du solltest dir ersteinmal im Klaren über die verschiedenen Lisp-Datentypen werden.
Ein Auswahlsatz ist nun mal keine Liste. Die Auswahlsätze lassen sich auch nur mit den Funktionen (ss...) bearbeiten. Das ist zwar umständlich, aber es funktioniert.
Was, so glaube ich, bei allen etwas länger dauert ist das Handling der Funktionen (mapcar...) (lambda...) (apply...)
Deshalb mal ganz kurz umgangssprachlich:
(mapcar funktion liste)
heißt: mache für jedes Elementen der liste, das was in der Funktion vorgegeben ist und gib das Ergibnis als Liste zurück
Bsp:
(mapcar '1+ '(1 2 3 4))->(2 3 4 5)
Das Ergebnis wird also immer genau so viele Elemente haben, wie zuvor übergeben wurden.

In Kombination mit dem (lambda...) ist die (mapcar...)Funktion unschlagbar. Das ermöglicht dem Programmierer eigene Funktionen zu definieren, die von (mapcar...) genutzt werden. Die Einschränkung auf in LISP vorgegebene Funktionen entfällt somit.

Das Gleiche Bsp wie oben nur als lambda-Konstrukt

(mapcar '(lambda (E)(1+ E))'(1 2 3 4))

(apply...) gibt nicht das Ergebnis aller Elemente an sondern Ein ergebnis der Funktion, angewendet auf die übergebene Liste.
(apply funktion liste)
heißt: mache auf alle Elemente der liste, das was in der Funktion vorgegeben ist und gib das Ergebnis als Wert zurück
Bsp:
(apply '+ '(1 2 3 4))->10
Es wird also Die Summe aller Listenelemente zurück gegeben
(apply 'strcat '("AN" "DR" "EA"))->ANDREA

Versuch Dir dessen klar zu werden, dann verstehst du auch die geposteten Code-Schnipsel besser.

Auf Axel's Tutorial möchte ich noch verweisen. Dort sind gerade diese Themen sehr ausführlich beschrieben.

Noch 'ne Frage: Mit welchem Editor arbeitest Du? Mit Vlisp kann man hervorragend debuggen, es werden die Datentypen angezeigt, was Dir sicher geholfen hätte, das Problem selbst zu erkennen.

Bei Fragen ...

------------------
Holger Brischke
CADlon

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

AB
Mitglied



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

Beiträge: 255
Registriert: 24.05.2002

Mechanical Desktop 6
AutoCAD 2002

erstellt am: 11. Okt. 2002 10:09    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 Holger,

ich muss noch mal etwas zu dem Code nachfragen:
(vl-sort Punkte_gelb_Liste_1
(function (lambda (e1 e2)
(< (car e1) (car e2)))))
)
=> Sortiert nach x-Werten

JETZT IST ES ABER SO, DASS TEILWEISE DER X-WERT GLEICH IST: FÜR DEN FALL MUSS DIE BEDINGUNG EINGEBAUT WERDEN, DASS DANN NOCH DER Y-WERT VERGLICHEN WERDEN MUSS. ICH HABE JETZT FOLGENDE BEDINGUNG ZUSÄTZLICH EINGEFÜGT, DIE ABER MAL WIEDER NICHT FUNKIONIERT.

(vl-sort Punkte_gelb_Liste_1
(function (lambda (e1 e2)
(if (= (car e1) (car e2))
(< (cadr e1) (cadr e2))
(< (car e1) (car e2))
)
))

Verwende ich die if-Syntax falsch?

Gruß
Andrea

[Diese Nachricht wurde von AB am 11. Oktober 2002 editiert.]

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

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 11. Okt. 2002 20:08    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 AB 10 Unities + Antwort hilfreich

Hallo Andrea,

was funktioniert denn nicht?
Hast du schon einmal das Programm im Einzelschritt ablaufen lassen und dabei das Verhalten beobachtet?

Ich vermute, dass der Verglich in dem (If  (=...) nie erfüllt wird, weshalb das Programm nie in die Zeile (< (cadr e1) (cadr e2)) reinläuft.
Ersetze den Vergleich durch ein
(equal (car e1)(car e2) 0.00000005)

Begründung: Zwei Zahlen, die augenscheinlich gleich sind, können jedoch in der 16. Nachkommastelle abweichen. Das sieht man nicht, aber die Zahlen sind nicht gleich! Die (equal A B C) gibt im Parameter C dem Programmierer die Möglichkeit beim Vergleich zu sagen, dass in der soundsovielten Nachkommastelle eine gewisse Abweichung toleriert wird.

Probier es aus, und wenn's nicht funkt meldest du dich bestimmt wieder. ;-)

Grüße Holger

------------------
Holger Brischke
CADlon - Lisp over night

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

AB
Mitglied



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

Beiträge: 255
Registriert: 24.05.2002

Mechanical Desktop 6
AutoCAD 2002

erstellt am: 14. Okt. 2002 09:19    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

Guten Morgen Holger,

jetzt funktioniert der Code, wo ich alles neu gestartet habe.
Es lag wohl daran, dass vorher auf noch "alte", irgendwann im Laufe des Tages geladene Skripte zugegriffen wurde. Ich muss wohl öfter mal eine neue Zeichnung erstellen. Es wird viel zu viel mit protokolliert.

Viele Grüße
Andrea

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