老师们,您好,如文件中所示,我想用蓝色的面将红色的mesh面分割为上下两半,但无论我怎么切换这两个Mesh面的方向,都只能得到上面的一部分,下面一部分无论如何得不到,请问下是什么原因呢?Mesh面切割得不到想要的结果2-保留4份.dgn
您可以参考下面代码,然后在界面上修改一下蓝色的法向方向是可以获取下半部分:
EditElementHandle eeh0(3956L, ACTIVEMODEL); EditElementHandle eeh1(3951L, ACTIVEMODEL); if (!eeh0.IsValid() || !eeh1.IsValid()) { mdlDialog_dmsgsPrintA("eh0 or eh1 is invalid"); return false; } eeh0.GetElementDescrP(); MSElementDescrP mesh0 = eeh0.ExtractElementDescr(); eeh1.GetElementDescrP(); MSElementDescrP mesh1 = eeh1.ExtractElementDescr(); StatusInt status = ERROR; PolyfaceArrays pArrays0; PolyfaceArrays pArrays1; DPoint3d color0, color1; int pNumPerFace0, pNumPerFace1; memset(&pArrays0, 0, sizeof(pArrays0)); memset(&pArrays1, 0, sizeof(pArrays1)); status = mdlMesh_getPolyfaceArraysExt(mesh0, &pArrays0, &pNumPerFace0, NULL, NULL, NULL, NULL, NULL, false); status = mdlMesh_getPolyfaceArraysExt(mesh1, &pArrays1, &pNumPerFace1, NULL, NULL, NULL, NULL, NULL, false); color0 = mdlPop_getDColorFromElement(&mesh0->el, ACTIVEMODEL); color1 = mdlPop_getDColorFromElement(&mesh1->el, ACTIVEMODEL); MdlPopPolyBrepP pBrep0 = NULL, pBrep1 = NULL; MdlPopContextP pContext = mdlPop_grabContext(); MSElementDescrP outEdPP = NULL; if (SUCCESS == (status = mdlPop_polyBrepFromElementDescrEx(&pBrep0, pContext, &pArrays0, pNumPerFace0, &color0, false, false)) && SUCCESS == (status = mdlPop_polyBrepFromElementDescrEx(&pBrep1, pContext, &pArrays1, pNumPerFace1, &color1, false, false))) { if (mdlPop_polyBrepFromPolyBrepBoolOp(pContext, pBrep0, pBrep1, 2, false, false, false, false)) { mdlPop_elementDescrFromPolyBrep(&outEdPP, NULL, pBrep0, false, false); pBrep1 = NULL; // brep1 is consumed#ifdef TIME_RECORD } } if (pBrep0) mdlPop_free(pBrep0); if (pBrep1) mdlPop_free(pBrep1); mdlMesh_dropPolyfaceArrays(&pArrays0); mdlMesh_dropPolyfaceArrays(&pArrays1); mdlPop_dropContext(pContext); if (NULL != outEdPP) { EditElementHandle eeh2(outEdPP, true, false, ACTIVEMODEL); eeh2.AddToModel(); }
Answer Verified By: cao li