# Creating patterns on complex surface

gh question.gh (6.5 KB)

How to create any patterns on complex surface within its boundary.

By complex you mean a trimmed surface I guess (called: BrepFace). This means that something, say, with holes and/or a not 3/4 sided boundary is 2 things: the trimmed info plus the “template” (the Surface) where this trim is applied.

If so you should create anything on the underlying surface of the BrepFace (as in your captured image) and then check for containment. Or at the pattern creation time check and don’t include into the collection anything “outside” the BrepFace.

For instance let’s say that you divide a Surface in u/v and then you correlate the points in order to create some pattern. The logic of correlation is the pattern. In fact you work with pairs of points, that is. (while the result may be some line or something else) If any point in the pair is outside the BrepFace > just go after the next pair.

I’m not that pro too understand this could you please explain me shortly @PeterFotiadis

have a look at this thread: "perfect" grid with nice boundary. it mostly deals with simple holes but the principle can be transferred to patters.

@Konrad.Kobayashi i even tried dividing the surface that also exceeds the boundary of the surface.

1. If you haven’t got 100% the gist of DataTrees … well … take a break (from everything) and study these things (kinda a Dictionary of Lists AND NOT a List of List of List …). Fail to do that and yor trip to the GH word could be a very painfull one.

2. The shown is a BrepFace sampled into a brep component. If you use a surface one then the underlying surface would been used.

3. So the divide surface (in fact divide a BrepFace) component does what it should: you get points where the BrepFace contains them and null where not.

I could continue on pattern matters … but what about 1? Are you ready?

1 Like

Sure im ready. Thank you i appreciate your help. Do you have any good suggestions for learning those things. @PeterFotiadis

If you do a search on DataTrees (in this and in the old - very good but dead - Forum) there’s lots of DT cases. That said 99.99% of the issues encountered by people are due to their very poor knowledge of DT’s (knowing the “basics” means nothing. mind).

Me? I do business solely via code (where everything is very easy … provited the obvious) and I have removed every old def (not using code) … so I’m not at all the right person to provide advise upon handling DT’s via native GH components.

Here’s an extreme (or sould I called it absurd?, he he) suggestion that nobody could give you: Learn coding and discover that sky’s the limit, See what a few lines can do and imagine doing 30+ patterns in a couple of minutes.

Point_pattern_EntryLevel_V1.3dm (154.2 KB) Point_pattern_EntryLevel_V1.gh (10.4 KB)

I ask (and suppose) the same…that by complex you mean trimmed…

Means said surface isn’t visible, but if you plug your ‘brep’ into an ‘untrim’ you’ll get it:

Imitate the same procedure manually in rhino for you to never forget it (grab the surface, type ‘untrim’).

Anyway, because of lost-in-translation and borrowed terms, and if by ‘patterns’ you mean ‘panels’ then you have to create a rule to keep those within the trimmed region of your untrimmed surface, either via code as Peter suggests or via GH or at least mentally.

To test whether something (ex.: a ‘panel’) is within a trimmed region then your usual default is to test for point inclusion:

Bear in mind you might need to do other ugly things like trimming excess geometry at boundary limits:

Good luck hopping grass

Indeed:

For instance you may want a portion of a pattern (see the star [insofar still works with quads mind]) where the null test for the quads must be more elabolated (i.e. testing triads instead) … or you may want more complex null tests if the desired pattern has to do with non quads (hexagons and the likes).

BTW: For hex (alias b for branch, i for item):

b[i], (b+1)[i-1], (b+2)[i-1], (b+3)[i], (b+2)[i+1), (b+1)[i+1]

Point_pattern_EntryLevel_V1A.gh (120.6 KB)