| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | |  | Exklusives EDU-Programm für RTX PRO Blackwell, eine Pressemitteilung
|
Autor
|
Thema: Warum funktioniert repeat nicht ? (474 mal gelesen)
|
Juergen55 Mitglied Elektrotechniker
 
 Beiträge: 282 Registriert: 08.03.2001
|
erstellt am: 09. Apr. 2004 19:23 <-- editieren / zitieren --> Unities abgeben:         
Hallo, Ich bin gerade am testen von einem Lisp und hab das Problem das folgendes nicht funktioniert: (setq att1 (cdr (assoc 1 (entget (repeat 2 (entnext bl1)))))) Es soll eigentlich das Zweite Attribut der Variablen att1 zugewiesen werden, kann es sein das das entnext auf diese Weise nicht widerholt werden kann ?
Gruß, Jürgen
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Juergen55 Mitglied Elektrotechniker
 
 Beiträge: 282 Registriert: 08.03.2001 Microstation V8i, TriCAD, AutoCAD2014, EPlan P8 2.2, Core I5, 16GB Arbeitsspeicher
|
erstellt am: 09. Apr. 2004 20:34 <-- editieren / zitieren --> Unities abgeben:         
Als Lisp-Einsteiger hat man es nicht einfach ! Was ist hier falsch ? Wie kann ich den neuen Attribut-Inhalt "Blatt" dem Block zuweisen ? (defun c:T3 () (setq bl1 (car (entsel "\nBlock wählen:"))) (setq att1 (cdr (assoc 1 (entget (entnext bl1))))) (princ att1) (setq att1 (subst '(1 Blatt)att1)) (entmod att1) (entupd bl1) ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin

 Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 10. Apr. 2004 02:19 <-- editieren / zitieren --> Unities abgeben:          Nur für Juergen55
Tja, Jürgen, manche Dinge sind nicht so, wie sie auf den ersten Blick erscheinen. Zu deinem ersten Problem: Glückwunsch erstmal - ein Grundprinzip von Lisp hast du verstanden, nämlich dass man nicht jede Zwischenstufe einer Variablen zuweisen muss, die dann doch keiner braucht. Aber: (repeat 1000000 (entnext myEntity)) ermittelt eine Million Mal den Nachfolger von myEntity - das geht also auch, wenn man nur zwei Linien in der Zeichnung hat:-( (repeat 1000000 (setq myEntity(entnext myEntity)) Das allerdings funktioniert nur so richtig, wenn man auch eine Million Linien hat - mit anderen Worten: Das ist dann ein sequenzielles Durcharbeiten. Dein zweites Beispiel zeigt, dass du wohl einige Probleme mit subst hast - da sind drei Argumente nötig, z.B. (subst (cons 1 "Irgendeinname")(assoc 1 daten)daten) '(1 Blatt) wird zwar in irgendeinem Lisp-Programm irgendwo vielleicht einen Zweck erfüllen - hier aber sicher nicht, weil es a) sehr wahrscheinlich nil ist, b) das cons fehlt und c) wie gesagt subst drei Argumente haben möchte. Lass dich aber nicht entmutigen! Gruß, Axel ------------------ Meine AutoLisp-Seiten Meine private Homepage Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze Meine Überzeugung... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Juergen55 Mitglied Elektrotechniker
 
 Beiträge: 282 Registriert: 08.03.2001
|
erstellt am: 10. Apr. 2004 12:44 <-- editieren / zitieren --> Unities abgeben:         
Hallo Mapcar, Danke für die Hilfe, ich bin das Ganze jetzt noch einmal durchgegangen und es funktioniert, da sind halt doch viele Kleinigkeiten zu beachten, aber Deine Erklärugen sind ja immer recht genau. Meine Lösung sieht dann so aus: (defun c:T3 () (setq bl1 (car(entsel "\nBlock wählen:"))) (setq att1 (entget (repeat 2 (setq bl1(entnext bl1))))) (setq attt (cdr (assoc 1 att1))) (princ attt) (setq aa (subst (cons 1 "Blatt")(assoc 1 att1)att1)) (princ aa) (entmod aa) (entupd bl1) )
Es wird also der Wert des Zweiten Attributs des gewählten Blockes in Blatt getauscht ! Deine Web-Seiten zu AutoLisp haben mir auch schon oft geholfen, es ist wohl die Einzige deutschsprachige Seite dieser Art, wirklich genial, muß auch mal gesagt werden. Dann wünsch ich Dir noch schöne Ostern. Gruß, Jürgen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |

| Anzeige: | Infos zum Werbeplatz >> | GeoTools CAD APP für Tiefbau, Facility Management, GIS, Vermessung und Kartografie GeoTools is a geo-data application that is useful to view, create, modify, analyze and report on CAD data that is geographic in nature. Useful for GIS data creation, surveying, mapping, facilities management, infrastructure, landscape development, city planning or similar, workflows.
|
|
mapcar Mitglied CADmin

 Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 10. Apr. 2004 22:53 <-- editieren / zitieren --> Unities abgeben:          Nur für Juergen55
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |