Define a discretize region
In[]:=
reg=DiscretizeRegion[ImplicitRegion[(x^2+(9/4)y^2+z^2-1)^3-x^2z^3-(9/80)y^2z^3==0,{x,y,z}]];
Define a finite plane:
In[]:=
plane=Polygon[{{0.2,-0.2,-1},{2,-0.2,-1},{2,0.2,2},{-1,.2,2}}];Graphics3D[{{FaceForm[],EdgeForm[Black],reg},{Opacity[.5],plane}}]
Out[]=
Find mesh elements intersecting with the plane
In[]:=
meshIntersection=Module[{polygons,djQ},polygons=MeshPrimitives[reg,2];djQ=RegionDisjoint[plane,#]&/@polygons;Pick[polygons,djQ,False]];
In[]:=
Graphics3D[{{FaceForm[],EdgeForm[Black],reg},{Opacity[.5],plane},{Red,meshIntersection}}]
Out[]=
Put the mesh cells (triangles) in the order:
In[]:=
orderedMesh=Module[{newMesh,newpolygons,gr,as,findVerticesWithOneEdge},newMesh=DiscretizeGraphics@Graphics3D@meshIntersection;newpolygons=MeshPrimitives[newMesh,2];gr=MeshConnectivityGraph[newMesh,2];as=AssociationThread[VertexList[gr]->newpolygons];findVerticesWithOneEdge[graph_]:=Select[VertexList[graph],VertexDegree[graph,#]==1&];as/@FindPath[gr,Sequence@@findVerticesWithOneEdge[gr]][[1]]];
Find the intersection:
In[]:=
points=(RegionIntersection[plane,#]&/@orderedMesh)/.{Point[x_]:>x,Line[x_]:>Sequence@@x}//DeleteDuplicates//DeleteCases[_EmptyRegion];
visualize it:
In[]:=
Graphics3D[{{FaceForm[],EdgeForm[Black],reg},{Opacity[.5],plane},{Red,meshIntersection},{Blue,Thick,Line@points}}]
Out[]=