class ControlPanel(QtWidgets.QWidget):
def __init__(self, vtk_window, parent=None):
super().__init__(parent)
self.vtk_window = vtk_window
self.layout = QtWidgets.QVBoxLayout()
self.sliders = []
self.textboxes = []
self.ct_values = [-500, -100, 0, 200, 500, 1000, 1200]
for i in range(len(self.ct_values)):
slider = QtWidgets.QSlider(QtCore.Qt.Horizontal)
slider.setRange(0, 100) # 设置滑块的值范围
slider.setValue(50) # 默认值为50,即中间值
slider.valueChanged.connect(self.update_opacity)
self.layout.addWidget(slider)
self.sliders.append(slider)
textbox = QtWidgets.QLineEdit()
textbox.setValidator(QtGui.QIntValidator(-1024, 3071)) # 设置合理的CT值范围
textbox.setText(str(self.ct_values[i]))
textbox.editingFinished.connect(self.update_opacity)
self.layout.addWidget(textbox)
self.textboxes.append(textbox)
# 添加用于设置区间范围的滑块
self.range_slider = QtWidgets.QSlider(QtCore.Qt.Horizontal)
self.range_slider.setRange(0, 500) # 假设最大范围为500
self.range_slider.setValue(100) # 默认范围值
self.range_slider.valueChanged.connect(self.update_opacity)
self.layout.addWidget(QtWidgets.QLabel("Range"))
self.layout.addWidget(self.range_slider)
self.setLayout(self.layout)
def update_opacity(self): # 更新透明度方法
self.vtk_window.opacity_transfer_function.RemoveAllPoints() # 清空现有的不透明度点
range_value = self.range_slider.value() # 获取设置的范围值
for i in range(len(self.sliders)):
center_ct_value = int(self.textboxes[i].text()) # 获取中心CT值
value = self.sliders[i].value() / 100.0 # 将滑块的值标准化为0.0到1.0之间
# 设置中心点附近的范围内的不透明度
start_ct_value = center_ct_value - range_value
end_ct_value = center_ct_value + range_value
# 添加范围内的不透明度点,采用线性插值
self.vtk_window.opacity_transfer_function.AddPoint(start_ct_value, 0) # 开始点不透明度为0(可以调整)
self.vtk_window.opacity_transfer_function.AddPoint(center_ct_value, value) # 中心点不透明度
self.vtk_window.opacity_transfer_function.AddPoint(end_ct_value, 0) # 结束点不透明度为0(可以调整)
self.vtk_window.vtk_widget.GetRenderWindow().Render() # 重新渲染
1111111111111
于 2024-07-01 22:45:54 首次发布