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 plotfunc3d(minx, maxx, miny, maxy, n, m):
    pl = plotfunc3d2poly(minx, maxx, miny, maxy, n, m)
    irit.color(pl, irit.YELLOW)
    irit.attrib(pl, "width", irit.GenRealObject(0.05))
    minz = 1e+006
    maxz = (-1e+006)
    i = 0
    while (i <= irit.SizeOf(pl) - 1):
        p = irit.coord(pl, i)
        j = 0
        while (j <= irit.SizeOf(p) - 1):
            v = irit.coord(p, i)
            if (irit.FetchRealObject(irit.coord(v, 2)) > maxz):
                maxz = irit.FetchRealObject(irit.coord(v, 2))
            if (irit.FetchRealObject(irit.coord(v, 2)) < minz):
                minz = irit.FetchRealObject(irit.coord(v, 2))
            j = j + 1
        i = i + 1
    ax = (irit.poly(
        irit.list((irit.min(minx, 0), 0, 0),
                  (irit.max(maxx, 0), 0, 0)), 1) + irit.poly(
                      irit.list((0, irit.min(miny, 0), 0),
                                (0, irit.max(maxy, 0), 0)), 1) + irit.poly(
                                    irit.list((0, 0, irit.min(minz, 0)),
                                              (0, 0, irit.max(maxz, 0))), 1))

    irit.color(ax, irit.RED)
    irit.attrib(ax, "width", irit.GenRealObject(0.02))
    retval = irit.list(pl, ax)
    irit.viewobj(retval)
    irit.printf(
        "xdomain = [%lf %lf], ydomain = [%lf %lf], zdomain = [%lf %lf]\n",
        irit.list(minx, maxx, miny, maxy, minz, maxz))
    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
Exemple #4
0
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
Exemple #5
0
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 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 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
Exemple #8
0
def subdivtodepth(tsrf, dpth, vu, vv):
    if (dpth <= 0):
        retval = tsrf
    else:
        if (dpth / 2.0 != math.floor(dpth / 2.0)):
            v = vu * (2 ^ (dpth - 1))
            umin = irit.FetchRealObject(irit.nth(irit.pdomain(tsrf), 1))
            umax = irit.FetchRealObject(irit.nth(irit.pdomain(tsrf), 2))
            tsrfs = irit.sdivide(tsrf, irit.COL, umin * 0.4999 + umax * 0.5001)
        else:
            v = vv * (2 ^ (dpth - 1))
            vmin = irit.FetchRealObject(irit.nth(irit.pdomain(tsrf), 3))
            vmax = irit.FetchRealObject(irit.nth(irit.pdomain(tsrf), 4))
            tsrfs = irit.sdivide(tsrf, irit.ROW, vmin * 0.4999 + vmax * 0.5001)
        if (irit.SizeOf(tsrfs) == 2):
            retval = irit.list( subdivtodepth( irit.nth( tsrfs, 1 ) * \
              irit.trans( irit.Fetch3TupleObject(-v) ),
              dpth - 1,
              vu,
              vv ),
            subdivtodepth( irit.nth( tsrfs, 2 ) * \
              irit.trans( irit.Fetch3TupleObject(v) ),
              dpth - 1,
              vu,
              vv ) )
        else:
            retval = subdivtodepth(irit.nth(tsrfs, 1), dpth - 1, vu, vv)
    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
def rigidmotionpos(cnew, c):
    t = irit.FetchRealObject(irit.nth(irit.pdomain(c), 1))
    pos = irit.coerce(irit.ceval(c, t), irit.VECTOR_TYPE)
    tn = irit.ctangent(c, t, 1)
    retval = cnew * \
    irit.rz( math.atan2( irit.FetchRealObject(irit.coord( tn, 1 )),
          irit.FetchRealObject(irit.coord( tn, 0 )) ) * \
       180/math.pi ) * \
    irit.trans( irit.Fetch3TupleObject(pos) )
    return retval
Exemple #11
0
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 drawcircs(pls):
    retval = irit.nil()
    i = 0
    while (i <= irit.SizeOf(pls) - 1):
        v = irit.coord(pls, i)
        irit.snoc(
            colorcirc(
                irit.circle((irit.FetchRealObject(irit.coord(
                    v, 0)), irit.FetchRealObject(irit.coord(v, 1)), (-1)),
                            irit.FetchRealObject(irit.coord(v, 2))),
                irit.FetchRealObject(irit.coord(v, 2)) > 0), retval)
        i = i + 1
    return retval
