my_model(x[3], a[1]) { -- 3D reconstruction from three cross-sections -- with holes and disjoint components -- Cross-section for z = 10 - union of three disjoint disks disk1 = 9-(x[1]-7)^2-x[2]^2; disk2 = 9-(x[1]+7)^2-x[2]^2; disk3 = 9-x[1]^2-x[2]^2; sect1 = disk1 | disk2 | disk3; -- Cross-section for z=0 - disk with hole -- Note the hole of the same radius and xy-position as disk3 disk4 = 25-(x[1])^2-(x[2])^2; hole = 9-(x[1])^2-(x[2])^2; sect3 = disk4 \ hole; -- Cross-section for z=-10 - disk with two holes disk6 = 64-(x[1])^2-(x[2])^2; hole1 = 9-(x[1]+4)^2-x[2]^2; hole2 = 9-(x[1]-4)^2-x[2]^2; sect2 = (disk6 \ hole1) \ hole2; if (x[3] > 0) then t=x[3]/10; model = sect1*t+sect3*(1-t); else t=-x[3]/10; model = sect3*(1-t)+sect2*t; endif; my_model = model; -- Note that the object goes out of the bounding box in z direction -- and the polygonized surface will be not closed }