FastFiber

LISP-routine voor tijdelijke kleuromzetting

Gestart door KeesB, wo 12 03 2008, 13:55:32

Vorige topic - Volgende topic

KeesB

Hallo Iedereen,

Wij werken hier met CAD 2007 en 2008en hebben hier een (in lichte mate) kleurenblind persoon.
Hij heeft nogal problemen om verschillende standaard kleuren van autocad te kunnen
onderscheiden, zoals de combinatie geel en groen en de combinatie cyaan en wit.
Nu hebben we een gekeken en het volgende zou gewijzigd moeten worden.

Dus het zou bij openen omgezet moeten worden naar 'zijn' kleuren en bij het opslaan en afsluiten
weer naar de standaard kleuren.


De volgende kleuren zouden omgezet moeten worden:

- Groen (kleur 3) moet kleur 84 worden
- Cyaan (kleur 4) moet kleur 140 worden


Is dit mogelijk en kan iemand me hiermee helpen?
Bij voorbaat zeer veel dank!  :vreegoe:

Kees.

Joop

Dit is wel degelijk mogelijk, maar niet zo een twee drie gerealiseerd.

Bij het openen van de tekening:
Je moet namelijk eerst alle elementen (inclusief de elementen in blocks) en lagen en dimension styles enz, enz. met de kleur 3 selecteren. (Hoe zit dit bij dynamic blocks?)
Deze elementen veranderen in kleur 84.
Hetzelfde voor kleur 4 en 140.

Bij het saven van de tekening moet het omgekeerde gebeuren.

Voor het ploten in kleur moet de plotsyle table aangepast worden.

Voor het openen en opslaan bestaat een trucje.

Bovenstaande is voor de vuist weg. Het zou me niks verbazen als er nog meer items bij komen.
Voor het openen en opslaan bestaat een trucje.

Wat weet je zelf van LISP?
In hoeverre kan ik je hiermee helpen?
Een gelovig volger van
"de Sacrale Kunst van Luiheid",
zijn leider "Lisp" en acoliet "Script".

KeesB

Ik ben nog helemaal niet thuis in het schrijven van Lisp routines, ik wilde eigenlijk eerst weten of het überhaupt mogelijk was.
Ik zal me eens een beetje gaan verdiepen in het schrijven hiervan.

GR. Kees.

HofCAD

#3
Citaat van: KeesB op ma 17 03 2008, 13:45:32
Ik ben nog helemaal niet thuis in het schrijven van Lisp routines, ik wilde eigenlijk eerst weten of het überhaupt mogelijk was.
Ik zal me eens een beetje gaan verdiepen in het schrijven hiervan.

GR. Kees.

Beste Kees,

Om je op gang te helpen heb ik het onderstaande snel in elkaar geflast.

(defun c:ChCol ( / lyr el);kleur 3->84 en kleur 4->140
(setq lyr (tblnext "layer" t))
(while lyr
(if (= (cdr (assoc 62 lyr)) 3)
(progn     
(setq el (entget (tblobjname "layer" (cdr (assoc 2 lyr)))))
(entmod (subst (cons 62 84)(assoc 62 el) el))
))
(if (= (cdr (assoc 62 lyr)) 4)
(progn     
(setq el (entget (tblobjname "layer" (cdr (assoc 2 lyr)))))
(entmod (subst (cons 62 140)(assoc 62 el) el))
))
(setq lyr (tblnext "layer"))
)
)


(defun c:NCOL ( / lyr el);kleur 84->3 en kleur 140->4
(setq lyr (tblnext "layer" t))
(while lyr
(if (= (cdr (assoc 62 lyr)) 84)
(progn     
(setq el (entget (tblobjname "layer" (cdr (assoc 2 lyr)))))
(entmod (subst (cons 62 3)(assoc 62 el) el))
))
(if (= (cdr (assoc 62 lyr)) 140)
(progn     
(setq el (entget (tblobjname "layer" (cdr (assoc 2 lyr)))))
(entmod (subst (cons 62 4)(assoc 62 el) el))
))
(setq lyr (tblnext "layer"))
)
)


Bovenstaande programma's werken alleen goed, als de tekenobjecten getekend zijn
met de kleur op ByLayer.
Om de omzetting automatisch bij de start te laten verlopen, zal je in de file acaddoc.lsp
de procedure ChCol moeten zetten en de aanroep (C:ChCol).
Om de omzetting bij het einde te laten verlopen, zal je waarschijnlijk met een reactor
moeten werken.

Met vriendelijke groet,
HofCAD CSI
ACADcadabra

HofCAD

#4
Citaat van: KeesB op ma 17 03 2008, 13:45:32
Ik ben nog helemaal niet thuis in het schrijven van Lisp routines, ik wilde eigenlijk eerst weten of het überhaupt mogelijk was.
Ik zal me eens een beetje gaan verdiepen in het schrijven hiervan.

GR. Kees.

Beste Kees,

Om je op gang te helpen heb ik de onderstaande alternatieven in Visual Lisp
snel in elkaar geflast.

(defun C:CHcol ( / doc lay );kleur 3->84 en kleur 4->140
  (setq doc (vla-get-activedocument (vlax-get-acad-object)))
  (vlax-for lay (vla-get-layers doc)
    (if (= 3 (vla-get-color lay)) (vla-put-color lay 84))
    (if (= 4 (vla-get-color lay)) (vla-put-color lay 140))
)
)


(defun C:Ncol ( / doc lay); kleur 84->3 en kleur 140->4
  (setq doc (vla-get-activedocument (vlax-get-acad-object)))
  (vlax-for lay (vla-get-layers doc)
    (if (= 84 (vla-get-color lay)) (vla-put-color lay 3))
    (if (= 140 (vla-get-color lay)) (vla-put-color lay 4))
)
)


Bovenstaande alternatieve programma's werken alleen goed, als de tekenobjecten getekend
zijn met de kleur op ByLayer.
Om de omzetting automatisch bij de start te laten verlopen, zal je in de file acaddoc.lsp
de procedure ChCol moeten zetten en de aanroep (C:ChCol).
Om de omzetting bij het einde te laten verlopen, zal je waarschijnlijk met een reactor
moeten werken.

Met vriendelijke groet,
HofCAD CSI
ACADcadabra

FastFiber