DrawBox = FUNCTION():base1:base2:b:r:smbx:lrbx:r2:offs:sph:sub:res:cyl:vent:alfa: r2 = sqrt(2): r = 4.5 / r2: offs = 1.5: resolution=20: sph = SPHERE(VECTOR(0,-0.9 ,5.5),3) / BOX(VECTOR(-r + 1, -r , 7.8), 2 * r - 2, 2 * r , 2): cyl = CYLIN (VECTOR(0,- 3.5 , 5.5), VECTOR(0, -0.6, 0), 1): sub = cyl / sph: sph = sub + sph: resolution=4: base1 = CON2(vector( 0, 0, 0 ), vector( 0, 0, 6 ), 3, 5 ) * rotz(45): b = BOX(VECTOR (-r + 1, -r + 1 , 7.8), 2 * r - 2, 2 * r - 2, 2): alfa = sqrt(2) / 6: FOR(a = 0.1, 0.2, 5.9, vent = BOX(VECTOR(-5/r2, 5 / r2 - 0.05, 6), 10/r2, 0.5, 0.05) * trans(VECTOR(0, -a * alfa, -a)): base1 = base1 / vent ): FOR(a = 0.1, 0.2, 5.9, vent = BOX(VECTOR(-5/r2, -5 / r2 - 0.45, 6), 2.5, 0.5, 0.05) * trans(VECTOR(0, a * alfa, -a)): base1 = base1 / vent ): FOR(a = 0.1, 0.2, 5.9, vent = BOX(VECTOR(5/r2-2.5, -5 /r2 - 0.45, 6), 2.5, 0.5, 0.05) * trans(VECTOR(0, a * alfa, -a)): base1 = base1 / vent ): base2 = CON2(vector( 0, 0, 6 ), vector( 0, 0, 2 ), 5, 4.5 ) * rotz(45): base2 = base2 - b: lrbx = BOX(VECTOR(-5 / r2 + offs, -5 / r2, 6), 10 / r2 - 2 * offs, 0.75, -5) * rotx(5) * trans(vector(0, 0.6 ,0)) + BOX(VECTOR(-0.5,-2.8, 0), 1, 0.25, 1): smbx = BOX(VECTOR(-5 / r2 + offs, -5 / r2 + 0.1, 6), 10 / r2 - 2 * offs, 0.3, 2): return = LIST(base1,base2,lrbx, smbx, sph); DrawScreen = FUNCTION():r:c1:c2:l1:l2:s: resolution = 10: r = 4.5 / sqrt(2): c1 = CBEZIER(LIST(CTLPT(E3, -r + 1, r -1 , 7.8), CTLPT(E3, 0, r - 1.25, 8), CTLPT(E3, r -1 , r - 1, 7.8))): c2 = CBEZIER(LIST(CTLPT(E3, -r + 1, -r + 1, 7.8), CTLPT(E3, 0, -r + 1.25, 8), CTLPT(E3, r-1, - r + 1, 7.8))): l1 = CBEZIER(LIST(CTLPT(E3,-r + 1, r -1 , 7.8), CTLPT(E3, r -1 , r - 1, 7.8))): l2 = CBEZIER(LIST(CTLPT(E3, -r + 1, -r + 1, 7.8), CTLPT(E3, r-1, - r + 1, 7.8))): s = GPOLYGON(RULEDSRF(c1, c2), off) + GPOLYGON(RULEDSRF(c1, l1), off) + GPOLYGON(RULEDSRF(c2, l2), off): COLOR(s, GREEN): return = CONVEX(s); DrawFace = FUNCTION():c1:c2:c3:c4:s:s1:s2:r:l1:l2:res:lst:l3:l4:bxx:sub:s6:s7:s8:s9: r = 4.5/sqrt(2): resolution = 10: c1 = CBEZIER(LIST(CTLPT(E3, -r, r, 8), CTLPT(E3, 0, r-0.25, 8.5), CTLPT(E3, r, r, 8))): c2 = CBEZIER(LIST(CTLPT(E3, -r, -r, 8), CTLPT(E3, 0, -r+0.25, 8.5), CTLPT(E3, r, -r, 8))): l1 = CBEZIER(LIST(CTLPT(E3, -r, r, 8), CTLPT(E3, r, r, 8))): l2 = CBEZIER(LIST(CTLPT(E3, -r, -r, 8), CTLPT(E3, r, -r, 8))): s = GPOLYGON(RULEDSRF(c1, c2), off): s1 = GPOLYGON(RULEDSRF(c1, l1), off): s2 = GPOLYGON(RULEDSRF(c2, l2), off): s6 = GPOLYGON(RULEDSRF(l1, l2), off): c3 = CBEZIER(LIST(CTLPT(E3, -r + 1, r -1 , 7.8), CTLPT(E3, 0, r - 1.25, 8), CTLPT(E3, r -1 , r - 1, 7.8))): c4 = CBEZIER(LIST(CTLPT(E3, -r + 1, -r + 1, 7.8), CTLPT(E3, 0, -r + 1.25, 8), CTLPT(E3, r-1, - r + 1, 7.8))): l3 = CBEZIER(LIST(CTLPT(E3,-r + 1, r -1 , 7.8), CTLPT(E3, r -1 , r - 1, 7.8))): l4 = CBEZIER(LIST(CTLPT(E3, -r + 1, -r + 1, 7.8), CTLPT(E3, r-1, - r + 1, 7.8))): s6 = GPOLYGON(RULEDSRF(l1, l3), off): s7 = GPOLYGON(RULEDSRF(l2, l4), off): s8 = GPOLYGON(RULEDSRF(l1, l3), off) * rotz(90): s9 = GPOLYGON(RULEDSRF(l2, l4), off) * rotz(90): res = s + s1 + s2 + s6 + s7 + s8 + s9: bxx = BOX (VECTOR (-r + 1, -r + 1 , 7.8), 2 * r - 2, 2 * r - 2, 2): sub = res + bxx: res = sub: return = CONVEX(res); DrawBase = FUNCTION():spl:surf:cur:l1:l2:cap:cap1:cap2:res: cur = CBEZIER( LIST(CTLPT(E3,0,0,0), CTLPT(E3,0,0,4))): spl = CBSPLINE(4, LIST(CTLPT(E3, 0,0,0), CTLPT(E3, 0, 0.1, 0), CTLPT(E3, 0, 0.2, 0), CTLPT(E3, 0, 0.3, 0), CTLPT(E3, 0, 0.4, 0), CTLPT(E3, 0, 0.5, 0), CTLPT(E3, 4, 1.5, 0), CTLPT(E3, 6, 1.25, 0), CTLPT(E3, 6, 1.0, 0), CTLPT(E3, 6, 0.75, 0), CTLPT(E3, 6, 0.5, 0), CTLPT(E3, 6, 0.25,0), CTLPT(E3, 6, 0, 0)), LIST (KV_PERIODIC)): l1 = CBEZIER(LIST( CTLPT(E3,0,0,0),CTLPT(E3,6,0,0))): l2 = CBEZIER(LIST( CTLPT(E3,0,1.5,0),CTLPT(E3,6,1.5,0))): cap = ruledsrf(l1, l2): surf = GPOLYGON(SWEEPSRF(spl, cur, off), off) * scale(vector(1, 0.6, 1)): cap1 = surf / cap: cap2 = (surf / cap) * trans(vector(0,0,4)): surf2 = GPOLYGON(SWEEPSRF(spl, cur, off), off) * scale(vector(1, 0.6, 1)): return = LIST(surf2,cap1,cap2); DrawWire = FUNCTION():cir:tail:wire: resolution = 20: cir = CIRCLE(VECTOR(0, 0, 0), 0.05): tail = CBEZIER(LIST(CTLPT(E3, 0, -2.675, 0), CTLPT(E3, 0.5, -2.675, -0.5), CTLPT(E3, 0, -3.5, -1), CTLPT(E3, -0.5, -3.0, -2), CTLPT(E3, 0, -3.0, -4))): wire = GPOLYGON(SWEEPSRF(cir, tail, off), off): return = wire; # Main starts here view (axes, TRUE); IRITSTATE("Coplanar", 1); bas = DrawBase() * roty(90) * trans(VECTOR(-2, -4.5 , 8)); bxx = DrawBox(); wir = LIST(DrawWire()); fac = list(DrawFace()); scr = list(DrawScreen()); ATTRIB(scr, "rgb", "25,25,25"); ATTRIB(bas, "rgb", "200,200,200"); ATTRIB(bxx, "rgb", "200,200,200"); ATTRIB(wir, "rgb", "255,255,255"); ATTRIB(fac, "rgb", "200,200,200"); model = LIST(bas,fac, scr, bxx, wir); view (model, FALSE); save ("x", model);