添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

看到3DSlicer和paraview中的颜色不透明度调整,你是否也有心动。经过多天摸索,发现这虽然是个小模块,可是如果真是自己做,还挺复杂(可能是自己VTK和QT学的还不够好)。

但是CTK已经为我门做好了,我试着编译和写了个Demo,但是最新的CTK只支持VTK8的版本,如果是用的VTK7也想做一个类似的东西怎么办?那就是把VTK8的东西添加到VTK7上然后修改。具体如下:

vtkGUISupportQt工程中添加了QVTKOPenGLWidget类
vtkRenderingOpenGL2工程中修改了vtkOpenGLRenderWindow类
vtkRenderingCore工程中修改了vtkRenderer, vtkRenderWindow类

这些可以通过和vtk-7.1.1中对应的类比较一下。

最终结果如下:

我把资源上传到了,大家下载吧。

具体Demo代码如下:

#include "testCTK.h"
testCTK::testCTK(QWidget *parent)
	: QWidget(parent)
	ui.setupUi(this);
	// Create transfer mapping scalar value to opacity.
	opacityTransferFunction = vtkSmartPointer<vtkPiecewiseFunction>::New();
	opacityTransferFunction->AddPoint(0.0, 0.0);
	opacityTransferFunction->AddPoint(36.0, 0.125);
	opacityTransferFunction->AddPoint(72.0, 0.25);
	opacityTransferFunction->AddPoint(108.0, 0.375);
	opacityTransferFunction->AddPoint(144.0, 0.5);
	opacityTransferFunction->AddPoint(180.0, 0.625);
	opacityTransferFunction->AddPoint(216.0, 0.75);
	opacityTransferFunction->AddPoint(255.0, 0.875);
	// Create transfer mapping scalar value to color.
	colorTransferFunction = vtkSmartPointer<vtkColorTransferFunction>::New();
	colorTransferFunction->AddRGBPoint(0.0, 0.0, 0.0, 0.0);
	colorTransferFunction->AddRGBPoint(36.0, 1.0, 0.0, 0.0);
	colorTransferFunction->AddRGBPoint(72.0, 1.0, 1.0, 0.0);
	colorTransferFunction->AddRGBPoint(108.0, 0.0, 1.0, 0.0);
	colorTransferFunction->AddRGBPoint(144.0, 0.0, 1.0, 1.0);
	colorTransferFunction->AddRGBPoint(180.0, 0.0, 0.0, 1.0);
	colorTransferFunction->AddRGBPoint(216.0, 1.0, 0.0, 1.0);
	colorTransferFunction->AddRGBPoint(255.0, 1.0, 1.0, 1.0);
	gradientOpacity = vtkSmartPointer<vtkPiecewiseFunction>::New();
	gradientOpacity->AddPoint(10, 0.0);
	gradientOpacity->AddPoint(90, 0.5);
	gradientOpacity->AddPoint(100, 1.0);
	volumeProperty = vtkSmartPointer<vtkVolumeProperty>::New();
	volumeProperty->SetColor(colorTransferFunction);
	volumeProperty->SetScalarOpacity(opacityTransferFunction);
	volumeProperty->SetGradientOpacity(gradientOpacity);
	volumeProperty->ShadeOff();
	volumeProperty->SetInterpolationTypeToLinear();
	m_layout = new QGridLayout(this);
	m_ctkVTKVolumePropertyWidget = new ctkVTKVolumePropertyWidget(this);
	m_ctkVTKVolumePropertyWidget->setVolumeProperty(volumeProperty);
	m_ctkVTKVolumePropertyWidget->show();
	m_layout->addWidget(m_ctkVTKVolumePropertyWidget);
	setLayout(m_layout);
                    看到3DSlicer和paraview中的颜色不透明度调整,你是否也有心动。经过多天摸索,发现这虽然是个小模块,可是如果真是自己做,还挺复杂(可能是自己VTK和QT学的还不够好)。 但是CTK已经为我门做好了,我试着编译和写了个Demo,但是最新的CTK只支持VTK8的版本,如果是用的VTK7也想做一个类似的东西怎么办?那就是把VTK8的东西添加到VTK7上然后修改。具体如...
				
1.手抖修正功能。有效的修正了用手绘板画图时最大的问题。 2.矢量化的钢笔图层,能画出流畅的曲线并像PS的钢笔工具那样任意调整。 笔刷的设置也是相当详细。工具变换这功能也很贴心,例如长按着E会暂时变成橡皮擦,松开后 绘图软件Easy Paint Tool SAI画面(12张) 又变回画笔,快速按键则切换工具。 ※使用帮助※ ★画笔类工具: 1.铅笔 描绘细线的可调工具 2.喷枪 喷涂式风格的工具 3.笔 浓厚风格的水彩工具。能够混合底色和不透明度进行绘制。 并带有模糊以及渲染的效果。当图层透明度被保护时,就成为画笔工具。 4.水彩笔 透明风格的水彩工具。能够融合底色和不透明度进行绘制。 以低于“模糊笔压”中设置的笔压 来绘制的话,就成为模糊工具。此时绘制不出色彩。 请配合笔压进行使用。 如果不把“最小半径”设置大一些的话,模糊效果会变差 将“混合不透明度”设置为0的话,就成为不带透明度的模糊工具 5. 2值笔 接近于将旧版水彩笔的湿画模式设置为OFF(关闭)的工具。 能产生把颜色染在纸上的效果。配合笔压控制能达到一定的透明度。 但是,不能返回之前所达到的透明度。 当图层透明度被保护时,就成为画笔工具。 6.橡皮擦
1.梯度不透明度函数 梯度不透明度函数是将梯度模值映射为一个不透明度乘子,从而增强过渡区域的显示效果。该函数也是使用vtkPiecewiseFunction类。例如,在不同材料的临界区域,如空气到软组织,或者软组织到骨头的临界区,梯度值会比较大,而材料的内部梯度值则会相对比较小。 vtkVolumeProperty中通过如下函数设置和获取梯度不透明度函数: void SetGradientOpacity(vtkPiecewiseFunction* function); vtkPiecewiseFunct
一.绘制 尤其要注意:所谓面数据,并不是说二维平面数据,而是说这个数据中只有表面细节,没有包含细节,实际上数据和面数据的本质区别,在于是否包含了细节,而不是在维度方面。 (举例而言,你面前有一间房子,房子中有家具、家电,站在房子外面只能看到外部形状,无法观察到房子的布局或者房子中的物;假设房子和房子中的物都是半透明的,这样你就可以同时查看到所有的细节。这就是绘制所要达到的效果。) 1.绘制以物对光的吸收原理为理论基础。【光线吸收、反射模型】 在实现方式上基于透明度合成计算模型...
1. pvw编译版本Actor调用过程:启动运行,vtkActor.cxx,  vtkOpenGLActor(), vtkPVCenterAxesActor(), vtkPVRenderView(), vtkActor.cxx, ……, 对Actor的设置;添加模型,查看Property的设置,vtkProperty.h;测试vtkProperty.h的virtual void SetColo
1. 看vtkMapper,其中有一个:GetColorModeAsString(void)方法,猜测是当用标量值来计算颜色的时候获取标量值的方法;GetColorModeAsString(void)猜测是对颜色模式的影响,但是修改之后颜色还是正确的; 2. 猜测:4.1版本使用默认的方式为模型添加颜色,并不涉及模式,因此修改模式之后不会影响颜色,这一部分也不会被调用,那么4.2版本的有没有调用
颜色传输函数与不透明度传输函数的使用类似,二者的不同之处在于颜色传输函数是将一个标量值映射为颜色值。这个颜色值可以是RGB值,也可以是HSV值。 VTK颜色传输函数采用VTKColorTransferFunction类实现,其函数为: int AddRGBPoint(double x,double r,double g, double b); int AddHSVP
历经一个半月,找到了颜色问题的本质,简单来说,是vtk设置了两种模型颜色显示的方式,当读入的模型有属性的时候,默认会采用颜色映射的方式来为模型添加颜色;具可参看vtk的user's guid; paraview默认的是red-blue,HSV颜色空间,通过插值的方式根据标量值的大小来为不同模型匹配属性; paraview这样设计也是合理的,因为模型本身的颜色不一定可以区分不同模型,为了更好的
el-menu-item-group 是 Element UI 中的一个组件,它可以用来渲染一个可以包含子项的菜单项组。 如果你想要递归渲染 el-menu-item-group,你可以在组件的 template 中使用 v-for 指令来遍历数据源中的每一个菜单项,并且在每个菜单项中再包含一个 el-menu-item-group 组件,然后递归地对该组件进行渲染。 例如,如果你有一个菜单数据源如下: const menuData = [ name: '一级菜单 1', children: [ name: '二级菜单 1-1', children: [ { name: '三级菜单 1-1-1' }, { name: '三级菜单 1-1-2' }, name: '二级菜单 1-2', children: [ { name: '三级菜单 1-2-1' }, { name: '三级菜单 1-2-2' }, name: '一级菜单 2', children: [ name: '二级菜单 2-1', children: [ { name: '三级菜单 2-1-1' }, { name: '三级菜单 2-1-2' }, name: '二级菜单 2-2', children: [ { name: '三级菜单 2-2-1' }, { name: '三级菜单 2-2-2' }, 你可以这样来递归渲染 el-menu-item-group: <template> <el-menu-item-group v-for="item in menuData" :key="item.name"> <template slot="title">{{ item.name }}</template> <el-menu-item-group v-if="item.children" v-