Looking for feedback on Pattern Toolkit package

Hello everyone,

We made a new package called the pattern toolkit, and are looking for some feedback. An alpha has been published to the package manager. (As an alpha, expect the nodes to change, as we develop further and respond to feedback)

The goal of the pattern toolkit is to simplify creation of some common patterns. It also allows driving the pattern using images, and placing the pattern on surfaces. Over time we hope to make it simpler to get started with the pattern toolkit.

There is a sample file in the package. The basic flow is to:

  1. Choose the overall pattern layout (grid, alternating grid, hex grid, spiral, etc.)
  2. Use parameters / images to scale and rotate each element
  3. Optionally map onto a single surface or project across multiple surfaces
  4. Output to curves or other geometry

Here’s an example of it being used with Alias (computation time edited out for brevity):

At a lower level, the pattern toolkit creates a set of PatternPoints on the [0…1],[0…1] UV square, which maps nicely to images and surfaces. Each PatternPoint contains a CoordinateSystem, and geometry is generated in the range [-0.5, 0.5],[-0.5, 0.5] for each CoordinateSystem.

Please let me know what you think, and if there’s anything that’s missing, confusing, or weird. :slight_smile:

12 Likes

There sample files for this package?

Yes please, add some sample files to figure out how it works…

I tried to put some in the extras folder in the package, but I’m not sure if that worked. Either way, here is a demo file.pattern_toolkit_demo_1.dyn (38.9 KB)

4 Likes

Hi tomfinnigan:
I finally got time to test your package, and here is my feed back.
The package seems to be solid and cleverly designed, and it cover almost everything about patterns, but there is few suggestion and possible issues;

number 1: The way determining number of U and V number of the grid, is only “integer” allowed as input. I think it will be better to make it as sequence of number that goes from 0 to 1. That would allow for creating the grid at unequal distances along U or V direction.

number 2: The method used to put the pattern points on the space can cause problems. The center of the grid is not dropped at the origin point, rather its corner is on origin, that would cause problems when rotating the coordinate system, as it will be shifted outside the geometry. (look pic 1)
If the center point of the grid is matching to origin, it would be more practical.

number 3: when using “pattern.point.to.geometry” node and making a solid or 3d surface as “object” to be populated on the grid, it become squashed. I don’t know is that a bug or it just it does not support 3d objects!.

number 4: It is about the concept of “pattern points”, i guess it is just 4 points groups that hypothetically forming the rectangular unit of the grid. I am wondering why don’t you open that concept up to be workable with other dynamo nodes. for example, it would be very handy if i can convert (back and forth) any grid of points listed in 4 pairs and can form a closed rectangle to “pattern points” so i would proceed with your scripts, or i can edit those “pattern points” freely in full compatibility. I think if you remove that constraint, it would be just a powerful move.

Hi Maxy, thanks for the detailed feedback. My comments below.

number 1: I might not be understanding this one completely. I think if you wanted non-integer numbers to overlap the 0…1 range, you could scale the CoordinateSystem going into the pattern generator?

number 2: Yes, this is a good point. In order to rotate the space, you need to rotate around 0.5,0.5. This is a bit weird, but it’s to match surface parameterizations in Dynamo, which all have a domain of [0…1],[0…1]. If we used a different parameterization, then if you wanted to base size off of, say, surface normal, then you’d need to be constantly remapping. It might make sense to make a convenience function to more easily rotate/scale coordinate systems around 0.5,0.5 though.

number 3: This is a bug - it should be able to handle 3d objects, but when we’re mapping to a surface we weren’t paying attention to the z scale. I’ll get this fixed, thanks :slight_smile:

number 4: That’s a good idea. Right now the PatternPoint is just a thin wrapper around CoordinateSystem (I am planning to add a concept of connectivity/topology later on). There are nodes to pull out and/or replace the CoordinateSystem. I think having a convenience method for creating them with 4 points is a good one, I’ll have to see how doable that is. Right now none of the nodes we’ve used produce anything with skew, so I need to check how difficult that is.

2 Likes

Hi tomfinnigan,

This is an awesome tool and I found it as a great way to introduce people to dynamo and get them to create something from the get go. I’ve had great success creating interesting patterns that would be difficult to create otherwise.

One issue I haven’t been able to figure out is that when I map 3d objects to a surface it is ok but as soon as I try to add a rotation in a particular area then it will also scale when I do not want it to. Is there a way around this?

Thank you,

Paul

