| | |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | | |  | PNY wird von NVIDIA zum Händler des Jahres gewählt - zum dritten Mal in Folge, eine Pressemitteilung
|
|
Autor
|
Thema: Blockname als Text (2361 mal gelesen)
|
Madler Mitglied Technischer Zeichner

 Beiträge: 30 Registriert: 13.07.2011 AutoCAD 2010 Autodesk MEP 2012
|
erstellt am: 26. Okt. 2011 18:30 <-- editieren / zitieren --> Unities abgeben:         
Hallo liebe Lispler, ich bin im Netzt auf folgenden Code gestoßen (http://autocadtips.wordpress.com/2011/03/14/autolisp-block-name/) der den Namen eines gewählten Blocks in die Zeichnung "schreibt". Da ich noch am lernen bin habe ich versucht mit eigenen Kommentaren ,den für euch sicher einfachen Code ,nachzuvolziehen. Nun bin ich auch soweit dahintergestiegen, verstehe aber die beiden Zeilen 06, 07 nicht. Ich habe die einzelnen Zeilen direkt in der AutoCAD-Befehlszeile eingegeben und bin zu dem Schluss gekommen das es auch ohne die beiden Zeilen funktioniert. Was bewirken diese Zeilen? Code Vergessen 01 ;Platziert den Blocknamen an einem Punkt 02 (defun C:bname() 03 (setvar "cmdecho" 1) ;Protokollierung ausschalten 04 (setq thöhe(getint "\nTexthöhe wählen:")) ;Benutzereingabe für Texthöhe (für aktuelle Texthöhe diese Zeile auskommentieren und bei "command" an Stelle der Variablen ein "" (enter) setzten) 05 (setq pt(cadr(entsel"\nBlock wählen:"))) ;entsel--> Objekt (Benutzereingabe) ;cadr --> 2.Element der Liste (also Gruppencode 2(2 . "blockname")) 06 ;(setq e1(ssget pt)) 07 ;(setq e2 (entget (ssname e1 0))) 08 (setq blname (cdr(assoc 2 e2))) ;assoc gibt die Unterliste einer Liste zurück --> hier ...cdr(assoc 2... das 2. Element der Unterliste (2 . "Blockname") 09 (setq pt1 (getpoint"\nPunkt der Beschreibung:")) ;Koordinate für Einfügepunkt --> Benutzereingabe 10 (command "text" pt1 thöhe 0 blname) ;Text schreiben 11 ) Gruß Markus [Diese Nachricht wurde von Madler am 26. Okt. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
joern bosse Ehrenmitglied Dipl.-Ing. Vermessung und AutoLISPler
    
 Beiträge: 1781 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: 27. Okt. 2011 07:15 <-- editieren / zitieren --> Unities abgeben:          Nur für Madler
Hallo Markus, es wird zur Zeit in Zeile 5 die Koordinate des Auswahlpunktes für den Block in PT gespeichert. In Zeile 6 wird diese Koordinate dann verwendet, um mit SSGET das Blockobjekt in die Variable E1 zu bekommen. Wenn Du in Zeile 5 nicht CADR für die Koordinate, sondern CAR für das Element verwendest, dann kannst Du die Zeile 6 komplett einsparen: Zeile 5: (setq e1(car(entsel"\nBlock wählen:"))) ------------------ viele Grüße Jörn http://www.bosse-engineering.com Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
       

 Beiträge: 4201 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 27. Okt. 2011 08:12 <-- editieren / zitieren --> Unities abgeben:          Nur für Madler
Hallo Markus, da hast du dir sehr schlechten Code ausgesucht. Ich habe diesen mal umgestaltet, so dass dieser zum Lernen taugt.
Code:
; places name of block as text via pick (defun C:blockn(/ ;den verwendete Variablen lokale Gültigkeit zuweisen sel seldaten blname pt1 TextStyleDaten texthöhe ) (setvar "cmdecho" 0); Unterdrückt die Ausgabe von Ausgaben in der Befehlszeile(von (command ..) ; die Objektwahl wird in eine Schleife gepackt, um sicher zu stellen, dass ein Objekt gewählt wurde und dieses auch dem Elementtype (in diesem Fall INSERT) entspricht (while (not sel) (setq sel (entsel (entsel"\nSelect Block:"))) (if (not (and sel (car sel) (setq seldaten (entget (car sel))) (= "INSERT" (cdr(assoc 0 seldaten))) ) ) (setq sel nil) ) ) ; da sicher gestellt ist, dass ein Element gewählt wurde und dieses dem Elementtyp INSERT entspricht, kann es ohne Prüfung dessen weiter gehen (setq blname (cdr(assoc 2 seldaten))) (setq pt1 (getpoint"\nSelect point for block title:")) ; aktueller Textstil wird ausgewertet, um zu schauen, ob diesem eine Feste Höhe zugewiesen wurde ; Ist das der Fall, wird die Texthöhe in der Befehlszeile nicht abgefragt, weshalb die (command ..)-Anweisung unterschiedlich zu gestalten ist (setq TextStyleDaten (entget(TBLOBJNAME "STYLE"(getvar"TEXTSTYLE")))) (if (/= 0.0 (cdr (assoc 40 TextStyleDaten))) (progn;Textstil hat keine Höhe zugewiesen (initget 6) (setq texthöhe (getreal "\nTexthöhe: ")) (command "text" pt1 (if texthöhe texthöhe "") 0 blname) ) (progn;Textstil hat Höhe zugewiesen (command "text" pt1 0 blname) ) ) )
Bei Fragen ... Grüße Holger ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen. defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |

| |
Madler Mitglied Technischer Zeichner

 Beiträge: 30 Registriert: 13.07.2011 AutoCAD 2010 Autodesk MEP 2012
|
erstellt am: 27. Okt. 2011 18:51 <-- editieren / zitieren --> Unities abgeben:         
|
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |