I am a little out of depth and would appreciate any advice / high-level strategy to tackle this problem:
the goal is to create curves on a surface which fur fill 3 requerements;
They should be (more or less) equidistant. Basically when I “pipe” them, the pipe should overlap with a little bit consistency. This doesn’t have to be exact.
They should follow a given vector field / align themselves to it.
they should “wrap” the hole surface while being as long as possible
the idea behind this is to cnc-mill the surface, and the generated curves are being used as toolpaths.
I will try to have a look but as I am on vacation not always easy to find time!
One important part is to have a nice triangle mesh. Curves will be equidistant is all triangles are equilateral.
Vector field is the easy part. My script need one vector per mesh vertices
first result with kagaroo: goals: anchor, direction( from vectorfield), on mesh, lenght, collider,
i will try to somehow lengthen each curve but also stick it to the surface…
I am there now, I still have a problem with the welding of mesh !!! So I have to use Rhino.
In order to have thinner size, you need to have more triangles.
Here is my script, it uses directional reaction diffusion. You can play with the “parameter B” the lower the lower the size of the pattern. But lower than 0.15 will yield bad result. So if you want closer curves, make a denser mesh.
I use a @Petras_Vestartas script to weld the iso mesh because old components doesn’t give good results (I don’t know why). Then curves are extracted from the iso mesh, these curves are smoothened. The used with Dendro plugin to “cut” the initial mesh.
If you don’t want to offset mesh use a 0 offset.
For a better result lower the resolution of Dendro Voxel, 0.5 seems good but not fast. So I used 1 here.
not nearly as nice a the solution from laurent; done with kangaroo- the difficult part is to connect the unsorted curves in a nice way. this time I just look for the neareast neighbour with the lowest angle-difference.
I think because it uses angle rather than distance. Rhino seems to have lots of distance tolerance issues in defining closed meshes for some reason, especially away from the origin. Angle implies it is already in a way closed and if it is a part not closed then an angle test won’t work. By using distance you can force it to weld.
to clarify: kagaroo gives me a bunch of oriented, equidistant curves but there all too short. I tried to connect them by checking for each endpoint the 5 closeset curves , then choosing the one which has the lowest angle difference to the starting point. The Result is rather bad, i’m afraid
It is not my algo, and I am also speaking on mesh welding. Rhinocommon uses an angle tolerance. Mesh edits weld and Petras weld use distance tolerance. That is point I was making The issue with angle is very often (depending how the mesh is made) mesh faces will have microscopic gaps larger than Rhino tolerance, even though it can join because meshes can join even when not touching as you know. The issue is if there is little gaps an angle calc between faces won’t work because it requires faces to truly share an edge, which they don’t on a microscopic level. By using distance you essentially average the verts of the gap to become one, within defined distance. The draw back with distance is if you have a very dense mesh you might weld verts that are very close to each other but didn’t want to weld, but I find it very less likely to have meaningful verts .001 units next to eachother so it is usually ok to weld by distance.
The difficulties will be to define correctly the vectors and to link correctly the quad meshes.
With my method I made a more denser mesh with MeshMachine static with an edge length of 2.5 unit. It gives that. It could be better if I add a method to cope with shape of triangles in Reaction Diffusion script. I know the way but didn’t implement it.