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 uvpos2pt(srf, pt, mindist): pt = irit.coerce(pt, irit.POINT_TYPE) uvpt = irit.srfptdst(srf, irit.Fetch3TupleObject(pt), mindist, 0.001, 1e-010) e3pt = irit.seval(srf, irit.FetchRealObject(irit.coord(uvpt, 0)), irit.FetchRealObject(irit.coord(uvpt, 1))) e3nrml = irit.snormal(srf, irit.FetchRealObject(irit.coord(uvpt, 0)), irit.FetchRealObject(irit.coord(uvpt, 1))) edge = (irit.coerce(pt, irit.E3) + e3pt) nedge = (e3pt + irit.coerce(irit.coerce(e3pt, irit.POINT_TYPE) - e3nrml, irit.E3)) irit.color(e3pt, irit.MAGENTA) irit.adwidth(e3pt, 3) irit.color(pt, irit.YELLOW) irit.color(edge, irit.CYAN) irit.color(nedge, irit.GREEN) retval = irit.list(e3pt, pt, edge, nedge) return retval
def uvpos2ln(srf, lnpt, lndir, mindist): uvpt = irit.srflndst(srf, irit.Fetch3TupleObject(lnpt), lndir, mindist, 0.001, 1e-010) e3pt = irit.seval(srf, irit.FetchRealObject(irit.coord(uvpt, 0)), irit.FetchRealObject(irit.coord(uvpt, 1))) e3nrml = irit.snormal(srf, irit.FetchRealObject(irit.coord(uvpt, 0)), irit.FetchRealObject(irit.coord(uvpt, 1))) edge = irit.coerce( irit.ptptln( irit.Fetch3TupleObject(irit.coerce( e3pt, irit.POINT_TYPE )), irit.Fetch3TupleObject(lnpt), lndir ), irit.E3 ) + \ e3pt nedge = (e3pt + irit.coerce(irit.coerce(e3pt, irit.POINT_TYPE) - e3nrml, irit.E3)) irit.color(e3pt, irit.MAGENTA) irit.adwidth(e3pt, 3) irit.color(edge, irit.CYAN) irit.color(nedge, irit.GREEN) line = irit.coerce( lnpt + irit.vector(lndir[0], lndir[1], lndir[2]) * irit.sc( 2 ), irit.E3 ) + \ irit.coerce( lnpt - irit.vector(lndir[0], lndir[1], lndir[2]) * irit.sc( 2 ), irit.E3 ) irit.color(line, irit.YELLOW) retval = irit.list(line, e3pt, edge, nedge) return retval
"tangent evaluations for\n\tpolynomial - %d\n\trational - %d\n", irit.list(checktangenteval(irit.coerce(cb, irit.E3)), checktangenteval(cb))) z = irit.iritstate("cmpobjeps", z) # # Surface and Curve normals. # irit.save( "bezier4", irit.list(irit.cnormal(cb, 0), irit.cnormal(cb, 0.1), irit.cnormal(cb, 0.3), irit.cnormal(cb, 0.5), irit.cnormal(cb, 0.9), irit.cnormal(cb, 1), irit.snormal(sb, 0, 0), irit.snormal(sb, 0.1, 0), irit.snormal(sb, 0.3, 0), irit.snormal(sb, 0.5, 0.5), irit.snormal(sb, 0.9, 0.1), irit.snormal(sb, 1, 1))) dlevel = irit.iritstate("dumplevel", dlevel) irit.SetResolution(save_res) # # save("cb", cb); # save("sb", sb); # # cb1 = load("cb.crv"); # sb1 = load("sb.srf"); #
s2 = subdivtodepth(tsrf3a, 8, irit.vector(0, 0.01, 0), irit.vector(0.005, 0, 0)) irit.interact(s2) irit.save("trimsrf6", irit.list(s1, s2)) offtsrf3a = irit.offset(tsrf3a, irit.GenRealObject(0.3), 1, 0) irit.interact(irit.list(offtsrf3a, tsrf3a)) irit.save( "trimsrf7", irit.list(offtsrf3a, tsrf3a, irit.seval(tsrf1a, 0.5, 0.5), irit.stangent(tsrf1a, irit.ROW, 0.5, 0.5, 1), irit.stangent(tsrf1a, irit.COL, 0.5, 0.5, 1), irit.snormal(tsrf1a, 0.5, 0.5), irit.seval(tsrf3a, 0.5, 0.5), irit.stangent(tsrf3a, irit.ROW, 0.5, 0.5, 1), irit.stangent(tsrf3a, irit.COL, 0.5, 0.5, 1), irit.snormal(tsrf3a, 0.5, 0.5))) irit.interact(irit.strimsrf(tsrf1a)) irit.interact(irit.ctrimsrf(tsrf1a, 1)) irit.interact(irit.ctrimsrf(tsrf3a, 0)) irit.save( "trimsrf8", irit.list(irit.pdomain(tsrf1a), irit.pdomain(tsrf3b), irit.strimsrf(tsrf1a), irit.ctrimsrf(tsrf1a, 1))) irit.free(s1) irit.free(s2)
checktangenteval( irit.creparam( irit.pcircle( ( 0, 0, 0 ), 1 ), 0, 1 ) ) ) ) z = irit.iritstate("cmpobjeps", z) irit.free(z) # # # Surface and Curve normals. # irit.save( "bspline4", irit.list(irit.cnormal(cb, 0), irit.cnormal(cb, 0.1), irit.cnormal(cb, 0.3), irit.cnormal(cb, 0.5), irit.cnormal(cb, 0.9), irit.cnormal(cb, 1), irit.snormal(sb, 1, 3), irit.snormal(sb, 1.1, 3), irit.snormal(sb, 1.3, 3), irit.snormal(sb, 1.5, 3.5), irit.snormal(sb, 1.9, 3.1), irit.snormal(sb, 1, 4), irit.snormal(sb, 1.5, 4))) # # Compute moments: # a = irit.circle((0, 0, 0), 1) b = irit.cregion(a, 0, 1) c = irit.cregion(a, 0, 1) * irit.rz(45) irit.save( "bspline5", irit.list(irit.moment(b, 0), irit.moment(b, 1), irit.moment(c, 0), irit.moment(c, 1))) irit.free(a)
ns = irit.snrmlsrf(s) * irit.scale((0.3, 0.3, 0.3)) irit.color(ns, irit.GREEN) if (display == 1): irit.interact(irit.list(irit.GetAxes(), s, ns)) # Compute the normal at the center of the surface, in three ways. irit.save( "nrml1srf", irit.list( irit.GetAxes(), s, ns, dus, dvs, irit.coerce(irit.seval(dus, 0.5, 0.5), irit.VECTOR_TYPE) ^ irit.coerce(irit.seval(dvs, 0.5, 0.5), irit.VECTOR_TYPE), irit.coerce(irit.seval(ns, 0.5, 0.5), irit.VECTOR_TYPE), irit.snormal(s, 0.5, 0.5))) # # A (portion of) sphere (rational surface). # halfcirc = irit.cbspline( 3, irit.list( irit.ctlpt( irit.P3, 1, 0, 0, 1 ), \ irit.ctlpt( irit.P3, s45, (-s45 ), 0, s45 ), \ irit.ctlpt( irit.P3, 1, (-1 ), 0, 0 ), \ irit.ctlpt( irit.P3, s45, (-s45 ), 0, (-s45 ) ), \ irit.ctlpt( irit.P3, 1, 0, 0, (-1 ) ) ), irit.list( 0, 0, 0, 1, 1, 2,\ 2, 2 ) ) irit.color(halfcirc, irit.WHITE) s = irit.surfrev(halfcirc) irit.color(s, irit.WHITE) irit.free(halfcirc)