| |
| 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, eine Pressemitteilung
|
Autor
|
Thema: Blockattribute bearbeiten (3125 mal gelesen)
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 24. Aug. 2011 14:27 <-- editieren / zitieren --> Unities abgeben:
Hi! Ich habe Blöcke, deren Attribut mit einem Textfield versehen sind, das gekoppelt mit der Z-Position unterschiedliche Attributwerte enthält. Am Block selbst sieht man, das das Attribut grau hinterlegt ist (Textfield). Jetzt möchte ich gern alle Blöcke, die mit einem Textfield versehen sind in einfache Texte umformen. Das geht in dem ich einzeln mit attedit oder eattedit auf den Block klicke und dann convert field to text drücke. Gibt es diese Auflösfunktion auch in dem ich alle Blöcke mit einem Mal wähle ?
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Meldin Mitglied
Beiträge: 398 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 24. Aug. 2011 21:32 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Hi, mit Bordmitteln wohl nicht aber da du ja hier im LISP Forum schreibst besteht durchaus die Möglichkeit das zu Programmieren. Du brauchst nur den Text einmal Tauschen, in etwa so: X-Wert des Attributs in "blablabla" tauschen und anschließend wieder in X-Wert. Geht wunderbar in Lisp sowie ActiveX. ------------------ Gruß Wolfgang Alias: Rabbit007 und Wolli1 die aus unerklärlichen Gründen aus dem System hier gelöscht wurden. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 25. Aug. 2011 08:46 <-- editieren / zitieren --> Unities abgeben:
wie kommen ich an die Attribute ran, wenn die in einer Unterliste stehen ? ( (-1 . <Entity name: 7ffff77fe00> ) (0 . "INSERT") (330 . <Entity name: 7ffff7449f0> ) (5 . "3C7F0") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbBlockReference") (66 . 1) (2 . "PLUSHÖJD") (10 -81.5273 82.0875 0.0) (41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0) ) ( (-1 . <Entity name: 7ffff77fe20> ) (0 . "ATTRIB") (330 . <Entity name: 7ffff77fe00> ) (5 . "3C7F2") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (100 . "AcDbText") (10 -81.2257 81.8432 0.0) (40 . 0.5) (1 . "123") (50 . 0.0) (41 . 0.8) (51 . 0.0) (7 . "SIMPLEX8") (71 . 0) (72 . 0) (11 0.0 0.0 0.0) (210 0.0 0.0 1.0) (100 . "AcDbAttribute") (280 . 0) (2 . "NIVÅ") (70 . 8) (73 . 0) (74 . 0) (280 . 0) (-3 ( "AcDbBlockRepETag" (1070 . 1) (1071 . 4) (1005 . "0") ) ) ) ( (-1 . <Entity name: 7ffff77fe30> ) (0 . "SEQEND") (330 . <Entity name: 7ffff77fe00> ) (5 . "3C7F3") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (-2 . <Entity name: 7ffff77fe00> ) ) [Diese Nachricht wurde von cadplayer am 25. Aug. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Meldin Mitglied
Beiträge: 398 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 25. Aug. 2011 09:43 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Hi, ja hast es doch geschafft ans Attribut zu kommen daher verstehe ich die Frage nicht ganz. Denn auch bei dir in den Listen, scheint es doch auch so auszusehen als ob auf das Objekt des Attributs ein entget angewendet wurde. ------------------ Gruß Wolfgang Alias: Rabbit007 und Wolli1 die aus unerklärlichen Gründen aus dem System hier gelöscht wurden. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 25. Aug. 2011 09:57 <-- editieren / zitieren --> Unities abgeben:
Nicht ich habe es geschafft, sondern ein Tool von Lee-Mac. Leider blicke ich in dem Code nicht ganz durch. Vielleicht kann man mir weiterhelfen, wo die Abfrage für das Attribut kommt. ;;---------------------=={ Entity List }==--------------------;; ;; ;; ;; Displays the DXF Information for an entity. ;; ;;------------------------------------------------------------;; ;; Author: Lee McDonnell, 2010 - www.lee-mac.com ;; ;; ;; ;; Copyright © 2010 by Lee McDonnell, All Rights Reserved. ;; ;; Contact: Lee @ lee-mac.com ;; ;; Forums: Lee Mac @ TheSwamp.org, CADTutor.net, AUGI.com ;; ;;------------------------------------------------------------;; ;; Arguments: ;; ;; entity - the entity (ename) to query / dxf list ;; ;;------------------------------------------------------------;; (defun LM:EntityList ( entity / prin1x princx data xdata ) ;; © Lee Mac 2010 (defun prin1x ( x i ) (repeat i (princ " ")) (prin1 x)) (defun princx ( x i ) (repeat i (princ " ")) (princ x)) (cond ( (or (and (eq 'ENAME (type entity)) (setq data (entget entity))) (and (listp entity) (setq data entity) (setq entity (cdr (assoc -1 data)))) ) (princ "\n\n (\n") (mapcar (function (lambda ( pair ) (prin1x pair 2) (princ "\n")) ) data ) (if (setq xdata (assoc -3 (entget entity '("*")))) (progn (princx "(" 2) (prin1 (car xdata)) (princ "\n") (mapcar (function (lambda ( app ) (princx "(" 3) (princ "\n") (mapcar (function (lambda ( pair ) (prin1x pair 4) (princ "\n")) ) app ) (princx ")" 3) (princ "\n") ) ) (cdr xdata) ) (princx ")" 2) (princ "\n") ) ) (princ " )") (if (= 1 (cdr (assoc 66 data))) (progn (while (not (eq "SEQEND" (cdr (assoc 0 (entget (setq entity (entnext entity) ) ) ) ) ) ) (LM:EntityList entity) ) (LM:EntityList entity) ) ) ) ) (textpage) (princ) ) (defun c:ee nil (LM:EntityList (car (entsel)))) (defun c:eex nil (LM:EntityList (car (nentsel)))) 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: 25. Aug. 2011 10:07 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
vergleiche mal die entity list von zwei Blöcken einen mit und einen ohne Attribut achte auf GC 66 und "SEQEND" und bei dem mit gc 66 mal entnext entity ansetzen und schauen was passiert ggf in einer Schleife (while entnext....) und die entity list anschauen wenn ein seqend auftaucht Neue Erkenntnisse? ------------------ Mfg Heiko Elefantenjagd in Afrika "... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..." [Diese Nachricht wurde von Dorfy am 25. Aug. 2011 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: 25. Aug. 2011 10:56 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 25. Aug. 2011 11:16 <-- editieren / zitieren --> Unities abgeben:
Was ist "SEQEND" (if (setq AWS (ssget '((0 . "INSERT")))) (progn (setq I -1) (repeat (sslength AWS) (setq OBJ (ssname AWS (setq I (1+ I)))) (princ (cdr (entget obj))) ) ) ) So bekomme ich die "oberste Liste" zu sehen: ((0 . INSERT) (330 . <Entity name: 7ffff7449f0> ) (5 . 3C97D) (100 . AcDbEntity) (67 . 0) (410 . Model) (8 . 0) (100 . AcDbBlockReference) (66 . 1) (2 . koordinatpunkt) (10 -77.457 79.6443 0.0) (41 . 1.0) (42 . 1.0) (43 . 1.0) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0)) In GC (66 . 1) liegt die Unterliste für den Attributwert (vermutlich), wie kriege ich die auf? - wie gehe ich dann weiter vor @CADMIUM mit deinem Tool passiert nix nach Aufruf: FIELDATTS2ATTS [Diese Nachricht wurde von cadplayer am 25. Aug. 2011 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: 25. Aug. 2011 11:21 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 25. Aug. 2011 11:42 <-- editieren / zitieren --> Unities abgeben:
Mein Problem ist, wie ich mich durch die Listen hangeln soll (list (assoc 66 (entget obj)))... zeigt mir (66 . 1) (entnext obj)... zeigt mir <Entity name: 7ffff781860> wie soll ich weiter mit entnext vorgehen, um an die Attribute zu kommen Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 25. Aug. 2011 11:50 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
Dorfy Mitglied Double-Dipl.-Ing. Bleistiftanspitzer
Beiträge: 900 Registriert: 21.07.2006 AutoCad2007, ProE, HiCad
|
erstellt am: 25. Aug. 2011 12:06 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Zitat: Original erstellt von cadplayer:wie soll ich weiter mit entnext vorgehen, um an die Attribute zu kommen
na du erhältst ein entity - was kann man damit machen? löschen, verschieben, kopieren und wieder löschen versuch doch mal die entity liste von dem entnext entity zu erhalten (mit entget) und schau dir diese an... und dann die nächste ... usw ... bis gc 0 seqend kommt... wo ist das attribut und wo ist der wert und ... steht oben alles im code ------------------ Mfg Heiko Elefantenjagd in Afrika "... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..." [Diese Nachricht wurde von Dorfy am 25. Aug. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 25. Aug. 2011 13:18 <-- editieren / zitieren --> Unities abgeben:
Sorry dein Tool geht natürlich einwandfrei. Wenn ich es richtig verstehe wird mir jetzt die Unterliste von ( 66 . 1 ) angezeigt (((-1 . <Entity name: 7ffff7420b0> ) (0 . "SEQEND") (330 . <Entity name: 7ffff742080> ) (5 . "3C7F3") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (-2 . <Entity name: 7ffff742080> ))) Da ist aber von einem Attributeintrag nichts zu finden. Die GC´s die hier auftauchen, worunter sind die beschrieben in der Entw.hilfe Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Meldin Mitglied
Beiträge: 398 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 25. Aug. 2011 13:33 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Also wenn du einen Insert (Objekt) hast z.B. (setq MyBlockObj(car (entsel "\nBlock wählen : "))) fragst du hat er Attribs also assoc 66 entget MyBlockObj wenn ja solltest du MyBlockObj entnexen (entget(setq MyBlockObj(entnext MyBlockObj))) und das dann so lange bis bei assoc 0 "SEQEND" erscheint. Und dann hast du es vom Start von entnext bis zu seqend liegen dann deine Daten. Zudem habe ich mal aus meiner Sicht die Möglichkeiten zusammengefasst die mir ad-hoc eingefallen sind von einem Attribut das Schriftfeld zu entfernen. Code: ;;;AX ;;; (setq ss-attrib (vlax-ename->vla-object (car (nentsel "\nAttribut wählen : ")))) (setq txtstr (vla-get-Textstring ss-attrib)) (vla-put-Textstring ss-attrib "") (vla-put-Textstring ss-attrib txtstr) ;;;TEST;;; (dictsearch (cdr (assoc 360 (entget(vlax-vla-object->ename ss-attrib))))"ACAD_FIELD");;;LISP ;;; (setq ss-attrib(car (nentsel "\nAttribut wählen : "))) (entmod(subst(cons 1 "")(setq text(assoc 1 (entget ss-attrib)))(entget ss-attrib))) (entmod(subst text (assoc 1 (entget ss-attrib))(entget ss-attrib))) ;;;TEST;;; (dictsearch (cdr (assoc 360 (entget ss-attrib))) "ACAD_FIELD") ;;;Dic ;;; (setq ss-attrib(car (nentsel "\nAttribut wählen : "))) (dictremove (cdr (assoc 360 (entget ss-attrib))) "ACAD_FIELD") (entupd ss-attrib) ;;;TEST;;; (dictsearch (cdr (assoc 360 (entget ss-attrib))) "ACAD_FIELD") ;;; ;;;
------------------ Gruß Wolfgang Alias: Rabbit007 und Wolli1 die aus unerklärlichen Gründen aus dem System hier gelöscht wurden. [Diese Nachricht wurde von Meldin am 25. Aug. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 25. Aug. 2011 15:57 <-- editieren / zitieren --> Unities abgeben:
Ohne hier Bewertungen abzugeben, die Version (setq ss-attrib(car (nentsel "\nAttribut wählen : "))) (entmod(subst(cons 1 "")(setq text(assoc 1 (entget ss-attrib)))(entget ss-attrib))) (entmod(subst text (assoc 1 (entget ss-attrib))(entget ss-attrib))) ist mir schnell einleuchtend gewesen - ... ich hätte fast selbst drauf kommen können. Warum manchmal so umständlich denken. Grosses Dankeschön an aller Helfer. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Meldin Mitglied
Beiträge: 398 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 26. Aug. 2011 08:13 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 26. Aug. 2011 08:20 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Zitat: Original erstellt von cadplayer: die Version (setq ss-attrib(car (nentsel "\nAttribut wählen : "))) (entmod(subst(cons 1 "")(setq text(assoc 1 (entget ss-attrib)))(entget ss-attrib))) (entmod(subst text (assoc 1 (entget ss-attrib))(entget ss-attrib)))ist mir schnell einleuchtend gewesen - ... ich hätte fast selbst drauf kommen können. Warum manchmal so umständlich denken.
naja ... das Schriftfeld existiert dann aber immer noch.. SCHRIFTFELDAKT findet auch was ... und _attsync sollte man auch nicht aufrufen ... nicht immer sind die "einfachen" Lösungen für die Datenbank die besten. ( Ist wie mit dem Maßtext im Maßblock überschreiben) Aber warum du intelligente Daten wieder rücksetzten willst haste ja auch noch nicht verraten ... ???
------------------ - 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 |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 26. Aug. 2011 10:35 <-- editieren / zitieren --> Unities abgeben:
@ Meldin: klar funktioniert das - mich wundert das ich mit (assoc 1(entget (car (nentsel)))) "einfach" auf GC 1 zugreifen Mit (ssname (sslength (ssget '((0 . "INSERT")))) 0) - wie muss es weitergehen das ich auf GC 1 zugreifen kann, Ich steig nicht richtig durch -mit ssget erhalte ich den Auswahlsatz -mit ssslength die Anzahl der Objekte in AWS -mit ssname liefert mir den Elementnamen, bei Eingabe 0 kommt aber eine Fehlermeldnung, die ich nicht verstehe ; error: bad argument type: lselsetp 1 Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Meldin Mitglied
Beiträge: 398 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 26. Aug. 2011 10:40 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Also bei mir hat Zitat: SCHRIFTFELDAKT findet auch was ... und _attsync sollte man auch nicht aufrufen
keinen Erfolg etwas vom Schriftfeld wieder herzustellen. Sonst erkläre mal bitte kurz wie du vorgegangen bis. ------------------ Gruß Wolfgang Alias: Rabbit007 und Wolli1 die aus unerklärlichen Gründen aus dem System hier gelöscht wurden. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 26. Aug. 2011 10:41 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 26. Aug. 2011 10:44 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
Meldin Mitglied
Beiträge: 398 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 26. Aug. 2011 12:56 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Hi, du musst beachten (entsel) ist nicht (nentsel) bei einer Auswahl nimmt entsel immer das Objekt zu dem es gehört also klickst du auf ein Attribut erhälst du den Block und musst dich dann durchhangeln bis zu den Attributen. Nentsel dagegen liefert dir die Daten von dem Objekt das du tatsächlich angeklickt hast. Klickst du auf ein Attribut erhälst du auch die Daten von einem. Zu deinem Vorhaben: Du solltest glube ich anfangs kleinere steps machen und schauen was das jeweilige Ergebnis ist. Also zerlegen wir mal deine Zeile und schauen wo es hakt. Bei (ssget '((0 . "INSERT"))) sollte so etwas herauskommen <Selection set: 6a4> Schreiben wir es mal in eine Variable also (setq SS-Auswahl (ssget '((0 . "INSERT")))) Als nächstes möchtest du wissen wie viele Objekte in deiner Auswahl sind. Hier verwendest du sslength so aber diesmal nehmen wie die Variablen mit an board. (setq SS-AnzahlElemente (sslength SS-Auswahl)) Und als Ergebniss gibt es eine Ganzzahl also so viele Blöcke sie auch ausgewählt wurden in etwa sowas 17 oder 295 oder gar 1 Jetzt möchtest du den Objektnamen des ersten Elementes herausbekommen. Daher jetzt (ssname SS-AnzahlElemente 0) <-- und die Null für das erste Element. Und jetzt sollte es in deinem Kopf einen Knall geben !!! Eine wahr Explosion ! Falls nicht hier die Erklärung: Du schreist : ELEMENT NUMMER 1 WIE IST DEIN NAME !!! Antwort von SS-AnzahlElemente wie Name ich 17! Quatsch 17 ist kein Name sondern eine Zahl. Boom! Also denke ich ist der Fehler klar. Du fragst den falschen nach dem Namen. Eher sollte es so aussehen. (setq Endlich-ein-Name (ssname SS-Auswahl 0)) und dann (entget Endlich-ein-Name) Hoffe es ist jetzt etwas klarer dadurch geworden. ------------------ Gruß Wolfgang Alias: Rabbit007 und Wolli1 die aus unerklärlichen Gründen aus dem System hier gelöscht wurden. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 26. Aug. 2011 14:20 <-- editieren / zitieren --> Unities abgeben:
|
Meldin Mitglied
Beiträge: 398 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 26. Aug. 2011 20:44 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
@Cadmium Nee tut mir Leid da klappt etwas nicht so wie es sollte! Mein Muster, ein Block mit einem Attribut wo das Attribut als Schriftfeld zusammen mit dem Block erstellt wird. Wenn ich an dem unveränderten Block mit Schriftfeld SCHRIFTFELDAKT aus führe sagt er mir: 2 Schriftfeld(er) gefunden. 2 Schriftfeld(er) aktualisiert. wobei ja eigentlich nur eins da ist, könnte mit nur erklären das ein an der Blockdef hängt und eins am Attribut. Wenn dann (setq att1(car (nentsel "\nAttribut wählen : "))) (entmod (subst(cons 1 "")(setq text(assoc 1 (entget att1)))(entget att1))) (entmod (subst text (assoc 1 (entget att1))(entget att1))) ausgeführt wird verschwindet das Schriftfeld. Und SCHRIFTFELDAKT findet statt 2 nur noch 1. Also, SCHRIFTFELDAKT findet nur etwas wenn das Attribut als Schriftfeld zusammen mit dem Block erstellt wurde. Wenn in einem erstellten Block ein Attribut als Schriftfeld erstellt wird findet SCHRIFTFELDAKT nichts. Und _attsync hat bei mir in 2009 /64 und 2012 /64 keine Chance das Schriftfeld wieder herzustellen. Oder wie war da deine Vorgehensweise? Und wenn ich zudem noch dein Tool mit dem Oben beschriebenen Block mit FIELDATTS2ATTS von oben teste sagt mir SCHRIFTFELDAKT Objekte wählen: 1 gefunden Objekte wählen: 1 Schriftfeld(er) gefunden. 1 Schriftfeld(er) aktualisiert. Also da passt etwas nicht oder bin ich voll auf dem Holzweg? Ja gerade nochmals getestet und in deinem Tool wohl auch nicht berücksichtigt. Es sollte wohl noch einmal remove aufs tblobj ausgeführt werden um sauber zu sein! ------------------ Gruß Wolfgang Alias: Rabbit007 und Wolli1 die aus unerklärlichen Gründen aus dem System hier gelöscht wurden. [Diese Nachricht wurde von Meldin am 26. Aug. 2011 editiert.] [Diese Nachricht wurde von Meldin am 26. Aug. 2011 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 29. Aug. 2011 13:48 <-- editieren / zitieren --> Unities abgeben:
nach Aufruf: (setq AWS (ssget '((0 . "INSERT")))) (progn (setq I -1) (repeat (sslength AWS) (setq OBJ (entget (ssname AWS (setq I (1+ I))))) (if (assoc 66 OBJ) (while (/= (cdr (assoc 0 OBJ)) "SEQEND") (setq OBJ (entget (entnext (cdr (assoc -1 OBJ))))) kommt: (((-1 . <Entity name: 7ffff71ce30> ) (0 . "SEQEND") (330 . <Entity name: 7ffff71ce00> ) (5 . "3C7F3") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (-2 . <Entity name: 7ffff71ce00> )))
wenn ich die Zeilen einzeln aufrufe kommt: ((-1 . <Entity name: 7ffff71ce20> ) (0 . "ATTRIB") (330 . <Entity name: 7ffff71ce00> ) (5 . "3C7F2") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (100 . "AcDbText") (10 -77.8798 75.1307 0.0) (40 . 0.5) (1 . "00,00") (50 . 0.0) (41 . 0.8) (51 . 0.0) (7 . "SIMPLEX8") (71 . 0) (72 . 0) (11 0.0 0.0 0.0) (210 0.0 0.0 1.0) (100 . "AcDbAttribute") (280 . 0) (2 . "NIVÅ") (70 . 8) (73 . 0) (74 . 0) (280 . 0)) Das durchblättern in dem Block funktioniert also nicht richtig mit meiner Schleife, weiss einer warum? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 29. Aug. 2011 14:27 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 29. Aug. 2011 14:29 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Zitat: Original erstellt von cadplayer: nach Aufruf:(setq AWS (ssget '((0 . "INSERT")))) (progn (setq I -1) (repeat (sslength AWS) (setq OBJ (entget (ssname AWS (setq I (1+ I))))) (if (assoc 66 OBJ) (while (/= (cdr (assoc 0 OBJ)) "SEQEND") (setq OBJ (entget (entnext (cdr (assoc -1 OBJ))))) kommt: (((-1 . <Entity name: 7ffff71ce30> ) (0 . "SEQEND") (330 . <Entity name: 7ffff71ce00> ) (5 . "3C7F3") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (-2 . <Entity name: 7ffff71ce00> )))
wenn ich die Zeilen einzeln aufrufe kommt: ((-1 . <Entity name: 7ffff71ce20> ) (0 . "ATTRIB") (330 . <Entity name: 7ffff71ce00> ) (5 . "3C7F2") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (62 . 0) (100 . "AcDbText") (10 -77.8798 75.1307 0.0) (40 . 0.5) (1 . "00,00") (50 . 0.0) (41 . 0.8) (51 . 0.0) (7 . "SIMPLEX8") (71 . 0) (72 . 0) (11 0.0 0.0 0.0) (210 0.0 0.0 1.0) (100 . "AcDbAttribute") (280 . 0) (2 . "NIVÅ") (70 . 8) (73 . 0) (74 . 0) (280 . 0)) Das durchblättern in dem Block funktioniert also nicht richtig mit meiner Schleife, weiss einer warum?
nach der While-schleife wird der letzte Ausdruck zurückgegeben und das ist der mit dem SEQUEND , was zum Abbruch der Schleife führte...
------------------ - 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 |
Meldin Mitglied
Beiträge: 398 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 29. Aug. 2011 14:47 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Doch funktioniert schon, wenn du es einzel machst greifst du erst auf das 1 Objekt des Blocks zu dann das 2, 3, usw. bis Seqend dann kommt der nächste Block und wieder der nächste und und und Aber da die schleifen unheimlich schnell durchlaufen bist du da schnell am ende, und da dir immer nur das Ergebnis der letzten Klammer () zurückgegeben wir ist ein Seqend schon richtig. hier ein Beispiel: (+ 5 (+ 2 3)) das Ergebnis aus (+ 2 3) wirst du nie sehen da immer nur das Ergebnis der äußere Klammmer zurückgegeben wir also 10. Aber gib einfach mal die Ergebnisse mit Princ auf dem Bildschirm aus dann siehst du ja welche Daten durchlaufen werden. Hier das Beispiel. Code: (setq AWS (ssget '((0 . "INSERT")))) (progn (setq I -1) (repeat (sslength AWS) (setq OBJ (entget (ssname AWS (setq I (1+ I))))) (if (assoc 66 OBJ) (while (/= (cdr (assoc 0 OBJ)) "SEQEND") (setq OBJ (entget (entnext (cdr (assoc -1 OBJ))))) (princ Obj) (terpri) ) ) ) )
------------------ Gruß Wolfgang Alias: Rabbit007 und Wolli1 die aus unerklärlichen Gründen aus dem System hier gelöscht wurden. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 29. Aug. 2011 16:45 <-- editieren / zitieren --> Unities abgeben:
jep Ich habe die Zeilen wie folgt ersetzt: (while (/= (cdr (assoc 0 OBJ)) "ATTRIB") (setq OBJ (entget (entnext (cdr (assoc -1 OBJ))))) (entmod (subst (cons 1 "") (assoc 1 OBJ)) OBJ))); hier möchte ich gern die Liste (1 . "xx") löschen )))) Aber das will nicht funktionieren too few arguments; was heisst das für mich? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 29. Aug. 2011 20:53 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 30. Aug. 2011 09:10 <-- editieren / zitieren --> Unities abgeben:
Komisch... Die Funktion macht genau das was ich will jetzt, es wird nicht abgebrochen obwohl GC 0 ein "ATTRIB" ist (setq AWS (ssget '((0 . "INSERT")))) (progn (setq I -1) (repeat (sslength AWS) (setq OBJ (entget (ssname AWS (setq I (1+ I))))) (if (assoc 66 OBJ) (while (/= (cdr (assoc 0 OBJ)) "ATTRIB") (setq OBJ (entget (entnext (cdr (assoc -1 OBJ)))) DATA (assoc 1 OBJ)) (entmod (subst (cons 1 "") (assoc 1 OBJ) OBJ)) (entmod (subst DATA (assoc 1 OBJ) OBJ)) ) ) ) ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 30. Aug. 2011 09:51 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
|
Meldin Mitglied
Beiträge: 398 Registriert: 15.07.2011 ACA2020 Windows10
|
erstellt am: 31. Aug. 2011 17:26 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Ja deine Codeansätze waren auch schon mal besser :-) Ich weis nicht ob es dir helfen wird wenn man die paar Zeilen vor sagt, denn wenn du das hier verstanden hast wird der Rest den du je an Progs schreiben wirst um so leichter für dich zu verstehen sein. (while (/= (cdr (assoc 0 OBJ)) "ATTRIB") Hier abbrechen wenn du ein Attribut bist. Ich dachte genau die möchtest du verändern? ------------------ Gruß Wolfgang Alias: Rabbit007 und Wolli1 die aus unerklärlichen Gründen aus dem System hier gelöscht wurden. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 21. Sep. 2011 14:59 <-- editieren / zitieren --> Unities abgeben:
(setq NUM (getreal "Wert eingeben:")) (if (setq AWS (ssget '((0 . "INSERT")))) (progn (setq I -1) (repeat (sslength AWS) (setq OBJ (entget (entnext (ssname AWS(setq I (1+ I))))))) (setq DATA (atof (cdr (assoc 1 OBJ)))) (setq ERG (+ DATA NUM)) (setq ERG (subst (cons 1 (rtos ERG 2 2)) (assoc 1 OBJ) OBJ)) (entmod ERG) ) ) In der repeat-Schleife steht doch das die var ERG modifiziert werden soll, warum tuts das nur immer für das letzt gewählte Attribut Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
spider_dd Mitglied
Beiträge: 1144 Registriert: 27.11.2003 Win 10Pro Intel(R) Core(TM) i7-7700 NVIDIA Quadro P1000 ACAD, Civil-3D 2018
|
erstellt am: 21. Sep. 2011 15:12 <-- editieren / zitieren --> Unities abgeben: Nur für cadplayer
Zitat: Original erstellt von cadplayer: In der repeat-Schleife steht doch das die var ERG modifiziert werden soll, warum tuts das nur immer für das letzt gewählte Attribut
Weil Du in der (setq OBJ ... zeile Deine repeat-Schleife schon wieder schließt (Klammern zählen!). Alles ab (setq DATA ... wird dann genau 1-mal abgearbeitet, mit dem letzten Objekt. gruß Thomas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 21. Sep. 2011 15:23 <-- editieren / zitieren --> Unities abgeben:
|