Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Farbe von Objekt ändern

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Farbe von Objekt ändern (5157 mal gelesen)
cadplayer
Ehrenmitglied
CADniker


Sehen Sie sich das Profil von cadplayer an!   Senden Sie eine Private Message an cadplayer  Schreiben Sie einen Gästebucheintrag für cadplayer

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 30. Nov. 2009 12:18    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hi!

Steh grad auf´m Schlauch. Bei dem Ansatz möchte ich gern die Farbe des zu ändernden Objektes vorher bestimmen. Ich vermute die assoc-liste wird nicht so nicht richtig erzeugt. Kann da mal ein Profi ran ?!

(defun c:f1()
  (setq FARBE (getstring "\nwert für eine farbe eingeben\n"))
 
;  (setq FARBE 1)
  (and(setq OBJ(car(Entsel)))
      (setq OBJ(entget OBJ))
      (or(and(assoc 62 OBJ)
    (setq OBJ(subst (cons 62 FARBE)(assoc 62 OBJ)OBJ))
    )
(setq OBJ(append OBJ (list(cons 62 FARBE))))
)
      (entmod OBJ)
      )
  )

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

joern bosse
Ehrenmitglied
Dipl.-Ing. Vermessung


Sehen Sie sich das Profil von joern bosse an!   Senden Sie eine Private Message an joern bosse  Schreiben Sie einen Gästebucheintrag für joern bosse

Beiträge: 1734
Registriert: 11.10.2004

Window 10
ACAD 2021
CIVIL 2021
BricsCAD V14-V22
Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz
16.0GB RAM
NVIDIA GeForce GTX 1050<P>

erstellt am: 30. Nov. 2009 12:24    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für cadplayer 10 Unities + Antwort hilfreich

Hallo Cadplayer,
die Farbe muss ein INTERGER sein, probier es mal mit

setq FARBE (getint "\nwert für eine farbe eingeben\n"))

------------------
viele Grüße

Jörn
http://www.bosse-engineering.com

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CADmium
Moderator
Maschinenbaukonstrukteur




Sehen Sie sich das Profil von CADmium an!   Senden Sie eine Private Message an CADmium  Schreiben Sie einen Gästebucheintrag für CADmium

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 30. Nov. 2009 13:16    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für cadplayer 10 Unities + Antwort hilfreich

nimm doch
(setq FARBE (acad_colordlg 1))

oder so ähnlich (hab gerade kein acad offen)

------------------
  - 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


Sehen Sie sich das Profil von cadplayer an!   Senden Sie eine Private Message an cadplayer  Schreiben Sie einen Gästebucheintrag für cadplayer

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 30. Nov. 2009 14:39    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

besten Dank!

Ich möchte da gleich mit einer weiteren Funktion anschliessen, die die Farbe des Layer ändert vom gewählten Objekt

(defun c:fl()
(setq obj (entget (car (entsel "\nobjekt wählen\n")))
      lname (cdr(assoc 8 obj)))
  (command "layer" "c" (acad_colordlg 256) lname "")
  )

könnte ich denn auch die Farbe von layern, die in einer externen Referenz liegen ändern ?

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Britt
Mitglied
 


Sehen Sie sich das Profil von Britt an!   Senden Sie eine Private Message an Britt  Schreiben Sie einen Gästebucheintrag für Britt

Beiträge: 154
Registriert: 21.03.2002

AutoCAD 2006 WindowsXP
HP800

erstellt am: 01. Dez. 2009 08:11    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für cadplayer 10 Unities + Antwort hilfreich

Ja, mit nentsel auswählen

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadffm
Moderator
良い精神




Sehen Sie sich das Profil von cadffm an!   Senden Sie eine Private Message an cadffm  Schreiben Sie einen Gästebucheintrag für cadffm

Beiträge: 21533
Registriert: 03.06.2002

Alles

erstellt am: 01. Dez. 2009 10:15    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für cadplayer 10 Unities + Antwort hilfreich

Die EXTERNEN Layer kannst du nicht ändern, nur die in der aktuellen Datei befindlichen Kopie,
Welche bei (SysVar) Visretain=0 nur temporär ist, bei Visretain=1 gespeichert bleibt.

