This OpenSCAD module provides the required mechanisms to spray a pattern on a surface.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
Nicolas Massé 827290372f add some examples 8 years ago
documentation/images add doc 8 years ago
examples add some examples 8 years ago
LICENSE License: MIT 8 years ago
README.md add doc 8 years ago
pattern.scad initial version 8 years ago

README.md

Pattern filling with OpenSCAD

This OpenSCAD module provides the required mechanisms to spray a pattern on a surface.

Possible usages

Patterns are widely used in common objects, and so are the possible usages of this module:

Examples

In the examples folder, common examples are provided to illustrate what can be achieved and how to use this module.

How to use it

First, you will need to get a copy of this module locally:

git clone https://github.com/nmasse-itix/OpenSCAD-Pattern-Filling.git

In your OpenSCAD file, include this module:

use <OpenSCAD-Pattern-Filling/pattern.scad>

Then, build your base shape (in this example, an octogon and a square):

module mypattern(r) {
  // The octogon
  rotate([0,0,22.5])
    circle(r=r, center=true, $fn=8);

  // The square
  l = 2 * r * sin(22.5);
  translate([r,r,0])
    rotate([0,0,45])
      square([l,l], center=true);
}

Instanciate it once in order to check it matches your expectations:

r = 2;
mypattern(r);

our base shape

Then, you need to define two things:

  • a bounding box (the area to spray)
  • the two moves defining how to spray our pattern
bounding_box = [
  [0,0],     // Lower left corner
  [20, 20]   // upper right corner
];
moves = [
  [ 2*r, 0], // For the first move, we will translate on x by two times the radius
  [ 0, 2*r], // For the second move, we will translate on y by two times the radius
];

Finally, the pattern can be sprayed:

spray_pattern(bounding_box, moves)
  mypattern(r);

the sprayed pattern

If you like clean edges, you can cut the sprayed pattern at bounding box size by intersecting the pattern with the bounding box:

intersection() {
  spray_pattern(bounding_box, moves)
    mypattern(r);
  square(bounding_box[1] - bounding_box[0]);
}

a clean cut of our pattern

Check the complete source code for more information.

Limitations

Currently, the first move needs to be exclusively on the x axis otherwise the pattern may not be sprayed correctly, leaving blank area.