@@ -11,7 +11,7 @@ import { hexaToRGBA, rgbaToHexa } from '@/src/utils/color';
1111import { reactive , ref , toRefs , computed , watch } from ' vue' ;
1212import { SegmentMask } from ' @/src/types/segment' ;
1313import { usePaintToolStore } from ' @/src/store/tools/paint' ;
14- import { RGBAColor } from ' @kitware/vtk.js/types' ;
14+ import type { RGBAColor } from ' @kitware/vtk.js/types' ;
1515
1616const props = defineProps ({
1717 groupId: {
@@ -58,36 +58,6 @@ watch(
5858 { immediate: true }
5959);
6060
61- // --- segment opacity --- //
62-
63- const selectedSegmentMask = computed (() => {
64- if (! selectedSegment .value ) return null ;
65- return segmentGroupStore .getSegment (groupId .value , selectedSegment .value );
66- });
67-
68- const segmentOpacity = computed (() => {
69- if (! selectedSegmentMask .value ) return 1 ;
70- return selectedSegmentMask .value .color [3 ] / 255 ;
71- });
72-
73- const setSegmentOpacity = (opacity : number ) => {
74- if (! selectedSegmentMask .value ) {
75- return ;
76- }
77-
78- const color = selectedSegmentMask .value .color ;
79- segmentGroupStore .updateSegment (
80- groupId .value ,
81- selectedSegmentMask .value .value ,
82- {
83- color: [
84- ... (color .slice (0 , 3 ) as [number , number , number ]),
85- Math .round (opacity * 255 ),
86- ],
87- }
88- );
89- };
90-
9161const toggleVisible = (value : number ) => {
9262 const segment = segmentGroupStore .getSegment (groupId .value , value );
9363 if (! segment ) return ;
@@ -116,6 +86,7 @@ const editingSegmentValue = ref<Maybe<number>>(null);
11686const editState = reactive ({
11787 name: ' ' ,
11888 color: ' ' ,
89+ opacity: 1 ,
11990});
12091const editDialog = ref (false );
12192
@@ -136,14 +107,20 @@ function startEditing(value: number) {
136107 if (! editingSegment .value ) return ;
137108 editState .name = editingSegment .value .name ;
138109 editState .color = rgbaToHexa (editingSegment .value .color );
110+ editState .opacity = editingSegment .value .color [3 ] / 255 ;
139111}
140112
141113function stopEditing(commit : boolean ) {
142- if (editingSegmentValue .value && commit )
114+ if (editingSegmentValue .value && commit ) {
115+ const color = [
116+ ... (hexaToRGBA (editState .color ).slice (0 , 3 ) as [number , number , number ]),
117+ Math .round (editState .opacity * 255 ),
118+ ] as RGBAColor ;
143119 segmentGroupStore .updateSegment (groupId .value , editingSegmentValue .value , {
144120 name: editState .name ?? makeDefaultSegmentName (editingSegmentValue .value ),
145- color: hexaToRGBA ( editState . color ) ,
121+ color ,
146122 });
123+ }
147124 editingSegmentValue .value = null ;
148125 editDialog .value = false ;
149126}
@@ -170,19 +147,6 @@ function deleteEditingSegment() {
170147 </slot >
171148 </v-btn >
172149
173- <v-slider
174- class =" mx-4 my-1"
175- label =" Segment Opacity"
176- min =" 0"
177- max =" 1"
178- step =" 0.01"
179- density =" compact"
180- hide-details
181- thumb-label
182- :model-value =" segmentOpacity"
183- @update:model-value =" setSegmentOpacity($event)"
184- />
185-
186150 <editable-chip-list
187151 v-model =" selectedSegment"
188152 :items =" segments"
@@ -242,6 +206,7 @@ function deleteEditingSegment() {
242206 v-if =" !!editingSegment"
243207 v-model:name =" editState.name"
244208 v-model:color =" editState.color"
209+ v-model:opacity =" editState.opacity"
245210 @delete =" deleteEditingSegment"
246211 @cancel =" stopEditing(false)"
247212 @done =" stopEditing(true)"
0 commit comments