Esempio n. 1
0
 def translate_faces(self,frange,v):
     coords = []
     for f in frange:
         fpoints = [self.pcoords[fx] for fx in self.faces[f]]
         coords.extend(fpoints)
     dpv.translate_coords(coords,v)
     return self
Esempio n. 2
0
def corners(l,w,p = None,phi = None):
    l2,w2 = l/2.0,w/2.0
    cs = [
        dpv.vector(-l2,-w2,0),dpv.vector( l2,-w2,0), 
        dpv.vector( l2, w2,0),dpv.vector(-l2, w2,0)]
    if not phi is None:dpv.rotate_z_coords(cs,phi)
    if not p is None:dpv.translate_coords(cs,p)
    return cs
Esempio n. 3
0
def post(p,s,w,h):
    #base = dpr.point_ring(w/2.0,s)
    base = dpr.square(w,w)
    dpv.translate_coords(base,p)
    top = [b.copy().translate_z(h) for b in base]
    wls = (
        ((base[0].copy(),base[1].copy(),top[1].copy(),top[0].copy()),()),
        ((base[1].copy(),base[2].copy(),top[2].copy(),top[1].copy()),()),
        ((base[2].copy(),base[3].copy(),top[3].copy(),top[2].copy()),()),
        ((base[3].copy(),base[0].copy(),top[0].copy(),top[3].copy()),()),
            )
    return wls
Esempio n. 4
0
def post(p, s, w, h):
    #base = dpr.point_ring(w/2.0,s)
    base = dpr.square(w, w)
    dpv.translate_coords(base, p)
    top = [b.copy().translate_z(h) for b in base]
    wls = (
        ((base[0].copy(), base[1].copy(), top[1].copy(), top[0].copy()), ()),
        ((base[1].copy(), base[2].copy(), top[2].copy(), top[1].copy()), ()),
        ((base[2].copy(), base[3].copy(), top[3].copy(), top[2].copy()), ()),
        ((base[3].copy(), base[0].copy(), top[0].copy(), top[3].copy()), ()),
    )
    return wls
Esempio n. 5
0
def windowframe(l, wlw, ww, wh, wz, lp):
    ps = windowhole(l, wlw, ww, wh, wz, lp)
    ps.extend([p.copy() for p in ps])
    dpv.translate_coords(ps[:4], dpv.z().scale_u(-wlw / 2.0))
    dpv.translate_coords(ps[4:], dpv.z().scale_u(wlw / 2.0))
    p0, p1, p2, p3, p4, p5, p6, p7 = ps
    fpolys = (
        ((p4.copy(), p0.copy(), p1.copy(), p5.copy()), ()),
        ((p5.copy(), p1.copy(), p2.copy(), p6.copy()), ()),
        ((p6.copy(), p2.copy(), p3.copy(), p7.copy()), ()),
        ((p7.copy(), p3.copy(), p0.copy(), p4.copy()), ()),
    )
    return fpolys
Esempio n. 6
0
def windowframe(l,wlw,ww,wh,wz,lp):
    ps = windowhole(l,wlw,ww,wh,wz,lp)
    ps.extend([p.copy() for p in ps])
    dpv.translate_coords(ps[:4],dpv.z().scale_u(-wlw/2.0))
    dpv.translate_coords(ps[4:],dpv.z().scale_u( wlw/2.0))
    p0,p1,p2,p3,p4,p5,p6,p7 = ps
    fpolys = (
        ((p4.copy(),p0.copy(),p1.copy(),p5.copy()),()),
        ((p5.copy(),p1.copy(),p2.copy(),p6.copy()),()),
        ((p6.copy(),p2.copy(),p3.copy(),p7.copy()),()),
        ((p7.copy(),p3.copy(),p0.copy(),p4.copy()),()),
            )
    return fpolys
