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

2.1读入vtp文件

2.2 创建vtp文件

从网络示例和在线文档中,我收集了一些信息,创建一个完整的1-piece文件:
调用vtkXMLPloyDataWriter::SetInputData(
vtkDataObject )
你传入一个vtkPolyData,你首先使用以下方法设置它:

SetVerts
SetLines
SetPolys
SetStrips
SetPoints

但是我还没有弄清楚如何设置vtp字段PointData和CellData。

如何设置vtp字段PointData和CellData???

要设置点数据,您可以先获取点数据对象

vtkPointData* pointData = polydata->GetPointData();

然后你可以向它添加数组:

vtkFloatArray* myArray = vtkFloatArray::New();
myArray->SetName("myArray");
myArray->SetNumberOfComponents(1);
myArray->SetNumberOfTuples(polydata->GetNumberOfPoints());
// 这里设置数组元素...
pointData->AddArray(myArray);

单元格数据也是如此,只需将 PointData 替换为 CellData 即可,
并将元组的数量设置为单元格的数量而不是Point的数量

sample1

source.vtp文件包含两个Point,一条Line
Point:

(0,0,0)和(1,0,0)

vtkSmartPointer<vtkPolyData> source = nullptr;
	if (source == nullptr)
		vtkNew<vtkPolyData> defaultSource;
		defaultSource->Allocate();
		vtkNew<vtkPoints> defaultPoints;
		defaultPoints->Allocate(6);
		defaultPoints->InsertNextPoint(0, 0, 0);
		defaultPoints->InsertNextPoint(1, 0, 0);
		vtkIdType defaultPointIds[2];
		defaultPointIds[0] = 0;
		defaultPointIds[1] = 1;
		defaultSource->SetPoints(defaultPoints);
		defaultSource->InsertNextCell(VTK_LINE, 2, defaultPointIds);
		source = defaultSource;
	vtkSmartPointer <vtkXMLPolyDataWriter> polyWriter = vtkSmartPointer <vtkXMLPolyDataWriter>::New();
	polyWriter->SetFileName("source.vtp");
	polyWriter->SetInputData(source);
	polyWriter->SetDataModeToAscii();
	polyWriter->Write();

生成的vtp文件:

<?xml version="1.0"?>
<VTKFile type="PolyData" version="0.1" byte_order="LittleEndian" header_type="UInt32" compressor="vtkZLibDataCompressor">
  <PolyData>
    <Piece NumberOfPoints="2" NumberOfVerts="0" NumberOfLines="1" NumberOfStrips="0" NumberOfPolys="0">
      <PointData>
      </PointData>
      <CellData>
      </CellData>
      <Points>
        <DataArray type="Float32" Name="Points" NumberOfComponents="3" format="ascii" RangeMin="0" RangeMax="1">
          0 0 0 1 0 0
          <InformationKey name="L2_NORM_RANGE" location="vtkDataArray" length="2">
            <Value index="0">
            </Value>
            <Value index="1">
            </Value>
          </InformationKey>
        </DataArray>
      </Points>
      <Verts>
        <DataArray type="Int64" Name="connectivity" format="ascii" RangeMin="1e+299" RangeMax="-1e+299">
        </DataArray>
        <DataArray type="Int64" Name="offsets" format="ascii" RangeMin="1e+299" RangeMax="-1e+299">
        </DataArray>
      </Verts>
      <Lines>
        <DataArray type="Int64" Name="connectivity" format="ascii" RangeMin="0" RangeMax="1">
        </DataArray>
        <DataArray type="Int64" Name="offsets" format="ascii" RangeMin="2" RangeMax="2">
        </DataArray>
      </Lines>
      <Strips>
        <DataArray type="Int64" Name="connectivity" format="ascii" RangeMin="1e+299" RangeMax="-1e+299">
        </DataArray>
        <DataArray type="Int64" Name="offsets" format="ascii" RangeMin="1e+299" RangeMax="-1e+299">
        </DataArray>
      </Strips>
      <Polys>
        <DataArray type="Int64" Name="connectivity" format="ascii" RangeMin="1e+299" RangeMax="-1e+299">
        </DataArray>
        <DataArray type="Int64" Name="offsets" format="ascii" RangeMin="1e+299" RangeMax="-1e+299">
        </DataArray>
      </Polys>
    </Piece>
  </PolyData>
</VTKFile>

ParaView显示效果:
在这里插入图片描述

vtk实战(二十五)——读入vtp数据
vtk实战(三十一)——写入vtp数据
vtk实战(十)—文本格式转vtp格式
VTK学习笔记1:vtkXMLPolyDataWriter

相关文档:

vtk实战(十四)——解析vtk XML 文件的内容

