discuss@lists.openscad.org

OpenSCAD general discussion Mailing-list

View all threads

Wrapping a pattern around a surface

BL
Bryan Lee
Thu, Sep 3, 2020 5:56 AM

Let's say I want to make a cube and cover it in a tiling-stone or "diamond steel" pattern.  Is there a good method for that?
What if I want to put this pattern on the curved surface of a cylinder, or
a cone?

Example: I want to design a textured stone tower that is slightly conical,
with a flat top.

I remember reading a few months back that someone had a way to wrap text
around a cylinder...

Let's say I want to make a cube and cover it in a tiling-stone or "diamond steel" pattern. Is there a good method for that? What if I want to put this pattern on the curved surface of a cylinder, or a cone? Example: I want to design a textured stone tower that is slightly conical, with a flat top. I remember reading a few months back that someone had a way to wrap text around a cylinder...
JB
Jordan Brown
Thu, Sep 3, 2020 4:07 PM

On 9/2/2020 10:56 PM, Bryan Lee wrote:

Let's say I want to make a cube and cover it in a tiling-stone or "diamond steel" pattern.  Is there a good method for that?
What if I want to put this pattern on the curved surface of a cylinder, or
a cone?

Example: I want to design a textured stone tower that is slightly conical,
with a flat top.

I remember reading a few months back that someone had a way to wrap text
around a cylinder...

First, if you're thinking of painting a texture onto something... can't
do it.  Colors are the only kind of paint.

If you're thinking of modeling in some texture, there might be libraries
but mostly it's just work.

If you just want to place little bits of texture along a surface,
depending on the surface that's not hard.  If you want to bend the
texture around the surface, that's harder.

Here's a simplistic module that covers a cylinder with a given bit of
texture.

// h, d, and r are the dimensions of the cylinder.
// hinterval is the horizontal interval of the pattern.
// vinterval is the vertical interval of the pattern.
// Both intervals are rounded up to yield an integer number of repeats.
module textured_cylinder(h, d, r, hinterval, vinterval) {
    // Get d and r based on either d or r.
    d = d ? d : r*2;
    r = r ? r : d/2;
    cylinder(h=h, r=r);
    circ = d*PI;                // circumference
    nh = floor(circ/hinterval); // number around
    nv = floor(h/vinterval)+1;  // number up and down
    for (vi = [0:nv-1]) {
        z = vi*h/nv;            // Z position of this row
        for (hi = [0:nh-1]) {
            a = hi*360/nh;      // angle of this instance
            rotate(a) translate([r,0,z]) children();
        }
    }
}

textured_cylinder(h=100,r=20, hinterval=5, vinterval=5) {
    sphere(1);
};

Note that the [0,0,0] of the child is at the edge of the cylinder, and
+X is directly "out" of the cylinder.  Thus, for instance, to make a
spiky cylinder:

textured_cylinder(h=100,r=20, hinterval=5, vinterval=5) {
    rotate([0,90,0]) cylinder(h=5,r1=3,r2=0);
};

Each child looks like so:

and the result looks like so:

This looks OK, but isn't really quite right, since the cones are based
at the edge of the cylinder, and have flat bottoms, and the cylinder is
curved:

To correct, move the cones a bit -X so that their base is inside the
cylinder.

translate([-1,0,0]) rotate([0,90,0]) cylinder(h=5,r1=3,r2=0);

Mapping to cones or more exotic surfaces is left as an exercise for the
reader.  (But for cones is mostly interpolation on the radius, and
adjusting the number of iterations based on the circumference at each Z
level.)

For a cone getting an aesthetically pleasing pattern might be tough,
because the obvious rectangular pattern will have to change frequency as
you walk up the cone.