Esempio n. 7
0
def facade():
    import dilap.mesh.piecewisecomplex as pwc
    rim = [
        dpv.vector(0, 0, 0),
        dpv.vector(15, 0, 0),
        dpv.vector(15, 0, 4),
        dpv.vector(0, 0, 4)
    ]

    door = [
        dpv.vector(-1, 0, 0.2),
        dpv.vector(1, 0, 0.2),
        dpv.vector(1, 0, 3),
        dpv.vector(-1, 0, 3)
    ]
    dpv.translate_coords(door, dpv.vector(10, 0, 0))

    wspline = dpv.vector_spline(dpv.vector(2, 0, 3), dpv.vector(1.8, 0, 3.2),
                                dpv.vector(-1.8, 0, 3.2), dpv.vector(-2, 0, 3),
                                10)
    window = [
        dpv.vector(-2, 0, 0.5),
        dpv.vector(2, 0, 0.5),
        dpv.vector(2, 0, 3)
    ] + wspline + [dpv.vector(-2, 0, 3)]
    dpv.translate_coords(window, dpv.vector(5, 0, 0))

    beam = [
        dpv.vector(1, 0, 1),
        dpv.vector(2, 0, 1),
        dpv.vector(2, 0, 9),
        dpv.vector(1, 0, 9)
    ]

    #fac = (rim,(door,window,beam)),(beam,())
    fac = (rim, (door, window, beam)),

    plc = pwc.piecewise_linear_complex()
    plc.add_polygons(*fac)

    #plc.translate_polygon(2,dpv.vector(0,0,10))
    #plc.extrude_polygon(1,dpv.vector(0,1,0))

    plc.triangulate()

    #ax = plc.plot_xy()
    #ax = plc.plot()

    #plt.show()
    return plc
Esempio n. 8
0
def profile_triangulation():
    import dilap.mesh.piecewisecomplex as pwc

    ps1 = tuple(dpr.point_ring(100, 32))
    ps2 = tuple(dpr.point_ring(20, 8))
    ps3 = tuple(dpr.point_ring(100, 64))
    ps4 = tuple([p.copy() for p in ps2])
    q = dpq.q_from_av(numpy.pi / 2.0, dpv.xhat)
    for p in ps1:
        p.rotate(q)
    for p in ps2:
        p.rotate(q)
    dpv.translate_coords(list(ps1), dpv.vector(0, 100, 0))
    dpv.translate_coords(list(ps2), dpv.vector(0, 100, 0))
    dpv.translate_coords(list(ps3), dpv.vector(0, 0, -100))
    dpv.translate_coords(list(ps4), dpv.vector(0, 0, -100))

    polygons = ((ps1, (ps2, )), (ps3, ()))
    #polygons = ((ps3,(ps4,)),)
    #polygons = ((ps3,()),)

    plc = pwc.piecewise_linear_complex()
    plc.add_polygons(*polygons)

    dprf.profile_function(plc.triangulate)
    #dprf.profile_function(plc.triangulate_xy)

    ax = plc.plot()
    plt.show()
Esempio n. 9
0
def profile_triangulation():
    import dilap.mesh.piecewisecomplex as pwc

    ps1 = tuple(dpr.point_ring(100,32))
    ps2 = tuple(dpr.point_ring(20,8))
    ps3 = tuple(dpr.point_ring(100,64))
    ps4 = tuple([p.copy() for p in ps2])
    q = dpq.q_from_av(numpy.pi/2.0,dpv.xhat)
    for p in ps1:p.rotate(q)
    for p in ps2:p.rotate(q)
    dpv.translate_coords(list(ps1),dpv.vector(0,100,0))
    dpv.translate_coords(list(ps2),dpv.vector(0,100,0))
    dpv.translate_coords(list(ps3),dpv.vector(0,0,-100))
    dpv.translate_coords(list(ps4),dpv.vector(0,0,-100))

    polygons = ((ps1,(ps2,)),(ps3,()))
    #polygons = ((ps3,(ps4,)),)
    #polygons = ((ps3,()),)

    plc = pwc.piecewise_linear_complex()
    plc.add_polygons(*polygons)
    
    dprf.profile_function(plc.triangulate)
    #dprf.profile_function(plc.triangulate_xy)

    ax = plc.plot()
    plt.show()
Esempio n. 10
0
def polygon(n):
    angle = 360.0/n
    turns = [x*angle for x in range(n)]
    poly = [dpv.zero()]
    current_angle = 0.0
    for si in range(n):
        l,t = 1.0,turns[si]
        current_angle = t
        dx = l*numpy.cos(rad(current_angle))
        dy = l*numpy.sin(rad(current_angle))
        new = poly[-1].copy().translate_x(dx).translate_y(dy)
        poly.append(new)
    poly.pop()
    dpv.translate_coords(poly,dpv.center_of_mass(poly).flip())
    return poly
Esempio n. 11
0
def triang():

    #pts = dpr.dice_edges(dpr.square(50,10),2)
    hpts = [dpv.vector(5, -2, 3)]
    hpts.append(hpts[-1].copy().translate(dpv.vector(0, 5, 0)))
    hpts.append(hpts[-1].copy().translate(dpv.vector(-10, 0, 0)))
    hpts.append(hpts[-1].copy().translate(dpv.vector(0, -3, 0)))
    hpts.append(hpts[-1].copy().translate(dpv.vector(5, 0, 0)))
    hpts.append(hpts[-1].copy().translate(dpv.vector(0, -2, 0)))
    hpts2 = [h.copy().translate_x(-12).translate_z(-6) for h in hpts]
    pts = dpr.inflate([h.copy().translate_x(-6).translate_z(-3) for h in hpts],
                      14)

    #pts  = dpv.translate_coords(dpr.square(50,10),dpv.vector(-30,-12,0))
    pts2 = dpv.translate_coords(dpr.square(30, 10), dpv.vector(30, 20, 0))
    pts3 = dpv.translate_coords(dpr.square(20, 10), dpv.vector(-30, -20, 0))

    pts2.insert(1, dpv.vector(25, 15, 0))
    pts2.insert(1, dpv.vector(25, 20, 0))
    pts2.insert(1, dpv.vector(20, 20, 0))
    pts2.insert(1, dpv.vector(20, 15, 0))
    #pts2 = dpr.point_ring(100,16)

    ax = dtl.plot_axes_xy()
    ax = dtl.plot_points_xy(pts2, ax, number=True)
    plt.show()

    points = []
    edges = []
    polygons = [(pts, (hpts, hpts2)), (pts2, ()), (pts3, ())]
    #polygons = [(pts2,())]
    #polygons = [(pts,(hpts,hpts2))]
    #polygons = [(pts,()),(pts2,())]
    polyhedra = []

    plc = pwc.piecewise_linear_complex(refine=True, smooth=False)
    plc.add_points(*points)
    plc.add_edges(*edges)
    plc.add_polygons(*polygons)
    #plc.add_polyhedra(*polyhedra)
    plc.triangulate()

    #ax = plc.plot_xy()
    ax = plc.plot()
    plt.show()

    '''#
Esempio n. 12
0
def triang():

    #pts = dpr.dice_edges(dpr.square(50,10),2)
    hpts = [dpv.vector(5,-2,3)]
    hpts.append(hpts[-1].copy().translate(dpv.vector(0,5,0)))
    hpts.append(hpts[-1].copy().translate(dpv.vector(-10,0,0)))
    hpts.append(hpts[-1].copy().translate(dpv.vector(0,-3,0)))
    hpts.append(hpts[-1].copy().translate(dpv.vector(5,0,0)))
    hpts.append(hpts[-1].copy().translate(dpv.vector(0,-2,0)))
    hpts2 = [h.copy().translate_x(-12).translate_z(-6) for h in hpts]
    pts = dpr.inflate([h.copy().translate_x(-6).translate_z(-3) for h in hpts],14)

    #pts  = dpv.translate_coords(dpr.square(50,10),dpv.vector(-30,-12,0))
    pts2 = dpv.translate_coords(dpr.square(30,10),dpv.vector(30,20,0))
    pts3 = dpv.translate_coords(dpr.square(20,10),dpv.vector(-30,-20,0))

    pts2.insert(1,dpv.vector(25,15,0))
    pts2.insert(1,dpv.vector(25,20,0))
    pts2.insert(1,dpv.vector(20,20,0))
    pts2.insert(1,dpv.vector(20,15,0))
    #pts2 = dpr.point_ring(100,16)

    ax = dtl.plot_axes_xy()
    ax = dtl.plot_points_xy(pts2,ax,number = True)
    plt.show()

    points = []
    edges = []
    polygons = [(pts,(hpts,hpts2)),(pts2,()),(pts3,())]
    #polygons = [(pts2,())]
    #polygons = [(pts,(hpts,hpts2))]
    #polygons = [(pts,()),(pts2,())]
    polyhedra = []

    plc = pwc.piecewise_linear_complex(
        refine = True,smooth = False)
    plc.add_points(*points)
    plc.add_edges(*edges)
    plc.add_polygons(*polygons)
    #plc.add_polyhedra(*polyhedra)
    plc.triangulate()

    #ax = plc.plot_xy()
    ax = plc.plot()
    plt.show()

    '''#
Esempio n. 13
0
 def translate(self, v):
     dpv.translate_coords(self.vertices, v)
     dpv.translate_coords(self.controls, v)
     dpv.translate_coords(self.tpts, v)
     for h in self.hpts:
         dpv.translate_coords(h, v)
     self.start.translate(v)
     self.end.translate(v)
     self.tip.translate(v)
     self.tail.translate(v)
     return dmo.model.translate(self, v)
Esempio n. 14
0
    def _geo_gapless(self):
        l, w, h, m = self.l, self.w, self.h, self.m
        corners = dpr.square(l, w)
        #us = dpr.polygon(4)
        us = dpr.square(1, 1)
        dpv.translate_coords(us, dpv.one().scale_u(0.5))
        dpv.scale_coords_x(us, l)
        dpv.scale_coords_y(us, w)
        us = [v.xy2d() for v in us]
        self._quad(*corners, us=us, m=m)
        bcorners = [c.copy().translate_z(-h) for c in corners]
        bcorners.reverse()
        self._quad(*bcorners, us=us, m=m)

        bcorners.reverse()
        bcorners.append(bcorners[0])
        corners.append(corners[0])
        nfs = self._bridge(corners, bcorners, m=m)
        self._project_uv_flat(nfs)
Esempio n. 15
0
    def _geo_gapless(self):
        l,w,h,m = self.l,self.w,self.h,self.m
        corners = dpr.square(l,w)
        #us = dpr.polygon(4)
        us = dpr.square(1,1)
        dpv.translate_coords(us,dpv.one().scale_u(0.5))
        dpv.scale_coords_x(us,l)
        dpv.scale_coords_y(us,w)
        us = [v.xy2d() for v in us]
        self._quad(*corners,us = us,m = m)
        bcorners = [c.copy().translate_z(-h) for c in corners]
        bcorners.reverse()
        self._quad(*bcorners,us = us,m = m)

        bcorners.reverse()
        bcorners.append(bcorners[0])
        corners.append(corners[0])
        nfs = self._bridge(corners,bcorners,m = m)
        self._project_uv_flat(nfs)
Esempio n. 16
0
def facade():
    import dilap.mesh.piecewisecomplex as pwc
    rim = [
        dpv.vector(0,0,0),dpv.vector(15,0,0),
        dpv.vector(15,0,4),dpv.vector(0,0,4)]

    door = [
        dpv.vector(-1,0,0.2),dpv.vector(1,0,0.2),
        dpv.vector(1,0,3),dpv.vector(-1,0,3)]
    dpv.translate_coords(door,dpv.vector(10,0,0))

    wspline = dpv.vector_spline(
        dpv.vector(2,0,3),dpv.vector(1.8,0,3.2),
        dpv.vector(-1.8,0,3.2),dpv.vector(-2,0,3),10)
    window = [
        dpv.vector(-2,0,0.5),dpv.vector(2,0,0.5),
        dpv.vector(2,0,3)]+wspline+[dpv.vector(-2,0,3)]
    dpv.translate_coords(window,dpv.vector(5,0,0))

    beam = [
        dpv.vector(1,0,1),dpv.vector(2,0,1),
        dpv.vector(2,0,9),dpv.vector(1,0,9)]

    #fac = (rim,(door,window,beam)),(beam,())
    fac = (rim,(door,window,beam)),
    
    plc = pwc.piecewise_linear_complex()
    plc.add_polygons(*fac)

    #plc.translate_polygon(2,dpv.vector(0,0,10))
    #plc.extrude_polygon(1,dpv.vector(0,1,0))

    plc.triangulate()

    #ax = plc.plot_xy()
    #ax = plc.plot()

    #plt.show()
    return plc
Esempio n. 17
0
def sweep_search(pts,center,tangent = None):
    # this will behave oddly when `which` would
    #  be a colinear set
    offset = center.copy().flip()
    dpv.translate_coords(pts,offset)
    if not tangent is None:
        tangent_rot = dpv.angle_from_xaxis_xy(tangent)
        dpv.rotate_z_coords(pts,-tangent_rot)
    which = center
    pang = 2*PI
    pcnt = len(pts)
    for adx in range(pcnt):
        pt = pts[adx]
        if pt is center: continue
        tpang = dpv.angle_from_xaxis_xy(pt)
        if tpang < pang:
            pang = tpang
            which = pt
    if not tangent is None:
        dpv.rotate_z_coords(pts,tangent_rot)
    dpv.translate_coords(pts,offset.flip())
    return which
Esempio n. 18
0
    def generate(self,seed,igraph,worn = 0):
        self._nodes_to_graph(self._node_wrap(
            dcu.cube().scale_u(10).translate_z(5).translate(seed)))
        self.tpts = [seed]
        self.hpts = []
        self.rpts = dpr.point_ring(100*worn,6)
        dpv.translate_coords(self.rpts,seed)

        rsys = gif.infrastructure(igraph).generate(seed,self.rpts,worn)
        self._consume(rsys)
        self.tpts.extend(rsys._terrain_points())
        self.hpts.extend(rsys._hole_points())

        '''#
        bbs = []
        for rd in rsys.roads:
            lotspace = rd._lotspace(bbs)
            dlot = dlt.lot(lotspace[0],lotspace[1]).generate(worn)
            lsppos,lsprot = lotspace[2],lotspace[3]
            dlot._transform(lsppos,lsprot,dpv.one())
            self._consume(dlot)
        '''#
        return self
Esempio n. 19
0
def box(l = 1,w = 1,h = 2):
    import dilap.mesh.piecewisecomplex as pwc
    plc = pwc.piecewise_linear_complex()

    pts = []
    pts.append(dpv.vector( 0, 0, 0))
    pts.append(dpv.vector( l, 0, 0))
    pts.append(dpv.vector( l, w, 0))
    pts.append(dpv.vector( 0, w, 0))
    pts.append(dpv.vector( 0, 0, h))
    pts.append(dpv.vector( l, 0, h))
    pts.append(dpv.vector( l, w, h))
    pts.append(dpv.vector( 0, w, h))
    dpv.translate_coords(pts,dpv.vector(-0.5*l,-0.5*w,0.0))

    polygons = ((3,2,1,0),(4,5,6,7),(0,1,5,4),(1,2,6,5),(2,3,7,6),(3,0,4,7))
    polygons = tuple((tuple(pts[x].copy() for x in p),()) for p in polygons)

    plc.add_polygons(*polygons)
    #dprf.profile_function(plc.triangulate)
    #ax = plc.plot()
    #plt.show()
    return plc
Esempio n. 20
0
 def _extrude(self,loop,curve,control,ctrl = None,ns = None,us = None,m = None):
     nfstart = len(self.faces)
     tangents = dpv.edge_tangents(curve)
     tangents.append(tangents[-1].copy())
     tangloop = [l.copy() for l in loop]
     tangloop = dpr.orient_loop(tangloop,tangents[0],control)
     tangloop = dpv.translate_coords(tangloop,curve[0])
     tailloop = dpr.project_coords_plane_along(
         tangloop,curve[0],tangents[0],tangents[0])
     n = len(curve)
     for step in range(1,n):
         c0,c1 = curve[step-1],curve[step]
         t0,t1 = tangents[step-1],tangents[step]
         halft = dpv.midpoint(t0,t1).normalize()
         n = halft
         tangloop = [l.copy() for l in loop]
         tangloop = dpr.orient_loop(tangloop,t0,control)
         tangloop = dpv.translate_coords(tangloop,c1)
         tiploop = dpr.project_coords_plane_along(tangloop,c1,n,t0)
         self._bridge(tiploop,tailloop,ns = ns,us = us,m = m)
         tailloop = [p.copy() for p in tiploop]
     nfend = len(self.faces)
     return range(nfstart,nfend)
