| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: 1.attribut auslesen (1771 mal gelesen)
|
Bauvermesser Mitglied Vermesser
Beiträge: 460 Registriert: 18.03.2006 AMD 2600, 2024RAM ,WIN XP PROF-SP3, ACAD 2005, Firmenrechner,
|
erstellt am: 02. Jul. 2008 21:43 <-- editieren / zitieren --> Unities abgeben:
kann mir bitte jemand mal eine Tip geben wo ich weiterkomme, ich möchte aus einem Block mit Attributen das erste Attribut (Punktnummer) auslesen, kopieren und auf eine extra Layer legen können zum auslesen der Höhe gibt es ja viele Hinweise, ich kann sie nur nicht für mein Anliegen umdefinieren besten dank ------------------ Gruß vom Bauvermesser; 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: 9795 Registriert: 01.12.2003 One AutoCAD 2.5 - 2024, AutoCAD, Civil 3D, Win10/Win11
|
erstellt am: 02. Jul. 2008 23:19 <-- editieren / zitieren --> Unities abgeben: Nur für Bauvermesser
|
archtools Mitglied
Beiträge: 943 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 03. Jul. 2008 11:47 <-- editieren / zitieren --> Unities abgeben: Nur für Bauvermesser
Zitat: Original erstellt von Bauvermesser: kann mir bitte jemand mal eine Tip geben wo ich weiterkomme, ich möchte aus einem Block mit Attributen das erste Attribut (Punktnummer) auslesen, kopieren und auf eine extra Layer legen könnenzum auslesen der Höhe gibt es ja viele Hinweise, ich kann sie nur nicht für mein Anliegen umdefinieren besten dank
Trivial. Mit (setq en (car (entsel "\nBlockreferenz wählen: "))) kriegst Du den Block und mit (setq att (entnext en)) kriegst Du sein erstes Attribut. Mit (entget att) kannst Du Dich ja auch davon überzeugen, das richtige Attribut gefunden zu haben. Von welchem Element willst Du denn die Höhe auslesen? Aus der Blockreferenz kriegst Du sie aus dem Z-Wert des Einfügepunkts, also (cadddr (assoc 10 (entget en)))
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bauvermesser Mitglied Vermesser
Beiträge: 460 Registriert: 18.03.2006 AMD 2600, 2024RAM ,WIN XP PROF-SP3, ACAD 2005, Firmenrechner,
|
erstellt am: 03. Jul. 2008 21:23 <-- editieren / zitieren --> Unities abgeben:
danke, habe versuch den hinweis umzusetzen, hier mein Fehlversuch mit einer umgeschriebenen LSP, was ist falsch? (defun c:InsZWert ( / ins zw pt inspt) (princ "\nBlock wählen: " ) (setq ins (entsel)) (if ins (progn (setq ins (car ins) ;; zw (caddr(setq inspt (cdr(assoc 10 (entget ins))))) ;; Z-wert ;; zw (cadr(setq inspt (cdr(assoc 10 (entget ins))))) ;; x-wert ;; zw (car(setq inspt (cdr(assoc 10 (entget ins))))) ;; y-wert zw (car(setq att (entnext en)) ;; 1.attr-wert??? ;--------------------------------- ;;; Mit (setq en (car (entsel "\nBlockreferenz wählen: "))) kriegst Du den Block ;;; mit (setq att (entnext en)) kriegst Du sein erstes Attribut. ;;; Mit (entget att) kannst Du Dich ja auch davon überzeugen, das richtige Attribut gefunden zu haben. ;;---------------------------------- ) (initget 1) (setq pt (getpoint inspt "\nTexteinfügepunkt: ")) ;; (mk:text LAYER STIL STARTPUNKT DREHW HÖHE BREITE TEXT ;; (mk:text "0" "Standard" pt 0.0 2.5 1.0 (rtos zw 2 2)) (mk:text "Vp-PNR" "ARIAL" pt 0.0 1.0 1.0 (rtos zw 2 2)) ) ) (princ) ) ------------------ Gruß vom Bauvermesser; Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 03. Jul. 2008 21:35 <-- editieren / zitieren --> Unities abgeben: Nur für Bauvermesser
Die Variable, der du das Insertobject zuweißt heißt INS , nicht EN ..also muss statt (setq att (entnext en)) -> (setq att (entnext INS)) stehen ... (was soll eigentlich das car davor bewirken??? ) Besser du überprüftst mit GC66=1 auch erstmal, ob die Blockreferenz überhaupt Attribute hat. ------------------ - 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 |
archtools Mitglied
Beiträge: 943 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 03. Jul. 2008 22:15 <-- editieren / zitieren --> Unities abgeben: Nur für Bauvermesser
Zitat: Original erstellt von Bauvermesser: danke, habe versuch den hinweis umzusetzen, hier mein Fehlversuch mit einer umgeschriebenen LSP, was ist falsch?;
Wie Cadmium feststellt, ist an Deinem Code falsch, dass Du ziemlich wirr drauf los schreibst, und dass Du dabei zwangsläufig zu solchen Flüchtigkeitsfehlern kommst. Du hättest doch bloß meine drei Lisp-Ausdrücke via Copy&Paste zu übernehmen brauchen ... Die Frage, die ich Dir gestellt habe, hast Du nicht beantwortet.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bauvermesser Mitglied Vermesser
Beiträge: 460 Registriert: 18.03.2006 AMD 2600, 2024RAM ,WIN XP PROF-SP3, ACAD 2005, Firmenrechner,
|
erstellt am: 05. Jul. 2008 22:14 <-- editieren / zitieren --> Unities abgeben:
ja, ja ich geb es ja zu . Habe leider keine Ahnung was die Welt und Autocad zusammen hält. Hatte in meinem laienhaften Wahn gedacht mit dem austausch einer Befehlszeile komme ich zum Ziel, aber denkste. Für mich war die Befehlszeile "(setq att (entnext en))" die Lösung! "Du hättest doch bloß meine drei Lisp-Ausdrücke via Copy&Paste zu übernehmen brauchen .."....-- aber an welche stelle ? Die Hinweise "dann mit dem Attributwert noch ein simmples (Command "Text" ...) oder auch ein (vla-AddText... oder ein (Entmake ..." sind ohne genau Angaben an welcher Stelle für mich als LSP -Niete nicht anwendbar. Aber trotzdem schönen Dank, vielleicht finde ich im Forum noch was wo ein 1.Attribut (PNR) ausgelesen wird. Das mit dem " zw (car" ist natürkich quatsch! Dachte das "en " bedeutet 1.Attribut. Ich will also aus einem Block mit 3 Attributen (PNR, Höhe, COD) den ersten auslesen (Kopieren) und als TXT auf einen anderen Layer schreiben ,werde ich das mit eurer Hilfe noch schaffen. Gerne würde ich mir am Jahresende auch mal auf die Schulter klopfen und sagen "gut gemacht!". Auch wenn ich nur von anderen LSP´s lebe, und mich mit fremden Federn schmücke, meinem Chef ist das egal. ------------------ Gruß vom Bauvermesser; Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
archtools Mitglied
Beiträge: 943 Registriert: 09.10.2004 Entwickler für AutoCAD, BricsCAD u.a., alle Systeme
|
erstellt am: 06. Jul. 2008 00:27 <-- editieren / zitieren --> Unities abgeben: Nur für Bauvermesser
Zitat: Original erstellt von Bauvermesser: ja, ja ich geb es ja zu . Habe leider keine Ahnung was die Welt und Autocad zusammen hält. Hatte in meinem laienhaften Wahn gedacht mit dem austausch einer Befehlszeile komme ich zum Ziel, aber denkste. Für mich war die Befehlszeile "(setq att (entnext en))" die Lösung!"Du hättest doch bloß meine drei Lisp-Ausdrücke via Copy&Paste zu übernehmen brauchen .."....-- aber an welche stelle ? Die Hinweise "dann mit dem Attributwert noch ein simmples (Command "Text" ...) oder auch ein (vla-AddText... oder ein (Entmake ..." sind ohne genau Angaben an welcher Stelle für mich als LSP -Niete nicht anwendbar. Aber trotzdem schönen Dank, vielleicht finde ich im Forum noch was wo ein 1.Attribut (PNR) ausgelesen wird. Das mit dem " zw (car" ist natürkich quatsch! Dachte das "en " bedeutet 1.Attribut. Ich will also aus einem Block mit 3 Attributen (PNR, Höhe, COD) den ersten auslesen (Kopieren) und als TXT auf einen anderen Layer schreiben ,werde ich das mit eurer Hilfe noch schaffen. Gerne würde ich mir am Jahresende auch mal auf die Schulter klopfen und sagen "gut gemacht!". Auch wenn ich nur von anderen LSP´s lebe, und mich mit fremden Federn schmücke, meinem Chef ist das egal.
Tja, das Problem ist, dass einige hier wie ich mit LISPs den Lebensunterhalt bestreiten. Klar wirst Du manchmal auch eine fertige Lösung finden, aber die meisten der kompetenteren Leute beschränken sich hier darauf, Dir Tipps zu geben, mit denen Du Dein Problem dann selber lösen kannst. Natürlich wäre Dein Problem in einer halben Minute mit einem aus dem Stegreif zusammen gekloppten Programm erledigt, aber dann käme doch gleich der nächste ... Also sieht man es hier lieber, wenn Du die Hürden selber nimmst. Das dauert zwar erst mal ein wenig, aber wenn Du's kapiert hast, dann gehörst Du demnächst auch zu denen, die hier Tipps geben ... So, nach dem Sermon noch ein paar Tipps - Du kannst Dich dann ja in der Online-Hilfe schlau machen: Im Wesentlichen wird Dein Problem außer mit den drei kleinen Funktionen, die Du schon gekriegt hast, mittels ENTGET, SUBST und ENTMOD gelöst. Viel Spaß dabei :-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 07. Jul. 2008 08:42 <-- editieren / zitieren --> Unities abgeben: Nur für Bauvermesser
Morgen, sooo... (defun c:InsZWert (/ i atts daten doc ename) (setq doc (vlax-get (vlax-get-acad-object) "activedocument")) (setq ename (car (entsel "Block: "))) (setq i (vlax-ename->vla-object ename)) (if (and (= (vla-get-hasattributes i) :vlax-true) (safearray-value (setq atts (vlax-variant-value (vla-getattributes i) ) ) ) ) (foreach tag (vlax-safearray->list atts) (setq daten (cons (cons (vla-get-tagstring tag) (vla-get-TextString tag) ) daten ) ) ) ) (vla-addtext (if (= 1 (vla-get-activespace doc)) (vla-get-modelspace doc) (vla-get-paperspace doc) ) (strcat (cdr(car(reverse daten)))) (vlax-3d-point (getpoint "\nPunkt picken: ")) (getvar "textsize") ) ) mfg heiko Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 07. Jul. 2008 08:48 <-- editieren / zitieren --> Unities abgeben: Nur für Bauvermesser
@Dorfy : nicht immer drauflos (zusammenkopierten -> wozu brauchst du den Tagstring? und was soll (getvar "textsize") ) Code posten .. zuerst die Aufgabenstellung lesen! ------------------ - 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 |
Bauvermesser Mitglied Vermesser
Beiträge: 460 Registriert: 18.03.2006 AMD 2600, 2024RAM ,WIN XP PROF-SP3, ACAD 2005, Firmenrechner,
|
erstellt am: 11. Jul. 2008 10:34 <-- editieren / zitieren --> Unities abgeben:
|
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 11. Jul. 2008 10:59 <-- editieren / zitieren --> Unities abgeben: Nur für Bauvermesser
|
Bauvermesser Mitglied Vermesser
Beiträge: 460 Registriert: 18.03.2006 AMD 2600, 2024RAM ,WIN XP PROF-SP3, ACAD 2005, Firmenrechner,
|
erstellt am: 11. Jul. 2008 22:10 <-- editieren / zitieren --> Unities abgeben:
|
Bauvermesser Mitglied Vermesser
Beiträge: 460 Registriert: 18.03.2006 AMD 2600, 2024RAM ,WIN XP PROF-SP3, ACAD 2005, Firmenrechner,
|
erstellt am: 17. Jul. 2008 21:32 <-- editieren / zitieren --> Unities abgeben:
Ich denke das sich so mancher über meine dummen Fragen manchmal Totlacht, warum hat mir denn niemand diesen Tipp gegeben? "(setq attribut (entnext testblock)) -> über "entnext" gerätst du an das erste Attribut des Blockes mit jedem weiteren "entnext" die nächsten, in der Reihenfolge der Attributsabfrage." Dies hätte mir manches Rumbasteln erspart. So einfach aber wissen muss man es. Weil wir eben bei den Dummen Fragen waren, ich möchte in einer LSp in der ein Attr ausgelesen wird, dieses am Ende der Lisp von Mtext in Text umwandeln und habe diese Zeile eingefügt: (command "_explode" "Mtxt") Dies geht aber nur nach der nochmaligen Anwahl des Mtext. Wie kann ich das abarbeiten ohne nochmalige Objektwahl in der Lsp in einem Ritt zu Ende bringen. Wäre schön wenn mir jemand eine Stelle im Forum zeigt wo die Notwendige Codierung für solche Abfragen erläutert ist. ------------------ Gruß vom Bauvermesser; Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
wronzky Ehrenmitglied V.I.P. h.c. CAD-Dienstleistungen für Architekten
Beiträge: 2154 Registriert: 02.05.2005 CAD: AutoCAD 2.6 bis 2014 ADT 2005 - 2014 Arcibem System: Windows 2000, XP, NO VISTA Internet-Startseite: http://www.archi.de
|
erstellt am: 17. Jul. 2008 21:48 <-- editieren / zitieren --> Unities abgeben: Nur für Bauvermesser
wo ist denn mein Beitrag und mein [Edit] hin? Na, egal, war eh nur Murks ------------------ Henning Jesse [Diese Nachricht wurde von wronzky am 17. Jul. 2008 editiert.] [Diese Nachricht wurde von wronzky am 17. Jul. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 18. Jul. 2008 07:02 <-- editieren / zitieren --> Unities abgeben: Nur für Bauvermesser
Morgen schau dir mal "entlast" an damit bekommst du das letzte Objekt und wenn es mehre letzte sind, eine Markierung setzen und ab da mit entnext abgreifen... mfg heiko Edit: (setq deintext (vla-add...))
[Diese Nachricht wurde von Dorfy am 18. Jul. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 18. Jul. 2008 08:18 <-- editieren / zitieren --> Unities abgeben: Nur für Bauvermesser
Zitat: Original erstellt von Bauvermesser:
ich möchte in einer LSp in der ein Attr ausgelesen wird, dieses am Ende der Lisp von Mtext in Text umwandeln und habe diese Zeile eingefügt: (command "_explode" "Mtxt")
direkt nachdem dein MTEXT im Programm erzeugt worden ist, baust du die Zeile (setq MTEXT (entlast)) ein. Damit merkst du dir das zuletzt erzeugte Objekt(den Mtext) am Ende kannst du dann (command "_explode" MTEXT) aufrufen, wo dem Explode-Befehl dann das gemerkte Objekt übergeben wird. P.S: Warum erzeugst du nicht gleich einen Text?
------------------ - 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 |
Bauvermesser Mitglied Vermesser
Beiträge: 460 Registriert: 18.03.2006 AMD 2600, 2024RAM ,WIN XP PROF-SP3, ACAD 2005, Firmenrechner,
|
erstellt am: 24. Jul. 2008 11:23 <-- editieren / zitieren --> Unities abgeben:
läuft leider nicht, muss immer Objekt nochmal anwählen, auch wenn ich die Teile (setq MTEXT (entlast)) gleich nach der Attributsauswahl einfüge MTXT (cdr (assoc 1 (entget (entnext (entnext ename))))) ) (PRINC ".") (COMMAND "_LEADER" (CDR (ASSOC 10 eliste)) pkt "" MTXT "") (setq MTEXT (entlast)) (command "_explode" "MTXT") ;; falls Auflösung in TXT Notwendig ;; (ENTDEL ename) ; Text kann dann eigentlich gelöscht werden ) was ist bitte noch falsch ------------------ Gruß vom Bauvermesser; Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Projektleiter:in (m/w/d) Tragwerksplanung im konstruktiven Ingenieur- und Brückenbau | Bei STRABAG bauen rund 86.000 Menschen an 2.400 Standorten weltweit am Fortschritt. Einzigartigkeit und individuelle Stärken kennzeichnen dabei nicht nur unsere Projekte, sondern auch jede:n Einzelne:n von uns. Ob im Hoch- und Ingenieurbau, Straßen- und Tiefbau, Brücken- und Tunnelbau, in der Projektentwicklung, Baustoffproduktion oder im Gebäudemanagement ? wir denken Bauen weiter, um der innovativste und nachhaltigste Bautechnologiekonzern Europas zu werden.... | Anzeige ansehen | Bauwesen |
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 24. Jul. 2008 11:33 <-- editieren / zitieren --> Unities abgeben: Nur für Bauvermesser
Wo sind die Verständnisfortschritte deinerseits ? Von Leader war nie die Rede .. aber egal , auch hier ist der Mtext das zuletzt erzeugte Objekt. Also klappt (COMMAND "_LEADER" (CDR (ASSOC 10 eliste)) pkt "" MTXT "") (setq MTEXT (entlast)) (command "_explode" MTEXT)
du darfst dem Explode keinen String übergeben, sondern das MTEXTOBJEKT!
------------------ - 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 |