Wish: a new “kerned” display mode for connectors

This post arises from a comparison between grasshopper and typography.

In typography, especially Arabic typography, letters can be unlinked. This is called kerning, usually to achieve a visually pleasing result. Despite kerning, the mind is perfectly suited to track that letters form a word. If, and this is a big if, one says GH components and connectors are similar to letters, one is driven to a question : why are components and connectors visually linked ? Couldn’t we relax the distance between a component and its connectors? This would perhaps provide better cognitive clarity for the reader, as typographers do with kerning.

Current display modes are plain, faint and hidden. The new “kerned” mode would introduce a relative space between connectors endpoint and the connectors. without losing track of where connectors end.

I don’t like this, but nevertheless, you can change the colors of the canvas, as well as the color of the wires. If you set the color of the wire start and the wire end to the same color which is set for the canvas. You will not see the portion of the wire that is close to the component. The color will fade away to visibility.

I like the idea.This or maybe fainting out at the ends. Would be nice if you could make a photoshopped concept with a few components to see how this would look in real.

Confused about what this solves? Maybe I never ran into it, but is the location of the connection really the problem? I would think the real problem with wires are the other components they cross over on the canvas, not the ones they connect to? Anyway never against more options, just wondering what it makes better?

1 Like

Good idea. However, I lack the required designer & photoshop skills.

I agree, this is a real problem. However, kerning is for another problem. It is for enhancing readability at the component level, not at the canvas level.
If you look at a component, kerning would slightly insulates the component from its surrounding, therefore, you would be more keen to read it effortlessly. I suppose this is the same for typography.

No need for photoshop skills.

… but I’m not sure what problem it solves. In fact it almost seems to me as though it’s harder to read since things which are causally connected are no longer physically connected. A s t h o u g h y o u ’ r e
p u t t i n g s p a c e s i n b e t w e e n l e t t e r s.


don’t have it that much but it indeed doesn’t improve readability for me

@DavidRutten, thanks for the video. It is exactly what I expected.

In my humble opinion, it hurts vety little the understanding and the canvas is more airy and elegant. Again, it is a matter of personnal taste.

Well, the code is there now so it could be a deep, deep option somewhere. Just be aware that every drawn wire with this scheme requires a complicated bit of code which figures out exactly where the new end ought to be.

CPU cycles and arcane configuration are no problem for me. I look forward to it but I would understand that you do not want to bring extra complexity in the code for this feature.

The complexity is only there if you actually run the code. If I leave it and people don’t use it, it’s just a single conditional statement per drawn wire which you cannot measure let alone feel.

There is a cost to ongoing maintenance of rarely executed code. Maybe you’re better at this than I am, but over time, these kinds of options just make things more complex to maintain - especially if they’re barely ever used.


The kerning looks good to me, but does not add much. On the other hand - the wire overlap / outline is a bit harder to read then in GH1 - the subtle transparency there helped a lot, seems gone now?

how about something like this?

i drew it over the top, but a bit of that could help maybe?

It’s very early days, haven’t settled on a default theme yet. You’ll also be able to define your own themes much more easily in GH2.

Removing the wires at intersections is definitely far too expensive an operation to perform during screen redraws. It requires an intersection test between every pair of drawn wires yielding a possible two intersections per pair.

was thinking about some shader magic… but yeah its not so simple. Anyway - the interface design visible in the videos looks really nice and clean!


I’m curious, what are these two components doing?



I’m really just testing functionality at the moment, none of that stuff is likely to be present in beta 1 in the shape it’s currently in.

But the top component is the Gamma function (a generalisation of the factorial to fractional numbers). It’s a good test case because it (a) can generate absolutely humongous numbers really quickly and (b) benefits from careful treatment of floats vs. integers. So it allows me to see if everything switches to the best kind of number type given a certain input.

The bottom object is the numeric parameter (although using the wrong icon). It’s different from either the integer or the number parameter in that it supports a wide range of numeric types without the need to convert them all to some standard type. It can handle 32-bit integers, variable bit-depth integers, double-precision floating points, complex numbers and angles.

1 Like

I assumed Г(x) is a gamma function, a quite useful thing to have.

by the lambda Numeric I was confused :smiley: I thought it is Alpha Numeric component, detecting auto-changing the type from string (containing letters+numbers) and integer (if it is just integers), or float if there are numbers and decimal point.

That’s cool, so you’re creating duck-type componenets, a GhrasshoPYr :wink: .

I can’t wait to test this beauty.

1 Like

I guess it feels like duck typing. The main motivation here was to avoid expensive “up-casts” of simple types such as lines and circles into actual Rhino curves, but it works equally well for handling a sort of ‘overloading’. It does mean quite a lot of extra code inside components, although I’m still experimenting with using dynamic as a way to automate run-time method invokes.

1 Like

In my humble opinion, the readability of connectors layout is similar to a problem faced by the Aerospace industry and all people in need of wiring many components (cabinets for instance).
In this case, there is one best practice : assemble cable by harness

We could introduce a kind of “harness” component that bind together connectors. Below is a sketch of the idea with 2 harness