(Dieses Aussage bezieht sich auf deinen Code / auf einfaches AutoLisp)

------------------
die alte SUCHfunktion.. - System-Angaben - User:FAQ(Adesk)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadplayer
Ehrenmitglied
CADniker


Sehen Sie sich das Profil von cadplayer an!   Senden Sie eine Private Message an cadplayer  Schreiben Sie einen Gästebucheintrag für cadplayer

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 01. Dez. 2009 10:52    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Einsame Spitze - beste Hilfestellung und Tips von allen hier die 2 routinen

Einmal zum ändern der Farbe eines Layers in der Zeichnung
(defun c:fl()
(setq obj (entget (car (entsel "\nobjekt wählen\n")))
      lname (cdr(assoc 8 obj)))
  (command "layer" "c" (acad_colordlg 256) lname "")
  )

zum zweiten zum ändern der Farbe eines xrefs-layers
(defun c:flx()
(setq obj (entget (car (nentsel "\nobjekt wählen\n")))
      lname (cdr(assoc 8 obj)))
  (command "layer" "c" (acad_colordlg 256) lname "")
  )

Gruss cp

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

bikerholic
Mitglied
Bauzeichner Straßenbau


Sehen Sie sich das Profil von bikerholic an!   Senden Sie eine Private Message an bikerholic  Schreiben Sie einen Gästebucheintrag für bikerholic

Beiträge: 123
Registriert: 06.02.2009

XP Professional SP2
Intel Pentium x86 2.40GHz
1GB-Ram, Maxtor 60GB
NVIDIA GeForce4 MX 420 mit 64MB
AutoCAD 2005&2008&2010(Civil3D)+SP2+Expresstools
google und ich san beste freunde ;)

erstellt am: 02. Dez. 2009 10:34    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für cadplayer 10 Unities + Antwort hilfreich

servus cp

