← All ideas
  • Published 30 Sep 2021

Threshold for [P] Separate by Loose Parts

would be nice to have =) Screenshot_20210930_190634.png Screenshot_20210930_190721.png


must have for procedural modeling approach via Sverchok

Screenshot_20210930_133731.png

66.7%

Development Status: Open

Upvote 2 Downvote 1
chibo
30 Sep 2021

6 Comments

softyoda

I don't understand how the threshold would work.

To have some loose part but not every, why don't you just select random vertices and ctrl+L to select linked, and then separate ?

I agree a select random loose part would be better to just select for example 50% of loose part.

If you are referring about the dot of J and I then a threshold wouldn't solve your issue and i don't think there would be anything that solve your issue other than python script to separate by letters.

chibo Author

by distance obviously

because i'm using Sverchok and because of it's procedural nature, i simply can't do this

plz explain how to separate letters via python?

softyoda

i don't think the loose part algorithm could work by testing every island near islands. It would take a lot of processing power, maybe not that much for text, but would completely freeze if done by billion points mesh.

1
chibo Author

i don't care about processing power, i have AMD 5950X, all i care - it's my work, which is must be done

Lauloque

Maybe you don't care ; but developers would, I'm afraid.

I am not savy on the code behind the Seperate by loose part , but I don't think it involves any notion of distance. Since mesh data contains the connections between each vertice, I guess it just floods the mesh until there's no connected piece left; Instead of looking in the blind from arbitrary point up to a distance.

Anyway it could be nice to have some sort of Separate by distance , maybe it would not be the quickest thing to to, but it can have a usage.

2
softyoda

If you really need it, and you don't care about computing power, you can ask a developer or create a small python script yourself that does just that:

an example of what I would do:

separate by loose end do a for loop of every selected mesh and assign to array do a for loop of that array of mesh : do another for loop of every vertex of the mesh in edit mode: assign new data properties that is the ID of the island (could be vertex color or something else better optimized)

merge all the meshes in the array enter edit mode for this mesh do a for X loop of all vertices : make another for loop of all the other vertices : create a list [X] of tuples that stores the vertex ID (from the vertex colour) and the distance of the vertex from the current vertex (vector3 distance). Once the loop is complete, you can create another loop of every colour ID (the original colour of the vertex) that exists, and this loop will loop through all the vertices again(but not blender list, yours) to find one with the selected colour, once this is done it will select the related vertices, and compare each selected vertex to the distance vertex array. It will store those below a value, and select them all, as it is in the loop, I will select all the other neighbours of the selection, and once there are none left, it will split the selection and continue the main loop to make every colour ID that exists.

That's what I would do if it was just my problem.

But I'm not a developer, and I'm sure a real developer would use an octree or a poisson disk, which is beyond my knowledge.

My method should work, but since I'm looping my vertices twice, it will require exponential computing power as the mesh gets more vertices.

2