From 1a13257bbb9ce4bcd3a4052998813644acfebbc8 Mon Sep 17 00:00:00 2001 From: afernand Date: Tue, 14 Jan 2025 11:24:00 +0100 Subject: [PATCH 1/6] feat: Add inverted buttons --- .../backends/pyvista/widgets/_images/+xy_inv.png | Bin 0 -> 359 bytes .../backends/pyvista/widgets/_images/+xz_inv.png | Bin 0 -> 324 bytes .../backends/pyvista/widgets/_images/+yz_inv.png | Bin 0 -> 336 bytes .../backends/pyvista/widgets/_images/-xy_inv.png | Bin 0 -> 356 bytes .../backends/pyvista/widgets/_images/-xz_inv.png | Bin 0 -> 314 bytes .../backends/pyvista/widgets/_images/-yz_inv.png | Bin 0 -> 338 bytes .../pyvista/widgets/_images/designpoint.png | Bin 569 -> 0 bytes .../pyvista/widgets/_images/downarrow_inv.png | Bin 0 -> 269 bytes .../pyvista/widgets/_images/isometric_inv.png | Bin 0 -> 473 bytes .../pyvista/widgets/_images/measurement_inv.png | Bin 0 -> 343 bytes .../pyvista/widgets/_images/planecut_inv.png | Bin 0 -> 341 bytes .../pyvista/widgets/_images/ruler_inv.png | Bin 0 -> 191 bytes .../pyvista/widgets/_images/screenshot_inv.png | Bin 0 -> 306 bytes .../pyvista/widgets/_images/upxarrow_inv.png | Bin 0 -> 290 bytes .../pyvista/widgets/_images/upyarrow_inv.png | Bin 0 -> 295 bytes .../pyvista/widgets/_images/upzarrow_inv.png | Bin 0 -> 258 bytes .../pyvista/widgets/_images/visibilityoff_inv.png | Bin 0 -> 416 bytes .../pyvista/widgets/_images/visibilityon_inv.png | Bin 0 -> 418 bytes 18 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/ansys/tools/visualization_interface/backends/pyvista/widgets/_images/+xy_inv.png create mode 100644 src/ansys/tools/visualization_interface/backends/pyvista/widgets/_images/+xz_inv.png create mode 100644 src/ansys/tools/visualization_interface/backends/pyvista/widgets/_images/+yz_inv.png create mode 100644 src/ansys/tools/visualization_interface/backends/pyvista/widgets/_images/-xy_inv.png create mode 100644 src/ansys/tools/visualization_interface/backends/pyvista/widgets/_images/-xz_inv.png create mode 100644 src/ansys/tools/visualization_interface/backends/pyvista/widgets/_images/-yz_inv.png delete mode 100644 src/ansys/tools/visualization_interface/backends/pyvista/widgets/_images/designpoint.png create mode 100644 src/ansys/tools/visualization_interface/backends/pyvista/widgets/_images/downarrow_inv.png create mode 100644 src/ansys/tools/visualization_interface/backends/pyvista/widgets/_images/isometric_inv.png create mode 100644 src/ansys/tools/visualization_interface/backends/pyvista/widgets/_images/measurement_inv.png create mode 100644 src/ansys/tools/visualization_interface/backends/pyvista/widgets/_images/planecut_inv.png create mode 100644 src/ansys/tools/visualization_interface/backends/pyvista/widgets/_images/ruler_inv.png create mode 100644 src/ansys/tools/visualization_interface/backends/pyvista/widgets/_images/screenshot_inv.png create mode 100644 src/ansys/tools/visualization_interface/backends/pyvista/widgets/_images/upxarrow_inv.png create mode 100644 src/ansys/tools/visualization_interface/backends/pyvista/widgets/_images/upyarrow_inv.png create mode 100644 src/ansys/tools/visualization_interface/backends/pyvista/widgets/_images/upzarrow_inv.png create mode 100644 src/ansys/tools/visualization_interface/backends/pyvista/widgets/_images/visibilityoff_inv.png create mode 100644 src/ansys/tools/visualization_interface/backends/pyvista/widgets/_images/visibilityon_inv.png diff --git a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/_images/+xy_inv.png b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/_images/+xy_inv.png new file mode 100644 index 0000000000000000000000000000000000000000..1d507c49b0a908f938d9a4d8b2e1fbb363a555ba GIT binary patch literal 359 zcmV-t0hs=YP)Px$AxT6*R7gwhlreI`Fc3v|k3dTUHNyq0hIHfv;RbFA4Gd+6 z8eBKu0s6Co_E{1z#L6Ac0St?R5-LG7&cQ6e4|-Ys zuK+m|zGpj<8C4|FAcY))Q?_3Vj|TY7)LF`1y|Gd&ysECpU9^Tq>THcnSyGcP4iNLq z29l__sO@tdx(_!6_*V4`zMVu@WPAV`{q=VeHKx*H!wJNYUdZCdR*L`t002ovPDHLk FV1iXNmAU`` literal 0 HcmV?d00001 diff --git a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/_images/+xz_inv.png b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/_images/+xz_inv.png new file mode 100644 index 0000000000000000000000000000000000000000..def750ae9a92f9d0ac4174d3691ad9932d0c4285 GIT binary patch literal 324 zcmV-K0lWT*P)Px#{z*hZR7gwhld%tJj>-4Pq)NfP?7zGs zJ8sbw*&V8VKTf+<>YfFus=s8dCflKzqC}hB;74I~KPx$3Q0skR7gwhlra*5Fc3v|k6>$~wKp)0c6tK6L0YYJEG@N>8g9S|w9_VDLr>rl zzLN+6#vo+C4jPL5`EU2{CJX@d$B#9DnfV_KP!?Gjhe~1<(~Lgb*w_{o5`b5&F#_ zanh9sI>o3s@O*sv-Sxi7>70(qER30{ep9#;>A5$+wN0(QMXo`%3Mk9E4B{VAPx$9!W$&R7gwhlreI`Fc3v|k3gFy)C?D}n$W=s$PL^QH_4<-NgAuRZ@>wl3ypjM z=*bCkgrAWdY2-1n#9*lG#$#FDxBu_A7y#&o7i$1B^DP*r_5kRzcCaWIyl9IQ6a)(w zW&1oYfGsVE)17;_Qo!?OOhSIw35|*AR)#@JJYgj`;%u!K5 z;g}sr=G3r67g8u7IAwdc@Ms18Fm;#m&>pPR4wudKI6z>Kx?5vYp0wPx#^hrcPR7gwhld%oLFc3xWMqmOMfCb_PI+y@9NDDMD12jn;Hpm3fLE|hCdYFI_ zKC%gp9RW^+B2mPh?bH4LpU(^c)Z$_#z|7o+hVI=7d_&tI@($jAA(D^~EX;qg_Yy#0 z@?^wCU84m3rNniX5{sA@5}2n067kLXpmvSYa|HBdRQf0Z?}<6ojS>LEETe#)Le)n| zAQ4(A8zs=qMqA*trrnrnb0$Y%k^l#q5{E}~-dI36ysUDHBQmK<;huX|MdX_~+o5`c zI4|8QboV!@>L<`>T!&_g3T(E)7sC1izIY$*I{`1a4pDtX-pU^e9*CS7$mAUftN;K2 M07*qoM6N<$g5XYlk^lez literal 0 HcmV?d00001 diff --git a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/_images/-yz_inv.png b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/_images/-yz_inv.png new file mode 100644 index 0000000000000000000000000000000000000000..f05eaf5c621c4e7976e11460ea16f13d6890a47d GIT binary patch literal 338 zcmV-Y0j>UtP)Px$3`s;mR7gwhlreI`Fc3xeA0cfTsB;6IPJmU8rlI->*C!HqG?XHW0HXtGR&!<;r}6J4Z^e; zluEYq%u?LO1Fzz%?rw4dKc`JO3n%8fUq*MrpC=of#o}$c>04Ac$eS88v2HR+N7VZI k#07&vE3km5welYYzqS`D$SLv=5C8xG07*qoM6N<$f(B=ejQ{`u literal 0 HcmV?d00001 diff --git a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/_images/designpoint.png b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/_images/designpoint.png deleted file mode 100644 index e5c8af549f11195736ac237aa9c69d4cacdaa12d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 569 zcmV-90>=G`P)Px$^GQTOR7gu>WME+U&p;!<2sIo;Qycsz%J6v|4gZhde!=jYfq{WvkdI+vPZu$c z!EbnKa>jpBxFe4ev|M_#Z3UOoj&~!tjezGyeCVLv=Nw)Pn3%EMbo@d~s^V|Gj8If)O0(X;RRIVL?v_ z*!A<0GyWe!jaVeZlQaJBMT>QUhBFv4ESL+4#KoBU5r*%n&iKFN1!}MmG+Z}^VL^cn z*zlI*jQ@9Vxg4YbWEhuS0mHO-4X}n4xf%a=e8ZhXi4Jp^;piFS_QIO~tw^~QW)*s- z0Xa;{ql%#|R1TJcP?O^Ag@ylH4}Hg$+Zal-GXB5*$-p45YRb@9k&KeY=jCSnKlBYF ze_-a&{N#-PAF*d=tl_h#IrsmP2fvBS{Px#$4Nv%R7gwhmD>u#AP_{?TQL9su^JUEBbBD5Wvz*&4_OF=VD{`~G7&U6#N_<+ zAAnLydDp2Bf-R6efW!be=SXW^IVmMt*Og8M#2B9d#+VE6SSxn$vk^f!fKAx}k~S4V zQKza1(%j2*DqzZpa?T{B#79TCS4tfpQL_jne02qY@a%qlbOhEa00|*f)$9XfT9$?F zf(0}$+P1AGMD!-d*)BkXc<(E~TFX}6y6pxuNUf^FriTC{f4{FfxBw#)VBfg`(Xf;m Tu+c}^00000NkvXXu0mjf5WH$% literal 0 HcmV?d00001 diff --git a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/_images/isometric_inv.png b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/_images/isometric_inv.png new file mode 100644 index 0000000000000000000000000000000000000000..477d4a2be25a4e5d60ff43808a1a72989f0a00a9 GIT binary patch literal 473 zcmV;~0Ve*5P)X1^@s6D=Y3@00001b5ch_0Itp) z=>Px$lSxEDR7gwhmA_8HP!z_`9e9D7uwjB569excZ-NyPOu(uw6a`{SLSYfHly|@x z-hr8kut-G80&GZf%q1xiXv;0iq@C~ie&>AWPYEI-9PuL*KnNknV63$N9-v--#&|rz zWT_{MN+lI16B9J8N)m}UhQncq#V%YyOn^cmkJITCDwXPvm>{Gv5IBWo^2!$E3drXl za6X@drd9UZAqdy#_xnK*ZZ_UJ0=nHUMk0~D!rP-8`c3a#U80nz9=w%Z*dinqvd zCp%f$?F+47Hk*NIn$T*!vH>h1QM^Nr<7`2)oW=3@0~(Dcdk?G%wlmFUGb>Okl_s?D z!{M8wuodfSk<;nW^%vy%OQ!xD1Sl2@D9gEjK*!O7A6rD5tLr-QJZ}qe1E{KkqA0oV zfi*pbVc=-=4!PX@2FMOTcV)3y?A$A+W7ljNI2a5-QPdUaJAeu=m!D8B+utiDfK^eg z_JsX@AA-R%pl93X^TEDx^#rg$it>n(lsSA4e)H#lPz7ERSOdHSd42l@%pZcqFaMQb P00000NkvXXu0mjf`s2-> literal 0 HcmV?d00001 diff --git a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/_images/measurement_inv.png b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/_images/measurement_inv.png new file mode 100644 index 0000000000000000000000000000000000000000..5505dfe2f87ac6d21a4df47869626804b5f4bdcc GIT binary patch literal 343 zcmV-d0jU0oP)Px$5lKWrR7gv`l`#s!FcgMggl>YDaPcl4!6i~EUBt=3&B4yaC0L3s9>Aej@D?u8 zMZ7|wPZEg)t4WhqJHLMa|K9tP5JW`y(MJTF5JI}ULR2np5_b(9#H)k)yc=lVwrAn)Ynt(pjL69 p(OgFKzb}!4M{DWJxwX=>-~k=hJj-TAYbF2y002ovPDHLkV1nZ4mjwU- literal 0 HcmV?d00001 diff --git a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/_images/planecut_inv.png b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/_images/planecut_inv.png new file mode 100644 index 0000000000000000000000000000000000000000..9c2d35feec69684153271c77848490ad59b55a20 GIT binary patch literal 341 zcmV-b0jmCqP)Px$4@pEpR7gv;l`#&&FbqYLA@^i}p#w+^T!f_q2vuT0LR?v9-i_!1_00#$E8VHqG4*&<^VDPSK z8nY@ktP)PO2nY%&aNMs{N&f~&{UQM&J1A2sdntH`qi%8xjmsvPfVAnM+I;9SwN9yF328m8BqhMfv6O4(~TQXC8yd&@kMN32{PKI*s5H) z#7Tzo)b-b_x4XeElH4T%a(59{G6^76F7+kp7u8=wOHut;u3tfje+6n-0807 zjPX(hR|Gmg$~Mh2dV6P$1KYYc=Y=b}wLkBQ6=D3R(8ZSX@rv16W~PMF7b)ioF3dQv oxKDoS4mP=HH%rd{%^BT#d{rfq&3YGJ10BKO>FVdQ&MBb@030hvwEzGB literal 0 HcmV?d00001 diff --git a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/_images/screenshot_inv.png b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/_images/screenshot_inv.png new file mode 100644 index 0000000000000000000000000000000000000000..8ea47d8e2c60030bcd3e3367b9de178463100330 GIT binary patch literal 306 zcmV-20nPr2P)Px#>`6pHR7gu>{Qv*|e+C)?Mvw)JjEs!5umf!NfLpL&&UBnXn2?f**XIO%FsZ-m zKOZkI-q6Em35o^exD=Njn59HnfX{_7QQ`kxoE)(F5Tp;Q1%$$tP-=tuiYyD-Tk8M6 zfB%7@t9K&K$R*1HLSc>UE0QfhHXIgw*u-F#kZl2a+#nl7whusIE-4|wfGy&wVnJDP z{(mh^4cb`%@;WgtB|C_aEx?xk2?ZU|84X)9J$U#i!~BIyF!BS*sfbX{MVB9V3rKY_ zF7+5?5uper#bT_*H7N!VtCnDmMyx@&)WI#F)F6EN0ZOiQ$jpjQLjV8(07*qoM6N<$ Ef;s(su>b%7 literal 0 HcmV?d00001 diff --git a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/_images/upxarrow_inv.png b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/_images/upxarrow_inv.png new file mode 100644 index 0000000000000000000000000000000000000000..0f8efe5d85483561cd99fbe8e85ffc1e1f16b514 GIT binary patch literal 290 zcmV+-0p0$IP)Px#+(|@1R7gwhl)({#Fc3v|E71aMz%(EgXa#arD=}y6fC{96&;Z`GlJ5j2j4&g+ zOu~!@Il(0PZ~rH|Obb7}us;0(V#2c`0sybb%<6OMjX^w=tc9omWAQl<5%5i13z-B+ z;u?tPz>7pjPx#;Ymb6R7gwhmBA5$Fc3xmR-$LEfHWW-*g>w^0u{&^Ins=s9W=|Z zxyglLW_d4vHvvNCi!$@^7bH8ps71`oLL?&fd+Ndnk4x4{RDw_V5=m0<4X%~^6r|u9 zNiu;zvbM-XaA=rsC_%m(6P*I{@w$bpAGAKfU;vRH1%U%Qa{cpq0f0shQAzL}XmbvH z-&JEG6TuWJ?b%m@%q)R`0ypf)Q@qD*Xp%r+vhunB(7q4cOwhOKQlNd!!aMRY5_&6Z^sJOO_ui5YK!I0pa#002ovPDHLkV1hm9b-w@r literal 0 HcmV?d00001 diff --git a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/_images/upzarrow_inv.png b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/_images/upzarrow_inv.png new file mode 100644 index 0000000000000000000000000000000000000000..d419ae532e783fa21c0592055c85dc5be7c72cfb GIT binary patch literal 258 zcmV+d0sa1oP)Px#yh%hsR7gwhmC+4?KoCTCDzOe}Kq{aE@7q%RK0B}iY2awXPR5)D0utFJ>?NAW z_wnBDa2X(l9~9=xU!W$uDk751L;&XZ%m;gTKeAO~61>CLNL0ZmxK*+!(BKw{xm}ooqT+sh+cF7!t7?b z2x9J;8WP%hg>M%;r$0`b@iLNa7bvCs`vUc^vT(rEMPDs=0DUH6864P{a{vGU07*qo IM6N<$f+ZhlHUIzs literal 0 HcmV?d00001 diff --git a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/_images/visibilityoff_inv.png b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/_images/visibilityoff_inv.png new file mode 100644 index 0000000000000000000000000000000000000000..9298a1d740e58b6f62c508552abf877273b6bf0d GIT binary patch literal 416 zcmV;R0bl-!P)Px$T1iAfR7gu>WS}u%q_O!7^s`{Woaz4)QZlJ-A>2Ta1)$(Ux1_eJ?7y;-BG!;3 z#z819#%2jjj8I(RvJ4|gaQOtA1;qt9|8;e=;ZoQvL9w8QO3U}uA( z0TzB;ZB75h#6&St9lFIR7NC21#+3g592^`tBN12LLAC^JL1KK&e|uYNtS%)KxrE{Y zBMwfVIma+{#%v66Px$TuDShR7gu>WS}u%q_O!7Bfx@=mWKZl65?1xa@&qw46D|x#~TVbB^S(@{-4;{-QU<+W1KYaYi zP*7X}w=^{={=c=A1za(*>tU&jkb_VxKvz6tO8 Date: Tue, 14 Jan 2025 12:12:35 +0100 Subject: [PATCH 2/6] feat: Add dark mode --- .../backends/pyvista/pyvista.py | 18 +++++++++--------- .../backends/pyvista/widgets/button.py | 9 +++++++-- .../pyvista/widgets/displace_arrows.py | 4 ++-- .../backends/pyvista/widgets/hide_buttons.py | 17 +++++++++++------ .../backends/pyvista/widgets/measure.py | 10 +++++++--- .../backends/pyvista/widgets/mesh_slider.py | 10 +++++++--- .../backends/pyvista/widgets/ruler.py | 10 +++++++--- .../backends/pyvista/widgets/screenshot.py | 10 +++++++--- .../backends/pyvista/widgets/view_button.py | 18 +++++++++--------- 9 files changed, 66 insertions(+), 40 deletions(-) diff --git a/src/ansys/tools/visualization_interface/backends/pyvista/pyvista.py b/src/ansys/tools/visualization_interface/backends/pyvista/pyvista.py index f7f4bed4..634fa381 100644 --- a/src/ansys/tools/visualization_interface/backends/pyvista/pyvista.py +++ b/src/ansys/tools/visualization_interface/backends/pyvista/pyvista.py @@ -179,25 +179,25 @@ def scene(self) -> pv.Plotter: """PyVista scene.""" return self._pl.scene - def enable_widgets(self): + def enable_widgets(self, dark_mode: bool = False) -> None: """Enable the widgets for the plotter.""" # Create Plotter widgets if self._enable_widgets: self._widgets: List[PlotterWidget] = [] - self._widgets.append(Ruler(self._pl._scene)) + self._widgets.append(Ruler(self._pl._scene, dark_mode)) [ - self._widgets.append(DisplacementArrow(self._pl._scene, direction=dir)) + self._widgets.append(DisplacementArrow(self._pl._scene, dir, dark_mode)) for dir in CameraPanDirection ] [ - self._widgets.append(ViewButton(self._pl._scene, direction=dir)) + self._widgets.append(ViewButton(self._pl._scene, dir, dark_mode)) for dir in ViewDirection ] - self._widgets.append(MeasureWidget(self)) - self._widgets.append(ScreenshotButton(self)) + self._widgets.append(MeasureWidget(self, dark_mode)) + self._widgets.append(ScreenshotButton(self, dark_mode)) if not self._use_qt: - self._widgets.append(MeshSliderWidget(self)) - self._widgets.append(HideButton(self)) + self._widgets.append(MeshSliderWidget(self, dark_mode)) + self._widgets.append(HideButton(self, dark_mode)) def add_widget(self, widget: Union[PlotterWidget, List[PlotterWidget]]): """Add one or more custom widgets to the plotter. @@ -446,7 +446,7 @@ def show( ) # Enable widgets and picking capabilities if screenshot is None and not ansys.tools.visualization_interface.DOCUMENTATION_BUILD: - self.enable_widgets() + self.enable_widgets(dark_mode=True) if self._allow_picking: self.enable_picking() diff --git a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/button.py b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/button.py index 93a0ff85..95902c90 100644 --- a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/button.py +++ b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/button.py @@ -46,9 +46,10 @@ class Button(PlotterWidget): """ - def __init__(self, plotter: Plotter, button_config: tuple): + def __init__(self, plotter: Plotter, button_config: tuple, dark_mode: bool = False) -> None: """Initialize the ``Button`` class.""" super().__init__(plotter) + self._dark_mode = dark_mode self._button: vtkButtonWidget = self.plotter.add_checkbox_button_widget( self.callback, position=button_config.value[2], size=30, border_size=3 ) @@ -68,9 +69,13 @@ def callback(self, state: bool) -> None: def update(self) -> None: """Assign the image that represents the button.""" + if self._dark_mode: + is_inv = "_inv" + else: + is_inv = "" button_repr = self._button.GetRepresentation() button_icon_path = Path( - Path(__file__).parent / "_images", self.button_config.value[1] + Path(__file__).parent / "_images", self.button_config.value[1] + is_inv + ".png" ) button_icon = vtkPNGReader() button_icon.SetFileName(button_icon_path) diff --git a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/displace_arrows.py b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/displace_arrows.py index 6f74b37b..504e6e25 100644 --- a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/displace_arrows.py +++ b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/displace_arrows.py @@ -50,9 +50,9 @@ class DisplacementArrow(Button): """ - def __init__(self, plotter: Plotter, direction: CameraPanDirection): + def __init__(self, plotter: Plotter, direction: CameraPanDirection, dark_mode: bool = False) -> None: """Initialize the ``DisplacementArrow`` class.""" - super().__init__(plotter, direction) + super().__init__(plotter, direction, dark_mode) self.direction = direction self.update() diff --git a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/hide_buttons.py b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/hide_buttons.py index 4d955bb5..98ca6565 100644 --- a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/hide_buttons.py +++ b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/hide_buttons.py @@ -41,11 +41,11 @@ class HideButton(PlotterWidget): """ - def __init__(self, plotter: "Plotter") -> None: + def __init__(self, plotter: "Plotter", dark_mode: bool = False) -> None: """Initialize the ``HideButton`` class.""" # Call PlotterWidget ctor super().__init__(plotter._pl.scene) - + self._dark_mode = dark_mode # Initialize variables self._actor: vtkActor = None self._plotter = plotter @@ -70,17 +70,22 @@ def callback(self, state: bool) -> None: widget._button.GetRepresentation().SetVisibility(0) else: for widget in self.plotter._widgets: - widget._button.On() - widget._button.GetRepresentation().SetVisibility(1) + widget._button.On() + widget._button.GetRepresentation().SetVisibility(1) def update(self) -> None: """Define the hide widget button parameters.""" + if self._dark_mode: + is_inv = "_inv" + else: + is_inv = "" + show_vr = self._button.GetRepresentation() show_vison_icon_file = Path( - Path(__file__).parent / "_images"/ "visibilityon.png" + Path(__file__).parent / "_images" / ("visibilityon" + is_inv + ".png") ) show_visoff_icon_file = Path( - Path(__file__).parent / "_images"/ "visibilityoff.png" + Path(__file__).parent / "_images" / ("visibilityon" + is_inv + ".png") ) show_r_on = vtkPNGReader() show_r_on.SetFileName(show_vison_icon_file) diff --git a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/measure.py b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/measure.py index eedea2a8..175c99d1 100644 --- a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/measure.py +++ b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/measure.py @@ -41,11 +41,11 @@ class MeasureWidget(PlotterWidget): """ - def __init__(self, plotter_helper: "Plotter") -> None: + def __init__(self, plotter_helper: "Plotter", dark_mode: bool = False) -> None: """Initialize the ``MeasureWidget`` class.""" # Call PlotterWidget ctor super().__init__(plotter_helper._pl.scene) - + self._dark_mode = dark_mode # Initialize variables self._actor: vtkActor = None self.plotter_helper = plotter_helper @@ -84,9 +84,13 @@ def callback(self, state: bool) -> None: def update(self) -> None: """Define the measurement widget button parameters.""" + if self._dark_mode: + is_inv = "_inv" + else: + is_inv = "" show_measure_vr = self._button.GetRepresentation() show_measure_icon_file = Path( - Path(__file__).parent / "_images"/ "measurement.png" + Path(__file__).parent / "_images" / ("measurement" + is_inv + ".png") ) show_measure_r = vtkPNGReader() show_measure_r.SetFileName(show_measure_icon_file) diff --git a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/mesh_slider.py b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/mesh_slider.py index b22d1469..85ce9125 100644 --- a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/mesh_slider.py +++ b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/mesh_slider.py @@ -41,11 +41,11 @@ class MeshSliderWidget(PlotterWidget): """ - def __init__(self, plotter_helper: "Plotter") -> None: + def __init__(self, plotter_helper: "Plotter", dark_mode: bool = False) -> None: """Initialize the ``MeshSliderWidget`` class.""" # Call PlotterWidget ctor super().__init__(plotter_helper._pl.scene) - + self._dark_mode = dark_mode # Initialize variables self._widget_actor: vtkActor = None self.plotter_helper = plotter_helper @@ -101,9 +101,13 @@ def callback(self, state: bool) -> None: def update(self) -> None: """Define the mesh slider widget button parameters.""" + if self._dark_mode: + is_inv = "_inv" + else: + is_inv = "" show_measure_vr = self._button.GetRepresentation() show_measure_icon_file = Path( - Path(__file__).parent / "_images"/ "planecut.png" + Path(__file__).parent / "_images"/ ("planecut" + is_inv + ".png") ) show_measure_r = vtkPNGReader() show_measure_r.SetFileName(show_measure_icon_file) diff --git a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/ruler.py b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/ruler.py index d6caf0ef..1d219f11 100644 --- a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/ruler.py +++ b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/ruler.py @@ -39,11 +39,11 @@ class Ruler(PlotterWidget): """ - def __init__(self, plotter: Plotter) -> None: + def __init__(self, plotter: Plotter, dark_mode: bool = False) -> None: """Initialize the ``Ruler`` class.""" # Call PlotterWidget ctor super().__init__(plotter) - + self._dark_mode = dark_mode # Initialize variables self._actor: vtkActor = None self._button: vtkButtonWidget = self.plotter.add_checkbox_button_widget( @@ -84,8 +84,12 @@ def callback(self, state: bool) -> None: def update(self) -> None: """Define the configuration and representation of the ruler widget button.""" + if self._dark_mode: + is_inv = "_inv" + else: + is_inv = "" show_ruler_vr = self._button.GetRepresentation() - show_ruler_icon_file = Path(Path(__file__).parent / "_images" / "ruler.png") + show_ruler_icon_file = Path(Path(__file__).parent / "_images" / ("ruler" + is_inv + ".png")) show_ruler_r = vtkPNGReader() show_ruler_r.SetFileName(show_ruler_icon_file) show_ruler_r.Update() diff --git a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/screenshot.py b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/screenshot.py index 46e4674c..a3624052 100644 --- a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/screenshot.py +++ b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/screenshot.py @@ -39,11 +39,11 @@ class ScreenshotButton(PlotterWidget): """ - def __init__(self, plotter: Plotter) -> None: + def __init__(self, plotter: Plotter, dark_mode: bool = False) -> None: """Initialize the ``ScreenshotButton`` class.""" # Call PlotterWidget ctor super().__init__(plotter) - + self._dark_mode = dark_mode # Initialize variables self._actor: vtkActor = None self._button: vtkButtonWidget = self.plotter._pl.scene.add_checkbox_button_widget( @@ -69,8 +69,12 @@ def callback(self, state: bool) -> None: def update(self) -> None: """Define the configuration and representation of the screenshot widget button.""" + if self._dark_mode: + is_inv = "_inv" + else: + is_inv = "" show_vr = self._button.GetRepresentation() - show_icon_file = Path(Path(__file__).parent / "_images" / "screenshot.png") + show_icon_file = Path(Path(__file__).parent / "_images" / ("screenshot" + is_inv + ".png")) show_r = vtkPNGReader() show_r.SetFileName(show_icon_file) show_r.Update() diff --git a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/view_button.py b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/view_button.py index a3f31242..607938f4 100644 --- a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/view_button.py +++ b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/view_button.py @@ -31,13 +31,13 @@ class ViewDirection(Enum): """Provides an enum with the available views.""" - XYPLUS = 0, "+xy.png", (5, 220) - XYMINUS = 1, "-xy.png", (5, 251) - XZPLUS = 2, "+xz.png", (5, 282) - XZMINUS = 3, "-xz.png", (5, 313) - YZPLUS = 4, "+yz.png", (5, 344) - YZMINUS = 5, "-yz.png", (5, 375) - ISOMETRIC = 6, "isometric.png", (5, 406) + XYPLUS = 0, "+xy", (5, 220) + XYMINUS = 1, "-xy", (5, 251) + XZPLUS = 2, "+xz", (5, 282) + XZMINUS = 3, "-xz", (5, 313) + YZPLUS = 4, "+yz", (5, 344) + YZMINUS = 5, "-yz", (5, 375) + ISOMETRIC = 6, "isometric", (5, 406) class ViewButton(Button): @@ -52,9 +52,9 @@ class ViewButton(Button): """ - def __init__(self, plotter: Plotter, direction: tuple): + def __init__(self, plotter: Plotter, direction: tuple, dark_mode: bool = False) -> None: """Initialize the ``ViewButton`` class.""" - super().__init__(plotter, direction) + super().__init__(plotter, direction, dark_mode) self.direction = direction self.update() From b6ec15de4dc26fb1addc3f799c59f052df21dd6e Mon Sep 17 00:00:00 2001 From: afernand Date: Tue, 14 Jan 2025 12:37:09 +0100 Subject: [PATCH 3/6] feat: Add threshold for auto selection --- .../backends/pyvista/pyvista.py | 24 +++++++++++++++++-- .../backends/pyvista/widgets/button.py | 2 ++ .../pyvista/widgets/displace_arrows.py | 15 ++++++------ .../backends/pyvista/widgets/hide_buttons.py | 2 ++ .../backends/pyvista/widgets/measure.py | 2 ++ .../backends/pyvista/widgets/mesh_slider.py | 2 ++ .../backends/pyvista/widgets/ruler.py | 2 ++ .../backends/pyvista/widgets/screenshot.py | 2 ++ .../backends/pyvista/widgets/view_button.py | 3 ++- 9 files changed, 44 insertions(+), 10 deletions(-) diff --git a/src/ansys/tools/visualization_interface/backends/pyvista/pyvista.py b/src/ansys/tools/visualization_interface/backends/pyvista/pyvista.py index 634fa381..6ba05bbd 100644 --- a/src/ansys/tools/visualization_interface/backends/pyvista/pyvista.py +++ b/src/ansys/tools/visualization_interface/backends/pyvista/pyvista.py @@ -55,6 +55,8 @@ _HAS_TRAME = importlib.util.find_spec("pyvista.trame") and importlib.util.find_spec("trame.app") +DARK_MODE_THRESHOLD = 120 + if TYPE_CHECKING: import numpy as np @@ -180,7 +182,13 @@ def scene(self) -> pv.Plotter: return self._pl.scene def enable_widgets(self, dark_mode: bool = False) -> None: - """Enable the widgets for the plotter.""" + """Enable the widgets for the plotter. + + Parameters + ---------- + dark_mode : bool, default: False + Whether to use dark mode for the widgets. + """ # Create Plotter widgets if self._enable_widgets: self._widgets: List[PlotterWidget] = [] @@ -403,6 +411,7 @@ def show( screenshot: Optional[str] = None, view_2d: Dict = None, name_filter: str = None, + dark_mode: bool = False, **plotting_options, ) -> List[Any]: """Plot and show any PyAnsys object. @@ -420,6 +429,8 @@ def show( Dictionary with the plane and the viewup vectors of the 2D plane. name_filter : str, default: None Regular expression with the desired name or names to include in the plotter. + dark_mode : bool, default: False + Whether to use dark mode for the widgets. **plotting_options : dict, default: None Keyword arguments. For allowable keyword arguments, see the :meth:`Plotter.add_mesh ` method. @@ -446,7 +457,16 @@ def show( ) # Enable widgets and picking capabilities if screenshot is None and not ansys.tools.visualization_interface.DOCUMENTATION_BUILD: - self.enable_widgets(dark_mode=True) + if dark_mode: + self.enable_widgets(dark_mode=dark_mode) + elif all([ + color < DARK_MODE_THRESHOLD + for color in self._pl.scene.background_color.int_rgb + ]): + print([color for color in self._pl.scene.background_color.int_rgb]) + self.enable_widgets(dark_mode=True) + else: + self.enable_widgets() if self._allow_picking: self.enable_picking() diff --git a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/button.py b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/button.py index 95902c90..ea9ef4c1 100644 --- a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/button.py +++ b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/button.py @@ -43,6 +43,8 @@ class Button(PlotterWidget): Plotter to draw the buttons on. button_config : tuple Tuple containing the position and the path to the icon of the button. + dark_mode : bool, optional + Whether to activate the dark mode or not. """ diff --git a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/displace_arrows.py b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/displace_arrows.py index 504e6e25..e8b6d50e 100644 --- a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/displace_arrows.py +++ b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/displace_arrows.py @@ -30,12 +30,12 @@ class CameraPanDirection(Enum): """Provides an enum with the available movement directions of the camera.""" - XUP = 0, "upxarrow.png", (5, 170) - XDOWN = 1, "downarrow.png", (5, 130) - YUP = 2, "upyarrow.png", (35, 170) - YDOWN = 3, "downarrow.png", (35, 130) - ZUP = 4, "upzarrow.png", (65, 170) - ZDOWN = 5, "downarrow.png", (65, 130) + XUP = 0, "upxarrow", (5, 170) + XDOWN = 1, "downarrow", (5, 130) + YUP = 2, "upyarrow", (35, 170) + YDOWN = 3, "downarrow", (35, 130) + ZUP = 4, "upzarrow", (65, 170) + ZDOWN = 5, "downarrow", (65, 130) class DisplacementArrow(Button): @@ -47,7 +47,8 @@ class DisplacementArrow(Button): Plotter to draw the buttons on. direction : CameraPanDirection Direction that the camera is to move. - + dark_mode : bool, optional + Whether to activate the dark mode or not. """ def __init__(self, plotter: Plotter, direction: CameraPanDirection, dark_mode: bool = False) -> None: diff --git a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/hide_buttons.py b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/hide_buttons.py index 98ca6565..acd84c12 100644 --- a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/hide_buttons.py +++ b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/hide_buttons.py @@ -38,6 +38,8 @@ class HideButton(PlotterWidget): ---------- plotter_helper : PlotterHelper Plotter to add the hide widget to. + dark_mode : bool, optional + Whether to activate the dark mode or not. """ diff --git a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/measure.py b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/measure.py index 175c99d1..d272d10e 100644 --- a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/measure.py +++ b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/measure.py @@ -38,6 +38,8 @@ class MeasureWidget(PlotterWidget): ---------- plotter_helper : PlotterHelper Plotter to add the measure widget to. + dark_mode : bool, optional + Whether to activate the dark mode or not. """ diff --git a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/mesh_slider.py b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/mesh_slider.py index 85ce9125..f5378cee 100644 --- a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/mesh_slider.py +++ b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/mesh_slider.py @@ -38,6 +38,8 @@ class MeshSliderWidget(PlotterWidget): ---------- plotter_helper : PlotterHelper Plotter to add the mesh slider widget to. + dark_mode : bool, optional + Whether to activate the dark mode or not. """ diff --git a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/ruler.py b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/ruler.py index 1d219f11..f71d8bf9 100644 --- a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/ruler.py +++ b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/ruler.py @@ -36,6 +36,8 @@ class Ruler(PlotterWidget): ---------- plotter : ~pyvista.Plotter Provides the plotter to add the ruler widget to. + dark_mode : bool, optional + Whether to activate the dark mode or not. """ diff --git a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/screenshot.py b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/screenshot.py index a3624052..77d84fd3 100644 --- a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/screenshot.py +++ b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/screenshot.py @@ -36,6 +36,8 @@ class ScreenshotButton(PlotterWidget): ---------- plotter : ~pyvista.Plotter Provides the plotter to add the screenshot widget to. + dark_mode : bool, optional + Whether to activate the dark mode or not. """ diff --git a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/view_button.py b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/view_button.py index 607938f4..a8e040c9 100644 --- a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/view_button.py +++ b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/view_button.py @@ -49,7 +49,8 @@ class ViewButton(Button): Plotter to draw the buttons on. direction : ViewDirection Direction of the view. - + dark_mode : bool, optional + Whether to activate the dark mode or not. """ def __init__(self, plotter: Plotter, direction: tuple, dark_mode: bool = False) -> None: From bef54dda4a069c9970b7d011d35f06fb696da45c Mon Sep 17 00:00:00 2001 From: pyansys-ci-bot <92810346+pyansys-ci-bot@users.noreply.github.com> Date: Tue, 14 Jan 2025 11:41:16 +0000 Subject: [PATCH 4/6] chore: adding changelog file 228.added.md [dependabot-skip] --- doc/changelog.d/228.added.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 doc/changelog.d/228.added.md diff --git a/doc/changelog.d/228.added.md b/doc/changelog.d/228.added.md new file mode 100644 index 00000000..c6d1aa51 --- /dev/null +++ b/doc/changelog.d/228.added.md @@ -0,0 +1 @@ +feat: Add dark mode when background is dark \ No newline at end of file From 6c42d7c613142095d34acc9f5fc1a97a7e8d01c5 Mon Sep 17 00:00:00 2001 From: afernand Date: Tue, 14 Jan 2025 12:46:00 +0100 Subject: [PATCH 5/6] feat: Add darkmode to ruler --- .../backends/pyvista/widgets/ruler.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/ruler.py b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/ruler.py index f71d8bf9..c990c58d 100644 --- a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/ruler.py +++ b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/ruler.py @@ -71,6 +71,10 @@ def callback(self, state: bool) -> None: self.plotter.remove_actor(self._actor) self._actor = None else: + if self._dark_mode: + color = "white" + else: + color = "black" self._actor = self.plotter.show_bounds( grid="front", location="outer", @@ -78,7 +82,7 @@ def callback(self, state: bool) -> None: show_xaxis=True, show_yaxis=True, show_zaxis=True, - color="black", + color=color, xtitle="X Axis [m]", ytitle="Y Axis [m]", ztitle="Z Axis [m]", From dff7771397ee0b813f15f207ecff48843b8c98bb Mon Sep 17 00:00:00 2001 From: afernand Date: Tue, 14 Jan 2025 14:39:35 +0100 Subject: [PATCH 6/6] fix: Inline color selection and f-string --- .../backends/pyvista/widgets/button.py | 2 +- .../backends/pyvista/widgets/hide_buttons.py | 4 ++-- .../backends/pyvista/widgets/measure.py | 2 +- .../backends/pyvista/widgets/mesh_slider.py | 2 +- .../backends/pyvista/widgets/ruler.py | 8 ++------ .../backends/pyvista/widgets/screenshot.py | 2 +- 6 files changed, 8 insertions(+), 12 deletions(-) diff --git a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/button.py b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/button.py index ea9ef4c1..b506c896 100644 --- a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/button.py +++ b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/button.py @@ -77,7 +77,7 @@ def update(self) -> None: is_inv = "" button_repr = self._button.GetRepresentation() button_icon_path = Path( - Path(__file__).parent / "_images", self.button_config.value[1] + is_inv + ".png" + Path(__file__).parent / "_images", f"{self.button_config.value[1]}{is_inv}.png" ) button_icon = vtkPNGReader() button_icon.SetFileName(button_icon_path) diff --git a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/hide_buttons.py b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/hide_buttons.py index acd84c12..360f9a9c 100644 --- a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/hide_buttons.py +++ b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/hide_buttons.py @@ -84,10 +84,10 @@ def update(self) -> None: show_vr = self._button.GetRepresentation() show_vison_icon_file = Path( - Path(__file__).parent / "_images" / ("visibilityon" + is_inv + ".png") + Path(__file__).parent / "_images" / f"visibilityon{is_inv}.png" ) show_visoff_icon_file = Path( - Path(__file__).parent / "_images" / ("visibilityon" + is_inv + ".png") + Path(__file__).parent / "_images" / f"visibilityon{is_inv}.png" ) show_r_on = vtkPNGReader() show_r_on.SetFileName(show_vison_icon_file) diff --git a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/measure.py b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/measure.py index d272d10e..dbf2a0c3 100644 --- a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/measure.py +++ b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/measure.py @@ -92,7 +92,7 @@ def update(self) -> None: is_inv = "" show_measure_vr = self._button.GetRepresentation() show_measure_icon_file = Path( - Path(__file__).parent / "_images" / ("measurement" + is_inv + ".png") + Path(__file__).parent / "_images" / f"measurement{is_inv}.png" ) show_measure_r = vtkPNGReader() show_measure_r.SetFileName(show_measure_icon_file) diff --git a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/mesh_slider.py b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/mesh_slider.py index f5378cee..11c26d1b 100644 --- a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/mesh_slider.py +++ b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/mesh_slider.py @@ -109,7 +109,7 @@ def update(self) -> None: is_inv = "" show_measure_vr = self._button.GetRepresentation() show_measure_icon_file = Path( - Path(__file__).parent / "_images"/ ("planecut" + is_inv + ".png") + Path(__file__).parent / "_images" / f"planecut{is_inv}.png" ) show_measure_r = vtkPNGReader() show_measure_r.SetFileName(show_measure_icon_file) diff --git a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/ruler.py b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/ruler.py index c990c58d..9effb7a4 100644 --- a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/ruler.py +++ b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/ruler.py @@ -71,10 +71,6 @@ def callback(self, state: bool) -> None: self.plotter.remove_actor(self._actor) self._actor = None else: - if self._dark_mode: - color = "white" - else: - color = "black" self._actor = self.plotter.show_bounds( grid="front", location="outer", @@ -82,7 +78,7 @@ def callback(self, state: bool) -> None: show_xaxis=True, show_yaxis=True, show_zaxis=True, - color=color, + color="white" if self._dark_mode else "black", xtitle="X Axis [m]", ytitle="Y Axis [m]", ztitle="Z Axis [m]", @@ -95,7 +91,7 @@ def update(self) -> None: else: is_inv = "" show_ruler_vr = self._button.GetRepresentation() - show_ruler_icon_file = Path(Path(__file__).parent / "_images" / ("ruler" + is_inv + ".png")) + show_ruler_icon_file = Path(Path(__file__).parent / "_images" / f"ruler{is_inv}.png") show_ruler_r = vtkPNGReader() show_ruler_r.SetFileName(show_ruler_icon_file) show_ruler_r.Update() diff --git a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/screenshot.py b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/screenshot.py index 77d84fd3..b6a5a846 100644 --- a/src/ansys/tools/visualization_interface/backends/pyvista/widgets/screenshot.py +++ b/src/ansys/tools/visualization_interface/backends/pyvista/widgets/screenshot.py @@ -76,7 +76,7 @@ def update(self) -> None: else: is_inv = "" show_vr = self._button.GetRepresentation() - show_icon_file = Path(Path(__file__).parent / "_images" / ("screenshot" + is_inv + ".png")) + show_icon_file = Path(Path(__file__).parent / "_images" / f"screenshot{is_inv}.png") show_r = vtkPNGReader() show_r.SetFileName(show_icon_file) show_r.Update()