Exemple #13
0
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
Exemple #14
0
def displayptscrctan2crvs(pts, r, c1, c2):
    retval = irit.nil()
    circ = irit.circle((0, 0, 0), r)
    i = 1
    while (i <= irit.SizeOf(pts)):
        pt = irit.coord(pts, i)
        prms = irit.getattr(pt, "params")
        ptc1 = irit.ceval(c1, irit.FetchRealObject(irit.coord(prms, 0)))
        ptc2 = irit.ceval(c2, irit.FetchRealObject(irit.coord(prms, 1)))
        irit.snoc( irit.list( irit.coerce( pt, irit.E2 ) + ptc1, \
         irit.coerce( pt, irit.E2 ) + ptc2, \
         circ * irit.trans( irit.Fetch3TupleObject(irit.coerce( pt, irit.VECTOR_TYPE )) ) ), retval )
        i = i + 1
    return retval
Exemple #15
0
def computeerror(fname, crv, dist, ocrv):
    crv = irit.creparam(crv, 0, 1)
    ocrv = irit.creparam(ocrv, 0, 1)
    dst = irit.symbdiff(crv, ocrv)
    dstsqr = irit.symbdprod(dst, dst)
    ffmin = irit.max(
        irit.FetchRealObject(irit.coord(irit.ffextreme(dstsqr, 1), 1)), 0)
    ffmax = irit.max(
        irit.FetchRealObject(irit.coord(irit.ffextreme(dstsqr, 0), 1)), 0)
    irit.printf(
        "\n\t%s: min %lf, max %lf, max error %lf (ctlpts = %1.0lf)",
        irit.list(
            fname, math.sqrt(ffmin), math.sqrt(ffmax),
            irit.max(abs(math.sqrt(ffmin) - dist),
                     abs(math.sqrt(ffmax) - dist)), irit.SizeOf(ocrv)))
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 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
Exemple #18
0
def tagcurve(crv, n, len):
    tmin = irit.FetchRealObject(irit.coord(irit.pdomain(crv), 1))
    tmax = irit.FetchRealObject(irit.coord(irit.pdomain(crv), 2))
    dt = (tmax - tmin) / float(n - 1)
    retval = irit.nil()
    t = tmin
    i = 1
    while (i <= n):
        pt = irit.coerce(irit.ceval(crv, t), irit.POINT_TYPE)
        nrml = irit.coerce(irit.cnormal(crv, t), irit.VECTOR_TYPE)
        irit.snoc(
            irit.coerce(pt - nrml * len, irit.E2) +
            irit.coerce(pt + nrml * len, irit.E2), retval)
        t = t + dt
        i = i + 1
    return retval
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
Exemple #20
0
def displayposnormal(crv, t1, t2, scl, bg_obj):
    pt1 = irit.ceval(crv, irit.FetchRealObject(t1))
    pt2 = irit.ceval(crv, irit.FetchRealObject(t2))
    n1 = irit.cnormal(crv, irit.FetchRealObject(t1))
    n2 = irit.cnormal(crv, irit.FetchRealObject(t2))
    ptt1 = (irit.ctlpt(irit.E2, t1, t2) + irit.ctlpt(irit.E2, t1, 0))
    irit.color(ptt1, irit.YELLOW)
    ptt2 = (irit.ctlpt(irit.E2, t1, t2) + irit.ctlpt(irit.E2, 0, t2))
    irit.color(ptt2, irit.CYAN)
    n1 = (irit.coerce(
        irit.coerce(pt1, irit.POINT_TYPE) + n1 * irit.sc(scl), irit.E2) + pt1)
    irit.color(n1, irit.YELLOW)
    n2 = (irit.coerce(
        irit.coerce(pt2, irit.POINT_TYPE) + n2 * irit.sc(scl), irit.E2) + pt2)
    irit.color(n2, irit.CYAN)
    irit.view(irit.list(n1, n2, pt1, pt2, ptt1, ptt2, bg_obj), irit.ON)
Exemple #21
0
def rotatevector2(v, amount):
    v1 = irit.normalizeVec(perpvector(v))
    v2 = irit.normalizeVec(v1 ^ v) * math.sqrt(irit.FetchRealObject(v * v))
    if (amount > 0):
        retval = v + v1 * irit.random(0, amount) + v2 * irit.random(0, amount)
    else:
        retval = v + v1 * irit.random(amount, 0) + v2 * irit.random(amount, 0)
    return retval
Exemple #22
0
def evaltoeuclidean(srf, paramumb):
    retval = irit.nil()
    i = 1
    while (i <= irit.SizeOf(paramumb)):
        umb = irit.nth(paramumb, i)
        crvtr = irit.scrvtreval(srf, irit.FetchRealObject(irit.coord(umb, 0)),
                                irit.FetchRealObject(irit.coord(umb, 1)), 1)
        irit.printf(
            "principal curvatures at (u, v) = (%f, %f) equal %.9f and %.9f\n",
            irit.list(irit.coord(umb, 0), irit.coord(umb, 1),
                      irit.nth(crvtr, 1), irit.nth(crvtr, 3)))
        irit.snoc(
            irit.seval(srf, irit.FetchRealObject(irit.coord(umb, 0)),
                       irit.FetchRealObject(irit.coord(umb, 1))), retval)
        i = i + 1
    irit.color(retval, irit.YELLOW)
    return retval
