| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
 | PNY: der unverzichtbare Partner für umfassende KI-Lösungen von Workstations bis zu Edge Computing und KI-Cluster-Bereitstellung, eine Pressemitteilung
|
Autor
|
Thema: Text beim kopieren sichbar (1593 mal gelesen)
|
Dober Heinz Mitglied Technischer Zeichner
   
 Beiträge: 1146 Registriert: 20.12.2002 Autocad 2021/64B Win10 WORKSTATION Intel(R) CPU E5-1620 3.60GHz 32 GB Ram 64 Bit-Betriebssystem HP Designjet T7200 Grafik NVIDIA Quadro P4000 ZWCAD2021
|
erstellt am: 11. Nov. 2005 06:57 <-- editieren / zitieren --> Unities abgeben:         
Morgen Lispler Frage Habe ein Lisp mit Text kopieren und um 1 Hochzählen, funkt alles super aber ich seh beim Kopieren den Text nicht, Frage, ist das viel aufwand das Lisp zu ändern das der Text sichtbar wird beim kopieren. Und wie fange ich das an, wenn jemand ein Beispiel hätte wäre super Danke ------------------ Heinz  Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
       

 Beiträge: 4191 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools (d-tools.eu)
|
erstellt am: 11. Nov. 2005 07:23 <-- editieren / zitieren --> Unities abgeben:          Nur für Dober Heinz
|
Dober Heinz Mitglied Technischer Zeichner
   
 Beiträge: 1146 Registriert: 20.12.2002
|
erstellt am: 11. Nov. 2005 07:29 <-- editieren / zitieren --> Unities abgeben:         
|
Helmut F Mitglied Dipl.-Ing

 Beiträge: 38 Registriert: 09.05.2003
|
erstellt am: 11. Nov. 2005 07:45 <-- editieren / zitieren --> Unities abgeben:          Nur für Dober Heinz
Hallo Heinz meinst du vielleicht das : (defun C:Kopiere ( / ) (setq object (entsel "\n Bitte Text wählen ...") txt (car object) P1 (cadr object)) (command "_COPY" txt "" P1 pause) (princ) ) Helmut Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dober Heinz Mitglied Technischer Zeichner
   
 Beiträge: 1146 Registriert: 20.12.2002 Autocad 2021/64B Win10 WORKSTATION Intel(R) CPU E5-1620 3.60GHz 32 GB Ram 64 Bit-Betriebssystem HP Designjet T7200 Grafik NVIDIA Quadro P4000 ZWCAD2021
