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

上海市建设工程质监站网站一站式服务包括哪些内容

上海市建设工程质监站网站,一站式服务包括哪些内容,做科技公司的网站公司,wordpress文档阅读器在三维模型处理中,网格化(Meshing)是将几何模型离散为三角面片的关键步骤。本文基于 OpenCascade 的 BRepMesh_IncrementalMesh 类,结合交互式演示系统,详解网格化参数调节、实时更新与可视化。 一、BRepMesh_Incremen…

在这里插入图片描述

在三维模型处理中,网格化(Meshing)是将几何模型离散为三角面片的关键步骤。本文基于 OpenCascade 的 BRepMesh_IncrementalMesh 类,结合交互式演示系统,详解网格化参数调节、实时更新与可视化。


一、BRepMesh_IncrementalMesh 核心机制

BRepMesh_IncrementalMesh 是 OpenCascade 的增量式网格生成器,采用动态精度控制算法,支持以下关键参数:

  • LinearDeflection:线性偏差(模型空间单位)
  • AngularDeflection:角度偏差(弧度制)
  • InParallel:启用多线程加速

通过构造球体示例演示核心调用方式:

TopoDS_Shape shape = BRepPrimAPI_MakeSphere(50.0).Shape();
IMeshTools_Parameters params;
params.Deflection = 1.0;
params.Angle = 30 * M_PI / 180;BRepMesh_IncrementalMesh mesher;
mesher.SetShape(shape);
mesher.ChangeParameters() = params;
mesher.Perform(); // 执行网格化

二、交互式教学系统功能

1. 动态参数调节与实时更新

在这里插入图片描述
在这里插入图片描述

通过 ImGui 滑动条实现参数动态调节,修改后触发网格重建:

// 线性偏差调节(0.1~0.7)
if (ImGui::SliderFloat("Linear Deflection", &linearDeflection, 0.1f, 0.7f)) {bMeshDirty = true; // 设置网格更新标志
}// 角度偏差调节(5°~30°)
float angularDeg = angularDeflection * 180 / M_PI;
if (ImGui::SliderFloat("Angular Deflection", &angularDeg, 5.0f, 30.0f)) {angularDeflection = angularDeg * M_PI / 180;bMeshDirty = true;
}

参数修改后通过bMeshDirty标志触发updateMesh函数,保证视图实时响应

2. 网格清除与重置

通过BRepTools::Clean清除模型三角化数据,配合上下文更新实现网格重置:

void clearTriangulation(const TopoDS_Shape& shape) {for (TopExp_Explorer exp(shape, TopAbs_FACE); exp.More(); exp.Next()) {BRepTools::Clean(TopoDS::Face(exp.Current()));}
}
3. 三角化信息统计

遍历所有面的三角化数据,统计总三角形数量:

int totalTriangles = 0;
for (TopExp_Explorer exp(shape, TopAbs_FACE); exp.More(); exp.Next()) {Handle(Poly_Triangulation) tri = ...;if (!tri.IsNull()) totalTriangles += tri->NbTriangles();
}
ImGui::Text("Total Triangles: %d", totalTriangles);
4. 网格线框可视化

提取每个三角面片的边线,生成红色线框辅助显示:

