1

OpenSCAD で行列にインデックスを付ける、またはループで反復処理するにはどうすればよいですか? 以下のように、forloop を介して座標に割り当てられた値にアクセスして単一の変数に割り当てるか、少なくともマトリックス内の値に個別にアクセスできるようにしようとしています。

for ( coordinates = [ [  15,  15,  2],
                      [  15, -15,  2],
                      [ -15, -15,  2],
                      [ -15,  15,  2] ]) 
{
    x = coordinates[0];
    y = coordinates[1];
    z = coordinates[2];
    translate([x+4, y, z]){ 
        cube([x,y,z]);
    }
}
4

1 に答える 1

1

まず、標準変数は、OpenSCAD では実行時ではなくコンパイル時に設定されるため (公式ドキュメントにそれが記載されています)、ループ内でそれらに値を割り当てることはできません。coordinatesその中の値を使用するには、への参照をインライン化する必要があります。

2 番目の問題は、負のサイズの立方体を作成できないことです。つまり、提供されたループの 2 回目から 4 回目の反復から出力が得られないという事実から推測しています。キューブに渡された値をabs()呼び出しでラップして絶対値を取得し、それが正であることを確認できます。

coordinates変数をインライン化し、abs()正の値を に渡すために使用する実際のサンプルを次に示しcube()ます。

for ( coordinates = [ [  15,  15,  2],
                      [  15, -15,  2],
                      [ -15, -15,  2],
                      [ -15,  15,  2] ])
{
    translate([coordinates[0] + 4, coordinates[1], coordinates[2]]) { 
        cube([abs(coordinates[0]), abs(coordinates[1]), abs(coordinates[2])]);
    }
}
于 2015-05-16T05:36:34.947 に答える