当前位置: 首页 > news >正文

判断上颌下颌的stl模型坐标轴是否正常

文章目录

  • 研究方向:如何判断?又如何纠正?
    • 如何判断?
    • Demo实现:
      • 先判断一个
      • 遍历相关文件夹下的所有病例
    • 如何纠正?
    • Demo
  • 相关知识点

研究方向:如何判断?又如何纠正?

如何判断?

在这里插入图片描述
当然,我们不能以坐标的正负来判断
我们看到这个Bounding Box里面有stl模型的xyz三轴方向的最大值与最小值,如果是像左图那样,最明显的就是z轴的最大值是负数,他的范围是[-21.277,-3.4129],
然后,他的y轴范围是:[-21.0321,27.4901],
正常情况下,y轴的{max-min}的绝对值应该是<z轴的{max-min}的绝对值
也就是说:正常情况下,y轴的长度短于z轴的长度.(这个才是我们用来判断的标准)
在这里插入图片描述


Demo实现:

我们可以遍历某个文件的所有上颌的stl文件,按照上面的逻辑进行判断

先判断一个

const char* stlFilePath = "./upper.stl";
// 创建STL文件读取器
vtkSmartPointer<vtkSTLReader> reader =
vtkSmartPointer<vtkSTLReader>::New();
reader->SetFileName(stlFilePath);
reader->Update();// 获取STL数据
vtkSmartPointer<vtkPolyData> inputPolyData = reader->GetOutput();// Compute the bounding box
double bounds[6];
inputPolyData->GetBounds(bounds);// Bounds are in the form [xmin, xmax, ymin, ymax, zmin, zmax]
double xmin = bounds[0];
double xmax = bounds[1];
double ymin = bounds[2];
double ymax = bounds[3];
double zmin = bounds[4];
double zmax = bounds[5];// Calculate the corner points
double corners[8][3] = {{xmin, ymin, zmin},{xmax, ymin, zmin},{xmin, ymax, zmin},{xmax, ymax, zmin},{xmin, ymin, zmax},{xmax, ymin, zmax},{xmin, ymax, zmax},{xmax, ymax, zmax}
};
cout << "xmin:" << xmin << ",max:" << xmax <<",ymin:" << ymin << ",ymax:" << ymax <<",zmin:" << zmin << ",zmax" << zmax << endl;
//y轴长度
double Ylen = ymax - ymin;//z轴长度
double Zlen = zmax - zmin;
if (Ylen > Zlen) {//异常;cout << "此病例坐标轴异常" << endl;
}// 创建Mapper和Actor
vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
mapper->SetInputData(inputPolyData);vtkSmartPointer<vtkActor> actor =
vtkSmartPointer<vtkActor>::New();
actor->SetMapper(mapper);// 创建渲染器和窗口
vtkSmartPointer<vtkRenderer> renderer =
vtkSmartPointer<vtkRenderer>::New();
renderer->AddActor(actor);vtkSmartPointer<vtkRenderWindow> renderWindow =
vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->AddRenderer(renderer);vtkSmartPointer<vtkRenderWindowInteractor> interactor =
vtkSmartPointer<vtkRenderWindowInteractor>::New();
interactor->SetRenderWindow(renderWindow);//调整相机位置,调整显示范围
renderer->ResetCamera();//鼠标移动方式
vtkNew<vtkInteractorStyleTrackballCamera> style;
interactor->SetInteractorStyle(style);//设置坐标轴
vtkSmartPointer<vtkAxesActor> axes = vtkSmartPointer<vtkAxesActor
http://www.lryc.cn/news/232351.html

相关文章:

  • C/C++---------------LeetCode第1189. “气球” 的最大数量
  • Arthas(阿尔萨斯)--(三)
  • 《变形监测与数据处理》笔记/期末复习资料(择期补充更新)
  • Linux:进程替换和知识整合
  • React组件在什么情况下会重新渲染
  • 云ES容灾方案
  • Golang 中的 Context 包
  • nginx服务器
  • 电脑常用快捷键
  • 吴恩达《机器学习》8-3->8-4:模型表示I、模型表示II
  • 数据结构-二叉树力扣题
  • node 第十八天 中间件express-session实现会话密钥
  • 【机器学习基础】机器学习入门(1)
  • 赶快来!程序员接单必须知道的六大注意事项!!!
  • 【C++】日期类实现,与日期计算相关OJ题
  • 前端404页面的制作
  • 深兰科技轮腿家用AI机器人荣获“2023年度城市更新科创大奖”
  • 669.修剪二叉树
  • 论文绘图-机器学习100张模型图
  • PHP项目学习笔记-萤火商城-增加一个模块(表涉及到的操作和文件)
  • 如何用Java设计自动售货机?
  • JAVA数据代码示例
  • github常用搜索指令
  • 为什么esp8266刷入了固件,无法接受AT指令
  • Scala---字符串、集合
  • Power Automate-当收到HTTP请求时触发流程
  • 学习c#的第十四天
  • 6.jvm中对象创建流程与内存分配
  • 算法--搜索与图
  • ROS 文件系统