Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Text in Attribut kopieren

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:  Text in Attribut kopieren (2385 mal gelesen)
MDTiger
Mitglied


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

Beiträge: 4
Registriert: 27.07.2009

erstellt am: 27. Jul. 2009 16: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 Zusammen,

Ich habe folgendes Problem: ich möchte Texte in meinen Zeichnungen (Schemas) direkt in bestimmte Attribute meiner Blöcke kopieren.

Ich habe folgende Lisp-Routine, mit der ich Texte in ein beliebiges Attribut (mit Inhalt vorausgesetzt) kopieren kann.

(defun C:TXT2ATT ( / ele ele_list txt_inhalt)
;Inhalt von Text in Attribut eines anderen Blocks kopieren
  (setq ele (nentsel "\nWelchen Text kopieren ?"))
  (if ele
    (progn
      (setq ele_list (entget (car ele)))
      (if (= (cdr (assoc 0 ele_list)) "TEXT")
        (progn
          (setq txt_inhalt (cdr (assoc 1 ele_list)))
          (setq ele (nentsel "\nIn welches Attribut kopieren ?"))
          (if ele
            (progn
              (setq ele_list (entget (car ele)))
              (if (= (cdr (assoc 0 ele_list)) "ATTRIB")
                (progn
                    (entmod (subst (cons 1 txt_inhalt) (assoc 1 ele_list) ele_list))
                    (entupd (car ele))
                    (princ)
                )
                (princ "\nKein Attribut gewählt !")
              )
            )
            (princ "\nKein Attribut gewählt !")
          ) 
        )
        (princ "\nKein Text gewählt !")
      )
    )
    (princ "\nKein Element gewählt !")
  )
)

Diese Routine hätte ich gerne so geändert, das ich den Text in das Attribut "Dimension" kopieren kann ohne das ich das Attribut vorher mit Inhalt füllen muß, so das es wählbar ist.

Leider sind meine Fähigkeiten was Lisp Programmierung angeht noch in den Kinderschuhen.

Vielen Dank für eure hilfe.

Gruß MDTiger

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

Geos
Mitglied
Vermessungstechniker i.R.


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

Beiträge: 1017
Registriert: 21.09.2001

ACAD Map 2010, Win 7 Pro
eigene Lisp's<P>HW: Core i7 860, 2.8 GHz
3.3 GB, NVIDIA GeForce GTS 250

erstellt am: 27. Jul. 2009 19:20    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 MDTiger 10 Unities + Antwort hilfreich

Zitat:
...(nentsel "\nIn welches Attribut kopieren ?"))...

Stattdessen kannst Du mit (entsel) die Blockreferenz wählen und dann mit (entnext) die Attribute durchgehen. Auf diese Art kannst Du auch leere Attribute ("") füllen.

------------------
Schöne Grüße
Ernst

www.geopaint.at

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

Oliver M
Mitglied
Dipl.-Ing.


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

Beiträge: 50
Registriert: 01.07.2002

Win2000, AcadMap 2008, WS-Landcad 2008
AMD Athlon 64x2 4600+, 2 GB RAM
Nvidia GeForce 7600 GS

erstellt am: 11. Aug. 2009 12:54    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 MDTiger 10 Unities + Antwort hilfreich

Hallo Ernst,

ich möchte nochmal auf deine Antwort zurückkommen:
Kannst Du das bitte auch für nicht geübte Lispler etwas ausführlicher schreiben? Wie müßte die *.lsp dann aussehen?
Danke!
Oliver

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: 11. Aug. 2009 13:34    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 MDTiger 10 Unities + Antwort hilfreich

hi,
mit netsel könnte es so gehen

