Labeling and counting identical connector parts using node points and vectors

Did you check @martinsiegrist definition? He doesn’t use the avg vector as a fingerprint to compare the different node configurations, he just orients each node’s set of adjacent points on world XY plane based on the avg vector. Then he checks if the reoriented points match or not. What I don’t understand is why the adjacent points would always line up and not be differently rotated around the avg vector.

mmm… funny I didn’t notice that myself. I was indeed also under the assumption that 24 possible rotations was enough but I already gave the example of an interchangeable diagonal & orthogonal.

Nice resource irt the 24 possible rotations. I was actually banging my head at that last week. Thought that would be something straightforward but had to build a GH definition to get the correct count.

Of course he doesn’t. I lost sight of that and raised a false alarm. Sorry!

If you have a single structure (as a graph) to play it doesn’t (BTW: what about all VS all angles?). If you have “graph modules” (that require assemply via common connector(s)) then requires a sligthly different take. But this is complex since modules arrive on site pre-assembled … so we are talking special connector joints etc etc.

Anyway see attached (spot the fact that the so called slow thingy (the LINQ) is faster than the classic clustering). Obviously for big AEC type of collections a // (or PLINQ) approach is a must (but in AEC we don’t use a fixed connector anyway [we use MERO and the likes]).

BTW: Feel free to provide a test graph that doesn’t play ball.

BTW: If you have islands in your graph AVOID Sandbox at any cost.

Clusters_NodeTopoAngleClustering_EntryLevel_V1A.gh (156.3 KB)

Added a 2nd angle policy (all VS all) :

Clusters_NodeTopoAngleClustering_EntryLevel_V1B.gh (158.2 KB)

4 Likes

Nice!, and yes - the all vs all one works in some cases where the centroid vs edges one (and the other methods posted so far) don’t, like this:
image

1 Like

hi every one !
i dont use sand box or shared node but some how i figured it to get the same result

and i was looking for some thing like rhinocount which would count and give me an easy out put.

looking forward for more ways to find out…

cheers
rajeev

What’s that first component @rajeev_pulari?

Er … hmm … blame the Vodka overdose issue I guess. But this is (was) just a matter of another if clause (if centroid is zero > do all VS all [regardless the angleMode]).



V1C with every(?) graph test imaginable(?) soon.

But for AEC purposes - any graph with islands etc etc - the path is long (and hilly) for a vast variety of reasons.

3 Likes

Remove duplicate lines from Kangaroo
@Unfold

1 Like

Hope dies last.

Clusters_NodeTopoAngleClustering_EntryLevel_V1C.gh (181.1 KB)

3 Likes

Peter, thanks for all the input. I actually started by trying one of your old Brep comparing definitions on my generated connectors but since your code relies on volume / surface area and some other things, I had too many false positives and negatives due to the close similarities between the connectors. Especially when mirrored etc. So that’s why I figured it would be better to stay close to the metal and just look at the angles/vectors. Hence my initial question.

Your abstract breakdown really helps me understand how to attach this problem although my level of GH skills is not yet up to the task of applying it from scratch. But I’ll dive into your definitions and pluck them apart, it’s mostly C# code so that will be beyond my visual brains ¯_(ツ)_/¯. But I’ll try fitting it in my definition and report back!

1 Like

What are islands? Groups of interconnected nodes isolated from other interconnected nodes?

My only ‘dirty’ issue at the moment is that the nodes of the small cubes attach in some places to the midpoint from an edge of a large cube. In these cases I miss one line in that node. I currently divide those edges by hand in Rhino.

Thanks for the suggestion. I looked at Reindeer but looks a bit too high level & specific for this purpose. Looks like I would need to setup my structure as a timber construction in order to identify nodes. I think a more low level solution would integrate better in my (and other peoples) setups. Or do I miss something?

1 Like

Yes.

Meaning that the NN (NodeToNode) connectivity tree MUST have paths with 2 dimensions (first dim: the island, second dim: the Node index from the Node List etc etc). Sandbox is out of question for a similar (higher order) connectivity. There’s various ways to locate islands but the ones that I use (C#) are strictly internal.

Note: V1C works by assuming that the graph is perfect.This is not the case in real-life. I’ll add some things in V1D for dealing with banana graphs (up to a point).

Note: As I said using a “custom” class for addresing similar clustering tasks (simple as in V1C or nested) is the general way to go. But this requires C# that that is terra firma for you (life sucks).

Note: With regard stuff that I post from time to time: a C# solution is in most of cases a dedicated thingy writen for a dedicated case/scope/task. If you input the wrong things (incompatible with the stuff that I had in mind) you’ll get … er … hmm … you guess what: bananas. With regard the object equality C# mentioned above … well … have in mind that in general is a chimera … but I have far more complex Methods to attempt to find the thing that you can’t have (life sucks).

Note: the 1M Q here is: are you working with a single graph … or you combine “standard” (or not) modules that should being interpreted as a graph (or a collection of graphs).

BTW: since the clustering is based on angle measurements … if we add a min angle property in that mysterious Node_Info class … then we can very easily define what is the safe L (on a per node or not basis). Of course if you like your connectors to have the same look … then we mustt pick the max L of all nodes. D is known and depends on your strut size (R) + some rational tol value.

More soon.

3 Likes

Hi intresting !!
The same i was working for the space frame i need to calculate all minimum angle at the each node and based on that angle i want to figure out the ball diameter .

well i dont hav any idea about the programming so i left with the options of making in the gh itself

later came with so many new issues which i was not able to fix it till now

looking for amore solutions and methods for solving it

cheers
rajeev

Total respect.

1 Like

The bad news are that you can’t solve a real-life truss with components. Not in a million years.

The ugly news are that you should check for clash issues (thus locating min sizes etc etc) having a lot of factors in mind. Kinda (MERO KK shown):

The uglier news are what you must do if you discover clash issues (general case: any truss).

3 Likes

excatly !
this same one when bolt diameter is same my gh script works fine
when 2 or 3 bolt diameter involves i cant figure out it goes wrong
so i was not able to assign th number of the bolt diameter at a node so it can select the largest one ie D value and calculate the ball diameter here i i went wrong could not fix it

thanks for the snap
it looks very good

cheers
rajeev

Have in mind that in real life the most common clash issues are related with sleeves, then with connecting bolts and then with tubes (obviously trying to have the min ball R possible blah, blah).

Here’s a metaphor for you:

Imagine that I’m not the Lord of Darkness (King of SardineLand etc, etc) but a great Artist of some sort. You are my operator (because I have no idea about GH and the likes and I hate computers).

You create a grid of points in x, y.

Then I want from you to move in Z any point I like (blame Art) … because the total result would be great Art (blame Art). I mean every time that you move a point (and I approve the location) you should move some other blah, blah.

But a great Artist changes his mind rather frequently (blame Art).

The very same thing that you should do in order to fix clash issues on the fly in a random freaky truss on a per node basis on the fly, that is. And keep the history of your OK solutions and make some OK combos. An then do it again because the envelope is not compatible with the truss (or the truss is not compatible with the envelope).

3 Likes