| |
| 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: Nuke / Xnuke Transparenz auf vonBlock (1192 / mal gelesen)
|
Kuschelfee Mitglied Bauzeichnerin
Beiträge: 221 Registriert: 07.05.2007
|
erstellt am: 21. Sep. 2016 13:18 <-- editieren / zitieren --> Unities abgeben:
Ich benutze gerne Xnuke um ältere Blöcke zu fitten. In letzter zeit muss ich jedoch auch häufig die Transparenz auf vonBlock umstellen. Welchen Gruppencode hat denn die Transparenzfunktion? Ich dachte es wäre 440 jedoch ändert er mir die Transparenz nicht auf "vonBlock" Wie müsste die Zeile aussehen die Ich ergänzen muss.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 21. Sep. 2016 13:26 <-- editieren / zitieren --> Unities abgeben: Nur für Kuschelfee
|
Kuschelfee Mitglied Bauzeichnerin
Beiträge: 221 Registriert: 07.05.2007
|
erstellt am: 21. Sep. 2016 19:26 <-- editieren / zitieren --> Unities abgeben:
|
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 21. Sep. 2016 20:03 <-- editieren / zitieren --> Unities abgeben: Nur für Kuschelfee
|
Kuschelfee Mitglied Bauzeichnerin
Beiträge: 221 Registriert: 07.05.2007
|
erstellt am: 21. Sep. 2016 20:22 <-- editieren / zitieren --> Unities abgeben:
|
VanessaKrc Mitglied
Beiträge: 25 Registriert: 07.11.2022
|
erstellt am: 03. Nov. 2023 11:36 <-- editieren / zitieren --> Unities abgeben: Nur für Kuschelfee
Hallo, ich bin gerade dabei die Nuke.lsp für uns anzupassen und möchte gerne auch das sich die Transparenz auf von Block ändert. Leider bekomme ich es nicht hin auch nach Recherche im Forum. Folgenden mein Ansatz: (if(assoc 440 (entget(car(entsel)))) ;Resets object Linienstärke to BYBLOCK if it isn't. (setq EDATA(subst(cons 440 (entget(car(entsel))))(assoc 440 EDATA)EDATA)) (setq edata (append edata (list (cons 440 (entget(car(entsel))))))) ) Vielen Dank im Voraus
------------------ Vanessa Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADwiesel Moderator CAD4FM UG
Beiträge: 1989 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 03. Nov. 2023 11:55 <-- editieren / zitieren --> Unities abgeben: Nur für Kuschelfee
|
VanessaKrc Mitglied
Beiträge: 25 Registriert: 07.11.2022
|
erstellt am: 03. Nov. 2023 12:58 <-- editieren / zitieren --> Unities abgeben: Nur für Kuschelfee
Hallo CADwiesel, danke für die schnelle Antwort, leider komme ich mit der Antwort nicht wirklich weiter. Ich bin erst neu in Lisp, kannst du mir helfen wobei mein Fehler ist? (if(assoc 440 EDATA) ;Resets object Linienstärke to BYBLOCK if it isn't. (setq EDATA(subst(cons 440 (car(entsel)))(assoc 440 EDATA)EDATA)) (setq edata (append edata (list (cons 440 (car(entsel)))))) )
------------------ Vanessa Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 03. Nov. 2023 13:34 <-- editieren / zitieren --> Unities abgeben: Nur für Kuschelfee
Hi, >>"Ich bin erst neu in Lisp" Na da steigst du aber nicht am Angang mit den Basics ein, sonst wäre dieser Fehler nicht passiert. Da gibt es die Basics erklärt: www.autolisp.info Nach ein paar Wochen stolperst du dann viel weniger über die Klammern (und Funktionen)
Aus deinem Code: Befehl: (entget(car(entsel))) = ((-1 . <Objektname: 9ee03a3d90> ) ....) so sieht eine Entity Liste aus und das machst du mit deinem (cons 440 EntityList) Befehl: (cons 440 (entget(car(entsel)))) = (440 (-1 . <Objektname: 9ee03a3d90> )....) Das ist für nichts gut und sicher auch in keinem (funktionierenden) andere Nuke-Beispiel so geschrieben.
-
Ein Beispiel für so ein "Nuke byblock" sieht so aus: (if (assoc 370 edata) (setq edata (subst (cons 370 -2) (assoc 370 edata) edata)) (setq edata (append edata (list (cons 370 -2)))) )
Das du den Gruppencode 440 (statt hier 370) benötigst, das hast du schon richtig ermittelt, jetzt musst du noch wissen wie denn der 440 Wert für "VonBlock" ist. Einfach: Objekt mit Transparenz=VonBlock erstellen und die Daten abfragen: (entget(car(entsel))) oder (assoc 440 (entget(car(entsel)))) Dann kennst du den Wert dafür, es ist 16777216 (statt -2 in meinem 370er Beispiel). Also: (if (assoc 370 440 edata) (setq edata (subst (cons 370 440 -2 16777216) (assoc 370 440 edata) edata)) (setq edata (append edata (list (cons 370 440 -2 16777216)))) ) Wobei der Gruppencode 440 immer vorhanden ist und es daher nicht geprüft werden muss. Also könnte man auch kürzen und einfach nur diese Zeile nutzen: (setq edata (subst (cons 440 16777216) (assoc 440 edata) edata)) Sollte man den Code dann in einem Uralten ACAD laufen lassen, dann kennt das Programm 440 nicht und das Programm wohl nicht sauber laufen, also das IF wieder dazubasteln, nur den then-Fall auslassen (if (assoc 440 edata) (setq edata (subst (cons 440 16777216) (assoc 440 edata) edata)) ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
VanessaKrc Mitglied
Beiträge: 25 Registriert: 07.11.2022
|
erstellt am: 03. Nov. 2023 14:28 <-- editieren / zitieren --> Unities abgeben: Nur für Kuschelfee
Vielen Dank cadffm! Die Erklärung hat mir viel weitergeholfen und meine nuke.lsp läuft jetzt fast richtig, leider irgoiert er mir jetzt Polylinien, die er in der Ursprünglichen Nuke mit verändert. ------------------ Vanessa Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 03. Nov. 2023 14:35 <-- editieren / zitieren --> Unities abgeben: Nur für Kuschelfee
Das einzige was wir dazu sagen können: Du hast einen Fehler gemacht. Was wir nicht sagen können: Welchen Grund: Wir kennen deinen Code nicht. BTW: Meine Nuke-byblock Variante hat den Befehlsnamen Nukebb oder Nuke_bb, liegt bei mir gleich neben der Nuke_bl Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
VanessaKrc Mitglied
Beiträge: 25 Registriert: 07.11.2022
|
erstellt am: 03. Nov. 2023 14:52 <-- editieren / zitieren --> Unities abgeben: Nur für Kuschelfee
Ich habe schon zwei Versionen versucht, in der Datei habe ich die Eigenschaften auf VonBlock geändert gemäß eintragen im Forum. Zusätzlich habe ich die Linienstärke und Transparenz eingefügt. An den weiteren Zeilen wurde nichts verändert, das wundert mich ------------------ Vanessa Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 03. Nov. 2023 16:36 <-- editieren / zitieren --> Unities abgeben: Nur für Kuschelfee
Hi Vanessa, <Ich beziehe mich mal nur auf den Nuke2 Code, den Nuke1 vergessen wir schnell wieder> Du hast mein Mitleid über soetwas gleich am Anfang zu stolpern, aber so ist es eben. Vorteil: Du hast jetzt den Fehler bemerkst diesen, statt 100 große Programme immer wieder mit demselben - dann unbemerkten - Bug zu erstellen. 1. Der Code ist eigentlich Okay, aber es gibt da einen Stolperstein über den man nicht stolpert solange man sich versucht an Daumenregeln zu halten. Regel: International/Englisch, sofern es das Programm zulässt! Dein 440er Part der funktioniert, aber nicht in Kombination mit deinem 6er Part (Linientyp). 2. Versuche mal den Code wenn du beim Gruppencode 6 den Wert "ByLayer" statt "VonLayer" nutzt. Funktionierts?
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
VanessaKrc Mitglied
Beiträge: 25 Registriert: 07.11.2022
|
erstellt am: 07. Nov. 2023 08:49 <-- editieren / zitieren --> Unities abgeben: Nur für Kuschelfee
|
VanessaKrc Mitglied
Beiträge: 25 Registriert: 07.11.2022
|
erstellt am: 07. Nov. 2023 18:04 <-- editieren / zitieren --> Unities abgeben: Nur für Kuschelfee
Hallo zusammen, gibt es die Möglichkeit zwei Befehle zu machen, bei einem das sich alles ändert und bei einem anderen das sich die Linienart nicht mit ändert? Ich habe zwei LSP mit unterschiedlichen Befehlen angelegt leider funktioniert das auf Dauer nicht sondern nur beim ersten Laden, meine Versuche die Suche der Blöcke anzupassen ist leider auch gescheitert. Könnt Ihr mir helfen wo ich den Bereich anpassen muss, sodass sich die beiden Nuke nicht überschneiden - Danke ------------------ Vanessa Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 07. Nov. 2023 18:21 <-- editieren / zitieren --> Unities abgeben: Nur für Kuschelfee
Ich habe den code gerade nicht vor mir, aber Hast du darin zwei (defun.. ? Die eine definiert den Befehl mit c:nuke_bb zb. Da brauchst du natürlich zwei verschiedene Namen, Sollte nur ein (defun enthalten sein, so ist es das schon gewesen. --- die andere Stelle hat kein "c:" vor dem Funktionsnamen Und dahinter eine Klammer, du musst den Fu ktionsnamen mit in diese Klammer schreiben. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
VanessaKrc Mitglied
Beiträge: 25 Registriert: 07.11.2022
|
erstellt am: 07. Nov. 2023 18:53 <-- editieren / zitieren --> Unities abgeben: Nur für Kuschelfee
|
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 07. Nov. 2023 20:13 <-- editieren / zitieren --> Unities abgeben: Nur für Kuschelfee
Du hast auch die zweite Änderung ausgelassen!? allerdings hatte ich es unglücklich (falsch)geschrieben UND das Programm ist do etwas anders strukturiert wie ich im Sinn hatte. Daher: Benenne To-0 einfach um. 1x den Funktionsnamen nach dem (defun und dann noch einmal in der (defun c: Funktion, dort wird die Funktion To-0 aufgerufen und wenn man diese umbenannt hat. dann muss man natürlich dort auch den neuen Funktionsnamen einsetzen. [Diese Nachricht wurde von cadffm am 07. Nov. 2023 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 22275 Registriert: 03.06.2002 Alles
|
erstellt am: 08. Nov. 2023 00:21 <-- editieren / zitieren --> Unities abgeben: Nur für Kuschelfee
|