On 9/2/2020 10:56 PM, Bryan Lee wrote: > Let's say I want to make a cube and cover it in a tiling-stone or "diamond steel" pattern. Is there a good method for that? > What if I want to put this pattern on the curved surface of a cylinder, or > a cone? > > > Example: I want to design a textured stone tower that is slightly conical, > with a flat top. > > > I remember reading a few months back that someone had a way to wrap text > around a cylinder... First, if you're thinking of painting a texture onto something... can't do it.  Colors are the only kind of paint. If you're thinking of modeling in some texture, there might be libraries but mostly it's just work. If you just want to place little bits of texture along a surface, depending on the surface that's not hard.  If you want to bend the texture around the surface, that's harder. Here's a simplistic module that covers a cylinder with a given bit of texture. // h, d, and r are the dimensions of the cylinder. // hinterval is the horizontal interval of the pattern. // vinterval is the vertical interval of the pattern. // Both intervals are rounded up to yield an integer number of repeats. module textured_cylinder(h, d, r, hinterval, vinterval) { // Get d and r based on either d or r. d = d ? d : r*2; r = r ? r : d/2; cylinder(h=h, r=r); circ = d*PI; // circumference nh = floor(circ/hinterval); // number around nv = floor(h/vinterval)+1; // number up and down for (vi = [0:nv-1]) { z = vi*h/nv; // Z position of this row for (hi = [0:nh-1]) { a = hi*360/nh; // angle of this instance rotate(a) translate([r,0,z]) children(); } } } textured_cylinder(h=100,r=20, hinterval=5, vinterval=5) { sphere(1); }; Note that the [0,0,0] of the child is at the edge of the cylinder, and +X is directly "out" of the cylinder.  Thus, for instance, to make a spiky cylinder: textured_cylinder(h=100,r=20, hinterval=5, vinterval=5) {     rotate([0,90,0]) cylinder(h=5,r1=3,r2=0); }; Each child looks like so: and the result looks like so: This looks OK, but isn't really quite right, since the cones are based at the edge of the cylinder, and have flat bottoms, and the cylinder is curved: To correct, move the cones a bit -X so that their base is inside the cylinder. translate([-1,0,0]) rotate([0,90,0]) cylinder(h=5,r1=3,r2=0); Mapping to cones or more exotic surfaces is left as an exercise for the reader.  (But for cones is mostly interpolation on the radius, and adjusting the number of iterations based on the circumference at each Z level.) For a cone getting an aesthetically pleasing pattern might be tough, because the obvious rectangular pattern will have to change frequency as you walk up the cone.
JB
Jordan Brown
Thu, Sep 3, 2020 4:15 PM

Sigh, there's a fencepost error in the vertical stepping.

I had it right the first time, but then when I went back to add comments
I "simplified" it a bit and introduced an error.

Better, but harder to describe:

    nv = floor(h/vinterval);
    for (vi = [0:nv]) {

Note that there are multiple "right" answers depending on the edge
behavior that you want.

Sigh, there's a fencepost error in the vertical stepping. I had it right the first time, but then when I went back to add comments I "simplified" it a bit and introduced an error. Better, but harder to describe: nv = floor(h/vinterval); for (vi = [0:nv]) { Note that there are multiple "right" answers depending on the edge behavior that you want.
F
fred_dot_u
Thu, Sep 3, 2020 4:22 PM

Many moons ago, I came across a discussion for creating a  lithophane on a
cylinder via OpenSCAD
https://openhome.cc/eGossip/OpenSCAD/2DtoCylinder.html  . I suspect that
this may solve some of the question.

There is also a  video of the principles involved
https://www.youtube.com/watch?v=PNcGNqMUl5I  .

Eric Buijs is narrating the video and has a clear presentation, while the
web page link also covers a number of possibly useful aspects.

--
Sent from: http://forum.openscad.org/

Many moons ago, I came across a discussion for creating a lithophane on a cylinder via OpenSCAD <https://openhome.cc/eGossip/OpenSCAD/2DtoCylinder.html> . I suspect that this may solve some of the question. There is also a video of the principles involved <https://www.youtube.com/watch?v=PNcGNqMUl5I> . Eric Buijs is narrating the video and has a clear presentation, while the web page link also covers a number of possibly useful aspects. -- Sent from: http://forum.openscad.org/
FV
Frank van der Hulst
Thu, Sep 3, 2020 6:36 PM

Maybe this might be useful?

https://www.thingiverse.com/thing:1668883

You can design your texture using any 2d graphics app, then wrap it round
the surface. In the case of a cube, you would need to apply the texture to
each surface separately.

On Fri, 4 Sep 2020, 4:08 am Jordan Brown, openscad@jordan.maileater.net
wrote:

On 9/2/2020 10:56 PM, Bryan Lee wrote:

Let's say I want to make a cube and cover it in a tiling-stone or "diamond steel" pattern.  Is there a good method for that?
What if I want to put this pattern on the curved surface of a cylinder, or
a cone?

Example: I want to design a textured stone tower that is slightly conical,
with a flat top.

I remember reading a few months back that someone had a way to wrap text
around a cylinder...

First, if you're thinking of painting a texture onto something... can't do
it.  Colors are the only kind of paint.

If you're thinking of modeling in some texture, there might be libraries
but mostly it's just work.

If you just want to place little bits of texture along a surface,
depending on the surface that's not hard.  If you want to bend the texture
around the surface, that's harder.

Here's a simplistic module that covers a cylinder with a given bit of
texture.

// h, d, and r are the dimensions of the cylinder.
// hinterval is the horizontal interval of the pattern.
// vinterval is the vertical interval of the pattern.
// Both intervals are rounded up to yield an integer number of repeats.
module textured_cylinder(h, d, r, hinterval, vinterval) {
// Get d and r based on either d or r.
d = d ? d : r2;
r = r ? r : d/2;
cylinder(h=h, r=r);
circ = d
PI;                // circumference
nh = floor(circ/hinterval); // number around
nv = floor(h/vinterval)+1;  // number up and down
for (vi = [0:nv-1]) {
z = vih/nv;            // Z position of this row
for (hi = [0:nh-1]) {
a = hi
360/nh;      // angle of this instance
rotate(a) translate([r,0,z]) children();
}
}
}

textured_cylinder(h=100,r=20, hinterval=5, vinterval=5) {
sphere(1);
};

Note that the [0,0,0] of the child is at the edge of the cylinder, and +X
is directly "out" of the cylinder.  Thus, for instance, to make a spiky
cylinder:

textured_cylinder(h=100,r=20, hinterval=5, vinterval=5) {
rotate([0,90,0]) cylinder(h=5,r1=3,r2=0);
};

Each child looks like so:

and the result looks like so:

This looks OK, but isn't really quite right, since the cones are based at
the edge of the cylinder, and have flat bottoms, and the cylinder is curved:

To correct, move the cones a bit -X so that their base is inside the
cylinder.

translate([-1,0,0]) rotate([0,90,0]) cylinder(h=5,r1=3,r2=0);

Mapping to cones or more exotic surfaces is left as an exercise for the
reader.  (But for cones is mostly interpolation on the radius, and
adjusting the number of iterations based on the circumference at each Z
level.)

For a cone getting an aesthetically pleasing pattern might be tough,
because the obvious rectangular pattern will have to change frequency as
you walk up the cone.


OpenSCAD mailing list
Discuss@lists.openscad.org
http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org

Maybe this might be useful? https://www.thingiverse.com/thing:1668883 You can design your texture using any 2d graphics app, then wrap it round the surface. In the case of a cube, you would need to apply the texture to each surface separately. On Fri, 4 Sep 2020, 4:08 am Jordan Brown, <openscad@jordan.maileater.net> wrote: > On 9/2/2020 10:56 PM, Bryan Lee wrote: > > Let's say I want to make a cube and cover it in a tiling-stone or "diamond steel" pattern. Is there a good method for that? > What if I want to put this pattern on the curved surface of a cylinder, or > a cone? > > > Example: I want to design a textured stone tower that is slightly conical, > with a flat top. > > > I remember reading a few months back that someone had a way to wrap text > around a cylinder... > > > First, if you're thinking of painting a texture onto something... can't do > it. Colors are the only kind of paint. > > If you're thinking of modeling in some texture, there might be libraries > but mostly it's just work. > > If you just want to place little bits of texture along a surface, > depending on the surface that's not hard. If you want to bend the texture > around the surface, that's harder. > > Here's a simplistic module that covers a cylinder with a given bit of > texture. > > // h, d, and r are the dimensions of the cylinder. > // hinterval is the horizontal interval of the pattern. > // vinterval is the vertical interval of the pattern. > // Both intervals are rounded up to yield an integer number of repeats. > module textured_cylinder(h, d, r, hinterval, vinterval) { > // Get d and r based on either d or r. > d = d ? d : r*2; > r = r ? r : d/2; > cylinder(h=h, r=r); > circ = d*PI; // circumference > nh = floor(circ/hinterval); // number around > nv = floor(h/vinterval)+1; // number up and down > for (vi = [0:nv-1]) { > z = vi*h/nv; // Z position of this row > for (hi = [0:nh-1]) { > a = hi*360/nh; // angle of this instance > rotate(a) translate([r,0,z]) children(); > } > } > } > > textured_cylinder(h=100,r=20, hinterval=5, vinterval=5) { > sphere(1); > }; > > > Note that the [0,0,0] of the child is at the edge of the cylinder, and +X > is directly "out" of the cylinder. Thus, for instance, to make a spiky > cylinder: > > textured_cylinder(h=100,r=20, hinterval=5, vinterval=5) { > rotate([0,90,0]) cylinder(h=5,r1=3,r2=0); > }; > > Each child looks like so: > > > and the result looks like so: > > This looks OK, but isn't really quite right, since the cones are based at > the edge of the cylinder, and have flat bottoms, and the cylinder is curved: > > To correct, move the cones a bit -X so that their base is inside the > cylinder. > > translate([-1,0,0]) rotate([0,90,0]) cylinder(h=5,r1=3,r2=0); > > Mapping to cones or more exotic surfaces is left as an exercise for the > reader. (But for cones is mostly interpolation on the radius, and > adjusting the number of iterations based on the circumference at each Z > level.) > > For a cone getting an aesthetically pleasing pattern might be tough, > because the obvious rectangular pattern will have to change frequency as > you walk up the cone. > _______________________________________________ > OpenSCAD mailing list > Discuss@lists.openscad.org > http://lists.openscad.org/mailman/listinfo/discuss_lists.openscad.org >
C
caterpillar
Fri, Sep 4, 2020 2:48 AM

If you want to wrap a pattern around a surface and implement it by yourself,
you have to know more about your surface.  Depends on your surfaces, some
jobs are not easy.

Basically, wrapping a pattern around a surface involves transforming 2D
points into 3D points.

If you just want to see if someone has implemented it, I created some
functions for doing some of these jobs.
https://github.com/JustinSDK/dotSCAD#point-transformation

I also created some modules for wrapping a photo around some surfaces.
https://github.com/JustinSDK/dotSCAD#surface


https://openhome.cc

Sent from: http://forum.openscad.org/

If you want to wrap a pattern around a surface and implement it by yourself, you have to know more about your surface. Depends on your surfaces, some jobs are not easy. Basically, wrapping a pattern around a surface involves transforming 2D points into 3D points. If you just want to see if someone has implemented it, I created some functions for doing some of these jobs. https://github.com/JustinSDK/dotSCAD#point-transformation I also created some modules for wrapping a photo around some surfaces. https://github.com/JustinSDK/dotSCAD#surface ----- https://openhome.cc -- Sent from: http://forum.openscad.org/