AutoLISP, Interfejsy

Kolor tła ekranu (2)

(…) w modelu malujemy na czarnym, w papierze na… (właśnie) – na białym (?). Wszyscy (którzy mnie znają) wiedzą że jedynym słusznym kolorem obszaru papieru jest RGB 237,236,215

Możliwość zmiany koloru tła ekranu graficznego (osobno w modelu i osobno w papierze), to przydatna funkcja z kilku powodów. Po pierwsze długotrwała praca przed monitorem jest męcząca dla oczu, zaś (nie od dziś) wiadomo że ciemne tła są mniej uciążliwe dla wzroku. Po drugie, wykorzystywanie kolorów obiektów (czy kolorów warstw), które jest ułatwieniem podczas pracy na komputerze, różni się zwykle od prezentacji wyników, czyli ostatecznego wydruku, który w większości przypadków jest monochromatyczny.

Jasne kolory obiektów, na jasnym tle stają się słabo widoczne i odwrotnie ciemne (lub przygaszone) żle się prezentują na ciemnym tle.

Podobnie, gdy potrzebujemy przekazać na przykład zrzut ekranu, który być może będzie drukowany – wtedy kontrastowy obraz na jasnym tle będzie dużo lepiej przydatny niż standardowy czarny ekran AutoCAD-a.

Na swój użytek, zdefiniowałem (rzecz jasna w LISP-ie) polecenie BKG, które szybko zmienia kolor tła. Działa jak przełącznik, który sekwencyjnie zmienia stany. Polecenie w zależności od aktywnej przestrzeni zmienia tła. W modelu czarny / biały, a w obszarze papieru biały / RGB 237,236,215. Kod LISP-a wygląda tak:



; ------------------------------------------------------------------------ ;
; BKG - zmienia kolory tla AutoCAD-a w Modelu i obszarze papieru           ;
;       kojacek 2020/2021                                                  ;
; ------------------------------------------------------------------------ ;
(defun C:BKG ()(bkgcolor)(princ))
; ------------------------------------------------------------------------ ;
(defun bkgcolor (/ d c b m :i)
  (defun :i (m i / j x r)
    (setq j
      (if m
        '((255 255 255)(237 236 215))
        '((255 255 255)(0 0 0))
      )
    )
    (setq r
      (if
        (setq x (vl-position i j))
        (nth (abs (1- x)) j)
        (car j)
      )
    )
    (LM:RGB->OLE (car r)(cadr r)(caddr r))
  )
  (setq d (vla-get-display
            (vla-get-preferences
              (vlax-get-acad-object)
            )
          )
        m (= (getvar "CVPORT") 1)
        c (vlax-variant-value
            (vlax-variant-change-type
              (eval
              (list 
                (if m
                  vla-get-GraphicsWinLayoutBackgrndColor
                  vla-get-GraphicsWinModelBackgrndColor
                )
              d))
             vlax-vbLong
           )
         )
  )
  (if
    (zerop (getvar "TILEMODE"))
    (vla-put-GraphicsWinLayoutBackgrndColor
      d
      (:i t (LM:OLE->RGB c))
    )
    (vla-put-GraphicsWinModelBackgrndColor
      d
      (:i nil (LM:OLE->RGB c))
    )
  )
)
; ------------------------------------------------------------------------ ;
;; RGB -> OLE  -  Lee Mac                                                  ;
;; Args: r,g,b - [int] Red, Green, Blue values                             ;
(defun LM:RGB->OLE ( r g b )
    (logior (fix r) (lsh (fix g) 8) (lsh (fix b) 16))
)
;; OLE -> RGB  -  Lee Mac                                                  ;
;; Args: c - [int] OLE Colour                                              ;
(defun LM:OLE->RGB ( c )
    (mapcar '(lambda ( x ) (lsh (lsh (fix c) x) -24)) '(24 16 8))
)
; ------------------------------------------------------------------------ ;
;;; http://www.lee-mac.com/colourconversion.html                           ;
; ------------------------------------------------------------------------ ;
(princ)

Wykorzystuję tutaj dwie funkcje które stworzył Lee Mac, do konwersji kolorów OLE/RGB. Więcej znakomitych LISP-owych funkcji konwersji kolorów w AutoCAD-zie znajdziesz na stronie autora: http://www.lee-mac.com/colourconversion.html

O (nieco innych) zmianach koloru tła, pisałem (bardzo dawno temu) TUTAJ… (stąd 2 – w tytule dzisiejszym)

( . . . ) a to jest 203 wpis….

Dodaj komentarz

Ta witryna wykorzystuje usługę Akismet aby zredukować ilość spamu. Dowiedz się w jaki sposób dane w twoich komentarzach są przetwarzane.