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 textgeom3daux(ply, wdth, dpth): retval = irit.nil() if (irit.ThisObject(ply) == irit.CURVE_TYPE): retval = irit.extrude((-ply), (0, 0, dpth), 0) if (irit.ThisObject(ply) == irit.POLY_TYPE): retval = irit.extrude( irit.ruledsrf( irit.offset(ply, irit.GenRealObject(-wdth / 2.0), 0, 0), irit.offset(ply, irit.GenRealObject(wdth / 2.0), 0, 0)), (0, 0, dpth), 3) return retval
def warpobj(obj, tv): if (irit.ThisObject(obj) == irit.LIST_TYPE): retval = irit.nil() i = 1 while (i <= irit.SizeOf(obj)): irit.snoc(warpobj(irit.nth(obj, i), tv), retval) i = i + 1 else: if (irit.ThisObject(obj) == irit.SURFACE_TYPE): retval = warpsrf(obj, tv) else: if (irit.ThisObject(obj) == irit.POLY_TYPE): retval = warppoly(obj, tv) else: retval = obj * irit.tx(0) 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 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 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 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 printobjecthierarchyaux( obj, indent ): if ( irit.ThisObject( obj ) == irit.LIST_TYPE ): i = 1 while ( i <= irit.SizeOf( obj ) ): j = 1 while ( j <= indent ): irit.printf( " ", irit.nil( ) ) j = j + 1 irit.printf( "%s\n", irit.list( irit.getname( obj, i ) ) ) irit.printobjecthierarchyaux( irit.nref( obj, i ), indent + 1 ) i = i + 1
def mergeverticalbndrycrvs( crvs ): crvs = crvs * irit.tx( 0 ) retval = irit.nil( ) i = 1 while ( i <= irit.SizeOf( crvs ) ): c1 = irit.nth( crvs, i ) used = irit.getattr( c1, "used" ) if ( irit.ThisObject( used ) != irit.NUMERIC_TYPE ): j = i + 1 while ( j <= irit.SizeOf( crvs ) ): c2 = irit.nth( crvs, j ) used = irit.getattr( c2, "used" ) if ( irit.ThisObject( used ) != irit.NUMERIC_TYPE ): c1a = mergeverticaltwocrvs( c1, c2 ) if ( c1a != c1 ): irit.attrib( irit.nref( crvs, j ), "used", irit.GenIntObject(1 )) c1 = c1a j = j + 1 irit.snoc( c1 * irit.tx( 0 ), retval ) i = i + 1 return retval
def evaloneflecnodalpts(srf, pts): if (irit.ThisObject(pts) == irit.CTLPT_TYPE): retval = irit.seval(srf, irit.FetchRealObject(irit.coord(pts, 1)), irit.FetchRealObject(irit.coord(pts, 2))) irit.color(retval, irit.BLUE) else: retval = irit.nil() i = 1 while (i <= irit.SizeOf(pts)): pt = irit.nth(pts, i) irit.snoc( irit.seval(srf, irit.FetchRealObject(irit.coord(pt, 1)), irit.FetchRealObject(irit.coord(pt, 2))), retval) i = i + 1 return retval
def animbisectcrv( 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.coord( pt, 0 ) ) pt2 = irit.ceval( crv2, irit.coord( pt, 1 ) ) nrml1 = irit.cnormalplnr( crv1, irit.coord( pt, 0 ) ) nrml2 = irit.cnormalplnr( crv2, irit.coord( pt, 1 ) ) interpt = irit.nth( irit.ptslnln( irit.coerce( pt1, irit.POINT_TYPE ), nrml1, irit.coerce( pt2, irit.POINT_TYPE ), nrml2 ), 1 ) if ( irit.ThisObject(interpt) == irit.POINT_TYPE ): irit.color( pt1, irit.GREEN ) irit.color( pt2, irit.GREEN ) irit.color( interpt, irit.WHITE ) irit.view( irit.list( crv1, crv2, pt1, pt2, data, interpt ), irit.ON ) i = i + 1
def evalgaussiancrvs(srf, numeronly, kmin, kmax, kstep): k = irit.sgauss(srf, numeronly) irit.printf("k spans from %f to %f\n", irit.bbox(k)) gausscntrs = irit.nil() x = kmin while (x >= kmax): aaa = irit.plane(1, 0, 0, (-x)) bbb = irit.contour(k, aaa, srf) irit.snoc(bbb, gausscntrs) x = x + kstep irit.color(gausscntrs, irit.MAGENTA) parabolic = irit.sparabolc(srf, 1) if (irit.ThisObject(parabolic) == irit.POLY_TYPE): irit.color(parabolic, irit.RED) irit.adwidth(parabolic, 2) retval = irit.list(parabolic, gausscntrs) else: retval = gausscntrs return retval
def evalmeancrvs(srf, numeronly, hmin, hmax, hstep): h = irit.smean(srf, numeronly) irit.printf("h spans from %f to %f\n", irit.bbox(h)) meancntrs = irit.nil() x = hmin while (x <= hmax): aaa = irit.contour(h, irit.plane(1, 0, 0, (-x)), srf) if (irit.IsNullObject(aaa)): aaa = 0 else: irit.snoc(aaa, meancntrs) x = x + hstep irit.color(meancntrs, irit.YELLOW) minimal = irit.contour(h, irit.plane(1, 0, 0, 0.0001), srf) if (irit.ThisObject(minimal) == irit.POLY_TYPE): irit.color(minimal, irit.GREEN) irit.adwidth(minimal, 2) retval = irit.list(meancntrs, minimal) else: retval = meancntrs return retval
def warppoly(pl, tv): retval = irit.GenRealObject(0) i = 0 while (i <= irit.SizeOf(pl) - 1): p = irit.coord(pl, i) vlist = irit.nil() j = 0 while (j <= irit.SizeOf(p) - 1): v = irit.coord(p, j) irit.snoc( irit.coerce( irit.teval(tv, irit.FetchRealObject(irit.coord(v, 0)), irit.FetchRealObject(irit.coord(v, 1)), irit.FetchRealObject(irit.coord(v, 2))), irit.POINT_TYPE), vlist) j = j + 1 if (irit.ThisObject(retval) == irit.NUMERIC_TYPE): retval = irit.poly(vlist, irit.FALSE) else: retval = irit.mergepoly(irit.list(irit.poly(vlist, 0), retval)) i = i + 1 irit.cpattr(retval, pl) return retval