Hi,
Nice tool.
I find useful but also strange the concept of pattern points as it doesn’t leave me the freedom to integrate it into my scripts.
It would be good to have the possibility to select single points in the pattern.

Is there an example for “Map to Multiple Surfaces”? @tomfinnigan

Bump! There is no explanation anywhere on how “map to multiple surfaces” works. How does the “Projector Surface” input work? I tried a single surface in front of (X) my set of multiple ones, thinking it might need like a single parent surface to set the pattern up or something, but I get an error that says “Intersecting two infinite geometries such as planes is an invalid operation”. What does it want? When I hover over the input it just says “projector surface”. Some more explanation in that description would be nice.

Really frustrated trying to learn dynamo in Alias. There are a few tutorials around but they’re all slightly incomplete, and don’t go over everything.

@Michael-GG any thoughts on this question :slight_smile: ?

2 Likes

Thanks @solamour for mentioning me here!
@mcgeecardesign @john_pierson @gianbupa @airpaintbrush1 Tom Finnigan is unfortunately no longer with Autodesk.
I’m a passionate Dynamo user, but I can’t program C sharp, so I cannot look into the Pattern Toolkit code. But what I did do, I worked a lot over the last year with my colleague Andrzej S. to solve the problem of multi surface patterning with our own scripts, and we have come pretty far.
Right now, depending on what you want to achieve, we have two approaches:

  1. You can create a point pattern, using Pattern Toolkit, or a more advanced script I wrote myself (uses the Pattern Toolkit package). In a second script, you can then input these points, and the 3D object(s) you want to place, a guide curve, and the target surfaces you want to map on to. I can create a video for this, if it helps.
  2. If you want to create 3D geometry on multiple surfaces, instead of simply placing an existing one, you could use the multi surface patterning package. It uses a section approach, where you create your points on section curves, which intersect the geometry you want to build your geometry on.
    Please let me know your use cases, and provide me sample scripts and/or sample images on what you are trying to achieve, and we can then start the discussion.
    Cheers,
    GG
2 Likes

Sample image of creating a simple point pattern, and, based on that, map it to 4 target surfaces, including scaling:

1 Like

Michael, thank you for replying! I’ve seen your guys’ videos on Youtube, including this one about mapping things onto multiple surfaces back in '21. I certainly would be interested in seeing a more step-by-step approach on how to do set this up from scratch, but I understand you’re working with your own custom scripts for this, and that would take a lot of time! Are you by chance working with Andrzej on making a package for that one? I’ve messed with both MSP and PT packages a little, but I need to watch Andrzej’s videos again on MSP package and his grille tutorial, and really go through it step by step.

At this point, I’m just trying to learn, really. But I guess what I’m interested in learning more how to do, is using a surface’s (or multiple surfs) UV and perimeter to create patterns dependent on that, like the images below, where the boundaries of the surface really dictate and morph the pattern. Most things I’m finding tutorials on are how to place simple items like circles on a surface, and then you can scale them with attractors and whatnot. It seems like a bit of a different process to do what I’m showing below, is it not?

In the case of my screenshot, I was stuck at trying to divide that surface into each section so I could then create a grid of diamonds that scales in height (like the Kia below). I could divide them, but not recursively, ending up in 25 separate items (needs some Python?).

I’m really new to this, and I’m finding I keep hitting silly walls and cannot seem to find the resources on how to climb them! I wish I could use Grasshopper as there are more tutorials, and the interface is more polished, but Dynamo being piped right into Alias is a huge plus!

Thanks so much for your time! :grinning:


EV6 Capture

Hi!
Yes, I totally understand and feel the lack of Dynamo learning content. I hope that I’m able to add videos on a regularly basis soon on YouTube, to fill this gap. Hard thing to do, because it’s not my job, so I have to squeeze it into my spare time. :slightly_smiling_face:
To your problem: I wouldn’t split the surface up, but instead just work directly with the isolines you created? In fact, I think this is what Andrzej did in his MSP package, for the nodes Generate_3D_Diamonds, Generate_3D_Hexagons and Generate_3D_Triangles? This requires some smart list handling, though. Not sure if he uses Python for those nodes.

1 Like

I completely understand, and what you guys have put up thus far is so appreciated and valued! So thank you!

I understand, that makes sense. I’ve been working on his grille pattern tutorial, and about to move on to his 3d diamond MSP tutorials, so perhaps I’ll figure it out through there.

Thanks again and take care!

1 Like

Thanks, and I will make sure to keep this thread updated on my progress over the next weeks!