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 buildvisibilitymap( c, step, highlightangle ): retval = irit.nil( ) i = 0 while ( i <= 360 ): dir = irit.point( math.cos( i * math.pi/180 ), math.sin( i * 3.14159/180 ), 0 ) crvs = irit.cvisible( c, irit.Fetch3TupleObject(dir), 1e-005 ) crvdmn = cnvrtcrvs2domains( crvs, i ) if ( highlightangle == i ): irit.attrib( crvdmn, "width", irit.GenRealObject(0.01 )) irit.attrib( crvdmn, "gray", irit.GenRealObject(0 )) irit.attrib( crvdmn, "rgb", irit.GenStrObject("255, 255, 128" )) irit.adwidth( crvdmn, 3 ) highcrvdmn = crvdmn * irit.sx( 1/360.0 ) irit.attrib( crvs, "width", irit.GenRealObject(0.03 )) irit.adwidth( crvs, 3 ) irit.attrib( crvs, "rgb", irit.GenStrObject("255, 255, 128" )) irit.snoc( crvs, retval ) else: irit.attrib( crvdmn, "width", 0.01 ) irit.attrib( crvdmn, "gray", 0.5 ) irit.attrib( crvdmn, "rgb", "128, 128, 255" ) irit.snoc( crvdmn * irit.sx( 1/360 ), retval ) i = i + step retval = ( retval + irit.list( highcrvdmn ) ) 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 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 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 plotfunc3d2poly(minx, maxx, miny, maxy, n, m): first = 1 x = minx while (x <= maxx): lst = irit.nil() y = miny while (y <= maxy): irit.snoc(irit.vector(x, y, plotfn3d(x, y)), lst) y = y + (maxy - miny) / float(n - 1) if (first == 1): retval = irit.poly(lst, irit.TRUE) first = 0 else: retval = retval + irit.poly(lst, irit.TRUE) x = x + (maxx - minx) / float(m - 1) y = miny while (y <= maxy): lst = irit.nil() x = minx while (x <= maxx): irit.snoc(irit.vector(x, y, plotfn3d(x, y)), lst) x = x + (maxx - minx) / float(n - 1) retval = retval + irit.poly(lst, irit.TRUE) y = y + (maxy - miny) / float(m - 1) return retval
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 virttree3(pos, dir, size, blevel, level): retval = irit.nil() newpos = (pos + dir) if (level > 0): tr = treebranch(pos, newpos, size) if (level >= blevel): irit.color(tr, bcolor) irit.attrib(tr, "ptexture", irit.GenStrObject("trunk.rle")) irit.attrib(tr, "rgb", irit.GenStrObject(brgb)) else: irit.color(tr, lcolor) irit.attrib(tr, "rgb", irit.GenStrObject(lrgb)) irit.attrib(tr, "ptexture", irit.GenStrObject("leaves.rle")) irit.snoc(tr, retval) if (level > 1): tr1 = virttree3(newpos, rotatevector2(dir, rfactor) * lfactor, size * wfactor, blevel, level - 1) tr2 = virttree3( newpos, rotatevector2(dir, rfactor * irit.random((-1), 1)) * lfactor, size * wfactor, blevel, level - 1) tr3 = virttree3(newpos, rotatevector2(dir, (-rfactor)) * lfactor, size * wfactor, blevel, level - 1) retval = retval + tr1 + tr2 + tr3 return retval
def srflineinter( srf, pt1, pt2, dir, param, numsegs,\ tol ): pta = irit.srinter(srf, irit.Fetch3TupleObject(pt1), dir, tol) ptb = irit.srinter( srf, irit.Fetch3TupleObject( ppblend(irit.Fetch3TupleObject(pt1), irit.Fetch3TupleObject(pt2), 2 / 3.0)), dir, tol) ptc = irit.srinter( srf, irit.Fetch3TupleObject( ppblend(irit.Fetch3TupleObject(pt1), irit.Fetch3TupleObject(pt2), 1 / 3.0)), dir, tol) ptd = irit.srinter(srf, irit.Fetch3TupleObject(pt2), dir, tol) crv = irit.bsp2bzr( irit.cinterp(irit.list(pta, ptb, ptc, ptd), 4, 4, irit.GenRealObject(param), 0)) crvs = irit.nil() i = 1 while (i <= numsegs): c = irit.cregion(crv, (i - 1) / float(numsegs), i / float(numsegs)) irit.color(c, i) irit.snoc(c, crvs) i = i + 1 retval = crvs return retval
def displayobjobjmdres(o1, o2, eps): global glbltransx mdres = irit.mindist2ff(o1, o2, eps) dist = irit.nth(mdres, 1) param1 = irit.nth(mdres, 2) param2 = irit.nth(mdres, 3) if (irit.SizeOf(param1) == 0): pt1 = irit.coerce(o1, irit.E3) else: prm = irit.nth(param1, 1) if (irit.ThisObject(prm) == irit.NUMERIC_TYPE): i = 1 while (i <= irit.SizeOf(param1)): t = irit.nth(param1, i) irit.printf("min distance %f detected at t1 = %f\n", irit.list(dist, t)) i = i + 1 pt1 = irit.ceval(o1, irit.FetchRealObject(t)) else: i = 1 while (i <= irit.SizeOf(param1)): uv = irit.nth(param1, i) irit.printf("min distance %f detected at uv1 = %f %f\n", irit.list(dist, irit.nth(uv, 1), irit.nth(uv, 2))) i = i + 1 pt1 = irit.seval( o1, irit.FetchRealObject(irit.nth(irit.nth(param1, 1), 1)), irit.FetchRealObject(irit.nth(irit.nth(param1, 1), 2))) if (irit.SizeOf(param2) == 0): pt2 = irit.coerce(o2, irit.E3) else: prm = irit.nth(param2, 1) if (irit.ThisObject(prm) == irit.NUMERIC_TYPE): i = 1 while (i <= irit.SizeOf(param2)): t = irit.nth(param2, i) irit.printf("min distance %f detected at t2 = %f\n", irit.list(dist, t)) i = i + 1 pt2 = irit.ceval(o2, irit.FetchRealObject(t)) else: i = 1 while (i <= irit.SizeOf(param2)): uv = irit.nth(param2, i) irit.printf("min distance %f detected at uv2 = %f %f\n", irit.list(dist, irit.nth(uv, 1), irit.nth(uv, 2))) i = i + 1 pt2 = irit.seval( o2, irit.FetchRealObject(irit.nth(irit.nth(param2, 1), 1)), irit.FetchRealObject(irit.nth(irit.nth(param2, 1), 2))) irit.color(pt1, irit.MAGENTA) irit.color(o1, irit.MAGENTA) irit.color(pt2, irit.YELLOW) irit.color(o2, irit.YELLOW) l = (pt1 + pt2) all = irit.list(o1, o2, pt1, pt2, l) irit.snoc(all * irit.tx(glbltransx), glblres) glbltransx = (glbltransx + 0.5) irit.interact(all)
def printfitresult(str, fittedsrf): global fitting irit.snoc(fittedsrf, fitting) irit.printf("%s:\n", irit.list(str)) i = 1 while (i <= irit.SizeOf(fittedsrf)): irit.printf("\t%9.6pf\n", irit.list(irit.nth(fittedsrf, i))) i = i + 1
def layouthandletrimmedsrfs(tsrfs, highlighttrim): retval = irit.nil() i = 1 while (i <= irit.SizeOf(tsrfs)): irit.snoc(layouthandleonetrimmed(irit.nth(tsrfs, i), highlighttrim), retval) i = i + 1 return retval
def plotfunc2d2poly(min, max, n): lst = irit.nil() t = min while (t <= max): irit.snoc(irit.vector(t, plotfn2d(t), 0), lst) t = t + (max - min) / float(n - 1) retval = irit.poly(lst, irit.TRUE) return retval
def buildvisibilitymap( c, step ): retval = irit.nil( ) i = 0 while ( i <= 360 ): dir = irit.point( math.cos( i * math.pi/180 ), math.sin( i * math.pi/180 ), 0 ) crvs = irit.cvisible( c, dir, 1e-005 ) irit.snoc( cnvrtcrvs2domains( crvs, i ) * irit.sx( 1/360.0 ), retval ) i = i + step return retval
def shelfunit( w, dw, h, dh, n ): retval = irit.nil( ) i = 1 while ( i <= n ): irit.snoc( marbleshelfunit( w, h ), retval ) w = w - dw h = h + dh i = i + 1 return retval
def intercrvspaint(crvs): retval = irit.nil() i = 1 while (i <= irit.SizeOf(crvs)): crv = irit.nth(crvs, i) irit.attrib(crv, "rgb", irit.GenStrObject(getrandrgb())) irit.snoc(crv * irit.sc(1), retval) i = i + 1 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 computeviews( c, dms, fname ): ranges = irit.nil( ) i = 1 while ( i <= irit.SizeOf( dms ) ): irit.snoc( cnvrtcrvs2ranges( irit.nth( dms, i ), i, 1 ), ranges ) i = i + 1 irit.printf( "%d views are considered\n", irit.list( irit.SizeOf( dms ) ) ) retval = irit.setcover( ranges, 0.001 ) return retval
def plgntoplln( pl ): retval = irit.nil( ) j = 0 while ( j <= irit.SizeOf( pl ) - 1 ): irit.snoc( irit.coord( pl, j ), retval ) j = j + 1 irit.snoc( irit.coord( pl, 0 ), retval ) retval = irit.poly( retval, irit.TRUE ) irit.attrib( retval, "dwidth", irit.GenIntObject(3 )) return retval
def evalbitangency(srfs, pts, merged): if (merged == 0): retval = evalonebitangency(srfs, pts) else: retval = irit.nil() i = 1 while (i <= irit.SizeOf(pts)): irit.snoc(evalonebitangency(srfs, irit.nth(pts, i)), 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 textgeom3d(txt, wdth, dpth): if (irit.ThisObject(txt) == irit.LIST_TYPE): retval = irit.nil() i = 1 while (i <= irit.SizeOf(txt)): irit.snoc(textgeom3d(irit.nth(txt, i), wdth, dpth), retval) i = i + 1 else: retval = textgeom3daux(txt, wdth, dpth) return retval
def randomcrvs(numcrvs, crvdeg, crvlen, size): l = irit.nil() i = 1 while (i <= numcrvs): irit.snoc(genrandomcrv(crvdeg, crvlen, size), l) i = i + 1 retval = l irit.color(retval, irit.RED) irit.adwidth(retval, 3) return retval
def evalflecnodalpts(srfs, pts): if (irit.SizeOf(pts) == 1): retval = evaloneflecnodalpts(srfs, pts) else: retval = irit.nil() i = 1 while (i <= irit.SizeOf(pts)): irit.snoc(evaloneflecnodalpts(srfs, irit.nth(pts, i)), retval) i = i + 1 return retval
def gammakernelpolysrfs( pl, maxgamma, extent ): retval = irit.nil( ) i = 1 while ( i <= irit.SizeOf( pl ) ): c = irit.coerce( irit.coord( pl, i - 1 ), irit.E2 ) + irit.coerce( irit.coord( pl, i ), irit.E2 ) k1 = irit.crvkernel( c, maxgamma, 0, irit.GenRealObject(extent), 2 ) k2 = irit.crvkernel( c, (-maxgamma ), 0, irit.GenRealObject(extent), 2 ) irit.snoc( irit.list( setrandomcolor( k1 ), setrandomcolor( k2 ) ), retval ) i = i + 1 return retval
def randompts2(n): retval = irit.nil() i = 1 while (i <= n): r = irit.random((-1), 1) t = irit.random(0, 2 * math.pi) irit.snoc((math.cos(t) * r, math.sin(t) * r, 0), retval) i = i + 1 irit.color(retval, irit.RED) irit.adwidth(retval, 5) return retval
def cntrpolys( pls, zmin, dz, zmax ): retval = irit.nil( ) intrcrv = irit.iritstate( "intercrv", irit.GenIntObject(1 )) z = zmin while ( z <= zmax ): p = irit.circpoly( ( 0, 0, 1 ), ( 0, 0, z ), 6 ) irit.snoc( pls * p, retval ) z = z + dz intrcrv = irit.iritstate( "intercrv", intrcrv ) irit.color( retval, irit.YELLOW ) return retval
def evaluvtoe3(srf, uvs, clr): retval = irit.nil() i = 1 while (i <= irit.SizeOf(uvs)): uv = irit.nth(uvs, i) irit.snoc( irit.seval(srf, irit.FetchRealObject(irit.coord(uv, 1)), irit.FetchRealObject(irit.coord(uv, 2))), retval) i = i + 1 irit.color(retval, clr) return retval
def extractidparts(obj, id, rgb): retval = irit.nil() i = 0 while (i <= irit.SizeOf(obj) - 1): p = irit.coord(obj, i) if (irit.getattr(p, "id") == irit.GenRealObject(id)): irit.snoc(p, retval) i = i + 1 retval = irit.mergepoly(retval) irit.attrib(retval, "rgb", irit.GenStrObject(rgb)) return retval
def forest3(n, m, blevel, level): retval = irit.nil() i = 0 while (i <= n): j = 0 while (j <= m): irit.snoc( virttree3( irit.point( i * 5, j * 5, 0 ), irit.vector( 0, 0, 1 ), 0.3, blevel, level ),\ retval ) j = j + 1 i = i + 1 return retval