|
erstellt am: 11. Nov. 2005 07:51 <-- editieren / zitieren --> Unities abgeben:         
@ Helmut F so sieht mein Code aus (defun textzahler (een) (setq copytext (entget een)) (setq txt (cdr (assoc 1 copytext))) (setq text-zer (str-list txt)) (setq text-dr (reverse text-zer)) (setq text-um1 (car text-dr)) (setq text-u (atoi text-um1)) (setq text-u (1+ text-u)) (setq text-neu (itoa text-u)) (setq neu (cons text-neu (cdr text-dr))) (setq btext (reverse neu)) (setq fertig (apply 'strcat btext)) (setq neuedxf (subst (cons 1 fertig) (assoc 1 copytext) copytext)) (entmod neuedxf) ) (defun str-list (str / ls i) (setq i 1) (repeat (strlen str) (setq ls (cons (substr str i 1) ls)) (setq i (1+ i)) ) (reverse ls) )
(defun c:nummerletzte () (setvar "cmdecho" 0) (setq een (car (entsel))) (setq eel (entget een)) (setq txtpt (getpoint "\n neuer Textpunkt: ")) (command "_copy" (ssadd een) "" (cdr (assoc 10 eel)) txtpt) (textzahler (entlast)) (prin1) )
heinz
------------------ Heinz  Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
       

 Beiträge: 13530 Registriert: 30.11.2003 .
|
erstellt am: 11. Nov. 2005 08:41 <-- editieren / zitieren --> Unities abgeben:          Nur für Dober Heinz
lass die Zeile weg (setq txtpt (getpoint "\n neuer Textpunkt: ")) und ersetze die nächsete durch (command "_copy" (ssadd een) "" (cdr (assoc 10 eel)) pause) ------------------ - 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 |
Dober Heinz Mitglied Technischer Zeichner
   
 Beiträge: 1146 Registriert: 20.12.2002
|
erstellt am: 11. Nov. 2005 08:58 <-- editieren / zitieren --> Unities abgeben:         
|
s.wickel Mitglied Bauingenieur Wasserwirtschaft
 
 Beiträge: 422 Registriert: 17.12.2001 Bricscad V7 - V11
|
erstellt am: 11. Nov. 2005 11:09 <-- editieren / zitieren --> Unities abgeben:          Nur für Dober Heinz
Hallo! Prima Funktion Heinz . Sowas wollte ich auch schon immer mal haben. Ich habe mir den Code kopiert (dein Einverständnis vorrausgesetzt). Und die 10Us die Du CADmium geschickthast bekommst du hiermit von mir erstattet. Ich habe den Code auch etwas angepasst, da das Original nur die letzte Stelle berücksichtigt. Für die Funktion Textzahler habe ich nun folgenden Code: Code: (defun textzahler (een / copytext txt text-dr text-um1 zaehler text-u text-neu neu btext fertig neuedxf) (setq copytext (entget een)) ;holt objektliste (setq txt (cdr (assoc 1 copytext))) ;extrahiert den Text (setq text-dr (reverse (str-list txt))) ;macht eine liste vom Text und dreht sie um (setq text-um1 ()) ;Variable auf NIL setzen (setq zaehler 0) ;Zaehler auf Null setzen (while (isdigit? (nth zaehler text-dr)) ;prüft jedes Zeichen ob Zahl bis ein anderes kommt (if text-um1 (setq text-um1 (append text-um1 (list (nth zaehler text-dr)))) ;Zahlzeichen in Liste (setq text-um1 (list (nth zaehler text-dr))) ;Beim ersten Zahlzeichen neue Liste ) (setq zaehler (1+ zaehler)) ;Zaehler erhöhen ) (if text-um1 (setq text-um1 (str-untok (reverse text-um1) "")) ;Zahl wieder zusammensetzen (setq text-um1 "1") ;Wenn keine Zahlen dann auf 1 setzen ) (setq text-u (atoi text-um1)) ;wandelt den Text in eine Zahl um (setq text-u (1+ text-u)) ;erhöht den Zahltext um 1 (setq text-neu (itoa text-u)) ;neuer zahltext (setq neu (cons text-neu (reverse (str-list (str-rtrimset txt "0123456789"))))) (setq btext (reverse neu)) (setq fertig (apply 'strcat btext)) (setq neuedxf (subst (cons 1 fertig) (assoc 1 copytext) copytext)) (entmod neuedxf) )
Dafür werden jetzt noch drei Funktionen aus MAPCARs Tutorial verwendet:
Code:
(defun str-rtrimset (str cset / len) ;entfernt die Zeichen die in cset enthalten sind vom ENDE der zeichenkette (bis zum ersten auftreten eines anderen Zeichens) (if(>(strlen str)0) (progn (setq cset(str-list cset)) (setq len(strlen str)) (while(and (> len 0) (member(substr str len 1)cset)) (setq len(1- len)) ) (if (> len 0) (substr str 1 len) "" ) ) ) ) (defun isdigit?(c / ) ; testet ob numerisch (Ascii 48 bis 57) (if(=(type c)'STR)(setq c(ascii c))) (> 58 c 47) )
(defun str-untok (ls c /) ;fügt eine Liste ls voll Strings zu einem String mit Trennzeichen c zusammen (strcat (car ls) (apply 'strcat (mapcar '(lambda (s / )(strcat c s)) (cdr ls)) ) ) )
Jetzt funktionierts auch mit mehrstelligen Nummern und nach "19" kommt nicht mehr "110". Die Hauptfunktion bleibt so wie sie ist. EDIT: Ich habe den Code der Funktion gerade geändert, weil es einen Fehler gab, wenn ein Text nur aus Zahlen bestand! ------------------ Nodda, Stefan  [Diese Nachricht wurde von s.wickel am 11. Nov. 2005 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dober Heinz Mitglied Technischer Zeichner
   
 Beiträge: 1146 Registriert: 20.12.2002
|
erstellt am: 11. Nov. 2005 11:25 <-- editieren / zitieren --> Unities abgeben:         
|
archtools Mitglied
  
 Beiträge: 989 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 11. Nov. 2005 12:34 <-- editieren / zitieren --> Unities abgeben:          Nur für Dober Heinz
Zitat: Original erstellt von Dober Heinz: @ s.wickl Danke für dir U und der code ist natürlich frei.
Glückwunsch! Dein (hier duzen sich alle) erster Code, der auch von anderen für sinnvoll erachtet wird - Du entwickelst Dich noch zu einem echten Programmierer :-) Freut mich, dass der Kurs in Wien also doch was gebracht hat. Herzliche Grüße Tom Berger Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dober Heinz Mitglied Technischer Zeichner
   
 Beiträge: 1146 Registriert: 20.12.2002
|
erstellt am: 11. Nov. 2005 12:38 <-- editieren / zitieren --> Unities abgeben:         
@Berger Danke für einen Programmiere da fehlt noch viel, aber das was ich so brauche für die Tägliche Arbeit das läuft auch. danke Ja der Kurs wahr super. Super Lehrer gehabt. ------------------ Heinz  Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cad4fun Ehrenmitglied
    
 Beiträge: 1846 Registriert: 06.12.2004 privat ACAD 2013 deutsch, Windows 7 64Bit HP Elite 7500 Series MT,Intel Cote i5-3470 CPU 3,20Ghz,16GB RAM
|
erstellt am: 11. Nov. 2005 14:09 <-- editieren / zitieren --> Unities abgeben:          Nur für Dober Heinz
|
CADmium Moderator Maschinenbaukonstrukteur
       

 Beiträge: 13530 Registriert: 30.11.2003 .
|
erstellt am: 11. Nov. 2005 14:24 <-- editieren / zitieren --> Unities abgeben:          Nur für Dober Heinz
Zitat:
nicht weglassen, ersetze sie durch (print "zeige neuen Textabsetzpunkt") lG
ähmm , warum soll ich da noch ne Ausgabe machen? , wenn der Text am Cursor hängt und eine Gummibandlinie zum Ex-Basispunkt verweist ... aber wenn, dann besser mit Zeilenumbruch (princ "\nzeige neuen Textabsetzpunkt") SCNR ------------------ - 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 |
Dober Heinz Mitglied Technischer Zeichner
   
 Beiträge: 1146 Registriert: 20.12.2002
|
erstellt am: 11. Nov. 2005 14:33 <-- editieren / zitieren --> Unities abgeben:         
|
cad4fun Ehrenmitglied
    
 Beiträge: 1846 Registriert: 06.12.2004 privat ACAD 2013 deutsch, Windows 7 64Bit HP Elite 7500 Series MT,Intel Cote i5-3470 CPU 3,20Ghz,16GB RAM
|
erstellt am: 11. Nov. 2005 14:54 <-- editieren / zitieren --> Unities abgeben:          Nur für Dober Heinz
|
cad4fun Ehrenmitglied
    
 Beiträge: 1846 Registriert: 06.12.2004 privat ACAD 2013 deutsch, Windows 7 64Bit HP Elite 7500 Series MT,Intel Cote i5-3470 CPU 3,20Ghz,16GB RAM
|
erstellt am: 11. Nov. 2005 15:01 <-- editieren / zitieren --> Unities abgeben:          Nur für Dober Heinz
Zitat: Original erstellt von CADmium: ähmm , warum soll ich da noch ne Ausgabe machen? , wenn der Text am Cursor hängt und eine Gummibandlinie zum Ex-Basispunkt verweist ... aber wenn, dann besser mit Zeilenumbruch (princ "\nzeige neuen Textabsetzpunkt")SCNR
ich halte es einfach für besser, dass die Anweisungen im programm immer in der befehlszeile angezeigt werden . Es gibt zu viele programme, welche den nicht so versierten Anwender dumm sterben lassen. aber Du hast recht, in diesem fall ist die nächste aktion intuitiv zu erfassen. Auszug aus AutiLISP-Hilfe: PRINT druckt einen ausdruck in die befehlszeile,..... ...entspricht der funktion PRIN1, druckt jedoch vor dem argument a einen zeilenumbruch und nach ausdruck ein leerzeichen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mkl-cad Mitglied Technischer Zeichner
 
 Beiträge: 378 Registriert: 23.07.2003 ACAD 2002 Express Tools 1-9 Architektural Desktop Windows XP Server Windows 2003 3 GHz Rechner 1 GB RAM 80 GB Festplatte ATI FireGL V3100 2 17" Flachbildschirme
|
erstellt am: 14. Nov. 2005 08:37 <-- editieren / zitieren --> Unities abgeben:          Nur für Dober Heinz
Hallo Tolles Programm, habe aber noch ne Frage: Wenn ich den Befehl aufrufen möchte kann ich das ja durch ein anderes Lisp-Programm machen. welches dann den Objektenamen übermittelt. Dann erscheint aber in der Befehlszeile z.B folgendens TEXTZAHLER Objekt wählen: ((-1 . <Objektname: 40208ca8> ) (0 . "TEXT") (330 . <Objektname: 400ffcf8> ) (5 . "88D") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "A-25") (100 . "AcDbText") (10 496.25 286.25 0.0) (40 . 2.5) (1 . "15/20") (50 . 0.0) (41 . 1.0) (51 . 0.0) (7 . "T25") (71 . 0) (72 . 0) (11 0.0 0.0 0.0) (210 0.0 0.0 1.0) (100 . "AcDbText") (73 . 0)) Kann man die Anzeige wegblenden. Weis nur wie das aus einer MNU Datei aus geht aber nicht aus Lisp. ------------------ Martin  Viele Grüße aus dem schönen Münsterland! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mkl-cad Mitglied Technischer Zeichner
 
 Beiträge: 378 Registriert: 23.07.2003 ACAD 2002 Express Tools 1-9 Architektural Desktop Windows XP Server Windows 2003 3 GHz Rechner 1 GB RAM 80 GB Festplatte ATI FireGL V3100 2 17" Flachbildschirme
|
erstellt am: 14. Nov. 2005 08:45 <-- editieren / zitieren --> Unities abgeben:          Nur für Dober Heinz
Oh, muß mich korrigieren. Die Objekteigenschaften die angezeigt werden sind ja schon die neuen. Ich finde dummer weise nur nicht die Stelle wo die Eigenschaften zurückgegeben bzw. angezigt werden. ------------------ Martin  Viele Grüße aus dem schönen Münsterland! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CAD-Huebner Ehrenmitglied V.I.P. h.c. Verm.- Ing., ATC-Trainer

 Beiträge: 9807 Registriert: 01.12.2003 One AutoCAD 2.5 - 2024, AutoCAD, Civil 3D, Win10/Win11
|
erstellt am: 14. Nov. 2005 08:53 <-- editieren / zitieren --> Unities abgeben:          Nur für Dober Heinz
Einfach noch am Ende des Programmes eine Leere Anzeige (prin1) oder (princ) ausgeben, damit nicht mehr die Evaluation von (entmod neuedxf) zurückgegeben wird. Code:
... (entmod neuedxf) (princ)
Dazu die Autolisp Hilfe: Zitat:
AutoLISP Basics - Exiting Quietly If you invoke the princ function without passing an expression to it, it displays nothing and has no value to return. So if you write an AutoLISP expression that ends with a call to princ without any arguments, the ending nil is suppressed (because it has nothing to return). This practice is called exiting quietly.
------------------ Mit freundlichem GrußUdo Hübner [Diese Nachricht wurde von CAD-Huebner am 14. Nov. 2005 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dober Heinz Mitglied Technischer Zeichner
   
 Beiträge: 1146 Registriert: 20.12.2002
|
erstellt am: 14. Nov. 2005 08:53 <-- editieren / zitieren --> Unities abgeben:         
@Hallo Das ist die Stelle (Setvar CMDECHO o) Variablentyp: Ganzzahl Gespeichert in: Nicht gespeichert Ausgangswert: 1 Legt fest, ob Eingabeaufforderungen und Eingaben während der Ausführung der AutoLISP-Befehlsfunktion zurückgegeben werden..
0 Deaktiviert die Protokollierung. 1 Aktiviert die Protokollierung.
------------------ Heinz  Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mkl-cad Mitglied Technischer Zeichner
 
 Beiträge: 378 Registriert: 23.07.2003 ACAD 2002 Express Tools 1-9 Architektural Desktop Windows XP Server Windows 2003 3 GHz Rechner 1 GB RAM 80 GB Festplatte ATI FireGL V3100 2 17" Flachbildschirme
|
erstellt am: 14. Nov. 2005 08:57 <-- editieren / zitieren --> Unities abgeben:          Nur für Dober Heinz
Hallo cmdecho ist auf 0 (War mir auch bekannt) Die Lösung von Udo war korrekt. Zu dumm. Ein princ hab ich bei jedem meiner Befehle zum Schluß nur hier und jetzt kam ich nicht drauf. Übrigens bei "ddfs77ss" funktionierts nicht. (Ist mir aber auch Wurst) 10 U an Udo! ------------------ Martin  Viele Grüße aus dem schönen Münsterland! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dober Heinz Mitglied Technischer Zeichner
   
 Beiträge: 1146 Registriert: 20.12.2002
|
erstellt am: 14. Nov. 2005 09:18 <-- editieren / zitieren --> Unities abgeben:         
@ MKL-cad habe das Lisp geschrieben um bei uns die Stromkreisnummern zu kopieren und um eins zu erhöhen. mehr brauchen wir nicht, das mit text und zahl wird sicher auch gehn, aber da ich anfänger bin fehlt mir das noch schwer so was zu schreiben. kanns ja mal versuchen gg ------------------ Heinz  Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mkl-cad Mitglied Technischer Zeichner
 
 Beiträge: 378 Registriert: 23.07.2003 ACAD 2002 Express Tools 1-9 Architektural Desktop Windows XP Server Windows 2003 3 GHz Rechner 1 GB RAM 80 GB Festplatte ATI FireGL V3100 2 17" Flachbildschirme
|
erstellt am: 14. Nov. 2005 09:59 <-- editieren / zitieren --> Unities abgeben:          Nur für Dober Heinz
Hallo, das habe ich mir fast gedacht. Dazu verwenden wir foldendes Lisp: (defun c:e-nummer ( / wert a r o o2 l aa) (setq wert 1 r -1 a (ssget "x" '((0 . "Insert") (2 . "E-nr")))) (if (= a nil)()(progn (repeat (sslength a) (setq r (+ r 1)) (setq o (ssname a r)) (setq o2 (atoi (cdr (assoc 1(entget(entnext o)))))) (if (= o2 nil)(setq o2 "0")()) (if (or (> o2 wert)(= o2 wert))(setq wert (+ 1 o2))()) ))) (setq aa (tblsearch "layer" "E-stromkreisnr-ne")) (if (= aa nil) (command "layer" "neu" "E-stromkreisnr-ne" "fa" "1" "E-stromkreisnr-ne" "ls" "0.18" "E-stromkreisnr-ne" "") () ) (setq l (getvar "clayer")) (setvar "clayer" "E-stromkreisnr-ne"); Layer wählen (setvar "attdia" 0) (princ "\nEinfügepunkt:") (command "einfüge" "E-nr" "vf" (getvar "userr2") pause (getvar "userr2") "" "" (rtos wert 2 0)) ;Faktor hier durch userr2 gewählt (setvar "clayer" l) (setvar "attdia" 1) (princ) ) Bitte erst userr2 auf den passenden Faktor setzten oder Programm umschreiben. Das ganze hat den Vorteil nicht erst die nächste Nummer suchen zu müssen. Anhängte Datei wird benötigt. ------------------ Martin  Viele Grüße aus dem schönen Münsterland! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dober Heinz Mitglied Technischer Zeichner
   
 Beiträge: 1146 Registriert: 20.12.2002
|
erstellt am: 14. Nov. 2005 10:37 <-- editieren / zitieren --> Unities abgeben:         
|