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)
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
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
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)
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)
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
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
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
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)