Jump to content
Feather

A little Stumped here

Recommended Posts

I'm looking for an efficient way of separating geometry at points where the two chunks are only connected by a single point. Assigning each chunk a unique ID is the ultimate goal. 

In the image below, I have forced an edge case. The red circled points are the ones I'm looking to separate without breaking them away from the other connected geometry. 

ConnectedPoints.thumb.jpg.314f9c420cac3844d6e286262fcc3640.jpg

I can identify faces that are only connected by a single point. However, separating two chunks larger than a single face but connected by a single point is proving difficult.

If anyone has any suggestions for how to achieve this I would very much appreciate the help. 

Share this post


Link to post
Share on other sites

You can use the Group Expression SOP utilizing the "Valence" preset. Set it to 4 and you'll select all the points with 4 neighbour points.

image.thumb.png.f01a2b854114d025c1525544f7deb6e9.png

This works, as all the other points have only two neighbours.

Edited by Yader

Share this post


Link to post
Share on other sites

Thanks for the reply Yader!
 

This is good but runs into an issue with grabbing center points as well. I'm curious, its not grabbing the center point of your larger chunk in the picture as both it and the connected corner have 4 neighbors.

How did you manage that?

 

Share this post


Link to post
Share on other sites

Ah, didn't saw your mesh. I assumed you converted your geo to NGons. I used remove shared edges within the Divide Sop to get rid of inner edges :)

Share this post


Link to post
Share on other sites

Thanks Noobini!

I usually do upload a file but this time it seemed like more work to log in, download the file, find then open it up, than to just drop a grid and delete some random faces.

Unfortunately I can't remove the interior edges. However this did give me an idea. Doing this, adding a name attribute to the new faces then scattering points and transferring the name to the previous faces could work. 

I would still like to know if anyone can come up with a solution a bit more elegant than killing and transferring. That process is going to be slow and dependent on point density for larger meshes and definitely wouldn't work if the mesh was not flat. 

Edited by Feather
adding stuff

Share this post


Link to post
Share on other sites

Did you try the split point SOP? This might be what you need, if you have a procedural method of grouping the points that need to be split. (I just grouped by hand in this example file).

pointsplit.hiplc

Share this post


Link to post
Share on other sites

what about this then...you already can tell by the colors....it's correctly separated

the attrib is manifoldnumber

(actually the 2 mauve ones joined to the yellow one top left just got my interest!!!)

(nah...doublechecked, it's worked perfectly, those 2 patches joined to the yellow ones are actually different, one has manifoldnumber 1 and the other one is 6)

patches.jpg

Edited by Noobini
  • Like 1

Share this post


Link to post
Share on other sites

this colorscheme is clearer (bring up node info, CTRL+LMB on manifoldnumber to create visualizer))

patches2.jpg

  • Like 1

Share this post


Link to post
Share on other sites

This is exactly what I wanted yes thank you! 

 

I do wonder how this works, unfortunately polydoctor is a blackbox node. If anyone from Sesi knows how this is achieved that'd be really interesting. 

Share this post


Link to post
Share on other sites

i reckon it's possible with point groups...but I don't know VEX

- create your geo

- group>points>Unshared edges but make sure to check Create Boundary Groups. Lets pretend you call your group Border.

So your Border would be structured like this, Border is ALL unshared points, then you get Border__0/1/2/3...etc....as different patches..much like manifoldnumber.

So if I knew VEX, I would find points that belong to 3 groups ie. Border + 2 other groups (named Border* that is)...but then you'd have to fart around trying to promote the pointgroup property to prim....to get the equivalent of the manifoldnumber.

Someone else can try.....I still don't know much VEX.

(note Create Boundary Groups is only possible with points, not edges or prims)

Edited by Noobini

Share this post


Link to post
Share on other sites

arrggg...found a hole in my train of thoughts...

here I was expecting all 4 points of the prim at the front to light up...but only 2 did. There goes my theory from above.

 

groups.jpg

Share this post


Link to post
Share on other sites
6 hours ago, Feather said:

...

Unfortunately I can't remove the interior edges. However this did give me an idea. Doing this, adding a name attribute to the new faces then scattering points and transferring the name to the previous faces could work. 

...

 

You can just transfer the point group after removing the interior edges and do your point split and then assign a unique ID to the patches.

 

image.thumb.png.7390380d6cfc209cc36064195593e57f.png

patches_yader.hiplc

Edited by Yader

Share this post


Link to post
Share on other sites

while i've got that island comment in the file,

you can also add a uvautoseam, output island attrib, add explodedview, use island as piece attrib...bob's your uncle.

(still black boxes tho)

  • Like 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×