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

seo网站案例上海市单位名称地址大全

seo网站案例,上海市单位名称地址大全,网店网络推广方案,电子商务网站建设实训总结报告FastCAE使用gmsh进行网格划分,划分的时候直接启动一个新的gmsh进程,个人猜测这么设计是为了规避gmsh的GPL协议风险。 进行网格划分时,其大体运行如下图: 一、Python到gmshModule模块 GUI操作到Python这步不再分析,比…

FastCAE使用gmsh进行网格划分,划分的时候直接启动一个新的gmsh进程,个人猜测这么设计是为了规避gmsh的GPL协议风险。
进行网格划分时,其大体运行如下图:
在这里插入图片描述

一、Python到gmshModule模块

GUI操作到Python这步不再分析,比较简单。执行的Python代码大概如下:

gmsher = Mesher.Gmsher()
gmsher.setDim(3)
gmsher.selectedAll()
gmsher.setElementType("Tet")
gmsher.setElementOrder(1)
gmsher.setMethod(1)
gmsher.setSizeFactor(1)
gmsher.setMinSize(0)
gmsher.setMaxSize(100)
gmsher.cleanGeo()
gmsher.startGenerationThread()

这些代码可以在控制台找到,如下图:
在这里插入图片描述
这样创建了一个gmsher对象,赋予网格划分的控制参数,最后调用startGenerationThread()方法,这个方法的源码在Mesher.py文件中。对于三维问题,会调用gmshModule模块的接口GenerateMesh3D()。gmshModule同样提供了针对二维、流体网格的划分接口,代码在GmshPy.h文件中,如下图所示。
在这里插入图片描述

二、启动gmsh线程,写出gmsh文件,生成网格

在GmshPy::GenerateMesh3D()函数中,只是准备网格划分的参数,最后会调用到GmshModule::generateSlot()函数中。

void GmshModule::generateSlot(GMshPara *para)
{GmshThread *thread = iniGmshThread(para);auto processBar = new ModuleBase::ProcessBar(_mainwindow, tr("Gmsh Working..."));_threadManager->insertThread(processBar, thread); // 运行gmsh线程
}// 初始化gmsh线程
GmshThread *GmshModule::iniGmshThread(GMshPara *para)
{if (_threadManager->isRuning()){delete para;ModuleBase::Message m(Common::Message::Error, QString("Gmsh is running !"));emit printMessageToMessageWindow(m);}GmshThread *thread = new GmshThread(_mainwindow, _preWindow, this, para->_dim);thread->setPara(para);delete para;return thread;
}

在GmshModule::generateSlot函数中,会初始化一个线程,并启动运行。
再打开GmshThread的run方法,大体流程就是合并几何对象,形成一个TopoDS_Compound对象,调用BRepTools::Write写出geometry.brep文件。写出gmsh控制文件,最后调用gmsh命令生成网格文件。

	void GmshThread::run(){this->mergeGeometry(); // 写出几何文件this->initGmshEnvoirment(); // 写出gmsh的控制文件this->generate(); // 执行gmsh命令}void GmshThread::mergeGeometry(){QString exelPath = QCoreApplication::applicationDirPath();const QString tempDir = exelPath + "/../temp/";QDir dir(tempDir);if (!dir.exists())dir.mkpath(tempDir);// 清理之前的临时文件const QString meshfilename = exelPath + "/../temp/mesh.vtk";if (QFile::exists(meshfilename))QFile::remove(meshfilename);const QString geofilename = exelPath + "/../temp/geometry.brep";if (QFile::exists(geofilename))QFile::remove(geofilename);const QString gmshfilename = exelPath + "/../temp/gmsh.Geo";if (QFile::exists(gmshfilename))QFile::remove(gmshfilename);const QString tempPath = tempDir + QString("geometry.brep");if (_fluidMesh)_fluidMeshProcess->mergeFluidField(_compounnd, _solidHash);else if (_selectall)mergeAllGeo();       // 将需要划分网格的组成一个compounnd对象else if (_selectvisible)mergeVisibleGeo();elsemergeSelectGeo();QByteArray arr = tempPath.toLatin1();BRepTools::Write(*_compounnd, arr.data()); // 使用BRepTools写出geometry.brep文件}void GmshThread::initGmshEnvoirment(){QString exelPath = QCoreApplication::applicationDirPath();const QString tempDir = exelPath + "/../temp/";// const QString gmshDir = exelPath + "/gmsh/";QFile::remove(tempDir + "gmsh.Geo");_scriptWriter->setCompound(_compounnd);setGmshScriptData();if (_fluidMesh){QList<int> curve = _fluidMeshProcess->getInerMember(1);QList<int> surface = _fluidMeshProcess->getInerMember(2);_scriptWriter->writeFluidMeshScript(tempDir, _solidHash, curve, surface);}else_scriptWriter->writeGmshScript(tempDir); //  写出gmsh控制文件}void GmshThread::generate(){QString exelPath = QCoreApplication::applicationDirPath();const QString tempDir = exelPath + "/../temp/";// const QString gmshDir = exelPath + "/gmsh/";QString gmshexe = exelPath + "/gmsh";bool ok = false;
#ifdef Q_OS_WINok = QFile::exists(gmshexe + ".exe");
#endif
#ifdef Q_OS_LINUXok = QFile::exists(gmshexe);
#endifif (!ok){QMessageBox::warning(_mainwindow, QString(tr("Warning")), QString(tr("Gmsh is not exist !")));return;}// 调用gmsh生成网格QString startProcess = QString("%1 %2 -format vtk -bin -o %3 -%4").arg(gmshexe).arg(tempDir + "gmsh.Geo").arg(tempDir + "mesh.vtk").arg(_dim);if (gmshexe.contains(" "))startProcess = QString("\"%1\"").arg(startProcess);qDebug() << startProcess;_process.start(startProcess);}

最后调用的gmsh命令大体如下,生成mesh.vtk网格文件。
C:/workspace/FastCAE/build/Debug/gmsh C:/workspace/FastCAE/build/Debug/…/temp/gmsh.Geo -format vtk -bin -o C:/workspace/FastCAE/build/Debug/…/temp/mesh.vtk -3

三、读取网格文件

读取网格文件代码在GmshThread::readMesh函数中,注意执行这段代码时gmsh线程已经结束了。

void GmshThread::readMesh()
{MeshData::MeshData *data = MeshData::MeshData::getInstance();QString exelPath = QCoreApplication::applicationDirPath();const QString fileName = exelPath + "/../temp/mesh.vtk";QTextCodec *codec = QTextCodec::codecForName("GB18030");QByteArray ba = codec->fromUnicode(fileName);vtkSmartPointer<vtkDataSetReader> vtkReader = vtkSmartPointer<vtkDataSetReader>::New();vtkReader->SetFileName(ba);vtkReader->Update();vtkDataSet *dataset = vtkReader->GetOutput();if (dataset == nullptr)return;if (!_isSaveToKernal)emit writeToSolveFileSig(dataset);else{auto k = new MeshData::MeshKernal();k->setName(QString("Mesh_%1").arg(k->getID()));k->setMeshData(dataset);data->appendMeshKernal(k);if (!_fluidMesh)setGmshSettingData(k);emit _gmshModule->updateMeshTree();emit _gmshModule->updateSetTree();//			emit _preWindow->updateMeshActorSig();emit _gmshModule->updateActions();emit updateMeshActor();}
}

由于gmsh输出的是vtk文件,这里直接使用vtkDataSetReader读取的。

http://www.yayakq.cn/news/650543/

相关文章:

  • 网站发帖百度收录网店推广的作用是什么
  • 开发一个小软件多少钱广州网站优化渠道
  • 做暧小视频免费网站wordpress集成关注公众和登陆
  • 网站建设中的功能模块描述网站页面布局分类
  • 网站做代理还可以刷水吗提高网站响应速度
  • 一个网站多台服务器网页视频在线提取
  • 如何向搜索引擎提交网站运城建设银行网站点
  • 网络销售网站设置多用户商城系统哪里有
  • 嘉兴建设公司网站seo域名综合查询
  • 网站上怎么做星星评分公司注册资金500万实缴多少
  • 深互动平台网站广州企业网
  • 网站开发设计技术路线wordpress登录页面模板
  • 网站开发交流中铁建设门户网员工登录
  • 河北省建设机械协会官方网站首页个人免费开店的网站
  • 高新建设网站电话广州小程序开发公司哪家好
  • 保定网站seo服务WordPress的cms模板
  • 互联网营销 网站 推荐山西响应式网站平台
  • 装饰公司营销型网站建设怎样给网站做排名优化
  • 电子商务网站建设与管理的感受网站首页优化的目的
  • 安阳网站开发溧阳建设局网站
  • 静态网站素材盛世阳光-网站建设
  • 网站开发项目的心得体会南昌哪里做网站比较好
  • 网站正在建设中 代码电子政务网站建设公司排行榜
  • 做软件用什么软件惠州做网站乐云seo
  • 天河区pc端网站建设网络平台代理赚流水
  • 用html5做商城网站怎么做外贸企业查询
  • 本省网站建设建议青蛙网站建设
  • 网站建设需要哪些流程域名注册和网站设计服务
  • 网站搬家内页打不开宣传推广网络推广
  • 新宁县建设局网站做网站通过什么赚钱