| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: farbänderung bein körpermodellierung (1144 mal gelesen)
|
bimbelhuber Mitglied technischer zeichner
Beiträge: 10 Registriert: 08.01.2020
|
erstellt am: 24. Jan. 2020 10:51 <-- editieren / zitieren --> Unities abgeben:
Servus zusammen, folgendes Problem: ich erstelle 2 volumenkörper mit einer festgelegten farbe. nach dem abzug von körper 2 von körper 1 hat das Resultat nicht die festgelegte farbe sondern "bylayer". hier mein bisheriger code: (defun c:tor () (setq LayAlt (getvar "CLAYER")) ;1 bisherigen layer merken (setvar "CLAYER" "0") ;2 auf gewünschten layer ("0") umschalten (setq FarbAlt (getvar "cecolor")) ;3 bisherige farbe merken (setvar "cecolor" 7) ;4 auf wunschfarbe umschalten (setq P3 (list 100 100 0)) ;5 einfügepunkt (bks-ursprung) festlegen (setq breit 350)(setq hoch 200) ;6 breite und höhe festlegen (command "bks" "u" p3) ;7 ursprung bks verschieben (setq P0 (list 0 0 0)) ;8 bezugspunkt P0 für alle späteren eingaben (command "_box" P0 "L" 1 (+ breit 7.5 7.5) (- hoch 5)) ;9 körper 1 zeichnen (setq blende (entlast)) ;10 elementnamen körper 1 (blende) merken (command "_box" P0 "L" 1 breit (- hoch 20)) ;11 körper 2 zeichnen (setq V00 (entlast)) ;12 elementnamen körper 2 (abzugskörper) merken (setq P10 (list 0 7.5 0)) ;13 verschiebepunkt für körper 2 (abzugskörper) (command "_move" V00 "" P0 P10) ;14 körper 2 (abzugskörper) verschieben ;(command "-subtract" blende "" V00 "") ;15 (abzugskörper) von (blende) abziehen ;(setq blende (entlast)) ;16 namen des resultierenden elemnts merken (setvar "CLAYER" LayAlt) ;17 auf bisherigen layer umschalten (setvar "cecolor" FarbAlt) ;18 auf bisherige farbe umschalten (command "bks" "w") ;19 auf bks-welt unschalten ) wenn ich bis auf punkt 15 und 16 den code durchlaufen lasse befinden sich die beiden körper auf dem layer 0 und haben die Farbe Weiß (7). Wenn ich jetzt punkt 15 und 16 mit aufnehme liegt der resultierende körper zwar auf layer 0 aber seine farbe ist bylayer und nicht die eingestellte farbe weiß (7) welchen Denkfehler habe ich oder lässt sich ein element das in farbe "bylayer" vorhan- den ist auf eine wunschfarbe ändern? DANKE EUCH Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 Alles
|
erstellt am: 24. Jan. 2020 11:05 <-- editieren / zitieren --> Unities abgeben: Nur für bimbelhuber
Ich kann mich irren, aber hast du in die falsche Copy&Paste Kiste gegriffen? Wenn ich mich nicht irre, dann läuft dieser Code auf keinem AutoCAD. Schau noch mal nach und wenn der Code funktioniert dann erweitert das auch die Runder der potentiellen Helfer :-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 Alles
|
erstellt am: 24. Jan. 2020 11:18 <-- editieren / zitieren --> Unities abgeben: Nur für bimbelhuber
Auch wenn der Code SO m.M.n. nicht lauffähig ist: Wenn ich "lese" was da gemacht wird wenn die Auskommentierung ignoriert wird und der restliche Code auch lauffähig wäre, dann denke ich: Du hast dieses Problem überhaupt nich tmit diesem Code! Wenn du aktuell über ein Problem stolperst mit den Farben, dann liegt das an deinem Test -> der Code hingegen würde funktionieren(wenn lauffähig) wie gewünscht. Beim DIFFERENZieren wird das neue Objekt wie beim normalen erstellen 'per Hand' gewohnt mit den aktuellen Eigenschaften erstellt. Beim herumtesten hast du die Farbe ggf. geändert, in deinem Lisp würde aber die Farbe7 aktuelle sein (und nicht ByLayer), also wie gewünscht. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bimbelhuber Mitglied technischer zeichner
Beiträge: 10 Registriert: 08.01.2020
|
erstellt am: 25. Jan. 2020 11:45 <-- editieren / zitieren --> Unities abgeben:
sorry habe vergessen dass ich mit progecad arbeite und nicht mit AutoCAD. bei mir läuft das ganze soweit gut, bis auf die Sache mit der farbe. aber jetzt ein anderer Ansatz. ich habe eine Linie auf dem layer 0 gezeichnet, farbe bylayer. wenn ich nachfolgenden code drüberlaufen lasse erhalte ich die entsprechenden elementdaten (defun C:elementdaten ( ) (setq ELEM (entlast)) (setq ELEM_DAT (entget ELEM)) (setq ZAHLER 0) (textpage) (princ "\nentget des letzten Elements:") (repeat (length ELEM_DAT) (print (nth ZAHLER ELEM_DAT)) (setq ZAHLER (1+ ZAHLER)) ) ) somit erhalte ich folgende ausgabe (-1 . <Entity name: 308f7d50> ) (0 . "LINE") (5 . "9907") (330 . <Entity name: ebe0f30> ) (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "002_BOD") (48 . 0.5) (100 . "AcDbLine") (10 679.606 1014.3892 0) (11 1174.9678 1014.3892 0) (210 0 0 1)13 jetzt ändere ich die farbe von bylayer auf z.b. rot. lass ich jetzt wieder die elementdaten anzeigen gibt es einen zusätzlichen listeneintrag (62 . 1) welcher die farbe angibt. jetzt ändere ich mit dem nachfolgenden code die farbe von 1 rot auf 2 gelb. (setq elem_dat (entget (entlast))) (setq elem_dat (subst (cons 62 2)(assoc 62 elem_dat) elem_dat)) (entmod elem_dat) läuft einwandfrei. wenn ich die Linie wieder auf die farbe bylayer ändere läuft das ganze nicht mehr. grund ist wohl dass es den eintrag 62 nicht gibt. daher die frage wie ich die elementliste um den 62ger eintrag ergänzen kann. dann wäre mein bisheriges Problem gelöst, ich könnte einfach nach dem erstellen eines objekts einfach die gewünschte farbe nachträglich änder. danke euch thomas Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 Alles
|
erstellt am: 25. Jan. 2020 14:43 <-- editieren / zitieren --> Unities abgeben: Nur für bimbelhuber
Dann ergänze bitte deine Systemangaben um die betrexfende Software und darüber hinaus dennoch immer dazu schreiben das es um Progecad geht. Säufz. Lisp: Eine Liste kann man ergänzen mit CONS oder APPEND als Beispiel. Also prüf mit assoc ob der 62er vorhanden ist, falls ja - SUBST, falls nicht CONS Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bimbelhuber Mitglied technischer zeichner
Beiträge: 10 Registriert: 08.01.2020
|
erstellt am: 26. Jan. 2020 11:17 <-- editieren / zitieren --> Unities abgeben:
hallo cadffm dank dir für deine Nachricht, aber irgendwie mach ich was gehörig falsch. Systemvoraussetzung autolisp progecad ich habe eine Zeichnung in der nur eine Linie existiert und zwar in der farbe vonlayer. mit (setq elem_dat (entget (entlast))) erhalte ich die elementdaten dieser Linie, diese hat kei- nen Eintrag für die Farbe (keine 62ger liste), also muss ich einen solchen eintrag in die elementdatenliste hinzu- fügen. ich dachte es geht mit: (setq elem_dat (append elem_dat (cons 62 1))) es kommt die Fehlermeldung "Fehlerhafte Liste" was mache ich falsch? Sorry für meine anfängerfragen... thomas
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 Alles
|
erstellt am: 26. Jan. 2020 13:15 <-- editieren / zitieren --> Unities abgeben: Nur für bimbelhuber
Schau wie append funktioniert, schau wie cons funktioniert, dann wird es schon klappen. So sollte es sein, aber keine Ahnung ob man es in ProgeCAD richtig nachgeklöppelt hat. (IF (assoc 62 elem_dat) (entmod (subst (cons 62 Farbnummer) (assoc 62 elem_dat) elem_dat)) (entmod (cons (cons 62 Farbnummer)elem_dat)) ) Oder (append elem_dat (list (cons 62 Farbnummer)) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadffm Moderator 良い精神
Beiträge: 21533 Registriert: 03.06.2002 Alles
|
erstellt am: 26. Jan. 2020 13:27 <-- editieren / zitieren --> Unities abgeben: Nur für bimbelhuber
"Sorry für meine anfängerfragen... " Das ist schon ok, aber hier sind wir im Autodesk AutoLISP Forum, wenn du dann über ProgeCAD Besonderheiten stolperst ist es nicht verwunderlich. Bei Befehlssteuerung(command) erst recht. Ich sitze nicht am CAD, aus dem effeff würde ich meinen das deine Aussage oben (dein append/cons Versuch) für Autodeskprodukte nicht zutreffen würde. Die erzeugte Liste würde zwar auch in Acad nichts taugen, aber eine Fehlermeldung von cons oder append sehe ich hier nicht. (Der Fehler würde es bei entmod/entmake) kommen. Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
bimbelhuber Mitglied technischer zeichner
Beiträge: 10 Registriert: 08.01.2020
|
erstellt am: 28. Jan. 2020 10:15 <-- editieren / zitieren --> Unities abgeben:
Servus cadffm hast mir super toll geholfen, folgender code funktioniert einwandfrei außer bei volumenkörpern. DANKE (setq elem_dat (entget (entlast))) (if (assoc 62 elem_dat) (entmod (subst (cons 62 farbnummer) (assoc 62 elem_dat) elem_dat)) (entmod (append elem_dat (list (cons 62 farbnummer)))) ) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |