Пример #1
0
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)
Пример #2
0
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
Пример #3
0
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
Пример #4
0
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
Пример #5
0
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
Пример #6
0
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
Пример #7
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
Пример #8
0
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
Пример #9
0
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
Пример #10
0
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
Пример #11
0
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
Пример #12
0
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
Пример #13
0
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
Пример #14
0
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
Пример #15
0
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