STL格式的文件,是VTK支持的各种类型的文件之一。
STL(Stereolithography)文件,有时被称为“标准三角语言”或“标准曲面细分语言”,由3D Systems于1987年创建,并且已被广泛用作全行业3D打印机模型的标准文件。这些文件是从原生CAD文件导出的,并使用三维笛卡尔坐标系“[维基百科,”STL(文件)描述三角形单位法线和顶点(按右手规则排序)的原始非结构化三角形曲面 格式)“,2019年]。 简而言之,STL是将CAD模型近似为一组三角形,将样条(如样条曲线,p线,弧线,挤出和扫掠)转换为三角形简单和复合材料。
需要注意以下事项:二进制/ ASCII:虽然两种格式的编码之间存在很大差异,但基本上二进制和ASCII在功能上是相似的,但需要注意的是,二进制文件往往比大多数切片软件更小,处理能力更低。 除非特别要求,否则Binary通常是首选,因为文件较小。单位:STL文件的定义不包括度量单位。 导出模型时,请注意本机CAD的单位以及打印机/切片软件的预期单位。 大多数切片软件都有单元配置,但默认情况下大多数常见部署都需要毫米(mm)。分辨率:这将是CAD软件包之间最多样化的属性,但一般来说,目标是确保最小公差/偏差小于3D打印机能够生成的最精细特征。 例如,如果3D打印机可以产生的最佳分辨率为100微米,则STL的直径,角度,镶嵌部分等的公差应在100微米以内。
#include <iostream>
#include <vtkSmartPointer.h>
#include <vtkActor.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkPolyDataMapper.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkSTLReader.h>
#include <vtkProperty.h>
#include <vtkInteractorStyleTrackballCamera.h>
#define vtkSPtr vtkSmartPointer
#define vtkSPtrNew(Var, Type) vtkSPtr<Type> Var = vtkSPtr<Type>::New();
#ifndef INITIAL_OPENGL
#define INITIAL_OPENGL
#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2)
VTK_MODULE_INIT(vtkInteractionStyle)
//VTK_MODULE_INIT(vtkRenderingContextOpenGL2)
//VTK_MODULE_INIT(vtkRenderingFreeType)
#endif
using namespace std;
int main()
{
vtkSPtrNew(reader, vtkSTLReader);
reader->SetFileName(D:\\bird.stl); // 读取STL
reader->Update();
vtkSPtrNew(mapper, vtkPolyDataMapper); //渲染的多边形几何数据,派生自vtkMapper
mapper->SetInputConnection(reader->GetOutputPort()); //管线链接,将读取的数据给mapper
vtkSPtrNew(actor, vtkActor); //派生自vtkProp类,对渲染场景中数据的可视化表达。(不太好理解,可以理解英文字面意思,就是具体显示出来的内容(演员))
//vtkActor负责场景中的几何数据,vtkVolume负责场景中的体数据(有的网站上自动翻译给翻译成音量^_^)
actor->SetMapper(mapper);
actor->GetProperty()->SetEdgeColor(255, 241, 0); // 显示边框颜色
// actor->GetProperty()->SetEdgeVisibility(1); // 显示边框
vtkSPtrNew(ren1, vtkRenderer); //负责管理场景渲染过程的类
ren1->AddActor(actor);
ren1->SetBackground(0.1, 0.2, 0.4); //背景色
vtkSPtrNew(renWin, vtkRenderWindow); //vtkRenderWindow及其子类,负责管理本地计算机系统中窗口创建和渲染过程
renWin->AddRenderer(ren1);
vtkSPtrNew(iren, vtkRenderWindowInteractor); //提供平台独立的响应鼠标、键盘和时钟事件的交互机制,交给vtkInteractorStyle类型去处理
iren->SetRenderWindow(renWin);
vtkSPtrNew(style, vtkInteractorStyleTrackballCamera); //3D场景交互器,有多种style,可以看看其他类型。
iren->SetInteractorStyle(style);
renWin->SetSize(600, 600); //设置窗口大小
renWin->Render();
iren->Start();
return 0;
}