| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Blöcke mit Lisp auf Layer 0 und Farbe von Block setzen (5536 mal gelesen)
|
charlieBV Ehrenmitglied V.I.P. h.c. Bauzeichnerin
Beiträge: 9317 Registriert: 28.08.2003
|
erstellt am: 28. Nov. 2003 15:29 <-- editieren / zitieren --> Unities abgeben:
Hallöchen allerseits, ich hatte mich schon sehr gefreut, dass ich mit meinen wenigen (kaum vorhandenen Lisp-Halbwissen) eine Lisp geändert habe, die alle Elemente innerhalb eines Blockes auf den Layer 0 legen und die Farbe von Block setzen. Das klappt auch, allerdings nicht, wenn die Elemente die Farbe von Layer haben (vermute ich, so sieht es zumindest aus). Ich habe die nuke.lsp von Cadwiesel genommen und für unsere Verhältnisse angepasst: (defun To-0( BLCK / BNAME BLIST E EDATA SPIN TMP ) ;;; Prints a pinwheel on the command line (defun Spin ( ) (setq SYM (cond ((= SYM nil) "-") ((= SYM "-") "\\") ((= SYM "\\") "|") ((= SYM "|") "/") ((= SYM "/") "-") ) ) (princ (strcat "\rScanning... " SYM " ")) );end spin (if (=(type BLCK)(read "LIST"))(setq TMP(car BLCK) BLIST(cdr BLCK) BLCK TMP TMP nil)) (setq BLCK(tblsearch "BLOCK" BLCK)) (if (and (/=(logand(cdr(assoc 70 BLCK))1)1) ;skips annomyous blocks (/= (logand(cdr(assoc 70 BLCK))4)4) ;skips xrefs );and (progn (setq E (cdr (assoc -2 BLCK))) (while E (if (=(cdr(assoc 0 (entget E))) "INSERT") ;If the object is a block (progn (setq BNAME(cdr(assoc 2(entget E)))) ;save the name to a list (if (not (member BNAME BLIST)) (if (not BLIST)(setq BLIST (list BNAME)) ;create the list if it doesn't exist (setq BLIST(append BLIST(list BNAME))) );if );if );progn );if (setq EDATA (entget E)) (if(assoc 62 EDATA) ;Resets object color to BYLAYER if it isn't. (setq EDATA(subst(cons 62 "0")(assoc 62 EDATA)EDATA)) );if (if(assoc 6 EDATA) ;Resets object linetype to BYBlock if it isn't. (setq EDATA(subst(cons 6 "BYBLOCK")(assoc 6 EDATA)EDATA)) );if (setq EDATA(subst (cons 8 "0")(assoc 8 EDATA)EDATA));changes layer to 0 (entmod EDATA);updates entity (setq E (entnext E));get next enitiy, nil if end of block (Spin) );end while E );progn );if BLIST; returns names of any nested blocks );defun (defun C:NUKE( / BLK_NM CHOICE E EDATA IDX PK_BLK SS) (command "._undo" "m") (setq CHOICE "S") (initget "G S") (setq CHOICE(getkword (strcat "\n<G>lobal or <S>elect block: <" CHOICE "> "))) (if(not CHOICE)(setq CHOICE "S")) (if (= (strcase CHOICE) "G") ;global nuke (while (setq BLK_NM(tblnext "BLOCK" (null BLK_NM))) (TO-0 (cdr(assoc 2 BLK_NM))) );while ;nuke selected block (progn (prompt "\nSelect Block(s) to Nuke: ") (setq SS(ssget '((0 . "INSERT")))) (setq IDX 0) (repeat (sslength SS) (setq BLK(cdr(assoc 2 (entget(ssname SS IDX))))) (cond (PK_BLK (setq PK_BLK(append PK_BLK (list BLK)))) (T (setq PK_BLK(list BLK))) );cond (setq IDX(1+ IDX)) );repeat (while PK_BLK (setq PK_BLK(To-0 PK_BLK)) );while );progn );if (command "._regen") (princ "\rFinished ") (princ) );defun (prompt"\nNUKE zum Starten.")(princ)
Kann mir da jemand weiterhelfen? Wäre supernett!!! Gruß Charlie Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
AsSchu Ehrenmitglied Konstrukteur
Beiträge: 1632 Registriert: 27.06.2003 ACAD 2012
|
erstellt am: 28. Nov. 2003 15:34 <-- editieren / zitieren --> Unities abgeben: Nur für charlieBV
|
charlieBV Ehrenmitglied V.I.P. h.c. Bauzeichnerin
Beiträge: 9317 Registriert: 28.08.2003
|
erstellt am: 28. Nov. 2003 15:41 <-- editieren / zitieren --> Unities abgeben:
ich weiß, aber ich weiß nicht wie viele normalsterbliche Acad-anwender (die das ja betrifft) sich dorthin verirren?!? Deshalb hier, ausserdem tummeln sich hier ja auch Lispler... Aber danke für den Hinweis! Gruß Charlie Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 28. Nov. 2003 17:49 <-- editieren / zitieren --> Unities abgeben: Nur für charlieBV
Warst du nicht heut mittag in der Lobby ? -hatte man dir da nicht geholfen oder hast du vergessen hier die Lösung zu posten ? ###zum nachlesen### hat ein Objekt die Farbe "vonlayer" so ist das der Standardwert für den gc62 und wird bei der Abfrage mit (entget) nicht mit ausgegeben- weil er eben einen Standardwert aufweist. wenn kein '(62 . nnn) in der eListe vorhanden ist, kann ich ihn auch nicht mit (subst 'neu 'alt inLinste) ersetzen. da lag/liegt wohl (ungetestet) das Problem. ---- vielleicht möchtest du doch noch deine Antwort posten ? ------------------ - Sebastian - Weitere Info´s unter F1 ! [Diese Nachricht wurde von cadffm am 28. Nov. 2003 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 28. Nov. 2003 17:57 <-- editieren / zitieren --> Unities abgeben: Nur für charlieBV
ändere die zeile (if(assoc 62 EDATA) ;Resets object color to BYLAYER if it isn't. (setq EDATA(subst(cons 62 "0")(assoc 62 EDATA)EDATA)) );if auf (if (assoc 62 edata) (setq edata (subst (cons 62 0) (assoc 62 edata) edata)) (setq edata (append edata (list (cons 62 0))) ) folgender hintergrund: bei der farbe vonlayer existiert der gruppencode 62 nicht. darum kannst du ihn mit SUBST nicht ändern, sondern musst ihn mit APPEND neu hinzufügen. ------------------ *********************************************** AutoCad 2000i, 2002, 2004 deutsch und englisch Windows 2000, NT, XP Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
TK_KE Mitglied
Beiträge: 67 Registriert: 15.07.2003 .
|
erstellt am: 29. Nov. 2003 00:01 <-- editieren / zitieren --> Unities abgeben: Nur für charlieBV
Hallo Charlie! Meinen Vorrednern kann ich nicht viel hinzufügen außer vielleicht eine ( meineserachtens besser kommentierte ) Routine mit der du vielleicht besser klarkommst. Gruß Thomas Noch ein Hinweis: Lad dir den anhang nochmal runter und dann unter Menüpunkt Hilfmittel bzw.Werkzeuge -->Autolisp-->Laden die Datei "Obj_prop.lsp" laden und dann in der Befehlszeile "obj_prop" eingeben und abentern...
[Diese Nachricht wurde von TK_KE am 01. Dez. 2003 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
charlieBV Ehrenmitglied V.I.P. h.c. Bauzeichnerin
Beiträge: 9317 Registriert: 28.08.2003
|
erstellt am: 01. Dez. 2003 07:46 <-- editieren / zitieren --> Unities abgeben:
@Sebastian, ja ich war in der Lobby, ich habe auch geschrieben dass ich rausgeflogen bin und dass mir unter Umständen etwas entgangen ist... Und jetzt mal Hand auf´s Herz, ich versuche hier mit minimalsten Lisp-Kenntnissen (rechnen habe ich schon gelernt!) eine vorhandene Lisp umzustricken. Da hilft es mir wenig, wenn in der Lobby man mir gc 62 an den Kopf wirft. Und, wenn ich eine Lisp gefunden habe, die das tut, was ich möchte, dann werde ich das schon kundtun, und ausserdem hat eben nicht jeder Internet zu Hause und muss sich bis Montags in der Firma gedulden, (was ich aber in der Lobby angekündigt habe!). Und jetzt überlege mal, was jemand mit meinem Wissensstand mit deiner Antwort anfangen kann, Ich versuche doch bei meinen Antworten die ich gebe auch so vorzugehen, dass es auch jemand verwenden kann, der das Programmteil noch nicht im Schlaf verwendet. [Ist nur meine persönliche Meinung] @Fuchsi Gibt folgendes auf die Mütze: ; Fehler: Falsch formatierte Liste in Eingabe Was habe ich falsch gemacht? Hat es bei Dir funktioniert? Ich wäre sehr an deiner Antwort interessiert, da ich eigentlich am allerliebsten einfach nur diese kurze Lisp umschreiben würde...(umgeschrieben haben würde (mit Deiner Hilfe???)) @Thomas, das war nett gemeint mit der gut kommentierten Lisp, aber ich bekomme sie überhapt nicht zum laufen (wie gesagt, ich bin Lisp-technisch sehr minderbemittelt und was erschwerend dazukommt blond und ne Frau...) Was ist der Befehlsaufruf??? Gruß Charlie Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Ehrenmitglied V.I.P. h.c. CAD on demand GmbH
Beiträge: 4171 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 01. Dez. 2003 08:35 <-- editieren / zitieren --> Unities abgeben: Nur für charlieBV
Hallo charlieBV, nun wird es schwierig. Wollte man dir eine kompetente Antwort geben, so müsste man bei den Grundlagen anfangen. Falsch formatierte Liste in Eingabe deutet darauf, dass irgendwo in deinem Code eine Klammer fehlt. Sind die Grundlagen als Thema abgeschlossen, so müsste man dir vermitteln, wie eine Zeichnungsdatenbank intern aufgebaut ist. DXF-Dateistruktur, (entget..), (entmake ..) (entmod ..) wären dann die Folgethemen. Damit du aber mit dem überhaupt etwas anfangen kannst, was mit DXF und den (entxxx ..) Funktionen zu tun hat, sollte man dir auch noch den Umgang mit Listen (list ..), (cons ..), (append ..), (assoc ..), (mapcar ..), (subst ..) ... beibringen. Du siehst, das Thema ist sehr viel komplexer, als die Aufgabenstellung Layer und Farbe auf bestimmte Werte setzen zunächst mal vermuten lässt. Deshalb ist die Antwort von cadffm der Schub's in die richtige Richtung. Fuchsi hat in seiner Antwort nicht's anderes stehen, nur eben als Code und nicht verbal umschrieben. Was ich sagen will. Bei der Beantwortung der Fragen, muss man schon ein gewisses Grundwissen voraussetzen, man kann und will ja nicht ganze Bücher hier in einem Forumsbeitrag posten, was nun auch nicht Sinn eines Forums ist. Ich denke, du hast mit den Antworten genügend Stichworte zu Themen, die dich als Lisp-Newbie die nächste Zeit beschäftigen werden. Die konkrete Aufgabenstellung selbst, kann ich mir nicht vorstellen, als Neuling mal so nebenbei lösen zu können. Vergeht dir zu viel Zeit, bis du es selber geschafft hast, das Tool zu ändern, dann bleibt nur eins, warten bis dir jemand hier im Forum die Routine einfach mal umschreibt (wobei dabei auch nicht feststeht, wann du die Lösung in den Händen hältst), jemandem damit beauftragen (dann weißt du, wann das Programm bei dir im Einsatz ist), oder eine Schulung besuchen, damit dir der Einstieg schneller gelingt. Grüße Holger
------------------ Holger Brischke (defun - Lisp over night! AutoLISP-Programmierung für AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 01. Dez. 2003 08:46 <-- editieren / zitieren --> Unities abgeben: Nur für charlieBV
@Charly Ich bin schockiert !!! Habe eigentlich gedacht das ich dir mit meiner Antwort super helfe - falsch gedacht.. Ich bin praktisch selbst Anfänger, ich blute zwar nicht mehr so stark aber dennoch. Also wenn Nuke genau das ist was du suchst, bis auf die Sache mit vonBlock statt vonLayer, dann nimm dieses hier im Anhang. der Befehl heißt hier XNUKE ! (Edit: Habe Dich/dein Problem in der Lobby nicht so verfolgt, bin aber davon ausgegangen das es schon gelöst wird/ist. Das Problem mit I-Net zuhause etc. kenne ich recht gut, habe zwar Zugang, aber nur Probleme mit zZeit... ------------------ - Sebastian - Weitere Info´s unter F1 ! [Diese Nachricht wurde von cadffm am 01. Dez. 2003 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
charlieBV Ehrenmitglied V.I.P. h.c. Bauzeichnerin
Beiträge: 9317 Registriert: 28.08.2003
|
erstellt am: 01. Dez. 2003 08:58 <-- editieren / zitieren --> Unities abgeben:
Hi Sebastian, hoffe, dass du nicht gekränkt bist, aber (ich sagte ja, blond und Frau(fast unvereinbar))ich bekomme deinen Anhang nicht auf (ist auch nicht der erste den ich öffnen möchte..., aber der erste bei dem´s nicht klappt. Aber vielen Dank schon mal für die Prompte Antwort. Vielleicht werde ich in 2 Jahren das verstehen, mit dem du mir helfen wolltest... Gruß Charlie (Werde übrigens mit ie geschrieben, aber Cadwiesel hat das heute morgen auch noch nicht verstanden, du bist in illustrer Gesellschaft...) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 01. Dez. 2003 09:14 <-- editieren / zitieren --> Unities abgeben: Nur für charlieBV
|
charlieBV Ehrenmitglied V.I.P. h.c. Bauzeichnerin
Beiträge: 9317 Registriert: 28.08.2003
|
erstellt am: 01. Dez. 2003 09:17 <-- editieren / zitieren --> Unities abgeben:
Hallo Holger, dass ich nicht erwarte, dass hier spontan die Antwort auf dem Silbertablett kommt, dass weiß ich wohl, aber ich habe halt gehofft, dass jemand mir so wie Fuchsi hilft (und da wollte ich ja nur nachfragen ob das bei ihm läuft oder nicht.) Ich versuche durchaus mich durch den Lisp-Dschungel als Einzelkämpfer durchzuschlagen und habe dabei Logik-Unterstützung von unserem Admin, der Makros im Excel schreibt und uns damit auch schon weitergeholfen hat... Bisher sind wir beim umschreiben von Lisp mit Logik schon sehr weit gekommen, aber dass sich von Layer Anders verhält und man das nicht einfach logisch ersetzen kann, dass kann man ja nicht riechen, wenn man erst rechnen gelernt hat... oder? Ich hatte auch nicht beabsichtigt, hier eine Einführungsstunde in Lisp erhalten zu wollen, ganz und gar nicht, nur einfach eine (von mir aus auch unkommentierte kurze Änderung dieser Lisp und meiner Fehler) Und wenn ich Sebastians xnuke auch noch öffnen könnte, hätte ich womöglich diese Lösung schon... Gruß Charlie Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
charlieBV Ehrenmitglied V.I.P. h.c. Bauzeichnerin
Beiträge: 9317 Registriert: 28.08.2003
|
erstellt am: 01. Dez. 2003 09:24 <-- editieren / zitieren --> Unities abgeben:
Hi, Lass mich dir ein Chakachaka tanzen... (schade, dass es noch keinen Smilie gibt, der Purzelbäume schlägt!!! Sie würden hier nur so kullern.... DANKE DANKE DANKE DANKE DANKE DANKE DANKE DANKE DANKE DANKE DANKE DANKE DANKE DANKE DANKE DANKE DANKE DANKE DANKE DANKE DANKE DANKE ... Gruß Charlie (U´s kommen logischerweise!!!) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
fuchsi Mitglied Programmierer c#.net Datawarehouse
Beiträge: 1201 Registriert: 14.10.2003 AutoCad Version 2012 deu/enu <P>Windows 7 64bit
|
erstellt am: 01. Dez. 2003 10:13 <-- editieren / zitieren --> Unities abgeben: Nur für charlieBV
hallo charly habe gerade gesehen, dass du ins tanzen beginnst, dürftest also dein problem schon gelöst haben trotzdem zu meinem posting "falsch formatierte Liste" weist darauf hin, dass eine ) fehlt. ins lisp muss die summe der ( gleich der summe ) sein. natürlich auch in der richtigen position (if (assoc 62 edata) (setq edata (subst (cons 62 0) (assoc 62 edata) edata)) (setq edata (append edata (list (cons 62 0)))) ) wie gesagt, bei farbe vonlayer gibt es den gruppencode 62 . darum wird mit (if (assoc 62 edate) abgeprüft, ob es den gc 62 in der liste edata gibt. wenn ja, wird die zeile (setq edata (subst (cons 62 0) (assoc 62 edata) edata)) durchgeführt, hier wird mit SUBST der bestehende GC62 auf (cons 62 0) geändert. wenn es den gc62 nicht gibt wird diese zeile durchgeführt (hier hat auch eine klammer zu gefehlt vermutlich beim reinkopieren passiert) da es den gc62 nicht gibt wird er mit APPEND an die bestehende liste angehängt. ------------------ *********************************************** AutoCad 2000i, 2002, 2004 deutsch und englisch Windows 2000, NT, XP Programmiere in Lisp, VB6, VBA (Word, Excel, Acrobat, InDesign und AutoCad) und C#.NET Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
charlieBV Ehrenmitglied V.I.P. h.c. Bauzeichnerin
Beiträge: 9317 Registriert: 28.08.2003
|
erstellt am: 01. Dez. 2003 10:48 <-- editieren / zitieren --> Unities abgeben:
|
Balrok Mitglied Technischer Zeichner
Beiträge: 428 Registriert: 02.06.2005 Win10, 64Bit AutoCad Architcture 2021 LiNear 2021 EPLAN P8
|
erstellt am: 20. Sep. 2016 07:56 <-- editieren / zitieren --> Unities abgeben: Nur für charlieBV
ACHTUNG! Sie antworten auf einen Beitrag der älter als 1 Jahr ist! Hallo Leute, ich muss dieses Thema nochmals aufgreifen. Ich bin auf der Suche nach so was wie nuke oder xnuke. Diesmal soll er mir aber nicht die Farbe auf vonBlock setzen, sondern soll einfach den Linientyp so lassen wie er ist. Im Prinzip müsste ich dann aus nuke doch was löschen, aber ich kann nicht finden was? Zudem bin ich überhaupt kein Lisper!!! Grüße Balrok
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 20. Sep. 2016 08:31 <-- editieren / zitieren --> Unities abgeben: Nur für charlieBV
|
Balrok Mitglied Technischer Zeichner
Beiträge: 428 Registriert: 02.06.2005 Win10, 64Bit AutoCad Architcture 2021 LiNear 2021 EPLAN P8
|
erstellt am: 20. Sep. 2016 08:56 <-- editieren / zitieren --> Unities abgeben: Nur für charlieBV
Also, nuke bewirkt ja das alles auf Layer 0, Farben auf vonLayer, Linientyp auf vonLayer usw. gelegt wird. Nun brauche ich nuke ohne das er mir den Linientyp auf vonLayer legt. Also die gestrichelte Linie soll auch nach nuke gestrichelt bleiben! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 20. Sep. 2016 09:01 <-- editieren / zitieren --> Unities abgeben: Nur für charlieBV
|
Balrok Mitglied Technischer Zeichner
Beiträge: 428 Registriert: 02.06.2005 Win10, 64Bit AutoCad Architcture 2021 LiNear 2021 EPLAN P8
|
erstellt am: 20. Sep. 2016 09:54 <-- editieren / zitieren --> Unities abgeben: Nur für charlieBV
So, habe die Stelle gefunden. Dort steht, (if(assoc 6 EDATA) ;Resets object linetype to BYLAYER if it isn't. (setq EDATA(subst(cons 6 "BYLAYER")(assoc 6 EDATA)EDATA)) Einfach löschen geht nicht. Wie muss ich diese nun ändern, so das er mir die Linentyp NICHT ändert? ICH HABE ECHT KEINE AHNUNG! [Diese Nachricht wurde von Balrok am 20. Sep. 2016 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
spider_dd Mitglied
Beiträge: 1111 Registriert: 27.11.2003 Win 10Pro Intel(R) Core(TM) i7-7700 NVIDIA Quadro P1000 ACAD, Civil-3D 2018
|
erstellt am: 20. Sep. 2016 10:15 <-- editieren / zitieren --> Unities abgeben: Nur für charlieBV
|
Balrok Mitglied Technischer Zeichner
Beiträge: 428 Registriert: 02.06.2005 Win10, 64Bit AutoCad Architcture 2021 LiNear 2021 EPLAN P8
|
erstellt am: 20. Sep. 2016 10:20 <-- editieren / zitieren --> Unities abgeben: Nur für charlieBV
|
xxxmurdockxxx Mitglied techn. Zeichner
Beiträge: 52 Registriert: 18.12.2007 WIN10, Civil 3D 2017 SP1.1
|
erstellt am: 23. Mai. 2017 17:34 <-- editieren / zitieren --> Unities abgeben: Nur für charlieBV
ACHTUNG! Sie antworten auf einen Beitrag der älter als 1 Jahr ist! Sorry, wenn ich den alten Beitrag nochmal hochhole. Ich möchte gerne das NUKE-Lisp-Tool verwenden um alle Elemente von versch. Blöcken auf Layer 0 zu setzen. Funktioniert auch schön alles. NUKE macht ja alle Farben und Linienstile auch auf "vonLayer". Code: (setq EDATA (entget E)) (if(assoc 62 EDATA) ;Resets object color to BYLAYER if it isn't. (setq EDATA(subst(cons 62 256)(assoc 62 EDATA)EDATA)) );if (if(assoc 6 EDATA) ;Resets object linetype to BYLAYER if it isn't. (setq EDATA(subst(cons 6 "BYLAYER")(assoc 6 EDATA)EDATA)) );if (setq EDATA(subst (cons 8 "0")(assoc 8 EDATA)EDATA));changes layer to 0 (entmod EDATA);updates entity (setq E (entnext E));get next enitiy, nil if end of block (Spin)
Lösche ich die entsprechenden Zeilen passt es und es bleiben alle Farben und Linien wie sie sind. Nun hätte ich aber gerne dass alle Elemente von Farbe "vonLayer" auf "vonBlock" geändert werden. Ohne dabei die best. Farben zu ändern. Wie muss ich diesen Schnipsel ändern, damit das geht?
Code: (if (assoc 62 edata) (setq edata (subst (cons 62 0) (assoc 62 edata) edata)) (setq edata (append edata (list (cons 62 0)))) )
So wird ja einfach alles auf "vonBlock" gesetzt. Schonmal Vielen Dank
------------------ Viele Grüße Stefan Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 System: F1 und Google
|
erstellt am: 23. Mai. 2017 22:04 <-- editieren / zitieren --> Unities abgeben: Nur für charlieBV
Nun hätte ich aber gerne dass alle Elemente von Farbe "vonLayer" auf "vonBlock" geändert werden. Ohne dabei die best. Farben zu ändern. Du redest von der Eigenschaft Farbe und von der dargestellten Farbe am Bildschirm?
Wie soll das gehen? Entweder dir ist bekannt das es zufällig passt, oder es geht nicht. "Zufällig" weil es ja auch anders sein könnte. Oder ich habe diese letzte Bemerkung nicht verstanden. Bleiben wir beim ersten Teil: (if (assoc 62 edata) (setq edata (subst (cons 62 256) (assoc 62 edata) edata)) (setq edata (append edata (list (cons 62 0)))) ) ; Truecolor mal aussen vor Jetzt zum Farben behalten, wo du vermutlich die Anzeigefarbe am Bildschirm meinst? Objekte welche Farbe=1 hatten, werden jetzt VonLayer die Farbe des Einfügelayers der Blockreferenz anzeigen. Wenn das nicht zufällig ebenfalls Farbe1 ist, ändert sich die angezeigte Farbe. Objekte welche die Farbe VonLayer hatten, werden nun in der Farbe der Blockreferenz angezeigt, bei VonLayer dann entsprechend der Farbe des Einfügelayers der Blockreferenz. Denn das Objekt ist jetzt sicher Layer0 und das Objekt erbt bei Farbe=VonBlock die Farbe der Blockreferenz.
Diese pauschale Aussage kann man ohne Kenntnis der Block und Layerstruktur machen. Farbe ändern ohne die Farbe ändern? ------------------ CAD on demand GmbH - Beratung und Programmierung rund um AutoCAD Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
spider_dd Mitglied
Beiträge: 1111 Registriert: 27.11.2003 Win 10Pro Intel(R) Core(TM) i7-7700 NVIDIA Quadro P1000 ACAD, Civil-3D 2018
|
erstellt am: 24. Mai. 2017 08:22 <-- editieren / zitieren --> Unities abgeben: Nur für charlieBV
Zitat: Original erstellt von xxxmurdockxxx:
Nun hätte ich aber gerne dass alle Elemente von Farbe "vonLayer" auf "vonBlock" geändert werden. Ohne dabei die best. Farben zu ändern.Wie muss ich diesen Schnipsel ändern, damit das geht?
Code: (if (assoc 62 edata) (setq edata (subst (cons 62 0) (assoc 62 edata) edata)) (setq edata (append edata (list (cons 62 0)))) )
Also ich verstehe das so: Wenn das Element eine Farbe zugewiesen hat, soll nix passieren, ansonsten soll sie auf "von Block" gesetzt werden. Dann musst Du in der "then" Zeile Deiner "if" Konstruktion auch nix machen. Das könnt dann so aussehen: Code:
(if (assoc 62 edata) (princ) (setq edata (append edata (list (cons 62 0)))) )
HTH Gruß Thomas
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| |
xxxmurdockxxx Mitglied techn. Zeichner
Beiträge: 52 Registriert: 18.12.2007 WIN10, Civil 3D 2017 SP1.1
|
erstellt am: 24. Mai. 2017 08:27 <-- editieren / zitieren --> Unities abgeben: Nur für charlieBV
|