BrunoLevy / geogram

a programming library with geometric algorithms
Other
1.87k stars 126 forks source link

Does geogram support non-manifold surface isotropic remeshing while maintaining its non-manifold? #170

Closed citystrawman closed 2 months ago

citystrawman commented 2 months ago

First I want to say thank you guys for sharing such a powerful tool. Here's my question: I have a non-manifold surface which has its screenshot as follows: image the non-manifold edges comes from the underlayer surface: image

This surface mesh is aimed to simulate a mountain slope(the green part) and the stratum underneath(the yellow part), and it is actually generated by intersecting the mountain slope surface mesh and the stratum layer mesh: image thus the boundry between stratum layer and mountain slope is filled with small and irregular triangles: image, but the the stratum layer and mountain slope share exactly the same boudry vertices.

What I want to do is to isotropic remesh this model while maintaining the boundry vertices connecting mountain slope and stratum still keep connected. I tried to isotropic remesh it using Geobox and set nb_points to be 25000, then the output remesh is shown as follows: image open it in meshlab: image and it seems that the boundary vertices connecting mountain slope and stratum are detached.

Is it possible to keep these boundry vertices still keep connected? I will appreciate if anyone help me solve this issue.

Here's the surface mesh attachment slope_slide_clip_merge.zip

BrunoLevy commented 2 months ago

Probably, and the proposed "fix" is probably a collection of viruses, spywares etc... (I have deleted the answer and removed the link in your message). I'll come back to you shortly with an answer to your question.

BrunoLevy commented 2 months ago

P.S. did you see the same type of answer elsewere ? (would be good to signal them so that they are removed as well).

citystrawman commented 2 months ago

P.S. did you see the same type of answer elsewere ? (would be good to signal them so that they are removed as well).

No. I do not see these answers from other place.

BrunoLevy commented 2 months ago

Remeshing with preservation of non-manifold contacts is not implemented in Geogram. There are two possiblities:

  1. modify the remeshing algorithm. You will need to generate vertices along all the non-manifold edges (using for instance the curvilinear absissa to generate an even spacing of the vertices), then mark the new vertices as 'locked' so that they are not moved away by Lloyd relaxation, then generate the new vertices and relax them with Llloyd. Here is a list of relevant files in geogram:

  2. Tessael markets a geogram-based GeO2 solution that has a non-manifold aware mesh repair tool, specialized for reservoir modeling and gridding (usage scenario seems to be quite similar to yours), so you may also contact them.

citystrawman commented 2 months ago

Remeshing with preservation of non-manifold contacts is not implemented in Geogram. There are two possiblities:

  1. modify the remeshing algorithm. You will need to generate vertices along all the non-manifold edges (using for instance the curvilinear absissa to generate an even spacing of the vertices), then mark the new vertices as 'locked' so that they are not moved away by Lloyd relaxation, then generate the new vertices and relax them with Llloyd. Here is a list of relevant files in geogram:
  1. Tessael markets a geogram-based GeO2 solution that has a non-manifold aware mesh repair tool, specialized for reservoir modeling and gridding (usage scenario seems to be quite similar to yours), so you may also contact them.

Dear BrunoLevy, in your first solution, you mentioned using curvilinear absissa to generate an even spacing of the vertices, Do you mean collecting all the intersect vertices along the non-manifold edges, and then from these vertices choose those that are almost equally spaced(at target triangle length), and lock these vertices, then do the rermesh?

BrunoLevy commented 2 months ago

Yes, that's more or less the idea (with a small difference: you may generate new vertices, that are not necessarily existing in the intersection). A polygonal line can be considered as a parametric function, that maps a "time" t to a position along the line (you "travel" along the line at constant speed), then you generate the point for t=1/N, t=2/N, ... t=1.