现在可以获取到osgb文件中的三角面片信息,怎么在bentley中加载进来呢,一定要生成3sm格式吗
您也可以通过获取到的三角面片信息直接在dgn文件中生成Mesh元素。不过最好还是生成3sm格式,因为3sm里边应该还包含有其他很多有用的信息。
生成的mesh元素能粘贴纹理图片吗,mesh存在高程差,不是一个平面,能按照点的坐标粘贴纹理图像么?
另外有生成3sm格式的教程么
生成的Mesh可以贴纹理图片,也可以按照点坐标去贴纹理图像,Mesh本身可以包含几大块数据,例如Mesh的顶点坐标,面索引等,其中有一项就是UVParameters,就是纹理坐标。3sm格式目前Mstn SDK似乎是没有提供相关创建接口。
界面上的"Stitch into mesh"有合适的API函数吗 mdlmesh族的没找到对应的函数接口,有合适的mesh融合例子和粘贴简单纹理的核心API吗
用这个函数:mdlMesh_stitchFacets,附加材质可以看一下这个Mstn SDK带的这个例子:C:\Program Files\Bentley\MicroStationCONNECTSDK\examples\Visualization\MaterialsExample
void CreateMeshElementByPts(DPoint3d* pts, EditElementHandle& meshEeh) { PolyfaceHeaderPtr nestedMesh = PolyfaceHeader::CreateVariableSizeIndexed(); nestedMesh->AddPolygon(pts, 3); nestedMesh->Triangulate(); nestedMesh->MarkAllEdgesVisible(); MeshHeaderHandler::CreateMeshElement(meshEeh, NULL, *nestedMesh, true, *ACTIVEMODEL); } void create_mesh_data(WCharCP arg) { DPoint3d pts1[] = { { 0.0, 0.0, 0.0 }, { 0,1, 0 }, {0, 1, 1} }; DPoint3d pts2[] = { { 0,1, 0 }, {0, 1, 1}, {2, 2, 2} }; EditElementHandle mesh1; EditElementHandle mesh2; CreateMeshElementByPts(pts1, mesh1); CreateMeshElementByPts(pts2, mesh2); EditElementHandle mergeMesh; MSElementDescrP mergeOut = mergeMesh.GetElementDescrP(); MSElementDescrP mesh1_desc = mesh1.GetElementDescrP(); mesh1_desc->AddToChain(mesh2.GetElementDescrP()); mdlMesh_stitchFacets(&mergeOut, mesh1_desc, 0, 0, 0); mergeMesh.AddToModel(); }
我写的测试代码,生成的mergeMesh会造成bentley崩溃,但是生成的mesh1,mesh2是可以添加到dgn文件中的,是mdlMesh_stitchFacets参数有问题吗
请改成如下所示的方式调用:
MSElementDescrP mesh1_desc = mesh1.GetElementDescrP(); mesh1_desc->AddToChain(mesh2.ExtractElementDescr()); MSElementDescrP mergeOut = NULL; mdlMesh_stitchFacets(&mergeOut, mesh1_desc, 0, 0, 0); EditElementHandle mergeMesh(mergeOut, true, false); mergeMesh.AddToModel();
void create_mesh_data(WCharCP arg) { DPoint3d pts1[] = { { 0.0, 0.0, 0.0 }, { 0,1, 0 }, {0, 1, 1} }; DPoint3d pts2[] = { { 0,1, 0 }, {0, 1, 1}, {2, 2, 2} }; EditElementHandle mesh1; EditElementHandle mesh2; CreateMeshElementByPts(pts1, mesh1); CreateMeshElementByPts(pts2, mesh2); MSElementDescrP mesh1_desc = mesh1.GetElementDescrP(); mesh1_desc->AddToChain(mesh2.GetElementDescrP()); MSElementDescrP mergeOut = NULL; mdlMesh_stitchFacets(&mergeOut, mesh1_desc, 0, 0, 0); EditElementHandle mergeMesh(mergeOut, true, false); mergeMesh.AddToModel(); }
更新后bentley没有崩溃,但是界面上没有生成的mesh对象。在dgn上画一个shape是可以转成mesh的,有什么配置会影响代码生成mesh的展示吗
mdlMesh_stitchFacets调用以后,通过mdlElmdscr_add(mergeOut);将结果添加到dgn文件中。
void create_mesh_data(WCharCP arg) { char triFile[] = "tri.txt"; char vertexFile[] = "vertex.txt"; bvector<Dpoint3d> triInfo; bvector<Dpoint3d> vertexInfo; GetTriInfo(triFile, triInfo); GetVertexInfo(vertexFile, vertexInfo); if (triInfo.size() == 0) { return; } EditElementHandle mesh_1; CreateMeshBaseOnNum(triInfo, 0, vertexInfo, mesh_1); MSElementDescrP mesh1_desc = mesh_1.GetElementDescrP(); //EditElementHandle meshTmp; //CreateMeshBaseOnNum(triInfo, 1, vertexInfo, meshTmp); //mesh1_desc->AddToChain(meshTmp.GetElementDescrP()); MSElementDescrP mergeOut = NULL; mdlMesh_stitchFacets(&mergeOut, mesh1_desc, 0, 0, 0); EditElementHandle mergeMesh(mergeOut, true, false); mdlElmdscr_add(mergeOut); }
如果删除注释的代码,是可以新增一个mesh文件,如果加上这一段代码 bentley就会崩溃在ElementHandle的析构函数里面,没明白什么情况