2013-06-20 6 views
2

Я случайно оставил квадратные скобки в векторе перевода. Вместо того, чтобы вызывать ошибку, OpenSCAD молча игнорировал ошибку.Что делает translate() с несколькими параметрами?

Есть ли какое-то особое значение для перевода() с несколькими параметрами? Что должна делать вторая линия? Я прикрепил изображение, показывающее результаты, которые я получаю.

translate([5,5,-25]) color("red") cube([10,10,50]); 
translate(5,5,-25) color("blue") cube([10,10,50]); 

enter image description here

ответ

5

переводить "движения" один объект из одной декартовой точки в другую.

Функция перевода всегда ожидает массив с его первым параметром (с именем v, массив с нашими координатами x, y и z). Любой вызов функции в openscad может быть записан без имени параметра UNLESS, если вы используете другую позицию аргумента. Таким образом, используя функцию перевода, как, например:

translate(0) 
// ignored, first parameter is not an array. 
cube([5,5,5]); 

translate(v=5) 
// ignored, v is not an array. 
cube([5,5,5]); 

translate([10,10,10]) 
// normal call. 
cube([5,5,5]); 

translate(v=[10,10,10]) 
// named parameter call. 
cube([5,5,5]); 

translate(1,2,3,4,5,6,7,8,9,0,infinite,v=[15,15,15]) 
// it works! we named the parameter, so 
// openscad doesn't care about it's position! 
cube([5,5,5]);   

translate(1,2,3,4,5,6,7,8,9,0,[20,20,20]) 
// ignored, the first parameter is not an array 
// AND v is not defined in this call! 
cube([5,5,5]);   

// At this point there are 3 cubes at the same position 
// and 3 translated cubes! 

test(); 
test(1); 
test(1,2); 
test(1,2,3); 
test(1,2,3,4); 


// 01) There is no function overwrite in openscad (it doesn't care about the number of parameters to 
// 02) The function names are resolved at compile time (only the last one will be recognized). 
module test(p1,p2,p3) echo("test3"); 
module test(p1,p2)  echo("test2"); 
module test(p1)   echo("test1"); 

OpenScad использует этот синтаксис везде, не только в вызове функции перевода.

Теперь ваши две линии:

translate([5,5,-25])  // executed, cube moved to x=5,y=5,z=-25 
    color("red")   // executed 
     cube([10,10,50]); // executed, default creation pos x=0,y=0,z=0 

translate(5,5,-25)  // ignored, cube not moved. 
    color("blue")   // executed 
     cube([10,10,50]); // executed, default creation pos x=0,y=0,z=0 
+0

Вот что я подумал, как хорошо, но если вы на самом деле попробовать, 'перевести (0,0, -25)' кажется пустой операцией. Изменение его на 'translate ([0,0, -25])' перемещает объект -25 по оси z, как ожидалось. Я обновил вопрос, чтобы показать результаты, которые я получаю. –

+0

Мне кажется ошибка в openscad. Либо «translate (0,0, -25)» должен делать то же самое, что и «translate ([0,0, -25])», или это должно приводить к появлению дополнительных параметров. Как практическая вещь, теперь я стараюсь искать недостающие '[]', когда вижу кусок, который не двигался так, как ожидалось. –

+2

Нет, это не ошибка. Взгляните на openscad [Translate documentation] (http://en.wikibooks.org/wiki/OpenSCAD_User_Manual/The_OpenSCAD_Language#translate) - это не явный, но для перевода требуется массив. Когда вы используете translate (0,0, -25), вы фактически передаете 3 параметра, а none - массив. Взгляните на комментарии в моем примере - я перечислил несколько случаев. Я согласен с вами в том, что документация нечеткая о поведении в случае ошибок/исключений, там нигде не указано, какие ошибки будут проигнорированы или нет. – agodinhost

 Смежные вопросы

  • Нет связанных вопросов^_^