码迷,mamicode.com
首页 > 其他好文 > 详细

OpenSCAD通过循环快速复制几何对象

时间:2015-03-04 10:00:08      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:

    OpenSCAD支持变量和循环,从而可以快速复制出大量的几何对象并且按照递归的方式进行布局。

    循环的变量可以是枚举、区间和矢量对象,循环体支持几何对象构建、坐标平移与旋转、交并差等操作。

    循环的递归变量:

    Vector(矢量):

for (variable=<vector>) {
    <do_something> - <variable> is assigned to each successive value in the vector
}

    Range(区间、范围):

for (variable=<range>) {
    <do_something>
}


Nested loops : for ( variable1 = <range or vector>, variable2 = <range or vector> ) <do something, using both variables>
for loops can be nested, just as in normal programs. A shorthand is that both iterations can be given in the same for statement

Usage example 1 - iteration over a vector:
for (z = [-1, 1]) // two iterations, z = -1, z = 1{
    translate([0, 0, z])
    cube(size = 1, center = false);}

技术分享

OpenSCAD iteration over a vector

Usage example 2a - iteration over a range:
for ( i = [0 : 5] ){
    rotate( i * 360 / 6, [1, 0, 0])
    translate([0, 10, 0])
    sphere(r = 1);}

技术分享

OpenSCAD iteration over a range)

Usage example 2b - iteration over a range specifying an increment:
// Note: The middle parameter in the range designation // (‘0.2‘ in this case) is the ‘increment-by‘ value// Warning: Depending on the ‘increment-by‘ value, the// real end value may be smaller than the given one.for ( i = [0 : 0.2 : 5] ){
    rotate( i * 360 / 6, [1, 0, 0])
    translate([0, 10, 0])
    sphere(r = 1);}
Usage example 3 - iteration over a vector of vectors (rotation):
for(i = [ [  0,  0,   0],
          [ 10, 20, 300],
          [200, 40,  57],
          [ 20, 88,  57] ]){
    rotate(i)
    cube([100, 20, 20], center = true);}

技术分享

OpenSCAD for loop (rotation)

Usage example 4 - iteration over a vector of vectors (translation):
 for(i = [ [ 0,  0,  0],
           [10, 12, 10],
           [20, 24, 20],
           [30, 36, 30],
           [20, 48, 40],
           [10, 60, 50] ]){
    translate(i)
    cube([50, 15, 10], center = true);}

技术分享

OpenSCAD for loop (translation)

Nested loop example

  for (xpos=[0:3], ypos = [2,4,6]) // do twelve iterations, using each xpos with each ypos
   translate([xpos*ypos, ypos, 0]) cube([0.5, 0.5, 0.5]);

Intersection For Loop

Iterate over the values in a vector or range and take an intersection of the contents.

Note: intersection_for() is a work around because of an issue that you cannot get the expected results using a combination of the standard for() and intersection() statements. The reason is that for() do a implicit union() of the contents.

Parameters

  • <loop variable name> 

  • Name of the variable to use within the for loop.

Usage example 1 - loop over a range:
intersection_for(n = [1 : 6]){
    rotate([0, 0, n * 60])
    {
        translate([5,0,0])
        sphere(r=12);
    }}

技术分享

OpenSCAD Intersection for

Usage example 2 - rotation :
 intersection_for(i = [ [  0,  0,   0],
 			[ 10, 20, 300],
 			[200, 40,  57],
 			[ 20, 88,  57] ]){
    rotate(i)
    cube([100, 20, 20], center = true);}

技术分享

OpenSCAD Intersection for (rotation)


OpenSCAD通过循环快速复制几何对象

标签:

原文地址:http://my.oschina.net/u/2306127/blog/382335

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!