ein verbesserungs vorschlag das deutsche autocad versteht kein c für color sprich entweder _c oder fa bei (command "layer" "c" eintragen

und ich hätte da noch was als anternative im angebot von cadwerk.com colorchg.lsp
beides in einem befehl und es werden nur objekte akzeptiert die auch von layer sind und bei den xref layern wird auch die eingestellte farbe für den layer angezeit und nicht von layer


schönen tag noch tschau björn 

------------------
Wenn Arbeit etwas schoenes und erfreuliches waere,
haetten die Reichen sie nicht den Armen ueberlassen.
[Paul Lafargue]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Steff179
Mitglied
Geomatiker


Sehen Sie sich das Profil von Steff179 an!   Senden Sie eine Private Message an Steff179  Schreiben Sie einen Gästebucheintrag für Steff179

Beiträge: 266
Registriert: 09.08.2007

AutoCAD 2014

erstellt am: 02. Dez. 2009 11:45    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für cadplayer 10 Unities + Antwort hilfreich

hallo cadplayer

gebe auch noch meinen senf dazu 

mach doch noch die variabeln lokal

(defun c:flx( / obj lname)
"dein code"
)

musste mir auch zuerst gesagt werden bis ich das beachtete 

gruss steff

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

cadplayer
Ehrenmitglied
CADniker


Sehen Sie sich das Profil von cadplayer an!   Senden Sie eine Private Message an cadplayer  Schreiben Sie einen Gästebucheintrag für cadplayer

Beiträge: 1832
Registriert: 28.04.2009

erstellt am: 02. Dez. 2009 13:25    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

immerzu... - ich bin offen wie ...
- nee das sag ich hier mal lieber nicht - ich bin anständig  

Prima Vorschläge, werd ich in Zukunft mit einbauen.

Mann dankt

nun hab ich auch geschnallt, was genau "nentsel" bewirkt ihr braucht also jetzt nur die Funktion flx aufrufen

(defun c:flx(/obj lname)
"ändert Farbe von internen und externen layern"
(setq obj (entget (car (nentsel "\nobjekt wählen\n")))
      lname (cdr(assoc 8 obj)))
  (command "layer" "fa" (acad_colordlg 256) lname "")
  )

wie schaffe ich es aber das "ändert Farbe von internen und externen layern" tatsächlich im Textfenster (F2)angezeigt wird ?

[Diese Nachricht wurde von cadplayer am 02. Dez. 2009 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

bikerholic
Mitglied
Bauzeichner Straßenbau


Sehen Sie sich das Profil von bikerholic an!   Senden Sie eine Private Message an bikerholic  Schreiben Sie einen Gästebucheintrag für bikerholic

Beiträge: 123
Registriert: 06.02.2009

XP Professional SP2
Intel Pentium x86 2.40GHz
1GB-Ram, Maxtor 60GB
NVIDIA GeForce4 MX 420 mit 64MB
AutoCAD 2005&2008&2010(Civil3D)+SP2+Expresstools
google und ich san beste freunde ;)

erstellt am: 02. Dez. 2009 16:25    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für cadplayer 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von cadplayer:
wie schaffe ich es aber das "ändert Farbe von internen und externen layern" tatsächlich im Textfenster (F2)angezeigt wird ?

^^mit prompt
so (prompt"\nändert Farbe von internen und externen layern")(princ)

im ganzen dann so

(defun c:flx (/ obj lname)
(prompt"\nändert Farbe von internen und externen layern")(princ)
(setq obj (entget (car (nentsel "\nobjekt wählen\n")))
      lname (cdr(assoc 8 obj)))
  (command "layer" "fa" (acad_colordlg 256) lname "")
)

tschau björn 

------------------
Wenn Arbeit etwas schoenes und erfreuliches waere,
haetten die Reichen sie nicht den Armen ueberlassen.
[Paul Lafargue]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Steff179
Mitglied
Geomatiker


Sehen Sie sich das Profil von Steff179 an!   Senden Sie eine Private Message an Steff179  Schreiben Sie einen Gästebucheintrag für Steff179

Beiträge: 266
Registriert: 09.08.2007

AutoCAD 2014

erstellt am: 02. Dez. 2009 16:47    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für cadplayer 10 Unities + Antwort hilfreich

wenn du noch auf (command) verzichten willst, dann schau dir das mal an vieleicht kannst du was damitt anfangen 

Code:

(setq lay (entget(tblobjname "LAYER" lname)))
(setq lfarbe (cdr (assoc 62 lay)))
(setq NeueFarbe (cdar(acad_truecolordlg lfarbe)))
(if NeueFarbe
  (entmod (subst(cons 62 NeueFarbe)(assoc 62 lay) lay))
)

gruss steff

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

CADmium
Moderator
Maschinenbaukonstrukteur




Sehen Sie sich das Profil von CADmium an!   Senden Sie eine Private Message an CADmium  Schreiben Sie einen Gästebucheintrag für CADmium

Beiträge: 13508
Registriert: 30.11.2003

.

erstellt am: 02. Dez. 2009 17:44    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für cadplayer 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Steff179:

Code:

(setq lay (entget(tblobjname "LAYER" lname)))
(setq lfarbe (cdr (assoc 62 lay)))
(setq NeueFarbe (cdar(acad_truecolordlg lfarbe)))
(if NeueFarbe
  (entmod (subst(cons 62 NeueFarbe)(assoc 62 lay) lay))
)

was solln das ? 

Truecolor aufrufen und dannbloß den GC62  setzen ? dann bitte auch gleich entsprechend der Dialogrückgabe den 420 'er und 430'er  .. guck dir doch noch mal die genaue acad_truecolordlg-Rückgabe an ... so wie du es hast .. kann's u.U. craschen ..

gruss steff


------------------
  - 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

Steff179
Mitglied
Geomatiker


Sehen Sie sich das Profil von Steff179 an!   Senden Sie eine Private Message an Steff179  Schreiben Sie einen Gästebucheintrag für Steff179

Beiträge: 266
Registriert: 09.08.2007

AutoCAD 2014

erstellt am: 03. Dez. 2009 14:41    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für cadplayer 10 Unities + Antwort hilfreich

hallo thomas

hast recht da habe ich wirklich einen schei... gebaut wurde mir fast übel als ich das bemerkte.

hätte besser de (acad_colordlg) genommen da ich truecolor e nie brauche.

hat mich jetzt aber doch gewurmt und hab mich dran gesetzt.
ergebniss sieht so aus:

Code:

(defun c:LF ( / lay ent obj lname  lfarbe NeuFarbe)
  (defun Truecolor2List (gc1 gc2 FarbList Lst / lst1 lst2)
    (setq i 0)
    (while (/= (car(nth i lst)) gc1)
      (setq lst1 (append (list(nth i lst))lst1))
      (setq i (1+ i))
    )
    (setq lst1 (append (list(nth i lst))lst1))
    (setq lst1 (reverse lst1))
    ;-----
    (setq i 0)
    (setq lst (reverse lst))
    (while (/= (car(nth i lst)) gc2)
      (setq lst2 (append (list(nth i lst))lst2))
      (setq i (1+ i))
    )
    (setq lst2 (append (list(nth i lst))lst2))
    (setq lst (append lst1 FarbList lst2))
    lst
  );end Truecolor2List
 
  (while(not (and (setq ent (car(nentsel "\nObjekt wählen: "))))))
  (setq obj (entget ent))
  (setq lname (cdr (assoc 8 obj)))
  (setq lay (entget(tblobjname "LAYER" lname)))
  (cond
    ((/= (assoc 430 lay) nil)(setq lfarbe (assoc 430 lay)))
    ((/= (assoc 420 lay) nil)(setq lfarbe (assoc 420 lay)))
    ((/= (assoc 62 lay) nil)(setq lfarbe (assoc 62 lay)))
  )
  (setq NeueFarbe (acad_truecolordlg lfarbe))
  (setq lay (Truecolor2List 70 6 NeueFarbe lay))
  (if NeueFarbe
    (progn
      (entmod lay)
      (princ "\nDie Farbe wurde geändert! ")
    )
  )
  (princ)
)


funktioniert ganz gut. die funktion Truecolor2List würde jemand anderst sicher schlanker hinkrigen aber im moment habe ich ein anderes problem.

ausgangslage:

(entget (tblobjname "layer" "layer1"))
((-1 . <Objektname: 7dbf3e70> ) (0 . "LAYER") (330 . <Objektname: 7dbf3c10> ) (5
. "4E") (100 . "AcDbSymbolTableRecord") (100 . "AcDbLayerTableRecord") (2 .
"Layer1") (70 . 0) (62 . 1) (6 . "Continuous") (290 . 1) (370 . -3) (390 .
<Objektname: 7dbf3c78> ))


nach ändern auf ein farbbuch:

(entget (tblobjname "layer" "layer1"))
((-1 . <Objektname: 7dbf3e70> ) (0 . "LAYER") (330 . <Objektname: 7dbf3c10> ) (5
. "4E") (100 . "AcDbSymbolTableRecord") (100 . "AcDbLayerTableRecord") (2 .
"Layer1") (70 . 0) (62 . 134) (420 . 303519) (430 . "RAL DESIGN$RAL 190 60 40")
(6 . "Continuous") (290 . 1) (370 . -3) (390 . <Objektname: 7dbf3c78> ))


wider ändern auf eine grundfarbe:

(entget (tblobjname "layer" "layer1"))
((-1 . <Objektname: 7dbf3e70> ) (0 . "LAYER") (330 . <Objektname: 7dbf3c10> ) (5
. "4E") (100 . "AcDbSymbolTableRecord") (100 . "AcDbLayerTableRecord") (2 .
"Layer1") (70 . 0) (62 . 1) (6 . "Continuous") (290 . 1) (370 . -3) (390 .
<Objektname: 7dbf3c78> ))

so weit so gut. jetzt habe ich aber das problem das wenn ich die layersteuerung öffne dort immer noch "RAL 190 60 40" angezeigt wird.
wenn ich dann die farbe in der layersteuerung ändere ist die ausgangslage die farbe 1 unter "Farbe wählen".

was habe ich übersehen? muss ich das irgendwie refreschen oder wo liegt das problem?

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Dorfy
Mitglied
Double-Dipl.-Ing. Bleistiftanspitzer


Sehen Sie sich das Profil von Dorfy an!   Senden Sie eine Private Message an Dorfy  Schreiben Sie einen Gästebucheintrag für Dorfy

Beiträge: 900
Registriert: 21.07.2006

AutoCad2007, ProE, HiCad

erstellt am: 03. Dez. 2009 15:21    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für cadplayer 10 Unities + Antwort hilfreich

dein Truecolor2List ist echt 
cond bricht nach dem ersten "Treffer" ab...

------------------
Mfg Heiko

Elefantenjagd in Afrika
"... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..."   (www.uni-leipzig.de/~rotheh/elefant.htm)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Steff179
Mitglied
Geomatiker


Sehen Sie sich das Profil von Steff179 an!   Senden Sie eine Private Message an Steff179  Schreiben Sie einen Gästebucheintrag für Steff179

Beiträge: 266
Registriert: 09.08.2007

AutoCAD 2014

erstellt am: 03. Dez. 2009 15:27    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für cadplayer 10 Unities + Antwort hilfreich

ja ich weiss das die zum  ist bin gerade am lambda apply ect. wider mal am studieren wenn ich da mal durchblicke sollte es schöner gehen.

aber das problem hat gar nichts mit cond zu tun... cond muss nach dem ersten treffer abbrechen ist so gewollt... ist ja nur für den aktuellen rückgabewert der farbe des layers...

gruss steff

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Dorfy
Mitglied
Double-Dipl.-Ing. Bleistiftanspitzer


Sehen Sie sich das Profil von Dorfy an!   Senden Sie eine Private Message an Dorfy  Schreiben Sie einen Gästebucheintrag für Dorfy

Beiträge: 900
Registriert: 21.07.2006

AutoCad2007, ProE, HiCad

erstellt am: 03. Dez. 2009 15:33    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für cadplayer 10 Unities + Antwort hilfreich

Zitat:
aber das problem hat gar nichts mit cond zu tun... cond muss nach dem ersten treffer abbrechen ist so gewollt... ist ja nur für den aktuellen rückgabewert der farbe des layers...

mag sein, hab ich nicht überprüft
sah beim lesen nur so aus und ich dachte es ändern sich die 3gc's

------------------
Mfg Heiko

Elefantenjagd in Afrika
"... LISP-Programmierer bauen einen Irrgarten aus Klammern und hoffen, dass sich der Elefant darin verirrt..."   (www.uni-leipzig.de/~rotheh/elefant.htm)

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Steff179
Mitglied
Geomatiker


Sehen Sie sich das Profil von Steff179 an!   Senden Sie eine Private Message an Steff179  Schreiben Sie einen Gästebucheintrag für Steff179

Beiträge: 266
Registriert: 09.08.2007

AutoCAD 2014

erstellt am: 04. Dez. 2009 11:59    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für cadplayer 10 Unities + Antwort hilfreich

so nach einem tag mapcar seite repetieren, beispile anschauen und kopfzerbrechen hab ich eine neue funktion gschriben bei der wenn man sie anschaut, hoffe ich, nicht gleich  wird.

nochmal den ganzen code:

Code:

(defun c:LF ( / ent lay lfarbe nfarbe)
  (defun gcinsert (vorher nachher neu lst / part)
  ;bsp. für neu ((5 . 5)(7 . 7))
    (setq part 0)
    (apply 'append
          (mapcar '(lambda(a)
                    (cond
                        ((=(car a)vorher)(setq part 1))
                        ((=(car a)nachher)(setq part 3))
                      )
                      (cond
                        ((= part 0)(list a))
                        ((= part 1)(setq part 2)(append (list a) neu))
                        ((= part 3)(list a))
                        ('T nil)
                      )
                    );end lambda
            lst);end mapcar
    );end apply
  );end defun
 
  (while(not(and (setq ent (car(nentsel "\nObjekt wählen: "))))))
  (setq lay (entget(tblobjname "LAYER" (cdr (assoc 8 (entget ent))))))
 
  ;best. layerfarbe für truecolordlg ermitteln -> wenn 430 vorhanden
  ;farbbuch, wenn 420 truecolor ect.
  (cond
    ((/= (assoc 430 lay) nil)(setq lfarbe (assoc 430 lay)))
    ((/= (assoc 420 lay) nil)(setq lfarbe (assoc 420 lay)))
    ((/= (assoc 62 lay) nil)(setq lfarbe (assoc 62 lay)))
  )
  (setq nfarbe (acad_truecolordlg lfarbe))
 
  (setq lay (gcinsert 70 6 nfarbe lay))
 
  (if nfarbe
    (progn
      (entmod lay)
      (princ "\nDie Farbe wurde geändert! ")
    )
  )
  (princ)
)

das eigentliche problem bleibt aber bestehen.

das wenn ein farbbuch gewählt wurde und nanach wider auf eine der 255 farben zurückgestellt wird in der layersteuerung das nicht korrekt angezeigt. bei truecolor funktioniert es wunderbahr.

ich vermute jetzt mal das dies wider mal eine situation ist bei der man nicht um (command) herumkommt. es sei den jemand belehrt mich eines besseren, was häufig vorkommt 

gruss steff

ps.: thx 2 joern bosse deine funktion war mir ein supper leitfaden.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

joern bosse
Ehrenmitglied
Dipl.-Ing. Vermessung


Sehen Sie sich das Profil von joern bosse an!   Senden Sie eine Private Message an joern bosse  Schreiben Sie einen Gästebucheintrag für joern bosse

Beiträge: 1734
Registriert: 11.10.2004

Window 10
ACAD 2021
CIVIL 2021
BricsCAD V14-V22
Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz
16.0GB RAM
NVIDIA GeForce GTX 1050<P>

erstellt am: 04. Dez. 2009 12:57    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für cadplayer 10 Unities + Antwort hilfreich

Hallo Steff,
ich habe nochmal getestet. Mit folgendem Code scheint alles in Ordnung zu sein, es sei denn Du wählst erst ein Farbbuch aus (d.h. der GC 430 wird in die GC-Liste geschrieben) und danach z.B. eine RGB-Farbe. Bei der Rückgabe der entmod-Funktion wird dann zwar die Liste ohne 430 Code angezeigt, aber intern ist der 430 immer noch drinne  Wenn ich dann wieder das Element anwähle, dann wird mit im Farbdialog wieder das Farbbuch vorgeschlagen, bekomme ich mit entmod nicht weg.

Naja, ein bißchen zum grübeln was fürs Wochendende:

Code:

(defun c:LF ( / ent lay lfarbe nfarbe farbe)
  ;end defun

  (while(setq ent (car(nentsel "\nObjekt wählen: ")))
   
    (setq lay (entget(tblobjname "LAYER" (cdr (assoc 8 (entget ent))))))

  ;best. layerfarbe für truecolordlg ermitteln -> wenn 430 vorhanden
  ;farbbuch, wenn 420 truecolor ect.
  (setq farbe
  (cond
    ((assoc 430 lay)(assoc 430 lay))
    ((assoc 420 lay)(assoc 420 lay))
    ((assoc 62 lay)(assoc 62 lay))))
   
 
  (if(setq nfarbe (acad_truecolordlg farbe))
    (progn
      (entmod (apply 'append (list(LF:lay_vor_62 lay)nfarbe(LF:lay_nach_62 lay))))
      (princ "\nDie Farbe wurde geändert! "))))
 
   
  (princ)
)

(defun LF:lay_vor_62 (lay / lay_vor_62)
  (while (and lay (/= (car(car lay))62))
    (setq lay_vor_62 (cons(car lay)lay_vor_62)
          lay (cdr lay)))
  (reverse lay_vor_62))

(defun LF:lay_nach_62 (lay / lay_nach_62)
  (setq lay (reverse lay))
  (while (and lay (/= (car(car lay))62))
    (setq lay_nach_62 (cons(car lay)lay_nach_62)
          lay (cdr lay)))
  (vl-remove-if '(lambda(A) (member (car A) '(420 430)))lay_nach_62))


Der Code ist fast wie Deiner, ein wenig hier und da geändert, kannst ja nochmal durchstöbern.

------------------
viele Grüße

Jörn
http://www.bosse-engineering.com

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz