VTK
琼之南空之新
图形处理
展开
-
vtk中的算法举例-计算法线、法线方向
研究使用vtk,必须要深入底层的实现方法,因为不管以后自己用来开发3D处理的框架还是用其他的cgal、pytorch3d、openmesh等框架,都需要将各种点线面的处理算法进行改造使用原创 2022-04-20 14:11:36 · 3008 阅读 · 0 评论 -
vtk文件格式解析
了解vtk文件内容后,才能做一些文件格式转换问题,比如.vtk.off文件互转,之前我写过一篇有兴趣的可以参考。这里详细解读vtk文件格式。vtk三维模型的数据主要包括:点point、线edge、面surface,点线面的属性scalar,颜色表lookuptable, 下面以polydata数据格式为例:# vtk DataFile Version 3.0//文件格式版本vtk output//标记信息,为vtk输出的文件。ASCII//格式为二进制ASCII格式。DATASET POLYD原创 2022-04-11 13:06:18 · 5309 阅读 · 1 评论 -
vtk类设计与思想--vtkExecutive
vtkExective 是所有管道处理的父类,一个vtkExective对象处理一个vtkAlgorithm实例,但一个管道可以有多个vtkexective对象来处理数据流,读写器,数据对象显示源都要继承vtkAlgorithm类。原创 2022-04-11 10:40:26 · 612 阅读 · 0 评论 -
vtk类设计与思想-vtkEventData
vtkEventData事件信息类,除了继承vtkbaseObject父类外,其他基本是事件的信息。enumvtkEventDataDevice{ Unknown = -1, HeadMountedDisplay, RightController, LeftController, GenericTracker, Any, NumberOfDevices};事件设备类型。enum class vtkEvent...原创 2022-03-31 21:48:47 · 434 阅读 · 0 评论 -
vtk类设计与思想-vtkCommand类
vtkCommand类一个事件类,任何一个vtkObject子类实例都可以定义事件,当触发事件时运行vtkCommand中Execute()定义的内容。类似c#、java中事件委托的使用。配合observer使用。它的子类主要有:vtkOldStyleCallbackCommand,vtkEventForwarderCommand,vtkCallbackCommand, andvtkTclCommandvtk框架中预定义事件很多,比如:KeyPressEvent 点击事件,PickEvent 、...原创 2022-03-31 16:21:14 · 674 阅读 · 0 评论 -
vtk类设计与思想-vtkObject
vtkObject继承vtkObjectBase ,增加了一个MTime为数据最新的修改时间戳。中的vtkBaseTypeMacro表示当前类与父类的关系,便于在vtk调试中使用。vtkWeakPointer是vtkObjectBase的指针,跟随物体销毁而内存位置清零重置。多次引用不影响vtkWeakPointer的值。内存地址不变化。DebugOn,调试开关,程序出错时会显示错误信息。Modified()表示手动调用实现修改数据。GetMTime()得当修改时间。Remove..原创 2022-03-30 22:20:05 · 790 阅读 · 0 评论 -
vtk类设计与思想-vtkObjectBase
vtkObjectBase 作为vtk中大部分类的父类,尤其是被计数或标记引用的类, 一旦该类被引用计数为0时,自己触发析构函数进行内存回收。使用New()和Delete()方法实现实例化与销毁。其他方法有调用权限风险。包括三个子类:vtkCommand vtkInformationKey vtkObject.类结构:GetClassName() IsTypeOf() 类型判断 isA()类同名判断GetNumberOfGenerationsFromBaseType() 两个类型之间继承的节原创 2022-03-29 09:19:38 · 353 阅读 · 0 评论 -
3D模型更多自定义特征
1.颈度,两个物体链接部分必然存在一部分类似脖颈的图形,数据域也一致,多个变量或者属性,颈度半径,颈度模长,类变形的胶囊或者圆柱体。2.颈度上数据的关系,出现离散态后的处理思路。利用机器学习标记出大部分曲率较大的,但对于极其复杂的模型还是有些平坦的部分无法直接选出,需要二次处理。平坦部分需要穿越链接,边线外延需要进一步优化处理。为扣掉后逆向补洞做基础。...原创 2022-03-21 15:39:11 · 1035 阅读 · 0 评论 -
vtk中矩阵使用
矩阵变换可以实现位移与旋转,四元数的经典使用,向量可以写成矩阵的形式,左乘后相当于将当前向量进行位移缩放旋转。第一行代表对应x轴(1,0,0)当然实际结果肯定不是只是相当于。第二行代表对应Y轴(0,1,0)第三行代表对应Z轴(0,0,1)double[] normalizedX = new double[3]; double[] normalizedY = new double[3]; double[] normalizedZ = n...原创 2022-02-05 01:24:37 · 1957 阅读 · 0 评论 -
vtk中点线处理汇总
1.两点连线Line(){ vtkLineSource lineSource = vtkLineSource.New(); double[] p0 = new double[] {1.0,0.0,0.0} double[] p1 = new double[]{0.0,1.0,0.0} lineSource.SetPoint1(p0[0],p0[1],p0[2]); lineSource.SetPoint2(p1[0],p0[1],p0[2]); actor.Get...原创 2022-02-04 13:02:11 · 711 阅读 · 0 评论 -
vtkOBBDicer 使用
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using Kitware.VTK;namespace Decimate{ public partial class Form3 ..原创 2022-02-03 11:15:49 · 498 阅读 · 2 评论 -
球状罗盘,第一种特征线,非均匀态用来做识别
/// <summary> /// 球状罗盘,自适应方向 /// </summary> /// <param name="p0">交接点</param> /// <param name="v0">顶点</param> /// <param name="angle">圆内射线夹角</param> /// <par...原创 2022-02-01 12:10:49 · 486 阅读 · 0 评论 -
vtkPolyDataConnectivityFilter 依据空间点提取联通体
依据点提取联通分体原创 2022-02-01 11:40:09 · 552 阅读 · 0 评论 -
vtk中获取含有某个Cell ID的联通体
vtkNew<vtkCellLocator> cellLocator;cellLocator->SetDataSet(polyData);cellLocator->BuildLocator(); // Now fire a ray from outside the bounds to the center and find a // cell. This cell should be on the outside surface double rayStart[3];fo原创 2022-01-31 00:12:03 · 493 阅读 · 0 评论 -
vtk坐标转换
世界坐标系 > 屏幕坐标系 double worldCoord[3] = {100, 100, 20}; vtkSmartPointer<vtkCoordinate> pCoorPress = vtkSmartPointer<vtkCoordinate>::New(); pCoorPress->SetCoordinateSystemToWorld(); pCoorPress->SetValue(worldCoord); int...转载 2022-01-30 12:39:30 · 852 阅读 · 6 评论 -
vtk 3D注释
vtkSmartPointer<vtkVectorText> atext = vtkSmartPointer<vtkVectorText>::New(); atext->SetText("注释"); vtkSmartPointer<vtkPolyDataMapper> textMapper = vtkSmartPointer<vtkPolyDataMapper>::New(); textMapper->...原创 2022-01-30 12:34:13 · 665 阅读 · 0 评论 -
vtk面法线点法线
//vtkPointData* ptData = pdNormals->GetOutput()->GetPointData(); //vtkDataArray* ptNormals = pdNormals->GetOutput()->GetPointData()->GetNormals(); // ptNormals->GetTuple( i, value ); // vtk...原创 2022-01-16 22:17:05 · 539 阅读 · 0 评论 -
vtk设置点面属性
unsigned char red[3] = { 255, 0, 0 }; unsigned char green[3] = { 0, 255, 0 }; unsigned char blue[3] = { 0, 0, 255 }; vtkSmartPointer<vtkUnsignedCharArray> ptColor = vtkSmartPointer<vtkUnsignedCharArray>::New(); ptColor-&...转载 2021-11-25 10:52:28 · 379 阅读 · 0 评论 -
vtk凸包求表面封闭
vtkNew<vtkHull> hullFilter; hullFilter->SetInputConnection(reader->GetOutputPort()); hullFilter->AddCubeFacePlanes(); hullFilter->AddRecursiveSpherePlanes(5);原创 2021-10-28 09:14:57 · 264 阅读 · 0 评论 -
VTK删除vtkPolyData中的顶点和面片
应用VTK处理网格数据,基本都要用到vtkPolyData,包括点数据信息和拓扑结构进行。点信息数据存储在vtkPoints数据结构中,拓扑结构信息可以包括顶点(verts),线(lines),多边形(polys)和三角面片(strips)。拓扑结构信息的数据类型是vtkCharArray,只存储顶点信息的索引值,本文以polys为例。 vtkPolyData提供便利数据添加功能,添加point和添加polys示例如下:// 添加点double p0[3] = {1.0,0.0,0.0}转载 2021-10-27 17:16:07 · 1725 阅读 · 1 评论 -
方向导数、导数、梯度在图形学里的意义
导数是数学概念,对于可导函数,利用割线无限逼近切线,而割线斜率的极线即为切线的斜率,公式为:函数y=f(x)在x=x0处的导数f′(x0),表示曲线y=f(x)在点P(x0,f(x0))处的切线的斜率k。导数是微积分中的重要基础概念。方向导数指沿某一特定方向的导数,即方向上单位增量(便于理解,实际是微分领域的l)作为分母,高度差作为分子。因此最大方向导数的理解就是单位距离上高度差最大的就是最大方向导数,也就是梯度。作用是能求得最快的下降路线。扩展开来,离散状态下,比如图形外面一个点,到这个图形最快的原创 2021-10-18 17:07:23 · 1842 阅读 · 0 评论 -
VTK cell中IntersectWithLine的用法
/** * Intersect with a ray. Return parametric coordinates (both line and cell) * and global intersection coordinates, given ray definition p1[3], p2[3] and tolerance tol. * The method returns non-zero value if intersection occurs. A parametric dis...原创 2021-10-14 17:28:32 · 1078 阅读 · 0 评论 -
vtk 边界定义
double bounds[6]; polydata->GetBounds(bounds); std::cout << "Polydata bounds: " << std::endl; std::cout << "xmin: " << bounds[0] << " " << "xmax: " << bounds[1] << std::endl << "ymin: " << boun原创 2021-10-05 12:45:50 · 407 阅读 · 0 评论 -
vtk中长度测量和角度测量 转载
注意:使用QVTKWidget时不要使用vtkSmartPointer长度测量:demo:https://lorensen.github.io/VTKExamples/site/Cxx/Widgets/DistanceWidget/ vtkSmartPointer<vtkDistanceWidget> distanceWidget = vtkSmartPointer<vtkDistanceWidget>::New(); distanceWidget->...转载 2021-09-28 17:18:48 · 488 阅读 · 0 评论 -
vtk创建立体网格
vtkNew<vtkStructuredGrid> structuredGrid; vtkNew<vtkPoints> points; unsigned int numi = 10; unsigned int numj = 10; unsigned int numk = 10; for (unsigned int k = 0; k < numk; k++) { for (unsigned int...原创 2021-09-28 16:54:01 · 1157 阅读 · 0 评论 -
vtk普通补洞过程实现
思路分析:模型表面漏洞,肯定有边界边,可能不止一个洞。1.提取边界边;2.运用联通性,依次选择边界环;3.边界环连接成面(1.取所有点,取中心点坐标(xi / n,yi / n,zi / n);2.线单元的两个点与中心点形成面单元;3.将点与面单元赋值数据形成新的补洞面数据);4.面与之前的模型结合,clean后形成最终补洞模型。vtkPolyData* CommonMesh::CloseSurface(vtkPolyData* shape){ vtkSmartPointe...原创 2021-08-07 18:49:47 · 1010 阅读 · 4 评论 -
vtkClipClosedSurface 用来实现用平面裁剪物体后,将切口形成面包住
vtkPlaneCollection ps = vtkPlaneCollection.New(); vtkPlane vp1 = vtkPlane.New(); vp1.SetOrigin(0.0,0.0,0.0); vp1.SetNormal(1,1,0); ps.AddItem(vp1); vtkClipClosedSurface ccs = vtkClipC...原创 2021-08-05 12:26:11 · 509 阅读 · 0 评论 -
多数据集合并后要清除重复点
vtkappend 后 采用vtkclean处理重复点原创 2021-08-01 01:31:22 · 363 阅读 · 0 评论 -
2021-07-28
使用曲面进行切割import pyvista as pvimport numpy as npmesh = pv.ParametricRandomHills()mesh.rotate_y(90)surface= mesh.elevation()# Create a grid around that surface# 根据生成的mesh生成网格grid = pv.create_grid(surface)# Clip the grid using the surfacemodel = g转载 2021-07-28 12:43:14 · 87 阅读 · 0 评论 -
vtkClipClosedSurface 用来切割surface
The main goal of this project is to make it possible to clip a surface, and then create a "cap" polygon (or polygons) that fill in the area that is enclosed by all the new edges that were created by the clipping. In other words, the goal is to close the ..原创 2021-07-28 12:39:21 · 678 阅读 · 0 评论 -
2021-07-25
3DToothMaker.exe 在不同电脑配置上发现,.dll动态链接库文件偶尔提示缺失,在打包的文件中,将所有的缺失dll文件考到exe同级目录下面即可。程序运行时会去system32中寻找相关的dll文件,如果找不到他就会找exe同级目录下,所以将最终的文件作成绿色版免安装的办法就是将exe文件需要的所有文件都拷贝到一起。直接到不同电脑上解压即可。本次测试缺失MSVCP140d.DLL和VCRUNTIME140D.dll...原创 2021-07-25 15:19:18 · 108 阅读 · 0 评论 -
OFF转vtk
public vtkPolyData GetvtkFromOff() { StreamReader offreader = new StreamReader(MyClass.StaticAppInfo.yagenyajingoff); offreader.ReadLine(); string[] vs = new string[3]; ...原创 2021-07-13 17:17:04 · 125 阅读 · 0 评论 -
vtk转OFF格式
public void WriteOFF(vtkPolyData polydata) { string offfilename = MyClass.StaticAppInfo.yagenyajingoff; IntPtr X = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(double)) * 3); double[] xx = new double[3...原创 2021-07-13 17:15:36 · 309 阅读 · 0 评论 -
ply与off格式转换
void CTest1Dlg::OnFileConvertionPlyToOFF(){ // TODO: Add your control notification handler code here char filestyle[3]; string str; ifstream file; int points, meshs, oriednum = 0; file.open(pathName); //获取点数points和面数mes...原创 2021-07-01 17:21:23 · 960 阅读 · 3 评论 -
vtk9.0配置
https://www.pianshen.com/article/83822040368/转载 2021-06-07 10:20:06 · 395 阅读 · 0 评论 -
vtk中模型放回原点
利用box边界和中点Center坐标,反向移动坐标即实现模型归位。vtkTransform transform = vtkTransform.New();transform.PostMultiply();transform.Scale(1,1,1);transform.Translate(0,0,0);transformPolyDataFilter.SetInputConnection(decimateAnimal.GetOutputPort());transformPolyDataFilter原创 2021-05-26 17:04:03 · 750 阅读 · 0 评论 -
基于vtk非结构网格的eclipse网格模型显示
基于vtk中的 vtkHexahedron网格,绘制空间上8个顶点组成的网格的三维模型,最整个模型需要绘制每个vtkHexhedron网格,组成整体模型,是vtkUnstructuredGrid的显示方法。这里只放了规则模型的框架图和颜色,可以用于显示eclipse grid格式的油藏地质三维模型。public static void DrawCoordXYZGrid(Point3D[,] coordXYZGrid, ref RenderWindowControl myRenderWindowContro转载 2021-05-11 17:24:30 · 343 阅读 · 0 评论 -
获取物体外轮廓,射线探测法。
ExtractOutsideSurface.cxx#include <vtkActor.h>#include <vtkAppendPolyData.h>#include <vtkCellLocator.h>#include <vtkNamedColors.h>#include <vtkNew.h>#include <vtkPolyDataConnectivityFilter.h>#include <vtkPolyDa原创 2021-05-11 14:27:50 · 576 阅读 · 0 评论 -
无法启动此程序,因为计算机中丢失 vtkglew_8.2.dll
360杀毒在运行或者调试vtk程序时,会误认是木马,注意恢复一下。原创 2021-05-06 22:44:20 · 261 阅读 · 0 评论 -
vtknew实现了内存的自动回收
vtknew实现了内存的自动回收,不要用之前的vtkconesource等来创建模型,后者要手动施放内存。原创 2021-05-06 00:00:31 · 383 阅读 · 0 评论