def crvlength(crv, n):
    retval = 0
    pd = irit.pdomain(crv)
    t1 = irit.nth(pd, 1)
    t2 = irit.nth(pd, 2)
    dt = (t2 - t1) / n
    pt1 = irit.coerce(irit.ceval(crv, irit.FetchRealObject(t1)), irit.E3)
    i = 1
    while (i <= n):
        pt2 = irit.coerce(
            irit.ceval(crv,
                       irit.FetchRealObject(t1) +
                       irit.FetchRealObject(dt) * i), irit.E3)
        retval = retval + distptpt(pt1, pt2)
        pt1 = pt2
        i = i + 1
    return retval
Exemple #24
0
def canonicalh(f, g, deg, c, ptype):
    net = irit.nil()
    t = irit.ceval(g, 1)
    g2 = g * irit.sc(1 / irit.FetchRealObject(irit.coord(t, 1)))
    f2 = irit.cregion(f, 0, irit.FetchRealObject(irit.coord(t, 1)))
    f_p = irit.coerce(f2, irit.POWER_TYPE)
    tmp = irit.ffsplit(f_p)
    i = 1
    while (i <= c):
        bm = irit.coord(irit.coord(irit.nth(tmp, i), deg), 1)
        tmp2 = irit.coerce(irit.nth(tmp, i), irit.BEZIER_TYPE) * irit.sc(
            1 / irit.FetchRealObject(bm))
        irit.snoc(
            irit.coerce(irit.coerce(irit.compose(tmp2, g2), irit.BEZIER_TYPE),
                        irit.E1), net)
        i = i + 1
    retval = irit.ffmerge(net, ptype)
    return retval
def extractcrvregion( crv, t1, t2, idx ):
    if ( irit.FetchRealObject(t1) < 0 ):
        retval = irit.cregion( crv, irit.FetchRealObject(t1) + 1, 1 ) + irit.cregion( crv, 0, irit.FetchRealObject(t2) )
    else:
        retval = irit.cregion( crv, irit.FetchRealObject(t1), irit.FetchRealObject(t2) )
    retval = irit.creparam( retval, 0, 1 )
    tn = irit.vector( 1, 0, 0 ) * irit.rz( irit.FetchRealObject( idx ) )
    retval = irit.list( retval * irit.trans( irit.Fetch3TupleObject( tn * irit.sc( 0.15 ) ) ), 
						irit.arrow3d( irit.coerce( irit.ceval( retval, 0.5 ), 3 ), 
									  tn, 0.35, 0.01, 0.1, 0.02 ) )
    irit.attrib( retval, "width", irit.GenRealObject( irit.random( 0.007, 0.01 ) ) )
    irit.attrib( retval, "gray", irit.GenRealObject( irit.random( 0.2, 0.8 ) ) )
    irit.attrib( retval, "rgb", irit.GenStrObject( str(int(irit.random( 100, 255 ) ) ) + 
								"," + 
								str(int(irit.random( 100, 255 ) ) ) + 
								"," + 
								str(int(irit.random( 100, 255 ) ) ) ) )
    return retval
Exemple #26
0
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 warpsurface( srf, tv ):
    usize = irit.FetchRealObject(irit.nth( irit.ffmsize( srf ), 1 ))
    vsize = irit.FetchRealObject(irit.nth( irit.ffmsize( srf ), 2 ))
    clr = irit.getattr( srf, "color" )
    i = 0
    while ( i <= usize * vsize - 1 ):
        pt = irit.coord( srf, i )
        x = irit.FetchRealObject(irit.coord( pt, 1 ))
        y = irit.FetchRealObject(irit.coord( pt, 2 ))
        z = irit.FetchRealObject(irit.coord( pt, 3 ))
        pt = irit.teval( tv, x, y, z )
        v = math.floor( i/float(usize) )
        u = i - v * usize
        srf = irit.seditpt( srf, pt, u, v )
        i = i + 1
    irit.attrib( srf, "color", clr )
    retval = srf
    return retval