Esempio n. 21
0
def box(l=1, w=1, h=2):
    import dilap.mesh.piecewisecomplex as pwc
    plc = pwc.piecewise_linear_complex()

    pts = []
    pts.append(dpv.vector(0, 0, 0))
    pts.append(dpv.vector(l, 0, 0))
    pts.append(dpv.vector(l, w, 0))
    pts.append(dpv.vector(0, w, 0))
    pts.append(dpv.vector(0, 0, h))
    pts.append(dpv.vector(l, 0, h))
    pts.append(dpv.vector(l, w, h))
    pts.append(dpv.vector(0, w, h))
    dpv.translate_coords(pts, dpv.vector(-0.5 * l, -0.5 * w, 0.0))

    polygons = ((3, 2, 1, 0), (4, 5, 6, 7), (0, 1, 5, 4), (1, 2, 6, 5),
                (2, 3, 7, 6), (3, 0, 4, 7))
    polygons = tuple((tuple(pts[x].copy() for x in p), ()) for p in polygons)

    plc.add_polygons(*polygons)
    #dprf.profile_function(plc.triangulate)
    #ax = plc.plot()
    #plt.show()
    return plc
Esempio n. 22
0
 def translate(self, v):
     self.p.translate(v)
     dpv.translate_coords(self.tpts, v)
     for h in self.hpts:
         dpv.translate_coords(h, v)
     return dmo.model.translate(self, v)
Esempio n. 23
0
def icosphere(r = 1,n = 1):
    import dilap.mesh.piecewisecomplex as pwc
    plc = pwc.piecewise_linear_complex()

    # create 12 vertices of a icosahedron
    t = (1.0+math.sqrt(5.0))/2.0
    pts = []
    pts.append(dpv.vector(-1, t, 0))
    pts.append(dpv.vector( 1, t, 0))
    pts.append(dpv.vector(-1,-t, 0))
    pts.append(dpv.vector( 1,-t, 0))
    pts.append(dpv.vector( 0,-1, t))
    pts.append(dpv.vector( 0, 1, t))
    pts.append(dpv.vector( 0,-1,-t))
    pts.append(dpv.vector( 0, 1,-t))
    pts.append(dpv.vector( t, 0,-1))
    pts.append(dpv.vector( t, 0, 1))
    pts.append(dpv.vector(-t, 0,-1))
    pts.append(dpv.vector(-t, 0, 1))
    dpv.translate_coords(pts,dpv.center_of_mass(pts).flip())

    triangles = []
    # 5 faces around point 0
    triangles.append((0,11,5))
    triangles.append((0,5,1))
    triangles.append((0,1,7))
    triangles.append((0,7,10))
    triangles.append((0,10,11))
    # 5 adjacent faces
    triangles.append((1,5,9))
    triangles.append((5,11,4))
    triangles.append((11,10,2))
    triangles.append((10,7,6))
    triangles.append((7,1,8))
    # 5 faces around point 3
    triangles.append((3,9,4))
    triangles.append((3,4,2))
    triangles.append((3,2,6))
    triangles.append((3,6,8))
    triangles.append((3,8,9))
    # 5 adjacent faces
    triangles.append((4,9,5))
    triangles.append((2,4,11))
    triangles.append((6,2,10))
    triangles.append((8,6,7))
    triangles.append((9,8,1))

    def esplit(lk,u,v):
        k = (u,v)
        if not k in lk:
            pts.append(dpv.midpoint(pts[u],pts[v]))
            lk[k] = len(pts)-1
        return lk[k]
    def tsplit(lk,u,v,w):
        m1 = esplit(lk,u,v)
        m2 = esplit(lk,v,w)
        m3 = esplit(lk,w,u)
        return (m1,m3,u),(m2,m1,v),(m3,m2,w),(m1,m2,m3)
    def split(itris):
        otris = []
        nwpts = {}
        for t in itris:otris.extend(tsplit(nwpts,*t))
        return otris
    for nx in range(n):triangles = split(triangles)
    for p in pts:p.normalize().scale_u(r)

    polygons = tuple((tuple(pts[x].copy() for x in t),()) for t in triangles)
    plc.add_polygons(*polygons)

    #dprf.profile_function(plc.triangulate)
    #plc.simplices = [(pts[u],pts[v],pts[w]) for u,v,w in triangles]
    #plc.ghostbnds = []
    #ax = plc.plot()
    #plt.show()
    return plc
Esempio n. 24
0
def plot_circle(c,r,ax = None,center = False):
    circ = dpv.translate_coords(dpr.point_ring(r,32),c)
    ax = plot_polygon(circ,ax,center)
    return ax
Esempio n. 25
0
 def _transform(self,t,q,s):
     q = dpq.q_from_av(q,dpv.z())
     dgc.context._transform(self,t,q,s)
     dpv.scale_coords(self.terrain_points,s)
     dpv.rotate_coords(self.terrain_points,q)
     dpv.translate_coords(self.terrain_points,t)
Esempio n. 26
0
def icosphere(r=1, n=1):
    import dilap.mesh.piecewisecomplex as pwc
    plc = pwc.piecewise_linear_complex()

    # create 12 vertices of a icosahedron
    t = (1.0 + math.sqrt(5.0)) / 2.0
    pts = []
    pts.append(dpv.vector(-1, t, 0))
    pts.append(dpv.vector(1, t, 0))
    pts.append(dpv.vector(-1, -t, 0))
    pts.append(dpv.vector(1, -t, 0))
    pts.append(dpv.vector(0, -1, t))
    pts.append(dpv.vector(0, 1, t))
    pts.append(dpv.vector(0, -1, -t))
    pts.append(dpv.vector(0, 1, -t))
    pts.append(dpv.vector(t, 0, -1))
    pts.append(dpv.vector(t, 0, 1))
    pts.append(dpv.vector(-t, 0, -1))
    pts.append(dpv.vector(-t, 0, 1))
    dpv.translate_coords(pts, dpv.center_of_mass(pts).flip())

    triangles = []
    # 5 faces around point 0
    triangles.append((0, 11, 5))
    triangles.append((0, 5, 1))
    triangles.append((0, 1, 7))
    triangles.append((0, 7, 10))
    triangles.append((0, 10, 11))
    # 5 adjacent faces
    triangles.append((1, 5, 9))
    triangles.append((5, 11, 4))
    triangles.append((11, 10, 2))
    triangles.append((10, 7, 6))
    triangles.append((7, 1, 8))
    # 5 faces around point 3
    triangles.append((3, 9, 4))
    triangles.append((3, 4, 2))
    triangles.append((3, 2, 6))
    triangles.append((3, 6, 8))
    triangles.append((3, 8, 9))
    # 5 adjacent faces
    triangles.append((4, 9, 5))
    triangles.append((2, 4, 11))
    triangles.append((6, 2, 10))
    triangles.append((8, 6, 7))
    triangles.append((9, 8, 1))

    def esplit(lk, u, v):
        k = (u, v)
        if not k in lk:
            pts.append(dpv.midpoint(pts[u], pts[v]))
            lk[k] = len(pts) - 1
        return lk[k]

    def tsplit(lk, u, v, w):
        m1 = esplit(lk, u, v)
        m2 = esplit(lk, v, w)
        m3 = esplit(lk, w, u)
        return (m1, m3, u), (m2, m1, v), (m3, m2, w), (m1, m2, m3)

    def split(itris):
        otris = []
        nwpts = {}
        for t in itris:
            otris.extend(tsplit(nwpts, *t))
        return otris

    for nx in range(n):
        triangles = split(triangles)
    for p in pts:
        p.normalize().scale_u(r)

    polygons = tuple((tuple(pts[x].copy() for x in t), ()) for t in triangles)
    plc.add_polygons(*polygons)

    #dprf.profile_function(plc.triangulate)
    #plc.simplices = [(pts[u],pts[v],pts[w]) for u,v,w in triangles]
    #plc.ghostbnds = []
    #ax = plc.plot()
    #plt.show()
    return plc
Esempio n. 27
0
def plot_circle(c, r, ax=None, center=False):
    circ = dpv.translate_coords(dpr.point_ring(r, 32), c)
    ax = plot_polygon(circ, ax, center)
    return ax
Esempio n. 28
0
 def translate_u(self,u):
     trn = dpv.vector(u,u,u)
     dpv.translate_coords(self.pcoords,trn)
     return self
Esempio n. 29
0
 def translate(self,v):
     dpv.translate_coords(self.pcoords,v)
     return self