OpenSCAD, как получить доступ к значению в матрице

Как проиндексировать матрицу в 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]);
    }
}

person dna8675    schedule 15.05.2015    source источник


Ответы (1)


Во-первых, стандартные переменные устанавливаются в OpenSCAD во время компиляции, а не во время выполнения (официальная документация утверждает это), поэтому вы не можете присваивать им значения в цикле. Вам нужно будет встроить ссылки на coordinates, чтобы использовать содержащиеся в нем значения.

Вторая проблема заключается в том, что вы не можете создать куб с отрицательным размером, или я предполагаю, что я не получаю выходных данных со второй по четвертую итерации цикла, как предусмотрено. Вы можете обернуть значения, переданные в куб, в вызовы 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])]);
    }
}
person 1337joe    schedule 16.05.2015