Beispiel #1
0
 def _geo(self):
     w,ww,bh = self.w,self.wall.w,self.wall.h-self.h-self.z
     bottom = dcu.cube().translate_z(0.5)
     bottom.scale_x(w).scale_y(ww).scale_z(bh)
     bottom.rotate(dpq.q_from_uu(dpv.x(),self.wall.tangent))
     bottom._project_uv_flat()
     th = self.wall.h-self.h-bh
     top = dcu.cube().translate_z(0.5)
     top.scale_x(w).scale_y(ww).scale_z(th)
     top.translate_z(bh+self.h)
     top.rotate(dpq.q_from_uu(dpv.x(),self.wall.tangent))
     top._project_uv_flat()
     self._consume(bottom)._consume(top)
Beispiel #2
0
def prot_to_xy(py):
    eb,ibs = py
    ebn = dpr.polygon_normal(eb)
    if       ebn.near(dpv.nz()):prot = dpq.q_from_av(dpr.PI,dpv.x())
    elif not ebn.near(dpv.z() ):prot = dpq.q_from_uu(ebn,dpv.z())
    else:                       prot = dpq.zero()
    return prot
Beispiel #3
0
def prot_to_xy(py):
    eb, ibs = py
    ebn = dpr.polygon_normal(eb)
    if ebn.near(dpv.nz()): prot = dpq.q_from_av(dpr.PI, dpv.x())
    elif not ebn.near(dpv.z()): prot = dpq.q_from_uu(ebn, dpv.z())
    else: prot = dpq.zero()
    return prot
Beispiel #4
0
 def _geo(self):
     w, ww, th = self.w, self.wall.w, self.wall.h - self.h - self.z
     top = dcu.cube().translate_z(0.5)
     top.scale_x(w).scale_y(ww).scale_z(th)
     top.translate_z(self.z + self.h)
     top.rotate(dpq.q_from_uu(dpv.x(), self.wall.tangent))
     top._project_uv_flat()
     self._consume(top)
Beispiel #5
0
 def _geo(self):
     w,ww,th = self.w,self.wall.w,self.wall.h-self.h-self.z
     top = dcu.cube().translate_z(0.5)
     top.scale_x(w).scale_y(ww).scale_z(th)
     top.translate_z(self.z+self.h)
     top.rotate(dpq.q_from_uu(dpv.x(),self.wall.tangent))
     top._project_uv_flat()
     self._consume(top)
Beispiel #6
0
def orient_loop(loop,targetnormal,control = None):
    if control is None:control = dpv.center_of_mass(loop)
    n = normal(*loop[:3])
    if n == targetnormal.copy().flip():
        #print('HACK?')
        #qrot = dpq.q_from_av(numpy.pi,dpv.zhat)
        qrot = dpq.q_from_av(PI,dpv.yhat)
    else:qrot = dpq.q_from_uu(n,targetnormal)
    looprot = dpq.rotate_coords(loop,control,qrot)
    return looprot
Beispiel #7
0
def valid_pair(py1,py2):
    eb1,eb2 = py1[0],py2[0]

    for x in range(len(eb2)):
        one,two = eb2[x-1],eb2[x]
        if one.near(two):
            print('invalid!!!')
            pdb.set_trace()

    ebn1 = dpr.polygon_normal(eb1)
    pj1 = dpv.project_coords(list(eb1),ebn1)
    pj2 = dpv.project_coords(list(eb2),ebn1)
    if not (dpr.isnear(pj2.x,pj2.y) and dpr.isnear(pj1.x,pj2.x)):return
    if       ebn1.near(dpv.nz()):prot = dpq.q_from_av(dpr.PI,dpv.x())
    elif not ebn1.near(dpv.z() ):prot = dpq.q_from_uu(ebn1,dpv.z())
    else:                        prot = dpq.zero()
    return prot
Beispiel #8
0
def valid_pair(py1, py2):
    eb1, eb2 = py1[0], py2[0]

    for x in range(len(eb2)):
        one, two = eb2[x - 1], eb2[x]
        if one.near(two):
            print('invalid!!!')
            pdb.set_trace()

    ebn1 = dpr.polygon_normal(eb1)
    pj1 = dpv.project_coords(list(eb1), ebn1)
    pj2 = dpv.project_coords(list(eb2), ebn1)
    if not (dpr.isnear(pj2.x, pj2.y) and dpr.isnear(pj1.x, pj2.x)): return
    if ebn1.near(dpv.nz()): prot = dpq.q_from_av(dpr.PI, dpv.x())
    elif not ebn1.near(dpv.z()): prot = dpq.q_from_uu(ebn1, dpv.z())
    else: prot = dpq.zero()
    return prot
Beispiel #9
0
 def orient(self,p,d):
     # oient direction so that it points cylindrically away from p
     d.rotate(dpq.q_from_uu(d,p)).normalize()
     self.wobblerot(p,d)