def evaltritangency(srfs, pts): retval = irit.nil() if (irit.ThisObject(srfs) == irit.SURFACE_TYPE): srf1 = srfs srf2 = srfs srf3 = srfs else: srf1 = irit.nth(srfs, 1) srf2 = irit.nth(srfs, 2) srf3 = irit.nth(srfs, 3) i = 1 while (i <= irit.SizeOf(pts)): pt = irit.nth(pts, i) irit.snoc( irit.seval(srf1, irit.FetchRealObject(irit.coord(pt, 1)), irit.FetchRealObject(irit.coord(pt, 2))) + irit.seval(srf2, irit.FetchRealObject(irit.coord(pt, 3)), irit.FetchRealObject(irit.coord(pt, 4))), retval) irit.snoc( irit.seval(srf1, irit.FetchRealObject(irit.coord(pt, 1)), irit.FetchRealObject(irit.coord(pt, 2))) + irit.seval(srf3, irit.FetchRealObject(irit.coord(pt, 5)), irit.FetchRealObject(irit.coord(pt, 6))), retval) irit.snoc( irit.seval(srf2, irit.FetchRealObject(irit.coord(pt, 3)), irit.FetchRealObject(irit.coord(pt, 4))) + irit.seval(srf3, irit.FetchRealObject(irit.coord(pt, 5)), irit.FetchRealObject(irit.coord(pt, 6))), retval) i = i + 1 return retval
def evalonebitangency(srfs, pts): ruling = irit.nil() tmp1pts = irit.nil() tmp2pts = irit.nil() if (irit.ThisObject(srfs) == irit.SURFACE_TYPE): srf1 = srfs srf2 = srfs else: srf1 = irit.nth(srfs, 1) srf2 = irit.nth(srfs, 2) i = 1 while (i <= irit.SizeOf(pts)): pt = irit.nth(pts, i) pt1 = irit.seval(srf1, irit.FetchRealObject(irit.coord(pt, 1)), irit.FetchRealObject(irit.coord(pt, 2))) pt2 = irit.seval(srf2, irit.FetchRealObject(irit.coord(pt, 3)), irit.FetchRealObject(irit.coord(pt, 4))) irit.snoc(pt1 + pt2, ruling) irit.snoc(pt1 * irit.tx(0), tmp1pts) irit.snoc(pt2 * irit.tx(0), tmp2pts) i = i + 1 irit.attrib(ruling, "rgb", irit.GenStrObject("255, 128, 128")) if (irit.SizeOf(tmp1pts) > 1 and irit.SizeOf(tmp2pts) > 1): tmp1pts = irit.poly(tmp1pts, irit.TRUE) tmp2pts = irit.poly(tmp2pts, irit.TRUE) irit.attrib(tmp1pts, "rgb", irit.GenStrObject("128, 255, 128")) irit.attrib(tmp2pts, "rgb", irit.GenStrObject("128, 255, 128")) retval = irit.list(ruling, tmp1pts, tmp2pts) else: retval = irit.nil() return retval
def dominos(path, scl, piecetimestep): retval = irit.nil() animtime = 0 dominopiece = irit.box( (-0.01, -0.006, 0), 0.02, 0.006, 0.05) * irit.sc(scl) rot_x = irit.cbezier( irit.list( irit.ctlpt( irit.E1, 0 ), \ irit.ctlpt( irit.E1, 80 ) ) ) crvdomain = irit.pdomain(path) t = irit.FetchRealObject(irit.nth(crvdomain, 1)) dpath = irit.cderive(path) while (t < irit.FetchRealObject(irit.nth(crvdomain, 2))): d = irit.Fetch3TupleObject( irit.coerce(irit.ceval(dpath, t), irit.POINT_TYPE)) dlen = math.sqrt(DotProd(d, d)) rot_x = irit.creparam(rot_x, animtime, animtime + piecetimestep) irit.attrib(dominopiece, "animation", irit.list(rot_x)) irit.setname(irit.getattr(dominopiece, "animation"), 0, "rot_x") dp = dominopiece * irit.rz( -math.atan2(d[0], d[1]) * 180 / math.pi) * irit.trans( irit.Fetch3TupleObject( irit.coerce(irit.ceval(path, t), irit.VECTOR_TYPE))) irit.snoc(dp, retval) t = t + 0.04 * scl / dlen animtime = animtime + piecetimestep * 0.6 return retval
def srfframecrvs(srf, width): umin = irit.nth(irit.pdomain(srf), 1) umax = irit.nth(irit.pdomain(srf), 2) vmin = irit.nth(irit.pdomain(srf), 3) vmax = irit.nth(irit.pdomain(srf), 4) retval = irit.list( irit.swpcircsrf( irit.csurface(srf, irit.COL, irit.FetchRealObject(umin)), width, 0), irit.swpcircsrf( irit.csurface(srf, irit.COL, irit.FetchRealObject((umin + umax) / 2.0)), width, 0), irit.swpcircsrf( irit.csurface(srf, irit.COL, irit.FetchRealObject(umax)), width, 0), irit.swpcircsrf( irit.csurface(srf, irit.ROW, irit.FetchRealObject(vmin)), width, 0), irit.swpcircsrf( irit.csurface(srf, irit.ROW, irit.FetchRealObject((vmin + vmax) / 2.0)), width, 0), irit.swpcircsrf( irit.csurface(srf, irit.ROW, irit.FetchRealObject(vmax)), width, 0)) return retval
def antanim(scl): save_res = irit.GetResolution() bodyall = antbody() body = irit.nth(bodyall, 1) eyes = irit.nth(bodyall, 2) llegs = irit.list( antlleganim(1) * irit.sc(1.1) * irit.sx(1.3) * irit.ry( (-45)) * irit.trans((0.1, 0, 1.02)), antlleganim((-1)) * irit.sc(1.3) * irit.ry(10) * irit.trans( (0.1, 0.05, 1)), antlleganim(1) * irit.sc(1.2) * irit.sx(1.4) * irit.ry(40) * irit.trans((0.1, 0.02, 0.95))) rlegs = irit.list( antrleganim( (-1)) * irit.sc(1.1) * irit.sx(1.3) * irit.ry(45) * irit.trans( ((-0.1), 0, 1.02)), antrleganim(1) * irit.sc(1.3) * irit.ry((-10)) * irit.trans( ((-0.1), 0.05, 1)), antrleganim((-1)) * irit.sc(1.2) * irit.sx(1.4) * irit.ry( (-40)) * irit.trans(((-0.1), 0.02, 0.95))) irit.SetResolution(20) antennas = irit.list( antantenna() * irit.ry((-110)) * irit.trans(((-0.02), 0.2, 1.6)), antantenna() * irit.ry((-70)) * irit.trans((0.02, 0.2, 1.6))) irit.attrprop(antennas, "u_resolution", irit.GenRealObject(0.2)) body = (body + irit.gpolygon(antennas, 1)) irit.attrib(body, "rgb", irit.GenStrObject("255,50,50")) irit.SetResolution(save_res) retval = irit.list( body, llegs, rlegs, eyes) * irit.sz(1.3) * irit.sc(1) * irit.ty(0.28785) * irit.rx(90) mov_y = irit.creparam( irit.ctlpt( irit.E1, 0 ) + \ irit.ctlpt( irit.E1, (-1 ) ), 0, 1.2 ) irit.attrib(retval, "animation", mov_y) return retval
def positioncurvature(srf, u, v): eps = 1e-012 c = irit.circle((0, 0, 0), 1) k = irit.scrvtreval(srf, u, v, 1) r1 = irit.max( irit.min(1.0 / (irit.FetchRealObject(irit.nth(k, 1)) + eps), 1000), (-1000)) r2 = irit.max( irit.min(1.0 / (irit.FetchRealObject(irit.nth(k, 3)) + eps), 1000), (-1000)) v1 = irit.nth(k, 2) v2 = irit.nth(k, 4) p = irit.seval(srf, u, v) n = irit.snormal(srf, u, v) d1 = v1 ^ n d2 = v2 ^ n c1 = c * \ irit.sc( r1 ) * \ irit.rotz2v( irit.Fetch3TupleObject(d1) ) * \ irit.trans( irit.Fetch3TupleObject(irit.coerce( p, irit.VECTOR_TYPE ) + n * r1 )) c2 = c * \ irit.sc( r2 ) * \ irit.rotz2v( irit.Fetch3TupleObject(d2) ) * \ irit.trans( irit.Fetch3TupleObject(irit.coerce( p, irit.VECTOR_TYPE ) + n * r2) ) retval = irit.list( p, c1, c2, p + irit.coerce(irit.coerce(p, irit.POINT_TYPE) + v1, irit.E3), p + irit.coerce(irit.coerce(p, irit.POINT_TYPE) + v2, irit.E3), positionasymptotes(srf, u, v)) irit.adwidth(retval, 2) irit.color(retval, irit.YELLOW) return retval
def ant(scl): save_res = irit.GetResolution() bodyall = antbody() body = irit.nth(bodyall, 1) eyes = irit.nth(bodyall, 2) leg = antleg() llegs = irit.list( leg * irit.sc(1.1) * irit.sx(1.3) * irit.ry((-45)) * irit.trans( (0.1, 0, 1.02)), leg * irit.sc(1.3) * irit.ry(10) * irit.trans((0.1, 0.05, 1)), leg * irit.sc(1.2) * irit.sx(1.4) * irit.ry(40) * irit.trans( (0.1, 0.02, 0.95))) irit.SetResolution(20) irit.attrprop(llegs, "u_resolution", irit.GenRealObject(0.2)) antennas = irit.list( antantenna() * irit.ry((-110)) * irit.trans(((-0.02), 0.2, 1.6)), antantenna() * irit.ry((-70)) * irit.trans((0.02, 0.2, 1.6))) irit.attrprop(antennas, "u_resolution", irit.GenRealObject(0.2)) body = (body + irit.gpolygon(llegs, 1) + irit.gpolygon(llegs, 1) * irit.sx( (-1)) + irit.gpolygon(antennas, 1)) irit.attrib(body, "rgb", irit.GenStrObject("255,50,50")) irit.SetResolution(save_res) retval = irit.list( body, eyes) * irit.sz(1.3) * irit.sc(1) * irit.ty(0.28785) * irit.rx(90) return retval
def printspeedchanges( str, crv ): dc = irit.cderive( crv ) speedsqr = irit.bbox( irit.symbdprod( dc, dc ) ) irit.printf( "%s [%f %f]\n", irit.list( str, asqrt( irit.FetchRealObject(irit.nth( speedsqr, 1 )) ), asqrt( irit.FetchRealObject(irit.nth( speedsqr, 2 )) ) ) )
def makebboxunit(obj): b = irit.bbox(obj) xmin = irit.FetchRealObjecy(irit.nth(b, 1)) xmax = irit.nth(b, 2) ymin = irit.nth(b, 3) ymax = irit.nth(b, 4) retval = obj * irit.tx((-xmin)) * irit.ty( (-ymin)) * irit.sx(1.0 / (xmax - xmin)) * irit.sy(1.0 / (ymax - ymin)) return retval
def cnvrtcrvs2domains( crvs, theta ): retval = irit.nil( ) i = 1 while ( i <= irit.SizeOf( crvs ) ): dm = irit.pdomain( irit.nth( crvs, i ) ) irit.snoc( irit.ctlpt( irit.E2, theta, irit.nth( dm, 1 ) ) + \ irit.ctlpt( irit.E2, theta, irit.nth( dm, 2 ) ), retval ) i = i + 1 return retval
def makepolylines(listofctlpts): retval = irit.nil() i = 1 while (i <= irit.SizeOf(listofctlpts)): pl = irit.nth(listofctlpts, i) if (irit.SizeOf(pl) > 1): irit.snoc(irit.poly(irit.nth(listofctlpts, i), 1), retval) i = i + 1 return retval
def printsurface( srf ): orders = irit.fforder( srf ) msize = irit.ffmsize( srf ) irit.printf( "surface of orders %d x %d, mesh size %d x %d and point type %s\n", orders + msize + irit.list( getpointtype( irit.coord( srf, 0 ) ) ) ) irit.printf( "control mesh:\n", irit.nil( ) ) printctlmesh( srf ) if ( 1 ): kvs = irit.ffkntvec( srf ) printknotvector( "u ", irit.nth( kvs, 1 ) ) printknotvector( "v ", irit.nth( kvs, 2 ) )
def evaltv(tv, ulen, vlen, wlen): retval = irit.nil() dom = irit.pdomain(tv) i = 0 while (i <= ulen - 1): u = irit.FetchRealObject(irit.nth(dom, 1)) + i * irit.FetchRealObject( irit.nth(dom, 2) - irit.nth(dom, 1)) / float(ulen - 1) lst2 = irit.nil() j = 0 while (j <= vlen - 1): v = irit.FetchRealObject(irit.nth( dom, 3)) + j * irit.FetchRealObject( irit.nth(dom, 4) - irit.nth(dom, 3)) / float(vlen - 1) lst3 = irit.nil() k = 0 while (k <= wlen - 1): w = irit.FetchRealObject(irit.nth( dom, 5)) + k * irit.FetchRealObject( irit.nth(dom, 6) - irit.nth(dom, 5)) / float(wlen - 1) irit.snoc(irit.teval(tv, u, v, w), lst3) k = k + 1 irit.snoc(lst3 * irit.tx(0), lst2) j = j + 1 irit.snoc(lst2 * irit.tx(0), retval) i = i + 1 retval = irit.tbezier(retval) return retval
def printtrivar( tv ): orders = irit.fforder( tv ) msize = irit.ffmsize( tv ) irit.printf( "trivar of orders %d x %d x %d mesh size %d x %d x %d and point type %s\n", orders + msize + irit.list( getpointtype( irit.coord( tv, 0 ) ) ) ) irit.printf( "control mesh:\n", irit.nil( ) ) printctlmesh( tv ) if ( 1 ): kvs = irit.ffkntvec( tv ) printknotvector( "u ", irit.nth( kvs, 1 ) ) printknotvector( "v ", irit.nth( kvs, 2 ) ) printknotvector( "w ", irit.nth( kvs, 3 ) )
def testinter(s1, s2): retval = irit.ssintr2(s1, s2, step, subdivtol, numerictol, euclidean) if (irit.SizeOf(retval) == 2): n = (irit.SizeOf(irit.nth(retval, 1)) + irit.SizeOf(irit.nth(retval, 2))) / 2.0 else: if (irit.SizeOf(retval) == 1): n = irit.SizeOf(irit.nth(retval, 1)) / 2.0 else: n = 0 irit.printf("found %d intersection connected components.\n", irit.list(n)) return retval
def originalf(f, newf, deg, c, ptype): net = irit.nil() f_p = irit.coerce(f, irit.POWER_TYPE) tmp = irit.ffsplit(f_p) tmp3 = irit.ffsplit(newf) i = 1 while (i <= c): t = irit.coord(irit.coord(irit.nth(tmp, i), deg), 1) tmp2 = irit.nth(tmp3, i) * irit.sc(irit.FetchRealObject(t)) irit.snoc(irit.coerce(tmp2, irit.E1), net) i = i + 1 retval = irit.ffmerge(net, ptype) return retval
def polesfree(srf, dpth, tmin, tmax): if (irit.ffpoles(srf) == 0): retval = irit.list(srf) else: if (dpth <= 0): retval = irit.nil() else: t = (tmin + tmax) / 2 srfs = irit.sdivide(srf, irit.ROW, t) retval = irit.polesfree(irit.nth(srfs, 1), dpth - 1, tmin, t) + irit.polesfree( irit.nth(srfs, 2), dpth - 1, t, tmax) return retval
def computeoptimalmotion(theta1, theta2, phi1, phi2, eps): err = estimatesphericalcrv(theta1, theta2, phi1, phi2) irit.printf(" %12g %12g %12g %12g = %f\n", irit.list(theta1, theta2, phi1, phi2, err)) if (err > eps): newpt = midgreatcircpt(theta1, theta2, phi1, phi2) theta = irit.FetchRealObject(irit.nth(newpt, 1)) phi = irit.FetchRealObject(irit.nth(newpt, 2)) retval = computeoptimalmotion(theta, theta2, phi, phi2, eps) + computeoptimalmotion( theta1, theta, phi1, phi, eps) else: retval = irit.list(computesphericalcrv(theta1, theta2, phi1, phi2)) return retval
def lj8samplecurve(crv, n): ptl = irit.nil() t0 = irit.nth(irit.pdomain(crv), 1) t1 = irit.nth(irit.pdomain(crv), 2) if (n < 2): n = 2 dt = (t1 - t0) / (n + 0.0001 - 1) t = t0 while (t <= t1): pt = irit.ceval(crv, irit.FetchRealObject(t)) irit.snoc(pt, ptl) t = t + dt retval = ptl return retval
def printctlmeshaux( mesh, ofst, dims ): if ( irit.SizeOf( dims ) == 1 ): i = 1 while ( i <= irit.FetchRealObject(irit.nth( dims, 1 )) ): printctlpoint( irit.nth( mesh, i + ofst ) ) i = i + 1 irit.printf( "\n", irit.nil( ) ) else: dimsl = getlistwithoutlast( dims ) d1 = getlistlast( dims ) d2 = getlistproduct( dimsl ) i = 1 while ( i <= irit.FetchRealObject(d1) ): printctlmeshaux( mesh, ofst + d2 * ( i - 1 ), dimsl ) i = i + 1
def raytraptris3d(srfs, subeps, numeps): pts = irit.raytraps(srfs, 1, subeps, numeps, 1) retval = irit.nil() if (irit.SizeOf(pts) > 1): irit.printf("%d solution(s) found\n", irit.list(irit.SizeOf(pts))) i = 1 while (i <= irit.SizeOf(pts)): pt = irit.coord(pts, i) err = irit.getattr(pt, "rngerror") if (irit.ThisObject(err) == irit.NUMERIC_TYPE): irit.printf("error = %16.14f\n", irit.list(err)) else: irit.printf("error is not provided\n", irit.nil()) points = irit.nil() j = 1 while (j <= irit.SizeOf(srfs)): irit.snoc( irit.seval( irit.nth(srfs, j), irit.FetchRealObject(irit.coord(pt, 1 + (j - 1) * 2)), irit.FetchRealObject(irit.coord(pt, 2 + (j - 1) * 2))), points) j = j + 1 irit.snoc(irit.poly(points, 0), retval) i = i + 1 return retval
def interptseval(crvs): retval = irit.nil() i = 1 while (i <= irit.SizeOf(crvs)): crv = irit.nth(crvs, i) interpts = irit.getattr(crv, "interpts") j = 1 while (j <= irit.SizeOf(interpts)): irit.snoc( irit.ceval(crv, irit.FetchRealObject(irit.nth(interpts, j))), retval) j = j + 1 i = i + 1 irit.printf("numer of intersections detected = %d\n", irit.list(irit.SizeOf(retval))) return retval
def printknotvector( str, kv ): irit.printf( " [%sknotvector:", irit.list( str ) ) i = 1 while ( i <= irit.SizeOf( kv ) ): irit.printf( " %-.6lg", irit.list( irit.nth( kv, i ) ) ) i = i + 1 irit.printf( "]\n", irit.nil( ) )
def getlistproduct( lst ): retval = 1 i = 1 while ( i <= irit.SizeOf( lst ) ): retval = retval * irit.FetchRealObject(irit.nth( lst, i )) i = i + 1 return retval
def getlistwithoutlast( lst ): retval = irit.nil( ) i = 1 while ( i <= irit.SizeOf( lst ) - 1 ): irit.snoc( irit.nth( lst, i ), retval ) i = i + 1 return retval
def evalantipodalptsonsrf( srf ): aps = irit.antipodal( srf, 0.001, (-1e-012 ) ) irit.printf( "%d antipodal points detected\n", irit.list( irit.SizeOf( aps ) ) ) retval = irit.nil( ) diam = 0 i = 1 while ( i <= irit.SizeOf( aps ) ): ap = irit.nth( aps, i ) u1 = irit.coord( ap, 1 ) v1 = irit.coord( ap, 2 ) u2 = irit.coord( ap, 3 ) v2 = irit.coord( ap, 4 ) pt1 = irit.seval( srf, irit.FetchRealObject(u1), irit.FetchRealObject(v1) ) pt2 = irit.seval( srf, irit.FetchRealObject(u2), irit.FetchRealObject(v2) ) if ( irit.dstptpt( irit.coerce( pt1, irit.POINT_TYPE ), irit.coerce( pt2, irit.POINT_TYPE ) ) > diam ): diam = irit.dstptpt( irit.coerce( pt1, irit.POINT_TYPE ), irit.coerce( pt2, irit.POINT_TYPE ) ) diamline = pt1 + pt2 irit.snoc( irit.list( pt1 + pt2, pt1 * irit.tx( 0 ), pt2 * irit.tx( 0 ) ), retval ) i = i + 1 irit.color( retval, irit.YELLOW ) irit.color( diamline, irit.CYAN ) irit.adwidth( diamline, 3 ) irit.snoc( irit.list( diamline ), retval ) return retval
def animbisectcrv2( crv1, crv2, data, cntr ): irit.color( crv1, irit.YELLOW ) irit.color( crv2, irit.YELLOW ) irit.adwidth( crv1, 4 ) irit.adwidth( crv2, 4 ) i = 0 while ( i <= irit.SizeOf( cntr ) - 1 ): pt = irit.coord( cntr, i ) pt1 = irit.ceval( crv1, irit.FetchRealObject(irit.coord( pt, 0 ) )) pt2 = irit.ceval( crv2, irit.FetchRealObject(irit.coord( pt, 1 ) )) nrml1 = cnormalplnr( crv1, irit.coord( pt, 0 ) ) nrml2 = cnormalplnr( crv2, irit.coord( pt, 1 ) ) aaa = irit.ptslnln( irit.Fetch3TupleObject(irit.coerce( pt1, irit.POINT_TYPE )), irit.Fetch3TupleObject(nrml1), irit.Fetch3TupleObject(irit.coerce( pt2, irit.POINT_TYPE )), irit.Fetch3TupleObject(nrml2 )) if (irit.IsNullObject(aaa)): interpt = irit.GenNullObject(); else: interpt = irit.nth( aaa, 1 ) if ( irit.ThisObject(interpt) == irit.POINT_TYPE ): irit.color( pt1, irit.GREEN ) irit.color( pt2, irit.GREEN ) irit.color( interpt, irit.WHITE ) bisectlns = irit.coerce( pt1, irit.E2 ) + irit.coerce( interpt, irit.E2 ) + irit.coerce( pt2, irit.E2 ) irit.color( bisectlns, irit.MAGENTA ) if ( irit.FetchRealObject(irit.coord( interpt, 1 )) < 10 and \ irit.FetchRealObject(irit.coord( interpt, 1 )) > (-10 ) and \ irit.FetchRealObject(irit.coord( interpt, 2 )) < 10 and \ irit.FetchRealObject(irit.coord( interpt, 2 )) > (-10 ) ): irit.view( irit.list( crv1, crv2, data, pt1, pt2, interpt, \ bisectlns ), irit.ON ) i = i + 1
def srflistframecrvs(srflist, width): retval = irit.nil() i = 1 while (i <= irit.SizeOf(srflist)): retval = retval + srfframecrvs(irit.nth(srflist, i), width) i = i + 1 return retval
def offsetcrvlist( clst, ofst ): retval = irit.nil( ) i = 1 while ( i <= irit.SizeOf( clst ) ): irit.snoc( irit.offset( irit.nth( clst, i ), irit.GenRealObject(ofst), 1e-006, 1 ), retval ) i = i + 1 return retval
def getbisectpt( crv1, crv2, pt ): pt1 = irit.ceval( crv1, irit.FetchRealObject(irit.coord( pt, 0 ) )) pt2 = irit.ceval( crv2, irit.FetchRealObject(irit.coord( pt, 1 ) )) nrml1 = irit.cnormalplnr( crv1, irit.FetchRealObject(irit.coord( pt, 0 ) )) nrml2 = irit.cnormalplnr( crv2, irit.FetchRealObject(irit.coord( pt, 1 ) )) interpts = irit.ptslnln( irit.coerce( pt1, irit.POINT_TYPE ), nrml1, irit.coerce( pt2, irit.POINT_TYPE ), nrml2 ) retval = irit.nth( interpts, 1 ) return retval