def split(self,ps,ws,ts): level0 = [] level = [] after = [] mpt = dpv.midpoint pcnt = len(ps) for t in ts: if ws[t[0]] == ws[t[1]]:w1 = ws[t[0]].copy() else:w1 = dpv.one() if ws[t[1]] == ws[t[2]]:w2 = ws[t[1]].copy() else:w2 = dpv.one() if ws[t[2]] == ws[t[0]]:w3 = ws[t[2]].copy() else:w3 = dpv.one() m1 = self.search(level,level0,ps[t[0]],ps[t[1]],w1)+pcnt m2 = self.search(level,level0,ps[t[1]],ps[t[2]],w2)+pcnt m3 = self.search(level,level0,ps[t[2]],ps[t[0]],w3)+pcnt after.append((t[0],m1,m3)) after.append((m1,t[1],m2)) after.append((m3,m2,t[2])) after.append((m1,m2,m3)) for l in level: l[0].z += l[1] ps.append(l[0]) ws.append(l[2]) return after
def _cover(self,radius = 100,tri_edgelength = 10,mod_edgelength = 250): convexcover = dpr.pts_to_convex_xy(self.regions) dpr.inflate(convexcover,radius) pts,tris = dpr.triangle_cover(convexcover,mod_edgelength) wts = [dpv.one() for x in pts] self.center = dpv.center_of_mass(convexcover) return pts,wts,tris,convexcover
def __init__(self, owner, **kwargs): self.owner = owner self._def('parent', None, **kwargs) self._def('children', [], **kwargs) self._def('pos', dpv.zero(), **kwargs) #self._def('rot',dpv.zero(),**kwargs) self._def('rot', dpq.zero(), **kwargs) self._def('scl', dpv.one(), **kwargs)
def __init__(self,owner,**kwargs): self.owner = owner self._def('parent',None,**kwargs) self._def('children',[],**kwargs) self._def('pos',dpv.zero(),**kwargs) #self._def('rot',dpv.zero(),**kwargs) self._def('rot',dpq.zero(),**kwargs) self._def('scl',dpv.one(),**kwargs)
def _def_uv_tform(self,*args,**kwargs): if hasattr(self,'uv_tform'):return kweys = kwargs.keys() pos = kwargs[ke] if 'uv_pos' in kweys else dpv.zero() rot = kwargs[ke] if 'uv_rot' in kweys else dpv.zero() scl = kwargs[ke] if 'uv_scl' in kweys else dpv.one() tpar = kwargs[ke] if 'uv_parent' in kweys else None tchi = kwargs[ke] if 'uv_children' in kweys else [] ntf = dtf.tform(self,parent = tpar, pos = pos,rot = rot,scl = scl, children = [ch.uv_tform for ch in tchi]) self.uv_tform = ntf
def _def_tform(self,*args,**kwargs): if hasattr(self,'tform'):return kweys = kwargs.keys() pos = kwargs['pos'] if 'pos' in kweys else dpv.zero() rot = kwargs['rot'] if 'rot' in kweys else dpq.zero() scl = kwargs['scl'] if 'scl' in kweys else dpv.one() tpar = kwargs['parent'] if 'parent' in kweys else None tchi = kwargs['children'] if 'children' in kweys else [] ntf = dtf.tform(self,parent = tpar, pos = pos,rot = rot,scl = scl, children = [ch.tform for ch in tchi]) self.tform = ntf
def _geo(self): og = dpv.one().scale_u(0.5).flip() bottom = [og.copy(), og.copy().translate_x(1), og.copy().translate_x(1).translate_y(1), og.copy().translate_y(1)] top = [b.copy().translate_z(1) for b in bottom] bottom.reverse() self._quad(*bottom) self._quad(*top) top.reverse() bottom.append(bottom[0]) top.append(top[0]) self._bridge(bottom,top)
def _def_uv_tform(self, *args, **kwargs): if hasattr(self, 'uv_tform'): return kweys = kwargs.keys() pos = kwargs[ke] if 'uv_pos' in kweys else dpv.zero() rot = kwargs[ke] if 'uv_rot' in kweys else dpv.zero() scl = kwargs[ke] if 'uv_scl' in kweys else dpv.one() tpar = kwargs[ke] if 'uv_parent' in kweys else None tchi = kwargs[ke] if 'uv_children' in kweys else [] ntf = dtf.tform(self, parent=tpar, pos=pos, rot=rot, scl=scl, children=[ch.uv_tform for ch in tchi]) self.uv_tform = ntf
def _def_tform(self, *args, **kwargs): if hasattr(self, 'tform'): return kweys = kwargs.keys() pos = kwargs['pos'] if 'pos' in kweys else dpv.zero() rot = kwargs['rot'] if 'rot' in kweys else dpq.zero() scl = kwargs['scl'] if 'scl' in kweys else dpv.one() tpar = kwargs['parent'] if 'parent' in kweys else None tchi = kwargs['children'] if 'children' in kweys else [] ntf = dtf.tform(self, parent=tpar, pos=pos, rot=rot, scl=scl, children=[ch.tform for ch in tchi]) self.tform = ntf
def _geo(self): og = dpv.one().scale_u(0.5).flip() bottom = [ og.copy(), og.copy().translate_x(1), og.copy().translate_x(1).translate_y(1), og.copy().translate_y(1) ] top = [b.copy().translate_z(1) for b in bottom] bottom.reverse() self._quad(*bottom) self._quad(*top) top.reverse() bottom.append(bottom[0]) top.append(top[0]) self._bridge(bottom, top)
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)
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)