void drawTriangulations(...) {for (each triangle in triangulation) {gp_Pnt p1 = tri->Node(n1).Transformed(...);// 创建三角形边线BRepBuilderAPI_MakePolygon poly;poly.Add(p1); poly.Add(p2); poly.Add(p3); poly.Close();Handle(AIS_Shape) aisTri = new AIS_Shape(poly.Shape());aisTri->SetColor(Quantity_NOC_RED);context->Display(aisTri, false);}
}

三、高级技巧与注意事项

  1. 多线程加速
    启用InParallel参数可提升复杂模型处理速度:

    meshParams.InParallel = true; // 开启并行计算
    
  2. 网格生成验证
    检查IsDone()状态确保网格生成成功:

    if (!mesher.IsDone()) {std::cerr << "Mesh generation failed!" << std::endl;
    }
    
  3. 显示模式控制
    强制设置AIS_Shape显示模式,增强可视化效果:

    aisShape->SetDisplayMode(AIS_Shaded); // 实体着色模式
    aisShape->Attributes()->SetFaceBoundaryDraw(true); // 显示面边界
    

四、代码

#pragma once#include "pch.h"
#include <format>
#include <string>
#include <mutex>
#include <BRep_Tool.hxx>
#include <BRepTools.hxx>
#include <BRepMesh_IncrementalMesh.hxx>
#include <BRepPrimAPI_MakeSphere.hxx> // 新增头文件
#include <BRepLib_ToolTriangulatedShape.hxx>
#include <BRepBuilderAPI_MakePolygon.hxx>
#include <TopExp_Explorer.hxx>
#include <Poly_Triangulation.hxx>
#include <AIS_Shape.hxx>
#include <TopoDS.hxx>
#include "BaseScene.h"
#include "VisSceneComponents.h"
#include "TutorialWindow.h"
#include "CodeHintAction.h"class BRepMesh010 : public BaseScene, public VisSceneComponents, public TutorialWindow {
public:BRepMesh010() {openTutorialWindow();}void displayScene(const Handle(V3d_View)& view, const Handle(AIS_InteractiveContext)& context) override {if (!bIsSceneInit) {sceneInit(view, context);bIsSceneInit = true;}if (bMeshDirty) {updateMesh(context);bMeshDirty = false; }renderTutorialWindow(context);}void customInitTutorialWindow(const Handle(AIS_InteractiveContext)&) override {}private:Handle(AIS_Shape)       aisShape;CodeHintManager         hintMgr;  TopoDS_Shape            meshShape;IMeshTools_Parameters   meshParams;std::mutex              meshMutex;float linearDeflection = 1.0f;float angularDeflectionDeg = 30.0f;float minSize = 0.0f;bool isProcessing = false;       // 标记是否正在处理bool bMeshDirty = false; // 参数变化刷新标志位void sceneInit(const Handle(V3d_View)&, const Handle(AIS_InteractiveContext)& context) override {meshShape =  BRepPrimAPI_MakeSphere(50.0).Shape();updateMesh(context);}void updateMesh(const Handle(AIS_InteractiveContext)& context) {std::lock_guard<std::mutex> lock(meshMutex); // 自动加锁// 开始处理isProcessing = true;clearTriangulation(meshShape);meshParams.Deflection = linearDeflection;meshParams.Angle = angularDeflectionDeg * M_PI / 180.0;meshParams.InParallel = true;BRepMesh_IncrementalMesh mesher;mesher.SetShape(meshShape);mesher.ChangeParameters() = meshParams;mesher.Perform();hintMgr.AddHint("Mesh", "mesher.Perform();");// 添加网格生成验证if (!mesher.IsDone()) {std::cerr << "Mesh generation failed!" << std::endl;return;}aisShape = new AIS_Shape(meshShape);// 强制设置显示模式为网格//aisShape->SetDisplayMode(AIS_Shaded);  // 或 AIS_WireFrameaisShape->Attributes()->SetFaceBoundaryDraw(true);context->RemoveAll(true);context->Display(aisShape, true);context->UpdateCurrentViewer();  // 强制刷新视图drawTriangulations(meshShape, context);}void clearTriangulation(const TopoDS_Shape& shape) {for (TopExp_Explorer exp(shape, TopAbs_FACE); exp.More(); exp.Next()) {TopoDS_Face face = TopoDS::Face(exp.Current());BRepTools::Clean(face); // 移除 Poly_Triangulation}}void renderTutorialContent(const Handle(AIS_InteractiveContext)& context) override {ImGui::Text("BRepMesh_IncrementalMesh 教学示例");ImGui::Separator();float oldLinearDeflection = linearDeflection;if (ImGui::SliderFloat("Linear Deflection", &linearDeflection, 0.1f, 0.7f, "%.2f")) {if (oldLinearDeflection != linearDeflection) {bMeshDirty = true;}}float oldAngularDeflectionDeg = angularDeflectionDeg;if (ImGui::SliderFloat("Angular Deflection (deg)", &angularDeflectionDeg, 5.0f, 11.0f, "%.1f")) {if (oldAngularDeflectionDeg != angularDeflectionDeg) {bMeshDirty = true;}}if (ImGui::Button("Clear Triangulation")) {BRepTools::Clean(meshShape);context->RemoveAll(true);hintMgr.AddHint("BRepTools::Clean", "BRepTools::Clean(meshShape);");}if (ImGui::Button("Reset Default")) {linearDeflection = 1.0f;angularDeflectionDeg = 30.0f;minSize = 0.0f;updateMesh(context);}if (aisShape) {ImGui::Separator();ImGui::Text("Triangulation Info:");int totalTriangles = 0;for (TopExp_Explorer exp(meshShape, TopAbs_FACE); exp.More(); exp.Next()) {TopLoc_Location loc;Handle(Poly_Triangulation) tri = BRep_Tool::Triangulation(TopoDS::Face(exp.Current()), loc);if (!tri.IsNull()) {totalTriangles += tri->NbTriangles();}}ImGui::Text("Total Triangles: %d", totalTriangles);}// 渲染提示窗口hintMgr.RenderWindow();}void drawTriangulations(const TopoDS_Shape& shape, const Handle(AIS_InteractiveContext)& context) {for (TopExp_Explorer faceExp(shape, TopAbs_FACE); faceExp.More(); faceExp.Next()) {TopoDS_Face face = TopoDS::Face(faceExp.Current());TopLoc_Location loc;Handle(Poly_Triangulation) tri = BRep_Tool::Triangulation(face, loc);if (tri.IsNull()) continue;const Poly_Array1OfTriangle& triangles = tri->Triangles();for (int i = triangles.Lower(); i <= triangles.Upper(); ++i) {int n1, n2, n3;triangles(i).Get(n1, n2, n3);// 使用 tri->Node(index) 获取三角形顶点坐标gp_Pnt p1 = tri->Node(n1).Transformed(loc.Transformation());gp_Pnt p2 = tri->Node(n2).Transformed(loc.Transformation());gp_Pnt p3 = tri->Node(n3).Transformed(loc.Transformation());// 创建一个三角形边线展示BRepBuilderAPI_MakePolygon triPoly;triPoly.Add(p1);triPoly.Add(p2);triPoly.Add(p3);triPoly.Add(p1);triPoly.Close();Handle(AIS_Shape) aisTri = new AIS_Shape(triPoly.Shape());aisTri->SetDisplayMode(AIS_WireFrame);aisTri->SetColor(Quantity_NOC_RED);context->Display(aisTri, false);}}context->UpdateCurrentViewer();}};

文章转载自:

http://8ElClaL8.nmkfy.cn
http://IbnaDjon.nmkfy.cn
http://kb54UoYc.nmkfy.cn
http://ps95z44Y.nmkfy.cn
http://rKOsb0ie.nmkfy.cn
http://6vsOVOGp.nmkfy.cn
http://nZlfnDdy.nmkfy.cn
http://Ap58Gx0c.nmkfy.cn
http://cOujtbl3.nmkfy.cn
http://GaVEjtk0.nmkfy.cn
http://uULvw0Ti.nmkfy.cn
http://2Ly41q8s.nmkfy.cn
http://aIFCR4OQ.nmkfy.cn
http://CzMqtiFE.nmkfy.cn
http://96xj4EU7.nmkfy.cn
http://wdiKUVA1.nmkfy.cn
http://OdiHjin8.nmkfy.cn
http://x0FVKXMo.nmkfy.cn
http://FZzL2hrN.nmkfy.cn
http://mwA6QGN1.nmkfy.cn
http://DJGVLNBP.nmkfy.cn
http://yfQlfNT8.nmkfy.cn
http://9qDcsv0Z.nmkfy.cn
http://1Fzge9dz.nmkfy.cn
http://pbkBCkYD.nmkfy.cn
http://zrHPNqkA.nmkfy.cn
http://1ssJEIJR.nmkfy.cn
http://tmXl5o19.nmkfy.cn
http://vJ3qMPdr.nmkfy.cn
http://xr19QdvN.nmkfy.cn
http://www.dtcms.com/wzjs/762549.html

相关文章:

  • 高端网站建设制作建筑木工模板包工价格
  • 淘宝网淘我喜欢wordpress站怎么优化
  • 中能建设集团电子商务网站外贸快车
  • 杏林建设网站中山建站
  • 郑州网站公司助企长春网站优化指导
  • 阿里云备案要关网站吗企业名录搜索软件有哪些
  • 企业网站制作建设的框架有哪几种毕业设计网页制作网站建设
  • php备份网站交互设计专业世界大学排名
  • 旅游网站设计需求分析怎么把网站黑掉
  • 八大处做双眼预约网站企业网站建站 优帮云
  • 阳网站建设网站优化的分析
  • 365建站器宝塔搭建完wordpress
  • wordpress熊掌号关注网络seo排名
  • 青岛网站设计如何做企业管理培训课程是不是传销
  • 仿网站百度会怎么做如何进行企业营销型网站建设规划
  • 深圳宝安高端网站建设wordpress zw
  • 什么网站可以做投票设计用哪些网站
  • 网站建设需要找工信部吗包商科技wordpress
  • 深圳好的网站建设公司排名镇海区住房和建设网站
  • 宣城高端网站建设好网站的建设标准
  • 做网站属于什么行业网站建设与维护教学课件
  • 电影网站建设教程下载代做标书网站
  • 兴义网站seo图书网站建设策划书1万字
  • 网站建设35类北京专业设计网站
  • 百度seo网站网页设计图片与文字的研究
  • dw代码做网站常德建设网站
  • asp+access网站开发实例精讲今天的国际新闻最新消息
  • 网站手机验证码如何做上海嘉定网站建设公司
  • 广州 网站开发 公司电话wordpress联系表单的制作
  • 没网站可以做seo吗可以做go分析的网站