vtu文件vtk实战(二十四)——读入vtu数据vtk实战(三十)——写入vtu数据vtp文件vtk实战(二十五)——读入vtp数据vtk实战(三十一)——写入vtp数据vtk实战(十)—文本格式转vtp格式VTK学习笔记1:vtkXMLPolyDataWriter相关文档:vtk实战(十四)——解析vtk XML 文件的内容...
12.读写数据 在本章中,我们简要介绍了读取写入、导入和导出数据的各种方法。读取器接收单个数据集,而导入器创建整个场景,其中可能包括一个或多个数据集、演员、灯光、相机等。编写器将单个数据集输出到磁盘(或流),导出器输出整个场景。在某些情况下,您可能希望与不是标准VTK格式或VTK支持的任何其他通用格式的数据进行接口。在这种情况下,您可能希望将数据视为现场数据,并将可视化管道中的数据转换为标准可视化技术可以正确处理的数据集。 12.1 阅读器 12.2 writer 写入程序将vtkDataObjects输
#include <vtkImageActor.h> #include <vtkImageViewer2.h> #include <vtkXMLImageDataReader.h> #include <vtkRenderWindow.h> #include &
主要采用vtkXMLUnstructuredGridReader()类读取非结构化网格结构的vtk XML格式的文件。 #include vtkXMLUnstructuredGridReader.h> #include vtkSmartPointer.h> #include vtkDataSetMapper.h> #include vtkActor.h> #include vtkRenderWi
VTK可以处理的文件类型很多,这里介绍的是.vtk文件读取, 1. 其中.vtk类型的文件有自己的定义格式,主要分为:几何结构和属性两部分,其中几何结构包括:坐标,拓扑形状的表述,如三角形的代号是5,这部分可以参考vtk格式的文档,Bing就有。 2. 属性数据从第一类分有:POINT_DATA, CELL_DATA, FIELD_DATA,顾名思义,POINT_DATA就是表明该属性数据定义在点上,如电势,而像单元质量等可能就会被定义在单元上,FIELD_DATA表示既不是在点,又不是在单元上的属性,不
0. begin 基于VTK的模型构建以后经常需要对模型进行保存,当然我不想保存为一个二维的图像格式 因为那样重新读取太过复杂,如果能将之进行保存为模型类似的格式那么以后就只需要直接读取即可。 三维模型格式应该较多,百度、谷歌都没有找到较多的范例,不过还是有可使用的,这里只介绍.vtk 格式。 首先介绍一下本文中使用的方法所用到的主要的类: vtkDataWriter vt...
vtk.vtkPolyDataReader() 使用 一个神奇的网站(各种python例子):Search Python code examples from over 1.000.000 projects Example1 def loadVtk(filename): if "vtp" in filename: vreader = vtk.vtkXMLPol...
VTK相关的基础知识VTK,visualization toolkit,可视化工具包,主要应用于三维计算机图形、图像处理和可视化方面。它在三维函数库OpenGL的基础上采用面向对象的设计方法发展而来,且具有跨平台的特性。 VTK面向对象,含有大量的对象模型。 源对象是可视化流水线的起点,映射器(Mapper)对象是可视化流水线的终点,是图形模型和可视化模型之间的接口. 回调(或用户方法):
#include VTK_MODULE_INIT(vtkRenderingOpenGL2); VTK_MODULE_INIT(vtkInteractionStyle); #include #include #include #include #include #include int ma
对于vtk XML格式的文件: .vtu, .vtp, .vts, .vtr, .vti, .vto, 解析其存储单元、单元数据。#include <vtkSmartPointer.h> #include <vtkXMLReader.h> #include <vtkXMLUnstructuredGridReader.h> #include <vtkXMLPolyDataReader.h> #incl
vtk.js 是一个 JavaScript 库,用于创建三维计算机图形。它不能直接读取 DICOM 文件。你需要使用其他库,如 CornerstoneJS 或 dcmjs,将 DICOM 文件转换为 vtk.js 可识别的格式,然后再在 vtk.js 中使用。 示例代码: // 使用 CornerstoneJS 库读取 DICOM 文件 cornerstone.loadImage(dicomFile).then(function(image) { // 将 CornerstoneJS 返回的图像数据转换为 vtk.js 可识别的格式 var vtkImageData = vtk.Common.DataModel.vtkImageData.newInstance({ spacing: image.rowPixelSpacing, origin: [0, 0, 0], extent: [0, image.columns - 1, 0, image.rows - 1, 0, 0], scalarType: 'Int16' vtkImageData.getPointData().setScalars(image.getPixelData()); // 在 vtk.js 中使用转换后的图像数据 var volumeMapper = vtk.Rendering.Core.vtkVolumeMapper.newInstance(); volumeMapper.setInputData(vtkImageData); var volume = vtk.Rendering.Core.vtkVolume.newInstance(); volume.setMapper(volumeMapper); renderer.addVolume(volume);