1111111111111

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()  # 重新渲染

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值