Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Nummern automatisch an Text anfügen

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:  Nummern automatisch an Text anfügen (445 mal gelesen)
THE_ONE
Mitglied
Student, Alter:23


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

Beiträge: 299
Registriert: 27.04.2005

AMD XP 2000, 512MB-RAM, WIN XP Pro
Readon 9600Pro
VIZ 2005, Autocad 2007,(Mechanical)

erstellt am: 21. Jan. 2008 08:43    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 MTexte/Text auf dem Bildschirm. Kann ich es mit Lisp schaffen das ich einen Befehl kreiere der folgendes bewirkt:
1.Beim starten des Befehls fragt er mich nach einer Nummer
danach klicke ich nach der Reihe Mtexte/Texte an, bei jedem klick auf einen Mtext/Text wird die Nummer um eins erhöht und dann dem Mtext/Text angefügt.

MFG THE_ONE

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

CADmium
Moderator
Maschinenbaukonstrukteur




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

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 21. Jan. 2008 08:52    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 THE_ONE 10 Unities + Antwort hilfreich

Ja, das wäre mit Lisp machbar

------------------
  - 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

THE_ONE
Mitglied
Student, Alter:23


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

Beiträge: 299
Registriert: 27.04.2005

AMD XP 2000, 512MB-RAM, WIN XP Pro
Readon 9600Pro
VIZ 2005, Autocad 2007,(Mechanical)

erstellt am: 21. Jan. 2008 11:23    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!

So habe es jetzt endlich fertig!

Code:
(defun c:addnumber (/ START_NUMBER Object stringeintrag stringelement x)
(initget 5) ;lässt kein NULL (also nur ENter drücken) und keine negativen Zahlen zu
(if  (setq START_NUMBER (getint "Enter a number:")) ;liest einen Integer ein
    (progn
      (initget 0)
      (while (setq Selection (entsel "Wähle Text")) ;solange bis der User Enter drückt
;entsel liefert eine Liste mit zwei Elementen: 1stes Element ist der Name,
;zweites Element ist die Cursorposition an der der Cursor war als das Element ausgewählt wurde

(setq Object (entget (car Selection) )) ;liefert das angeklickte Objekt (Text)
(setq stringeintrag (assoc 1 Object));=(1 . stringelement)
(setq stringelement (cdr (assoc 1 Object)));=nur der String des Objektes
(setq x (strcat (substr stringelement 1 (- (strlen stringelement) 1)) (rtos START_NUMBER 2 0) "}"));Nummer hinzufuegen
(setq Object (subst (cons 1 x) stringeintrag Object));ersetze alten Eintrag durch den neuen
(entmod Object) ;Update Database - schreibe das Object neu
(setq START_NUMBER (1+ START_NUMBER));number um 1 erhöhen, fuer fortlaufende Nummerierung
      );while   
    );progn 
);if
);defun c

Was kann ich da noch verbessern, funktionieren tut es ja schon.
Z.B.: Was könnte ich machen, das wenn der User nicht einen Text auswählt sondern irgendwas anderes ,dass mein Programm nicht abricht sondern einfach weiter macht in der Schleife. Kenne mich leider mit LISP nicht so gut aus, wäre daher nett wenn ihr mir bitte helfen könntet.

MFG THE_ONE

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

CADmium
Moderator
Maschinenbaukonstrukteur




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

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 21. Jan. 2008 11:35    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 THE_ONE 10 Unities + Antwort hilfreich

Schön zusammenkopiert  .. sogar Zweisprachig in eine, Programm.
Aber probier mal das
Code:

(defun c:addnumber (/ START_NUMBER Object stringeintrag stringelement x)
  (initget 5)
  (if(setq START_NUMBER (getint "Gib eine Zahl ein:"))
    (progn     
      (while(and(setq Selection (entsel "\nWähle Text"))
                (setq Object (entget (car Selection) ))
                (or(member(cdr(assoc 0 Object)) '("TEXT" "MTEXT"))
                  (prompt "\nKein Textobjekt gewählt\n")
                ) 
            )     
        (setq stringeintrag (assoc 1 Object))
        (setq stringelement (cdr (assoc 1 Object)))
        (setq x (strcat (substr stringelement 1 (- (strlen stringelement) 1))
                        (rtos START_NUMBER 2 0)
                        "}"
                )
        )
        (setq Object (subst (cons 1 x) stringeintrag Object))
        (entmod Object)
        (setq START_NUMBER (1+ START_NUMBER))
      )
    )
  )
)

... kann aber bei Mtexten zu Problemen kommen, da der Mtext seinen Textstring durchaus im GC3 haben kann ... ich würde da eher auf ActiveX zurückgreifen.
Aber ich denke, wie man eine Fehl-Auswahl umgeht ist aus dem Code ersichtlich.

------------------
  - 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

THE_ONE
Mitglied
Student, Alter:23


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

Beiträge: 299
Registriert: 27.04.2005

AMD XP 2000, 512MB-RAM, WIN XP Pro
Readon 9600Pro
VIZ 2005, Autocad 2007,(Mechanical)

erstellt am: 21. Jan. 2008 12:16    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!
Danke für deine Hilfe!
Hab jetzt das ganze so optimiert wie ich das haben will. Die Funktion soll erst abrechen wenn Enter gedrückt wird bei einem falschen Objekt wird einfach eine neue Abfrage gestartet. Außerdem muss man zwischen MTEXT und TEXT unterscheiden!
Code:
(defun c:addnumber (/ START_NUMBER Object stringeintrag stringelement x)
(initget 5) ;lässt kein NULL (also nur Enter drücken) und keine negativen Zahlen zu
(if  (setq START_NUMBER (getint "Enter a number:")) ;liest einen Integer ein
    (progn
      (initget 0)
        (while(and (setq Selection (entsel "\nWähle Text")) ;solange bis der User Enter drückt
                    (setq Object (entget (car Selection)))               
            );and
          ;entsel liefert eine Liste mit zwei Elementen: 1stes Element ist der Name,
          ;zweites Element ist die Cursorposition an der der Cursor war als das Element ausgewählt wurde
          (if (member (cdr(assoc 0 Object)) '("TEXT" "MTEXT"))
            (progn
                (setq Object (entget (car Selection) )) ;liefert das angeklickte Objekt (Text)
                (setq stringeintrag (assoc 1 Object));=(1 . stringelement)
                (setq stringelement (cdr (assoc 1 Object)));=nur der String des Objektes
                (if (member (cdr(assoc 0 Object)) '("MTEXT"))
                  (setq x (strcat (substr stringelement 1 (- (strlen stringelement) 1)) (rtos START_NUMBER 2 0) "}"));MTEXT
                  (setq x (strcat stringelement (rtos START_NUMBER 2 0) ));TEXT
                );if MTEXT OR TEXT
                (setq Object (subst (cons 1 x) stringeintrag Object));ersetze alten Eintrag durch den neuen
                (entmod Object) ;Update Database - schreibe das Object neu
                (setq START_NUMBER (1+ START_NUMBER));number um 1 erhöhen, fuer fortlaufende Nummerierung
          );if true
          (prompt "\nKein Textobjekt gewählt")) ;if false    
        );while
    );progn 
);if
);defun c

MFG THE_ONE
PS.: Was ist GC3??

[Diese Nachricht wurde von THE_ONE am 21. Jan. 2008 editiert.]

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

Dorfy
Mitglied
Double-Dipl.-Ing. Bleistiftanspitzer


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

Beiträge: 900
Registriert: 21.07.2006

AutoCad2007, ProE, HiCad

erstellt am: 21. Jan. 2008 14:15    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 THE_ONE 10 Unities + Antwort hilfreich

Hallo,
"...PS.: Was ist GC3??..."

schau mal in der Hilfe unter Gruppencodes
bzw. Gruppencodes für Objekte nach.
IMHOIn my humble oppinion (Meiner Meinung nach) können lange mtext auf zwei GC gesplittet sein (ab einer bestimmten Zeichnemenge)
Mfg Heiko

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

CADwiesel
Moderator
CAD4FM UG




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

Beiträge: 1968
Registriert: 05.09.2000

AutoCAD, Bricscad
Wir machen das Mögliche unmöglich

erstellt am: 21. Jan. 2008 17:18    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 THE_ONE 10 Unities + Antwort hilfreich

deshalb ist es in diesem Falle einfacher über die methode vla-get-TextString den text auszulesen. Im Falle eines GC3 wird's schwieriger alles zusammenzubauen.

------------------
Gruß
CADwiesel
Besucht uns im CHAT

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