예제 #1
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
예제 #2
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
예제 #3
0
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
예제 #4
0
    "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");
#
예제 #5
0
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)
예제 #6
0
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)
예제 #7
0
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)