| |
| 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: rename Image/Bildname (1427 mal gelesen)
|
steppe2000 Mitglied
Beiträge: 108 Registriert: 03.04.2006 windows 7 64bit autodesk 2011 64bit office 2010 32bit ms-(sql) server 2008 R2
|
erstellt am: 15. Sep. 2015 15:31 <-- editieren / zitieren --> Unities abgeben:
hi an alle lispler und sonstigen Programmierer auf AutoCAD... kann mir jemand sagen wie ich einem Image in AutoCAD via lisp... einen anderen Namen geben kann... Ich kann zwar den Dateipfad ändern aber nicht den namen dazu? bei XRefs geht es ja einfach ... aber leider nicht bei den Images, die werden nur im Dialog in AutoCAD gleich behandelt?! bin um jede Hilfe froh! DANKE und LG @all
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 15. Sep. 2015 15:53 <-- editieren / zitieren --> Unities abgeben: Nur für steppe2000
Antwort fällt etwas kurz aus, aber da ist alles drin: (setq EL (entget (cdr(assoc 340 (entget(car(entsel "\n Bild wählen: "))))))) Bild wählen: ((-1 . <Objektname: 7ff60020b200> ) (0 . "IMAGEDEF") (5 . "600") (102 . "{ACAD_REACTORS") (330 . <Objektname: 7ff60020b1e0> ) (330 . <Objektname: 7ff60020b210> ) (102 . "}") (330 . <Objektname: 7ff60020b1e0> ) (100 . "AcDbRasterImageDef") (90 . 0) (1 . "Z:\\1.JPG") (10 725.0 402.0 0.0) (11 0.264583 0.264583 0.0) (280 . 1) (281 . 5)) (entmod(subst '(1 . "Z:\\2.JPG")(assoc 1 EL)EL)) ------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
steppe2000 Mitglied
Beiträge: 108 Registriert: 03.04.2006 windows 7 64bit autodesk 2011 64bit office 2010 32bit ms-(sql) server 2008 R2
|
erstellt am: 15. Sep. 2015 16:27 <-- editieren / zitieren --> Unities abgeben:
wenn ich das richtig sehe, dann wir hier der Dateipfad geändert... ich suche aber die möglichkeit den Namen des Image zu ändern... geht vermutlich auch anders aber bei referenzen mach ich's so: (command "_-RENAME" "_BLOCK" NameAlt NameNeu) das bäuchte ich auch für Images??? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
Beiträge: 13527 Registriert: 30.11.2003 .
|
erstellt am: 15. Sep. 2015 16:51 <-- editieren / zitieren --> Unities abgeben: Nur für steppe2000
|
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 15. Sep. 2015 16:59 <-- editieren / zitieren --> Unities abgeben: Nur für steppe2000
Und falls weder ein anderes Bild referenziert werden soll, noch der Name der Bilddatei geändert werden soll, sondern der (Bild-)Referenzname => der Steht im Dictionary: (setq DictList (entget(namedobjdict))) (setq ImageDict (entget(cdar(cdr(member '(3 . "ACAD_IMAGE_DICT") DictList))))) ------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
steppe2000 Mitglied
Beiträge: 108 Registriert: 03.04.2006 windows 7 64bit autodesk 2011 64bit office 2010 32bit ms-(sql) server 2008 R2
|
erstellt am: 15. Sep. 2015 18:05 <-- editieren / zitieren --> Unities abgeben:
ja genau das suche ich... und wenn ich mich jetzt noch mal dumm anstellen darf... und wie schaut das aus, wenn ich jetzt "einfach" alle Bilder in einer DWG durchnummerierren will... ohne sortierung zuvor... einfach 1, 2, 3,... Bitte DANKE!!!! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 15. Sep. 2015 21:35 <-- editieren / zitieren --> Unities abgeben: Nur für steppe2000
Stellen darfst du, es Muß ja keiner antworten Du mußt eine geänderte Liste erstellen, dabei einen "Zähler" mitlaufen lassen der sich pro Referenzname - also im Fall einer nötigen Änderung eines Eintrages - erhöht und im Anschluß schreibst du das Objekt mit der geänderten Liste um. Zähler setzen (setq n 0) Liste durcharbeiten mit foreach, while, repeat oder mapcar In der Schleife prüfen um was für einen Eintrag es sich handelt (if (= 1 (car item)) Wenn es zutrifft Zähler erhöhen und Eintrag ändern (cons 1 (rtos (setq n (1+ n)) 2 0)) ansonsten unverändert übernehmen Wenn die Liste nun komplett und geändert ist, Objekt ändern mit (entmod neueListe) Habe jetzt Gruppencode 1 geschrieben, falls das nicht richtig ist: Den richtigen ist siehst du ja aber selbst in der Entitylist. ------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
steppe2000 Mitglied
Beiträge: 108 Registriert: 03.04.2006 windows 7 64bit autodesk 2011 64bit office 2010 32bit ms-(sql) server 2008 R2
|
erstellt am: 16. Sep. 2015 13:16 <-- editieren / zitieren --> Unities abgeben:
irgend wie komm ich beim Austauschen der Werte nicht zurecht... wo liegt denn hier der Fehler... Code: (setq bildCount 0 sset_bilder (ssget "X" '((0 . "IMAGE"))) entlist_bild (entget (ssname sset_bilder 0)) ; IMAGE entlist2_bild (entget (cdr (assoc 340 entlist_bild))) ; IMAGEDEF entlist3_bild (entget (cdr (assoc 330 entlist2_bild))) ; DICTIONARY entlist3x_bild (member (assoc 3 entlist3_bild) entlist3_bild) ; Bilderliste von DICTIONARY ) (while (/= bildCount (length entlist3x_bild)) (setq nameAkt (strcase (cdr (nth bildCount entlist3x_bild))) nameNeu (strcat "BildNr_" (+ 1 bildCount)) ) (entmod (subst (3. nameNeu) (3. nameAkt) entlist3_bild)) (setq bildCount (1+ bildCount)) )
... das läuft nicht so wie ich will.... (entmod (subst (3. nameNeu) (3. nameAkt) entlist3_bild)) ????? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 16. Sep. 2015 13:58 <-- editieren / zitieren --> Unities abgeben: Nur für steppe2000
entlist3x_bild ist für gar nichts gut, eine unvollständige Entitylist.. weg damit, entlist3_bild ist die Liste mit der du arbeiten mußt. entlist3x_bild sieht so aus: ((3 . "BildRefNameA") (350 . <Objektname: 7ff6006870f0> ) (3 . "BildRefNameB") (350 . <Objektname: 7ff600687120> ) (3 . "BildRefNameC") (350 . <Objektname: 7ff600687150> )) Daher ist dein (length entlist3x_bild) für while nicht stimmig. Fehler1: auch wenn es nicht crashed: Du vergleichst Äpfel mit Birnen: (ssget "X" '((0 . "IMAGE"))) liefert dir die Bildobjekte, deren Anzahl hat nicht mit der Anzahl der BildReferenzen zutun. An der Stelle sollte man noch mal überlegen ob Bilddatei,Referenzeintrag und Image-Objekte richtig unterschieden&verstanden wurden. Ich kann 1 Bilddatei, 2xReferenzieren(mit unterschiedlichen Referenznamen), und jeweils 3x Anzeigen lassen (IMAGE Objekte, welches man mit ssget erfassen kann). EDIT: Dann würdest du 6x eine Bilddatei sehen, welches 3x duch ReferenzA und 3x durch ReferenzB angezeigt wird. Fehler2: In der while-Schleife möchtest du einen neuen String(nameneu) erstellen, dabei versuchst du 2 Strings miteinander zuverbinden, übergibst jedoch einen String und einen Integer(Zahl), damit crashed "strcat", welches nur Strings erwartet. Wie man aus der Zahl einen String erhält habe ich bereits oben gezeigt. Fehler3: im (entmod ...) rufst du, ohne es zu wollen, eine Funktion 3 auf, eine Funktion 3 wird es wohl nicht geben.. nächster Crash (3 . irgendwas) sollte zu (cons 3 irgendwas umgeschrieben werden, so wird der Ausdruck ausgewertet und man erhält ein DottedPair wie gewünscht.) Code: (progn (setq BildCount 0 BildRef_el-ALT (entget(cdar(cdr(member '(3 . "ACAD_IMAGE_DICT") (entget(namedobjdict)))))) ) (setq BildRef_el-NEU (mapcar '(lambda(dp)(if (= 3 (car dp)) (cons 3 (strcat "BildNr_" (itoa (setq Bildcount (1+ Bildcount))))) dp ) ) BildRef_el-ALT ) ) (entmod BildRef_el-NEU) )
------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
steppe2000 Mitglied
Beiträge: 108 Registriert: 03.04.2006 windows 7 64bit autodesk 2011 64bit office 2010 32bit ms-(sql) server 2008 R2
|
erstellt am: 17. Sep. 2015 11:14 <-- editieren / zitieren --> Unities abgeben:
Super vielen Dank für deine ausführliche Antwort... jetzt geht's... ich bin ja nicht wirklich ein Lisp'ler oder so... ich mach das immer mehr notgedrungen... und "klau" mir immer einzelne Bausteine von überall her... daher auch das mit den Apfeln und Birnen... Weil ich's nicht besser weiss Wo kann man diese Dinge über Entyties, Dictionary... usw.. wo steht was, wo findet man was... usw. nachlesen... gibt es hier eine brauchbare Lektüre oder Doku? DANKE noch mal für die Hilfe!!! LG s. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 17. Sep. 2015 11:36 <-- editieren / zitieren --> Unities abgeben: Nur für steppe2000
". daher auch das mit den Apfeln und Birnen."Bilddatei, Bildreferenzen und "IMAGE"Objekte(in der Eigenschaftenpalette=Pixelbild), das ist reines AutoCAD-Benutzer Wissen und hat zunächst erst mal nichts mit Programmierung zutun"Wo kann man diese Dinge über Entyties, Dictionary... usw.. wo steht was, wo findet man was... usw. nachlesen... gibt es hier eine brauchbare Lektüre oder Doku?" Die Frage liest sich einfacher wie die Antwort fällt. Es gibt zu so ziemlich allem eine Beschreibung, das Problem ist dabei: Dem Lernwilligen fehlt einfach die (oft) die Grundlage es zu verstehen. Eine Anleitung zu einzelnen Dingen von 0 bis Ende gibt es nicht(man würde auf die Art und Weise ja unzählige Wiederholungen niederschreiben müssen). Daher findet man in der Hilfe zu IMAGE wunderbare Infos(DXF Aufbau als Grundlage), es hätte dir aber nicht sofort den AHA-Effekt gegeben. Am schönsten ist aber das selbst (zurecht) finden, dann sitzt das Wissen auch wirklich Lerne DXF-Aufbau (wenn man sich zunächst mit oldschool AutoLisp beschäftigt), die DXF-Referenz gibt es von AutoDesk direkt als PDF oder in deiner Hilfe F1. Und das wirkliche lesen eine DXF-Datei im Texteditor bringt den Rest. Man muß nicht alles verstehen, aber der groben Aufbau insgesamt und von einzelnen Objekten sollte schon drin sein. Für den leichten (AutoLisp)Einstieg immer wieder gerne genommen: http://www.tutorial.autolisp.info/ <arbeite jede einzelne Sache selbst durch und gehe erst weiter wenn du es verstanden hast.> Und für die AutoLisp-Funktionen würde ich noch die deutsche LispR14 Doku dazu nehmen(ab und an fällt englisch nicht leicht). ------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |