2P

Zmiana koloru tła - Działało w zw2015... nie działa w zw2017 :(

Rekomendowane odpowiedzi

Mam taki LISP który zmienia kolor tła ekranu z białego na czarny i czarnego na biały. Taki przełącznik. Dodatkowo zmienia kolor wybranych warstw.

LISP działał na wcześniejszych wersjach ZWcada, a na 2017 wskazuje błąd. Może ktoś wie dlaczego??

 

(defun ZYXAK_MT_BandWBackground (/ PREF COL)						
	(ZYXAK_Start)
	(setq PREF (vla-get-display (vla-get-preferences (vlax-get-acad-Object))))
	(setq COL  (vlax-variant-value (vlax-variant-change-type (vla-get-GraphicsWinModelBackgrndColor PREF) vlax-Vblong)))
 
	(if (zerop COL)
		(progn
			(vla-put-GraphicsWinModelBackgrndColor PREF (vlax-Make-Variant 16777215 vlax-Vblong))
			(vla-Put-ModelCrosshairColor           PREF (vlax-Make-Variant 0 vlax-Vblong))
			(command "_-layer" "_C" "T" "255,255,255" (strcat "*" "_wipeout") "")
		)
	;else
		(progn
			(vla-Put-GraphicsWinModelBackgrndColor PREF (vlax-Make-Variant 0 vlax-Vblong))
			(vla-Put-ModelCrosshairColor PREF (vlax-Make-Variant 16777215 vlax-Vblong))
			(command "_-layer" "_C" "T" "0,0,0" (strcat "*" "_wipeout") "")
		)
	)
	(vlax-Release-Object PREF)
	(ZYXAK_OK)
)

 

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

W Helpie jest napisane, że 

ZcadPreferencesDisplay ma właściwość  GraphicsWinModelBackgrndColor. Raz mi nawet wpisanie linijki kodu zmieniło kolor tła (na czarny), ale później ta sama linijka kodu już nic nie zdziałała (na inny kolor).

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

chciałem podejrzeć wartość tej właściwości na działającym ZWCADzie.

(setq display (vla-get-display (vla-get-preferences (vlax-get-acad-object))))
( vlax-dump-object display t )

zobaczyłem że nil i (RO)  czyli ReadOnly. więc zapytałem ZWSOFT jak można to ogarnąć
Dam znać co odpowiedzą.

preview.png

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
1 minutę temu, dmatusz3 napisał:

Obecnie kolor tła można przełączyć jedynie w opcjach programu.

Kiepsko. W takim razie z niecierpliwością czekam na możliwość sprawniejszego przełączania koloru tła, tak jak to było w starszych wersjach.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

W najnowszej wersji po małej modyfikacji działa:
 

(defun ZYXAK_MT_BandWBackground (/ PREF COL)						
	(setq PREF (vla-get-display (vla-get-preferences (vlax-get-acad-object))))
	(setq COL  (vlax-variant-value (vlax-variant-change-type (vla-get-GraphicsWinModelBackgrndColor PREF) vlax-Vblong)))
	(if (zerop COL)
		(progn
			(vla-put-GraphicsWinModelBackgrndColor PREF 16777215  )
			(vla-Put-ModelCrosshairColor           PREF 0 )
		)
		(progn
			(vla-Put-GraphicsWinModelBackgrndColor PREF 0 )
			(vla-Put-ModelCrosshairColor PREF 16777215 vlax-Vblong )
		)
	)
	(vlax-release-object PREF)
)

 

zmiana koloru_1.lsp

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Kolor 30, 40 , 48 to zapis RGB. Można go prosto przeliczyć na kolor w formacie dziesiętnym i taki wpisać do skryptu.

W poprzednim skrypcie jest niestety mały błąd.

Zamieszczam nowy, są w nim dostępne 3 polecenia: czarne. biale, szare.

biale_czarne_szare.lsp

Można sobie pozmieniać samemu kolory tła i kursora (podkreślone na czerwono).

biale_czarne_szare.png

 

biale_czarne_szare.gif

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Jeszcze nieco zmodyfikowaliśmy program w taki sposób, aby nie trzeba było przeliczać.

Teraz powinno być wszystko jasne.


(defun C:Szare (  / ) 
	(BGColor 30 40 48 )
	(CursorColor 255 255 255)
)
(defun C:białe (  / ) 
	(BGColor 255 255 255 )	
	(CursorColor 0 0 0 )
)
(defun c:czarne (  / ) 
	(BGColor 0 0 0 )
	(CursorColor 255 255 255)
)

(defun BGColor ( R G B / PREF ) 
	(setq PREF ( vla-get-display ( vla-get-preferences (vlax-get-acad-object ) ) ) )
	(vlax-put-property PREF 'GraphicsWinModelBackgrndColor ( RGB->Int R G B ) )
	(vlax-release-object PREF)
)

(defun CursorColor ( R G B / ) 
	( setq PREF ( vla-get-display ( vla-get-preferences (vlax-get-acad-object ) ) ) )
	(vlax-put-property PREF 'ModelCrosshairColor ( RGB->Int R G B ) )
	(vlax-release-object PREF)
)

(defun RGB->Int ( R G B  / ) 
	(+ R ( * G 256 ) ( * B 65536 ) )
)

biale_czarne_szare2.lsp

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się