Exemple #28
0
def genanimationorthomatchcrvpts(ppl, crv, scl):
    pt1 = irit.point(0, 0, 0)
    pt2 = irit.point(0, 0, 0)
    vec1 = ( irit.ctlpt( irit.E2, 0, 0 ) + \
              irit.ctlpt( irit.E2, 0, scl ) )
    irit.color(vec1, irit.YELLOW)
    vec2 = ( \
              irit.ctlpt( irit.E2, 0, 0 ) + \
              irit.ctlpt( irit.E2, 0, scl ) )
    irit.color(vec2, irit.CYAN)
    pos1 = irit.nil()
    pos2 = irit.nil()
    rot1 = irit.nil()
    rot2 = irit.nil()
    i = 0
    while (i <= irit.SizeOf(ppl) - 1):
        pl = irit.coord(ppl, i)
        j = 0
        while (j <= irit.SizeOf(pl) - 1):
            pt = irit.coord(pl, j)
            t1 = irit.coord(pt, 0)
            t2 = irit.coord(pt, 1)
            if (t1 > t2):
                irit.snoc(
                    irit.coerce(irit.ceval(crv, irit.FetchRealObject(t1)),
                                irit.POINT_TYPE), pos1)
                irit.snoc(
                    irit.coerce(irit.ceval(crv, irit.FetchRealObject(t2)),
                                irit.POINT_TYPE), pos2)
                n1 = irit.cnormal(crv, irit.FetchRealObject(t1))
                n2 = irit.cnormal(crv, irit.FetchRealObject(t2))
                irit.snoc(
                    irit.vector(
                        math.atan2(irit.FetchRealObject(irit.coord(n1, 0)),
                                   irit.FetchRealObject(irit.coord(n1, 1))) *
                        180 / math.pi, 0, 0), rot1)
                irit.snoc(
                    irit.vector(
                        math.atan2(irit.FetchRealObject(irit.coord(n2, 0)),
                                   irit.FetchRealObject(irit.coord(n2, 1))) *
                        180 / math.pi, 0, 0), rot2)
            j = j + 1
        if (t1 > t2):
            irit.snoc(irit.vector(10000, 0, 0), pos1)
            irit.snoc(irit.vector(10000, 0, 0), pos2)
            irit.snoc(irit.vector(0, 0, 0), rot1)
            irit.snoc(irit.vector(0, 0, 0), rot2)
        i = i + 1
    irit.attrib(pt1, "animation", makerottransanimobj(irit.nil(), pos1))
    irit.attrib(pt2, "animation", makerottransanimobj(irit.nil(), pos2))
    irit.attrib(vec1, "animation", makerottransanimobj(rot1, pos1))
    irit.attrib(vec2, "animation", makerottransanimobj(rot2, pos2))
    retval = irit.list(pt1, pt2, vec1, vec2)
    return retval
Exemple #29
0
def comparecurvaturecrvevals(c):
    c = irit.coerce(c, irit.KV_OPEN)
    tmin = irit.FetchRealObject(irit.nth(irit.pdomain(c), 1))
    tmax = irit.FetchRealObject(irit.nth(irit.pdomain(c), 2))
    t = tmin
    dt = (tmax - tmin) / 100.0
    crvtrcrv = irit.cnrmlcrv(c)
    while (t <= tmax):
        kn = irit.ceval(crvtrcrv, t)
        k1 = math.sqrt(
            irit.FetchRealObject(
                irit.coerce(kn, irit.VECTOR_TYPE) *
                irit.coerce(kn, irit.VECTOR_TYPE)))
        k2 = irit.FetchRealObject(irit.ccrvtreval(c, t))
        if (abs(k1 - k2) > 1e-05):
            irit.printf(
                "mismatch in curve curvature evaluation (%.13f vs. %.13f)\n",
                irit.list(k1, k2))
        t = t + dt
def animbisectcrv2(crv1, crv2, moredata, cntr, skip):
    irit.color(crv1, irit.YELLOW)
    irit.color(crv2, irit.YELLOW)
    irit.adwidth(crv1, 4)
    irit.adwidth(crv2, 4)
    sk = 0
    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.FetchRealObject(irit.coord(pt, 0)))
        nrml2 = cnormalplnr(crv2, irit.FetchRealObject(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):
            if ((interpt - irit.coerce(pt1, irit.POINT_TYPE)) * nrml1 >
                    irit.GenRealObject(0)
                    and (interpt - irit.coerce(pt2, irit.POINT_TYPE)) * nrml2 >
                    irit.GenRealObject(0)):
                sk = sk + 1
                if (sk >= skip):
                    sk = 0
                    irit.color(pt1, irit.GREEN)
                    irit.color(pt2, irit.GREEN)
                    irit.color(interpt, irit.WHITE)
                    irit.adwidth(interpt, 4)
                    bisectlns = irit.coerce(pt1, irit.E2) + irit.coerce(
                        interpt, irit.E2) + irit.coerce(pt2, irit.E2)
                    irit.color(bisectlns, irit.MAGENTA)
                    irit.adwidth(bisectlns, 2)
                    irit.view( irit.list( crv1, crv2, moredata, pt1, pt2, interpt, \
                    bisectlns ), irit.ON )
        i = i + 1