(setq vlaObj(vlax-ename->vla-object(car (nentsel))))
(vl-catch-all-apply 'vla-put-TextString(list vlaObj "blabla_dein_string_blabla"))

Aber Ernst sein Weg ist wohl besser aber auch etwas komplizierter 

------------------
Mfg Heiko

Elefantenjagd in Afrika
"... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..."   (www.uni-leipzig.de/~rotheh/elefant.htm)

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

Oliver M
Mitglied
Dipl.-Ing.


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

Beiträge: 50
Registriert: 01.07.2002

Win2000, AcadMap 2008, WS-Landcad 2008
AMD Athlon 64x2 4600+, 2 GB RAM
Nvidia GeForce 7600 GS

erstellt am: 11. Aug. 2009 14:01    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 MDTiger 10 Unities + Antwort hilfreich

Hi Dorfy,

also wenn ich dich richtig verstehe, soll ich die Zeile 10:
"          (setq ele (nentsel "\nIn welches Attribut kopieren ?"))"
ersetzten durch die zwei Zeilen:
"(setq vlaObj(vlax-ename->vla-object(car (nentsel))))
(vl-catch-all-apply 'vla-put-TextString(list vlaObj "blabla_dein_string_blabla"))" ?

Diese vla-Befehle sind mir fremd, meine Lisp-Kurs ist doch schon eine ganze Weile her, stelle ich fest (ca. 5 Jahre).
Könntest Du das bitte etwas ausführlicher schreiben? Danke!
Oliver

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: 11. Aug. 2009 14: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 MDTiger 10 Unities + Antwort hilfreich

Hi,
hmm so einfach ist es nicht,
sorry hatte ein wenig lisp-kenntnisse vorausgesetzt...

kopier mal die Zeilen
in deine Eingabeaufforderung...(Attribut wählen nicht vergessen)
(war halt nur ein Denkansatz)

------------------
Mfg Heiko

Elefantenjagd in Afrika
"... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..."   (www.uni-leipzig.de/~rotheh/elefant.htm)

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: 11. Aug. 2009 15: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 MDTiger 10 Unities + Antwort hilfreich

Versuch mal...

(defun C:TXT2ATT_Dimension (/ ele ele_list txt_inhalt bl atts tagname)
  ;;Inhalt von Text in Attribut eines anderen Blocks kopieren
  (setq ele (nentsel "\nWelchen Text kopieren ?"))
  (if ele
    (progn
      (setq ele_list (entget (car ele)))
      (if (= (cdr (assoc 0 ele_list)) "TEXT")
(progn
  (setq txt_inhalt (cdr (assoc 1 ele_list)))
  (setq ele (entsel "\nWohin kopieren ?"))
  (if ele
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    (progn
      (setq bl     (vlax-ename->vla-object (car ele))
    tagname "Dimension" ;;<----
      )
      (if (and
    (= (vla-get-hasattributes bl) :vlax-true)
    (safearray-value
      (setq atts
    (vlax-variant-value
      (vla-getattributes bl)
    )
      )
    )
  )
(foreach tag (vlax-safearray->list atts)
  (if (= (strcase tagname)
(strcase (vla-get-tagstring tag))
      )
    (vla-put-TextString tag txt_inhalt)
  )
)
(vla-update bl)
      )
    )
;;;;;;;;;;;;;;;;;;;;;;;;;
    (princ "\nKein Attribut gewählt !")
  )
)
(princ "\nKein Text gewählt !")
      )
    )
    (princ "\nKein Element gewählt !")
  )
  (princ)
)

------------------
Mfg Heiko

Elefantenjagd in Afrika
"... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..."   (www.uni-leipzig.de/~rotheh/elefant.htm)

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

Oliver M
Mitglied
Dipl.-Ing.


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

Beiträge: 50
Registriert: 01.07.2002

Win2000, AcadMap 2008, WS-Landcad 2008
AMD Athlon 64x2 4600+, 2 GB RAM
Nvidia GeForce 7600 GS

erstellt am: 11. Aug. 2009 16:09    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 MDTiger 10 Unities + Antwort hilfreich

Hallo Heiko,

entschuldige die späte Antwort - hier geht einiges durcheinander...

Ein besonders großes DANKE für diese Lösung; was du so alles kannst (so aus dem Ärmel geschüttelt...)!
Ich habe mit Hilfe der Geotools an die Stelle jeden Textes zusätzlich einen Block setzen können. In diesen habe ich dann mit Hilfe deiner Routine den Textwert in das Attribut schreiben können.  Damit hatte ich dann das, wonach ich gesucht hatte, auch wenn ich für jede Fläche den Block einzeln "anpacken" muss (Den Namen des Attributes in der Lisp konnte ich ja ohne Probleme ändern; oder eben im Block - auch das wäre gegangen)
10Us4u

Außerdem hat mir ein hiesiger ehemaliger Kollege noch einen Tip für eine zweite Lösung gegeben. a.n. hat das auch sehr schön in meinem eigenen Thema "Text zu Attribut" zusammengefasst.

Also nochmal Danke an alle, die sich mit mir Gedanken gemacht haben.
Weiterhin fröhliches Lispeln 

Oliver

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

MDTiger
Mitglied


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

Beiträge: 4
Registriert: 27.07.2009

erstellt am: 11. Aug. 2009 16:57    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 Zusammen,

Hallo Dorfy, ich hab deine Routine getestet und sie funktioniert wunderbar, Vielen Dank,

Vielen Dank auch den Anderen die sich so rege beteiligt haben.

Gruß Marcus

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