| |
| 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: Schleifen kontrollieren (1747 mal gelesen)
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 01. Feb. 2012 09:05 <-- editieren / zitieren --> Unities abgeben:
Mir ist ein Fehler unterlaufen und ich weiss nicht wie er zu finden ist. Meine Frage ist jetzt kann man die cond-schleife kontrollieren. Sie soll ausgeführt werden, wenn die Bedingung aw = "TB" ist Code:
(setq aw (getstring "\nSelect code : ") i 0 ss (ssget '((0 . "TEXT"))) ssl (sslength ss) ) (cond ((= aw "TB") (repeat ssl (setq ent (entget (ssname ss i))) (if (= (cdr (assoc 1 ent)) "TB") (progn (command "insert" "brunn" (cdr (assoc 10 ent)) 1 1 0 "" "?" "") ) ) (setq i (1+ i)) )) )
------------------ Gruss Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 01. Feb. 2012 09:26 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
setze sinnvolle Haltepunkte im Editor und überwache die Variablen vllt. liegt es an der Gorß/Kleinschreibung und strcase könnte Abhilfe schaffen ------------------ Mfg Heiko Elefantenjagd in Afrika "... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..." -Lots of irritating superfluous parentheses!- Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 01. Feb. 2012 09:55 <-- editieren / zitieren --> Unities abgeben:
Danke, der Trick mit strcase funktionierte einwandfrei - die cond-schleife funktioniert also. Ich habe eine Kodeliste, die entsprechend eines Textes in diesen Fall "tb" einen Block "brunn" setzt. In Autolisp gibt es doch bestimmt eine Funktion, die sich aus einer Liste entsprechend zu dem Text den Block raussucht. Die Liste könnte folgendermassen aussehen (("TB" "BRUNN" "LAYER1") ("SS" "SCHACHT" "LAYER2") ("BL" "MAST" "LAYER3")) Ich bräuchte jetzt also ein Werkzeug, das sagt wenn die Eingabe BL ist, suche aus der Liste den entsprechenden Blocknahmen (also "MAST") und setze ihn auf den Texteinfügepunkt in den "LAYER3". Hat jemand eine Idee, welche Funktionen da infrage kämen?
------------------ Gruss Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 01. Feb. 2012 10:04 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
heute noch nicht munter? Code: (setq cplist '(("TB" "BRUNN" "LAYER1") ("SS" "SCHACHT" "LAYER2") ("BL" "MAST" "LAYER3"))) (setq relist (assoc "BL" cplist))
und dann mit car, cdr... weiter Edit: oder du wertest den Rückgabewert weiter aus, falls dein gesuchter Wert öfters vorkommt, auf die schnell und ungetestet Code: (setq cplist '(("TB" "BRUNN" "LAYER1") ("SS" "SCHACHT" "LAYER2") ("BL" "MAST" "LAYER3") ("BL" "MAST1" "LAYER4") ) ) (setq re '()) (mapcar '(lambda (x) (and (= "BL" (car x)) (setq re (cons x re)) ) ) cplist )
------------------ Mfg Heiko Elefantenjagd in Afrika "... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..." -Lots of irritating superfluous parentheses!- [Diese Nachricht wurde von Dorfy am 01. Feb. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 01. Feb. 2012 10:30 <-- editieren / zitieren --> Unities abgeben:
Nja Ich meinte, gibt es auch eine andere Möglichkeit als wie mit cond zu sagen, wenn Eingabe so dann setze den entsprechenden Block auf den entsprechenden Text (cond ((= (strcase antwort) "TB") (if (= (cdr (assoc 1 entity)) "TB") (command "insert" "brunn" ...) oder kann man das sinnvoll kürzen? ------------------
Moment jetzt haben wir doppelt gepostet, dem muss ich erstmal nachgehen Gruss Dirk [Diese Nachricht wurde von cadplayer am 01. Feb. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 01. Feb. 2012 10:51 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 01. Feb. 2012 13:03 <-- editieren / zitieren --> Unities abgeben:
Auf mapcars Seite hab ich mich mal mehr mit lambda und mapcar auseinandergestzt. Bezogen auf mein Beispiel erscheint mir deine Konstruktion Dorfy fremd 1) Was gibt lambda an mapcar 2) Was erreicht die var re, in der vermutlich eine Liste stehen muss (setq re '()) (mapcar '(lambda (x) (and (= "BL" (car x)) (setq re (cons x re)) ) ) cplist ) Kann mir das jemand ein bissel aufdruseln ------------------ Gruss Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 01. Feb. 2012 13:11 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 01. Feb. 2012 13:24 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
zu1) siehe CADmium zu2) dein Rückgabewert, den du weiter verarbeiten kannst (die "Unterlisten" welche die Bedingung erfüllen) geht sicher schöner Code: (vl-remove-if-not '(lambda (x) (= (car x) "BL"))
oder gleich
Code: (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) "BL")) cplist))
------------------ Mfg Heiko Elefantenjagd in Afrika "... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..." -Lots of irritating superfluous parentheses!- Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 01. Feb. 2012 14:35 <-- editieren / zitieren --> Unities abgeben:
@cadmium: ja dein Beispiel ist mir völlig einleuchtend was Dorfy meint ist mir noch unklar. in cplist stehen meine Kodes von der Kodeliste (mapcar ; führe aus 'cdr (vl-remove-if-not ; ??? '(lambda (x) (= (car x) "BL")) ; entspricht das einer if-schleife cplist)); in Verbindung mit mapcar eine Liste Die Entwicklungshilfe half mir nicht recht weiter... ------------------ Gruss Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 01. Feb. 2012 14:48 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
X liefert dir die "subliste" dein Element x1 = ("TB" "BRUNN" "LAYER1") x2 = ("SS" "SCHACHT" "LAYER2") x3 = ("BL" "MAST" "LAYER3") (mapcar ; führe aus 'cdr ; liefert die Subliste ab zweitem Listenelement zbsp ("MAST" "LAYER3") (vl-remove-if-not ; ??? --> schmeißt alles raus, was die Bedingung nicht erfüllt '(lambda (x) (= (car x) "BL")) ; entspricht das einer if-schleife so ähnlich - ja cplist)); in Verbindung mit mapcar eine Liste
(setq re '()) ;leere liste (mapcar '(lambda (x) (and (= "BL" (car x))(setq re (cons x re));wenn Bedingung für das Element erfüllt, dann Elemet zu re hinzufügen ) ) cplist )
hast du die Schleifen mal probiert? dir die Ergebnisse angeguckt? man kann auch Haltepunkte in dieser kleinen Schleife setzen und alles überwachen... passt dir das Ergebniss nicht? oder willst du es nur verstehen? ------------------ Mfg Heiko Elefantenjagd in Afrika "... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..." -Lots of irritating superfluous parentheses!- Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 01. Feb. 2012 14:56 <-- editieren / zitieren --> Unities abgeben:
Ja super danke Dorfy - toll für deine Mühe - sicher ich möchte gern mehr erfahren, aber nix infrage stellen. Hab ja selbst wenig Ahnung davon. Ich denke jetzt weiterzukommen, evtl kommen noch fragen. Ich hoffe es nervt nicht alzu sehr. ------------------ Gruss Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 01. Feb. 2012 15:10 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Code: (setq erg (vl-remove-if-not '(lambda (x) (= (car x) "BL"))cplist)) (mapcar 'cdr erg )
vllt ist es so verständlicher mit member, vl-member..., foreach, while, car, cdr, cons und ... kannst du deine Listen auch beackern Listenfunktionen... alles eine Frage des Geschmacks und der Stilblüten
bau dir eine kleine Bibo auf und mach es universal (vl-remove-if-not '(lambda (x) (= (car x) key))lst) pack es in ein (defun ... ein, kommt immer wieder ------------------ Mfg Heiko Elefantenjagd in Afrika "... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..." -Lots of irritating superfluous parentheses!- Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 01. Feb. 2012 15:13 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
AUF WUNSCH von xxxxxx habe ich da ein REVERSE hinzugefügt.LACH, ich hatte eine Antwort getippelt, wurde durch Arbeit abgelenkt und nun poste ich es zum trotz (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) "BL")) cplist) ) in deinem Fall das gleiche Ergebnis wie: (reverse (foreach x cplist (if (= (car x) "BL") (setq Ergebnisliste (cons (cdr x) Ergebnisliste)) ) ) ) ------------------ CAD.de System-Angaben - CAD on demand - User:FAQ(Acad) [Diese Nachricht wurde von cadffm am 01. Feb. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archtools Mitglied
Beiträge: 965 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 02. Feb. 2012 21:41 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Zitat: Original erstellt von cadplayer: Ja super danke Dorfy - toll für deine Mühe - sicher ich möchte gern mehr erfahren, aber nix infrage stellen. Hab ja selbst wenig Ahnung davon. Ich denke jetzt weiterzukommen, evtl kommen noch fragen. Ich hoffe es nervt nicht alzu sehr.
Dorfy hat da eine Technik verwendet, die eine gewisse Bekanntheit mit Lisp voraussetzt. Statt einer IF oder COND Konstruktion verwendet er etwas, worauf letztlich die IF und COND Funktionen beruhen: das AND. AND gibt genau dann T zurück, wenn alle Übergabeparameter an AND T sind. Lisp ist natürlich so schlau, nicht mehr weiter auf T zu prüfen, wenn schon einer der Parameter zu NIL evaluiert wurde, denn dann ergibt das AND auf jeden Fall NIL. Das bedeutet, dass man mit einer simplen AND Konstruktion eine IF Konstruktion umgehen kann: (AND (progn1 irgendwas, was zu NIL oder nicht-NIL evaluiert) (progn2 irgendwas, was nur ausgeführt wird, wenn (progn1 ..) nicht NIL war) ) Das lässt sich dann natürlich beliebig verfeinern um eigene Varianten von IF bzw COND zu programmieren. Mit (apply AND <liste> ) oder ähnlichen Funktionen kann man dann richtig zaubern ... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 03. Feb. 2012 08:22 <-- editieren / zitieren --> Unities abgeben:
Prima danke für die Erläterungen - mir ist es jetzt um einiges klarer wie foreach, lambda, mapcar und and zur Listenbearbeitung angewendet werden kann. Ich habe nun eine cplist, wo meine Codes entprechend Kodename, Blockname und Layername zu finden sind "AV" "AV" "LAYER1" Nun habe ich in der Zeichnung Texte die ich selektiere und denen ich entsprechend ihrer Bezeichnung einen Block zuweisen möchte Ich weiss zum einen nicht, wieviel Texte AV, SS oder BL in der Zeichnung, mapcar sagt lediglich ah da ist ein Text AV Für mich wäre interessant wieviel Texte AV gibt es, um dann den Block namens AV draufzusetzen. Vielleicht schaut ihr nochmal auf den Eingangscode, der mit cond ja schon funktioniert Nur finde ich es umständlich alle Bedingungen mit cond abzufragen, um dann mit command den Block zu setzen. Der code sollte so intelligent sein, das wenn er den Text findet, sich den Block dazu sucht aus der Kodeliste und ihn anschliessend setzt. ------------------ Gruss Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 03. Feb. 2012 09:02 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 03. Feb. 2012 10:53 <-- editieren / zitieren --> Unities abgeben:
Ja hat ´ne Weile gedauert bis der Funke gefallen ist - verflixt&zugenäht Code:
; Kodeliste (setq cplist '(("TB" "TB" "LAYER1") ("T" "LÖVTRÄD" "LAYER2") ("BS" "BEL-STOLPE" "LAYER3") ("AV" "AV" "LAYER4") ) ); Hauptprogramm (defun demo ( / ) ;(/ i ss ssl ent elist) (setq i 0 ss (ssget '((0 . "TEXT"))) ssl (sslength ss) ) (repeat ssl (setq ent (entget (ssname ss i))) (setq erg (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) (cdr (assoc 1 ent)))) cplist)) ) (command "insert" (car (assoc (cdr (assoc 1 ent)) cplist)) (cdr (assoc 10 ent)) 1 1 0) (setq i (1+ i)) ) ) ;;; (reverse ;;; (foreach x cplist ;;; (if (= (car x) "AV") ;;; (setq elist (cons (cdr x) elist) ;;; ) ;;; ) ;;; ) ;;; ) ;;;(setq re '()) ;;;(mapcar '(lambda (x) ;;; (and ;;; (= "BL" (car x)) ;;; (setq re (cons x re)) ;;; ) ;;; ) ;;; cplist ;;; ) ;;;(mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) "BL")) cplist))
;;;(setq elist ;;; (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) "AV")) cplist)) ;;; )
------------------ Gruss Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 03. Feb. 2012 11:12 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Zitat: Original erstellt von cadplayer: Ja hat ´ne Weile gedauert bis der Funke gefallen ist - verflixt&zugenähtCode:
; Kodeliste (setq cplist '(("TB" "TB" "LAYER1") ("T" "LÖVTRÄD" "LAYER2") ("BS" "BEL-STOLPE" "LAYER3") ("AV" "AV" "LAYER4") ) ); Hauptprogramm (defun demo ( / ) ;(/ i ss ssl ent elist) (setq i 0 ss (ssget '((0 . "TEXT"))) ssl (sslength ss) ) (repeat ssl (setq ent (entget (ssname ss i))) (setq erg (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) (cdr (assoc 1 ent)))) cplist)) ) (command "insert" (car (assoc (cdr (assoc 1 ent)) cplist)) (cdr (assoc 10 ent)) 1 1 0) (setq i (1+ i)) ) ) ....
Du ermittelst erg und verwendest es nicht?! (command ... (car erg) (cdr erg)... Hinter command holst du dir die info mit assoc nochmal - wieso? Liegen doch in erg vor! Was passiert wenn dein Text nicht in der cplist vorkommt? Verarbeitet der Command-Aufruf das?
------------------ Mfg Heiko Elefantenjagd in Afrika "... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..." -Lots of irritating superfluous parentheses!- Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 03. Feb. 2012 12:30 <-- editieren / zitieren --> Unities abgeben:
War verplüfft, dass ich erg auch umgehen konnte. Für den Fall, dass es einen Text nicht in der Kodeliste gibt soll sicher eine Fehlermeldung kommen. Das krieg ich so auf die schnelle nicht so besonders hin. Muss mich noch mehr mit if and or beschäftigen (progn (cond ((/= erg nil) (command "insert" (caar erg) (cdr (assoc 10 ent)) 1 1 0) ) ((= erg nil) (princ "\nText not found in codelist") ) ) ) ------------------ Gruss Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 03. Feb. 2012 12:40 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Code: (defun demo ( / ) ;(/ ss i ss VORGABE ent) (if (and (setq ss (ssget '((0 . "TEXT")))) cplist ) (progn (setq i 0) (repeat (sslength ss) (setq ent (entget (ssname ss i))) (if (setq VORGABE (assoc (cdr(assoc 1 ent)) cplist)) (command "_.-INSERT" (car VORGABE) (cdr(assoc 10 ent)) 1 1 0) (alert(strcat "'" (cdr(assoc 1 ent)) "' kein gültiger VorgabeBlock")) ) (setq i (1+ i)) ) ) (alert "keine Auswahl getroffen") ) )
da ist noch immer nicht der Layer verwendet, auch wird sich nicht um die Möglichkeit gekümmert das der Block (warum auch immer) Attribute haben könnte usw.------------------ CAD.de System-Angaben - CAD on demand - User:FAQ(Acad) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 03. Feb. 2012 14:00 <-- editieren / zitieren --> Unities abgeben:
Generell haben die Blöcke keine Attribute. Ich kann dir nicht ganz folgen was du mit var VORGABE erreichen willst. Der code fischt doch schon die Blocknamen entsprechend der Kodeliste raus. ------------------ Gruss Dirk Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 03. Feb. 2012 14:07 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Zitat: Original erstellt von cadplayer: Das krieg ich so auf die schnelle nicht so besonders hin. Muss mich noch mehr mit if and or beschäftigen
darauf hätte ich auch folgendes posten können: Code:
"(progn (cond ((/= erg nil) (command "insert" (caar erg) (cdr (assoc 10 ent)) 1 1 0) ) ((= erg nil) (princ "\nText not found in codelist") ) ) ) " (progn Das Progn ist wohl unnötig..? (/= erg nil) erg ist immer nicht-nil wenn es "irgendwas" ist (= erg nil) erg ist immer nil wenn es nicht "irgendwas" also wäre es so "schöner" (cond (erg (command "insert" (caar erg) (cdr (assoc 10 ent)) 1 1 0)) (T (princ "\nText not found in codelist")) ) aber besser wäre es sicher mit einem IF
(if erg (command "insert" (caar erg) (cdr (assoc 10 ent)) 1 1 0) (princ "\nText not found in codelist") )
Habe ich aber nicht gemacht, ich habe es dir in einen "fertigen" Code eingebaut der zudem noch eine paar andere Möglichkeiten zeigt.
------------------ CAD.de System-Angaben - CAD on demand - User:FAQ(Acad) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 03. Feb. 2012 14:26 <-- editieren / zitieren --> Unities abgeben:
Ja geb mir noch ein wenig Zeit, dann kann ich das noch von dir einbauen - Super spitzenklasse, danke Dir und Euch damit schönes WE (hoffentl. ohne Schneechaos) (defun c:demo ();(/ i ss ssl ent erg) (setq ss (ssget '((0 . "TEXT"))) i 0) (progn (repeat (sslength ss) (setq ent (entget (ssname ss i))) (setq ol (getvar "clayer")) (cond ((setq erg (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) (cdr (assoc 1 ent)))) cplist)) ) (if (not (tblsearch "layer" (cadar erg)) ) (command "layer" "M" (cadar erg) "")) (setvar "clayer" (cadar erg)) (command "insert" (caar erg) (cdr (assoc 10 ent)) 1 1 0) ) ((setq erg (= T (princ "\nText not found in codelist\n") )) ) ) (setq i (1+ i)) ) (setvar "clayer" ol) ) )
Sorry hab den Fehler gefunden - so gehts vielleicht [Diese Nachricht wurde von cadplayer am 06. Feb. 2012 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |