【MSCE C++】如何在CE中加载osgb倾斜摄影数据,

现在可以获取到osgb文件中的三角面片信息,怎么在bentley中加载进来呢,一定要生成3sm格式吗

Parents Reply Children
  • 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的析构函数里面,没明白什么情况