fix(3D rendering): disabled light sliders when shade is off (#4631)
This commit is contained in:
parent
860679126a
commit
5322064e9e
@ -5,6 +5,7 @@ export function VolumeLighting({
|
|||||||
servicesManager,
|
servicesManager,
|
||||||
commandsManager,
|
commandsManager,
|
||||||
viewportId,
|
viewportId,
|
||||||
|
hasShade,
|
||||||
}: VolumeLightingProps): ReactElement {
|
}: VolumeLightingProps): ReactElement {
|
||||||
const { cornerstoneViewportService } = servicesManager.services;
|
const { cornerstoneViewportService } = servicesManager.services;
|
||||||
const [ambient, setAmbient] = useState(null);
|
const [ambient, setAmbient] = useState(null);
|
||||||
@ -38,9 +39,13 @@ export function VolumeLighting({
|
|||||||
setDiffuse(diffuse);
|
setDiffuse(diffuse);
|
||||||
setSpecular(specular);
|
setSpecular(specular);
|
||||||
}, [viewportId, cornerstoneViewportService]);
|
}, [viewportId, cornerstoneViewportService]);
|
||||||
|
const disableOption = hasShade ? '' : 'ohif-disabled !opacity-40';
|
||||||
|
const disableSlider = !hasShade;
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<div className="all-in-one-menu-item flex w-full flex-row !items-center justify-between gap-[10px]">
|
<div
|
||||||
|
className={`all-in-one-menu-item flex w-full flex-row !items-center justify-between gap-[10px] ${disableOption}`}
|
||||||
|
>
|
||||||
<label
|
<label
|
||||||
className="block text-white"
|
className="block text-white"
|
||||||
htmlFor="ambient"
|
htmlFor="ambient"
|
||||||
@ -56,6 +61,7 @@ export function VolumeLighting({
|
|||||||
onAmbientChange();
|
onAmbientChange();
|
||||||
}}
|
}}
|
||||||
id="ambient"
|
id="ambient"
|
||||||
|
disabled={disableSlider}
|
||||||
max={1}
|
max={1}
|
||||||
min={0}
|
min={0}
|
||||||
type="range"
|
type="range"
|
||||||
@ -68,7 +74,9 @@ export function VolumeLighting({
|
|||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
<div className="all-in-one-menu-item flex w-full flex-row !items-center justify-between gap-[10px]">
|
<div
|
||||||
|
className={`all-in-one-menu-item flex w-full flex-row !items-center justify-between gap-[10px] ${disableOption}`}
|
||||||
|
>
|
||||||
<label
|
<label
|
||||||
className="block text-white"
|
className="block text-white"
|
||||||
htmlFor="diffuse"
|
htmlFor="diffuse"
|
||||||
@ -83,6 +91,7 @@ export function VolumeLighting({
|
|||||||
setDiffuse(e.target.value);
|
setDiffuse(e.target.value);
|
||||||
onDiffuseChange();
|
onDiffuseChange();
|
||||||
}}
|
}}
|
||||||
|
disabled={disableSlider}
|
||||||
id="diffuse"
|
id="diffuse"
|
||||||
max={1}
|
max={1}
|
||||||
min={0}
|
min={0}
|
||||||
@ -97,7 +106,9 @@ export function VolumeLighting({
|
|||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="all-in-one-menu-item flex w-full flex-row !items-center justify-between gap-[10px]">
|
<div
|
||||||
|
className={`all-in-one-menu-item flex w-full flex-row !items-center justify-between gap-[10px] ${disableOption}`}
|
||||||
|
>
|
||||||
<label
|
<label
|
||||||
className="block text-white"
|
className="block text-white"
|
||||||
htmlFor="specular"
|
htmlFor="specular"
|
||||||
@ -108,6 +119,7 @@ export function VolumeLighting({
|
|||||||
<input
|
<input
|
||||||
className="bg-inputfield-main h-2 w-[120px] cursor-pointer appearance-none rounded-lg"
|
className="bg-inputfield-main h-2 w-[120px] cursor-pointer appearance-none rounded-lg"
|
||||||
value={specular}
|
value={specular}
|
||||||
|
disabled={disableSlider}
|
||||||
onChange={e => {
|
onChange={e => {
|
||||||
setSpecular(e.target.value);
|
setSpecular(e.target.value);
|
||||||
onSpecularChange();
|
onSpecularChange();
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import React, { ReactElement } from 'react';
|
import React, { ReactElement, useState } from 'react';
|
||||||
import { AllInOneMenu } from '@ohif/ui';
|
import { AllInOneMenu } from '@ohif/ui';
|
||||||
import { VolumeRenderingOptionsProps } from '../../types/ViewportPresets';
|
import { VolumeRenderingOptionsProps } from '../../types/ViewportPresets';
|
||||||
import { VolumeRenderingQuality } from './VolumeRenderingQuality';
|
import { VolumeRenderingQuality } from './VolumeRenderingQuality';
|
||||||
@ -11,6 +11,7 @@ export function VolumeRenderingOptions({
|
|||||||
volumeRenderingQualityRange,
|
volumeRenderingQualityRange,
|
||||||
servicesManager,
|
servicesManager,
|
||||||
}: VolumeRenderingOptionsProps): ReactElement {
|
}: VolumeRenderingOptionsProps): ReactElement {
|
||||||
|
const [hasShade, setShade] = useState(false);
|
||||||
return (
|
return (
|
||||||
<AllInOneMenu.ItemPanel>
|
<AllInOneMenu.ItemPanel>
|
||||||
<VolumeRenderingQuality
|
<VolumeRenderingQuality
|
||||||
@ -34,12 +35,14 @@ export function VolumeRenderingOptions({
|
|||||||
commandsManager={commandsManager}
|
commandsManager={commandsManager}
|
||||||
servicesManager={servicesManager}
|
servicesManager={servicesManager}
|
||||||
viewportId={viewportId}
|
viewportId={viewportId}
|
||||||
|
onClickShade={setShade}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<VolumeLighting
|
<VolumeLighting
|
||||||
viewportId={viewportId}
|
viewportId={viewportId}
|
||||||
commandsManager={commandsManager}
|
commandsManager={commandsManager}
|
||||||
servicesManager={servicesManager}
|
servicesManager={servicesManager}
|
||||||
|
hasShade={hasShade}
|
||||||
/>
|
/>
|
||||||
</AllInOneMenu.ItemPanel>
|
</AllInOneMenu.ItemPanel>
|
||||||
);
|
);
|
||||||
|
|||||||
@ -6,6 +6,7 @@ export function VolumeShade({
|
|||||||
commandsManager,
|
commandsManager,
|
||||||
viewportId,
|
viewportId,
|
||||||
servicesManager,
|
servicesManager,
|
||||||
|
onClickShade = bool => {},
|
||||||
}: VolumeShadeProps): ReactElement {
|
}: VolumeShadeProps): ReactElement {
|
||||||
const { cornerstoneViewportService } = servicesManager.services;
|
const { cornerstoneViewportService } = servicesManager.services;
|
||||||
const [shade, setShade] = useState(true);
|
const [shade, setShade] = useState(true);
|
||||||
@ -22,6 +23,7 @@ export function VolumeShade({
|
|||||||
const { actor } = viewport.getActors()[0];
|
const { actor } = viewport.getActors()[0];
|
||||||
const shade = actor.getProperty().getShade();
|
const shade = actor.getProperty().getShade();
|
||||||
setShade(shade);
|
setShade(shade);
|
||||||
|
onClickShade(shade);
|
||||||
setKey(key + 1);
|
setKey(key + 1);
|
||||||
}, [viewportId, cornerstoneViewportService]);
|
}, [viewportId, cornerstoneViewportService]);
|
||||||
|
|
||||||
@ -32,6 +34,7 @@ export function VolumeShade({
|
|||||||
checked={shade}
|
checked={shade}
|
||||||
onChange={() => {
|
onChange={() => {
|
||||||
setShade(!shade);
|
setShade(!shade);
|
||||||
|
onClickShade(!shade);
|
||||||
onShadeChange(!shade);
|
onShadeChange(!shade);
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@ -57,10 +57,12 @@ export type VolumeShadeProps = {
|
|||||||
viewportId: string;
|
viewportId: string;
|
||||||
commandsManager: CommandsManager;
|
commandsManager: CommandsManager;
|
||||||
servicesManager: AppTypes.ServicesManager;
|
servicesManager: AppTypes.ServicesManager;
|
||||||
|
onClickShade?: (bool: boolean) => void;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type VolumeLightingProps = {
|
export type VolumeLightingProps = {
|
||||||
viewportId: string;
|
viewportId: string;
|
||||||
commandsManager: CommandsManager;
|
commandsManager: CommandsManager;
|
||||||
servicesManager: AppTypes.ServicesManager;
|
servicesManager: AppTypes.ServicesManager;
|
||||||
|
hasShade: boolean;
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user