def test_slerp(self): a1,v1 = dpr.PI4,vec3(0,0,1) a2,v2 = dpr.PI,vec3(0,0,1) q1,q2 = quat(1,0,0,0).av(0,v1),quat(1,1,1,0).av(a1,v1) q3 = quat(0,1,0,0).av(a2,v2) self.assertEqual(q1.slerp(q3,0.25),q2) self.assertFalse(q1.slerp(q3,0.25) is q1)
def test_rot(self): a1,v1 = dpr.PI4,vec3(0,0,1) a2,v2 = dpr.PI2,vec3(0,0,1) q1,q2 = quat(1,0,0,0).av(a1,v1),quat(1,1,1,0).av(a1,v1) q3 = quat(0,1,0,0).av(a2,v2) self.assertTrue(q1.rot(q2) == q3) self.assertTrue(q1.rot(q2) is q1)
def test_mul(self): a1,v1 = dpr.PI4,vec3(0,0,1) a2,v2 = dpr.threePI4,vec3(0,0,1) q1,q2 = quat(1,0,0,0).av(a1,v1),quat(1,1,1,0).av(a2,v1) q3 = quat(0,1,0,0).av(a1+a2,v2) self.assertTrue(q1.mul(q2) == q3) self.assertFalse(q1.mul(q2) is q1)
def test_cnj(self): q1,q2 = quat(1,0,0,0),quat(1,1,1,0) q3,q4 = quat(-1,2,5,11),quat(1,-2,-5,-11) self.assertTrue(q1.cp().cnj() == q1) self.assertTrue(q1.cnj() is q1) self.assertFalse(q2.cp().cnj() == q2) self.assertFalse(q3.cnj() == q4)
def test_inv(self): a1,v1 = dpr.PI4,vec3(0,0,1) a2,v2 = dpr.threePI4,vec3(0,0,1) q1,q2 = quat(1,0,0,0).av(a1,v1),quat(1,1,1,0).av(a2,v2) self.assertEqual(q1.cp().cnj(),q1.inv()) self.assertEqual(q2.cp().cnj(),q2.inv()) self.assertFalse(q1.inv() is q1)
def test_dot(self): a1,v1 = dpr.PI4,vec3(0,0,1) a2,v2 = dpr.PI2,vec3(0,1,0) q1,q2 = quat(1,0,0,0).av(a1,v1),quat(1,1,1,0).av(a1,v1) q3 = quat(0,1,0,0).av(a2,v2) q4 = quat(0,1,0,0).av(0,v1) self.assertTrue(dpr.isnear(q1.dot(q2),q1.mag2())) self.assertFalse(dpr.isnear(q1.dot(q3),0)) self.assertTrue(dpr.isnear(q3.dot(q4),q3.w))
def test_uscl(self): q1,q2 = quat(1,0,0,0),quat(1,1,1,0) q3,q4 = quat(0,2,5,11),quat(0,1,2.5,5.5) self.assertTrue(q1.cp().uscl(1) == q1) self.assertFalse(q1.cp().uscl(3) == q1) self.assertTrue(q2.cp().uscl(1) == q2) self.assertFalse(q2.cp().uscl(3) == q2) self.assertTrue(q3.cp().uscl(0.5) == q4) self.assertTrue(q1.uscl(1) is q1)
def skeleton(self): m = dmo.model() gm = m.agfxmesh() tr, nps, nes = self.lsys.topology mw = 2.0 knuckles = [] def walk(v, l, ml): ch = tr.below(v) if not ch: self.leaf(tr.above(v), v) #if not ch:self.branch(tr.above(v),v,l,ml,mw) else: kn = knuckle(tr.above(v), v, l, ml, mw) knuckles.append(kn) l += 1.0 ml = len(tr.allbelow(v)) for c in ch: #self.branch(v,c,l,ml,mw) kn.digit(c, l, ml, mw) walk(c, l, ml) if len(knuckles) == 1: kn.gen(m, gm, True) else: kn.gen(m, gm, False) walk(tr.root, 0, len(tr.allbelow(tr.root))) p, q, s = vec3(0, 0, 0), quat(0, 0, 0, 0), vec3(1, 1, 1) sgv = self.amodel(p, q, s, m, None) return self '''# m = dmo.model() gm = m.atricube() p = vec3(0,0,1) q = quat(0,0,0,0).av(numpy.pi/3.0,vec3(0,0,1)) #q = quat(0,0,0,0).av(0.0,vec3(0,0,1)) s = vec3(1,2,1) self.amodel(p,q,s,m,None) '''# for v in nps: m = dmo.model() gm = m.atricube() p = v.cp() q = quat(0, 0, 0, 0).av(0.0, vec3(0, 0, 1)) s = vec3(0.1, 0.1, 0.2) sgv = self.amodel(p, q, s, m, None) for e in nes: m = dmo.model() gm = m.atricube() m.trn(vec3(0, 0, 1)) p = nps[e[0]].cp() tn = nps[e[0]].tov(nps[e[1]]) q = quat(0, 0, 0, 0).uu(vec3(0, 0, 1), tn) s = vec3(0.05, 0.05, 0.5 * tn.mag()) sgv = self.amodel(p, q, s, m, None) return self
def test_graph(self): p1,r1,s1 = vec3(0,0,0),quat(0,0,0,1).av(0,vec3(0,0,1)),vec3(1,1,1) p2,r2,s2 = vec3(2,0,1),quat(0,0,0,1).av(dpr.PI2,vec3(0,0,1)),vec3(1,1,1) p3,r3,s3 = vec3(0,3,-1),quat(0,0,0,1).av(dpr.PI4,vec3(0,0,1)),vec3(1,1,1) tr = dsg.scenegraph() one = tr.avert(p1,r1,s1,tr.root) two = tr.avert(p2,r2,s2,tr.root) thr = tr.avert(p3,r3,s3,two) tr.graph()
def test_nrm(self): q1,q2,q3 = quat(1,0,0,0),quat(1,1,1,0),quat(0,2,5,11) self.assertEqual(dpr.isnear(q1.cp().nrm().mag(),1),1) self.assertEqual(dpr.isnear(q2.cp().nrm().mag(),1),1) self.assertEqual(dpr.isnear(q3.cp().nrm().mag(),1),1) self.assertTrue(q1.cp().nrm().mag() == q1.mag()) self.assertTrue(q1.nrm() is q1) self.assertFalse(q2.cp().nrm().mag() == q2.mag()) self.assertTrue(q2.nrm() is q2) self.assertFalse(q3.cp().nrm().mag() == q3.mag()) self.assertTrue(q3.nrm() is q3)
def test_isnear(self): q1,q2 = quat(1,1,1,0),quat(1,1,1,0.1) q3,q4 = quat(1,1,1,1),quat(1,1.000001,1,1) self.assertEqual(q1.isnear(q1),1) self.assertEqual(q3.isnear(q3),1) self.assertEqual(q1.isnear(q2),0) self.assertEqual(q2.isnear(q1),0) self.assertEqual(q1.isnear(q3),0) self.assertEqual(q2.isnear(q3),0) self.assertEqual(q2.isnear(q4),0) self.assertEqual(q3.isnear(q4),1)
def skeleton(self): m = dmo.model() gm = m.agfxmesh() tr,nps,nes = self.lsys.topology mw = 2.0 knuckles = [] def walk(v,l,ml): ch = tr.below(v) if not ch:self.leaf(tr.above(v),v) #if not ch:self.branch(tr.above(v),v,l,ml,mw) else: kn = knuckle(tr.above(v),v,l,ml,mw) knuckles.append(kn) l += 1.0 ml = len(tr.allbelow(v)) for c in ch: #self.branch(v,c,l,ml,mw) kn.digit(c,l,ml,mw) walk(c,l,ml) if len(knuckles) == 1:kn.gen(m,gm,True) else:kn.gen(m,gm,False) walk(tr.root,0,len(tr.allbelow(tr.root))) p,q,s = vec3(0,0,0),quat(0,0,0,0),vec3(1,1,1) sgv = self.amodel(p,q,s,m,None) return self '''# m = dmo.model() gm = m.atricube() p = vec3(0,0,1) q = quat(0,0,0,0).av(numpy.pi/3.0,vec3(0,0,1)) #q = quat(0,0,0,0).av(0.0,vec3(0,0,1)) s = vec3(1,2,1) self.amodel(p,q,s,m,None) '''# for v in nps: m = dmo.model() gm = m.atricube() p = v.cp() q = quat(0,0,0,0).av(0.0,vec3(0,0,1)) s = vec3(0.1,0.1,0.2) sgv = self.amodel(p,q,s,m,None) for e in nes: m = dmo.model() gm = m.atricube() m.trn(vec3(0,0,1)) p = nps[e[0]].cp() tn = nps[e[0]].tov(nps[e[1]]) q = quat(0,0,0,0).uu(vec3(0,0,1),tn) s = vec3(0.05,0.05,0.5*tn.mag()) sgv = self.amodel(p,q,s,m,None) return self
def test_flp(self): q1,q2 = quat(1,0,0,0),quat(1,1,1,0) q3,q4 = quat(0,2,5,11),quat(-1,1,1,0) self.assertFalse(q1.cp().flp() == q1) self.assertFalse(q2.cp().flp() == q2) self.assertTrue(q3.cp().flp() == q3) self.assertFalse(q4.cp().flp() == q4) self.assertTrue(q2.cp().flp() == q4) self.assertTrue(q1.flp() is q1) self.assertTrue(q2.flp() is q2) self.assertTrue(q3.flp() is q3) self.assertTrue(q4.flp() is q4)
def test_uu(self): u1,u2,u3 = vec3(1,0,0),vec3(0,-1,0),vec3(0,0,1) q1,q2 = quat(0,0,0,0).uu(u1,u2),quat(0,0,0,0).uu(u1,u3) q3,q4 = quat(0,0,0,0).uu(u2,u3),quat(0,0,0,0).uu(u3,u2) self.assertTrue(q1.w > 0.1) self.assertTrue(dpr.isnear(q1.x,0)) self.assertTrue(dpr.isnear(q1.y,0)) self.assertTrue(q1.z < -0.1) self.assertTrue(q2.w > 0.1) self.assertTrue(dpr.isnear(q2.x,0)) self.assertTrue(q2.y < -0.1) self.assertTrue(dpr.isnear(q2.z,0)) self.assertTrue(q3 == q4.cnj())
def setUp(self): a1 = dpr.PI2 v1,v2,v3 = vec3(1,0,0),vec3(0,1,0),vec3(0,0,1) q0 = quat(0,0,0,0).av( 0,v3) q1 = quat(0,0,0,0).av(a1,v1) q2 = quat(0,0,0,0).av(a1,v2) q3 = quat(0,0,0,0).av(a1,v3) self.tf1 = tform(vec3(1,1,0),q3.cp(),vec3(1,2,1)) self.tf2 = tform(vec3(1,1,0),q3.cp(),vec3(1,2,1)) self.tf3 = tform(vec3(0,1,0),q1,vec3(1,1,1)) a2 = dpr.PI q4 = quat(0,0,0,0).av(a2,v3) self.tf4 = tform(vec3(0,2,0),q4,vec3(1,4,1))
def splotch(vb, easement=10): # WIP vbes = [(vb[0][x - 1], vb[0][x]) for x in range(len(vb[0]))] vbels = [vb[0][x - 1].d(vb[0][x]) for x in range(len(vb[0]))] vbe_primary = vbels.index(max(vbels)) vbe_primary_tn = vb[0][vbe_primary - 1].tov(vb[0][vbe_primary]).nrm() bq = quat(0, 0, 0, 1).uu(vec3(1, 0, 0), vbe_primary_tn) if not bq: bq = quat(1, 0, 0, 0) vbcon = pym.aggregate(pym.contract(vb[0], easement), 5) vbxpj = vbe_primary_tn.prjps(vb[0]) vbypj = vbe_primary_tn.cp().zrot(gtl.PI2).prjps(vb[0]) vbxl, vbyl = vbxpj[1] - vbxpj[0], vbypj[1] - vbypj[0] dx, dy = 20, 20 xn, yn = int(1.5 * vbxl / dx), int(1.5 * vbyl / dy) print('xn,yn', xn, yn) o = vec3(0, 0, 0).com(vbcon) vgrid = [ o.cp().xtrn(dx * (x - (xn / 2.0))).ytrn(dy * (y - (yn / 2.0))) for x in range(xn) for y in range(yn) ] #vgrid = [p for p in vgrid if abs(p.x-10) > 10] boxes = [ p.cp().trn(o.flp()).rot(bq).trn(o.flp()).sq(dx, dy) for p in vgrid ] for b in boxes: bcom = vec3(0, 0, 0).com(b).flp() bcom.trnos(b) bq.rotps(b) bcom.flp().trnos(b) boxes = [b for b in boxes if pym.binbxy(b, vbcon)] for ib in vb[1]: boxes = [ b for b in boxes if not pym.bintbxy(b, ib) and not b[0].inbxy(ib) and not ib[0].inbxy(b[0]) ] blgfps = pym.ebuxy_special(boxes, 5, 4) ps = [vec3(0, 0, 0).com(blgfp) for blgfp in blgfps] qs = [bq.cp() for blgfp in blgfps] ss = [vec3(1, 1, 1) for blgfp in blgfps] for p, q, s, blgfp in zip(ps, qs, ss, blgfps): p.cpxy().flp().trnos(blgfp) q.cpf().rotps(blgfp) return zip(ps, qs, ss, blgfps)
def test_avert(self): p1,r1,s1 = vec3(0,0,0),quat(0,0,0,1),vec3(1,1,1) p2,r2,s2 = vec3(2,0,1),quat(0,0,0,1).av(dpr.PI2,vec3(0,0,1)),vec3(1,1,1) p3,r3,s3 = vec3(0,3,-1),quat(0,0,0,1).av(dpr.PI4,vec3(0,0,1)),vec3(1,1,1) tr = dsg.scenegraph() one = tr.avert(p1,r1,s1,tr.root) two = tr.avert(p2,r2,s2,tr.root) three = tr.avert(p3,r3,s3,two) self.assertEqual(tr.below(tr.root),[one,two]) self.assertEqual(tr.above(one),tr.root) self.assertEqual(tr.above(two),tr.root) self.assertEqual(tr.below(one),[]) self.assertEqual(tr.below(two),[three]) self.assertEqual(tr.above(three),two)
def chunk(b, epsilon, lscl=1.0, j1=None, j2=None, edge=False): if j1 is None: j1 = random.randint(0, len(b) - 1) if j2 is None: j2 = j1 - 1 l = b[j1].d(b[j2]) * lscl t = random.uniform(0, 2.0 * numpy.pi) n = random.randint(3, 8) if edge: stamp = b[j1].mid(b[j2]).pring(l / 2.0, n) else: stamp = vec3(random.randint(int(l / 4), int(l)), random.randint(int(l / 4), int(l)), 0).com(b).pring(l / 2.0, n) q = quat(1, 0, 0, 0).av(t, vec3(0, 0, 1)) q.rotps(stamp) if pym.binbxy(stamp, b): return stamp elif pym.bintbxy(b, stamp, col=False, ie=False): nbs = pym.ebixy(b, stamp, epsilon) nbas = [pym.bareaxy(nb) for nb in nbs] nb = nbs[nbas.index(max(nbas))] nb = pym.aggregate(nb, 1) if pym.bvalidxy(nb) > 0: return nb else: ax = dtl.plot_axes_xy(200) ax = dtl.plot_polygon_xy(b, ax, col='r', lw=2) ax = dtl.plot_polygon_xy(stamp, ax, col='b', lw=2) plt.show() raise ValueError
def ajagged(b, epsilon): j = random.randint(0, len(b) - 1) l = b[j - 1].d(b[j]) t = random.uniform(0, 2.0 * numpy.pi) n = random.randint(3, 8) stamp = b[j - 1].mid(b[j]).pring(l / 2.0, n) q = quat(1, 0, 0, 0).av(t, vec3(0, 0, 1)) q.rotps(stamp) if pym.bintbxy(b, stamp, col=False, ie=False): nbs = pym.ebdxy(b, stamp, epsilon) nbas = [pym.bareaxy(nb) for nb in nbs] nb = nbs[nbas.index(max(nbas))] nb = pym.aggregate(nb, 1) if pym.bvalidxy(nb) > 0: b = nb bval = pym.bvalidxy(b) if bval == -1: b.reverse() if not pym.bvalidxy(b) > 0: ax = dtl.plot_axes_xy(700) ax = dtl.plot_polygon_xy(b, ax, lw=4, col='b') ax = dtl.plot_points_xy(b, ax, number=True) ax = dtl.plot_polygon_xy(stamp, ax, lw=2, col='r') plt.show() #pdb.set_trace() raise ValueError return b
def ajagged(b,epsilon): j = random.randint(0,len(b)-1) l = b[j-1].d(b[j]) t = random.uniform(0,2.0*numpy.pi) n = random.randint(3,8) stamp = b[j-1].mid(b[j]).pring(l/2.0,n) q = quat(1,0,0,0).av(t,vec3(0,0,1)) q.rotps(stamp) if pym.bintbxy(b,stamp,col = False,ie = False): nbs = pym.ebdxy(b,stamp,epsilon) nbas = [pym.bareaxy(nb) for nb in nbs] nb = nbs[nbas.index(max(nbas))] nb = pym.aggregate(nb,1) if pym.bvalidxy(nb) > 0:b = nb bval = pym.bvalidxy(b) if bval == -1:b.reverse() if not pym.bvalidxy(b) > 0: ax = dtl.plot_axes_xy(700) ax = dtl.plot_polygon_xy(b,ax,lw = 4,col = 'b') ax = dtl.plot_points_xy(b,ax,number = True) ax = dtl.plot_polygon_xy(stamp,ax,lw = 2,col = 'r') plt.show() #pdb.set_trace() raise ValueError return b
def mr(rg, fp, ix): i = rg.vs[ix] ip = i[1]['p'] es = rg.rings[i[0]] oes = rg.orings[i[0]] oec = len(oes) if oec == 0: di = ip.tov(vec3(0, 0, 0).com(fp)) p2 = ip.cp().trn(di) #p2 = wfp(fp,ip,p2) res = rg.mev(ix, {'p': p2, 'l': 0}, {}) elif oec == 1: op = rg.vs[oes[0]][1]['p'] a = random.choice((-1, 1)) * numpy.pi / 2.0 q = quat(1, 0, 0, 0).av(a, vec3(0, 0, 1)) p2 = ip.cp().trn(op.tov(ip).rot(q)) p2 = wfp(fp, ip, p2) res = rg.mev(ix, {'p': p2, 'l': 0}, {}) else: for x in range(1, len(oes)): oeas = rg.ea(i[0], oes[x - 1], oes[x]) print('oeoeoe', oeas) #rg.vs[oes[0]][1]['p'] #i2,r1 = rg.mev(i1,{'p':p2,'l':0},{}) pdb.set_trace() return res
def mr(rg,fp,ix): i = rg.vs[ix] ip = i[1]['p'] es = rg.rings[i[0]] oes = rg.orings[i[0]] oec = len(oes) if oec == 0: di = ip.tov(vec3(0,0,0).com(fp)) p2 = ip.cp().trn(di) #p2 = wfp(fp,ip,p2) res = rg.mev(ix,{'p':p2,'l':0},{}) elif oec == 1: op = rg.vs[oes[0]][1]['p'] a = random.choice((-1,1))*numpy.pi/2.0 q = quat(1,0,0,0).av(a,vec3(0,0,1)) p2 = ip.cp().trn(op.tov(ip).rot(q)) p2 = wfp(fp,ip,p2) res = rg.mev(ix,{'p':p2,'l':0},{}) else: for x in range(1,len(oes)): oeas = rg.ea(i[0],oes[x-1],oes[x]) print('oeoeoe',oeas) #rg.vs[oes[0]][1]['p'] #i2,r1 = rg.mev(i1,{'p':p2,'l':0},{}) pdb.set_trace() return res
def chunk(b,epsilon,lscl = 1.0,j1 = None,j2 = None,edge = False): if j1 is None:j1 = random.randint(0,len(b)-1) if j2 is None:j2 = j1-1 l = b[j1].d(b[j2])*lscl t = random.uniform(0,2.0*numpy.pi) n = random.randint(3,8) if edge: stamp = b[j1].mid(b[j2]).pring(l/2.0,n) else: stamp = vec3( random.randint(int(l/4),int(l)), random.randint(int(l/4),int(l)), 0).com(b).pring(l/2.0,n) q = quat(1,0,0,0).av(t,vec3(0,0,1)) q.rotps(stamp) if pym.binbxy(stamp,b): return stamp elif pym.bintbxy(b,stamp,col = False,ie = False): nbs = pym.ebixy(b,stamp,epsilon) nbas = [pym.bareaxy(nb) for nb in nbs] nb = nbs[nbas.index(max(nbas))] nb = pym.aggregate(nb,1) if pym.bvalidxy(nb) > 0: return nb else: ax = dtl.plot_axes_xy(200) ax = dtl.plot_polygon_xy(b,ax,col = 'r',lw = 2) ax = dtl.plot_polygon_xy(stamp,ax,col = 'b',lw = 2) plt.show() raise ValueError
def test_graph(self): p1, r1, s1 = vec3(0, 0, 0), quat(0, 0, 0, 1).av(0, vec3(0, 0, 1)), vec3(1, 1, 1) p2, r2, s2 = vec3(2, 0, 1), quat(0, 0, 0, 1).av(dpr.PI2, vec3(0, 0, 1)), vec3(1, 1, 1) p3, r3, s3 = vec3(0, 3, -1), quat(0, 0, 0, 1).av(dpr.PI4, vec3(0, 0, 1)), vec3(1, 1, 1) tr = dsg.scenegraph() one = tr.avert(p1, r1, s1, tr.root) two = tr.avert(p2, r2, s2, tr.root) thr = tr.avert(p3, r3, s3, two) tr.graph()
def gen(self,m,gm,r = False): if r:bt = vec3(0,0,-1).pring(self.calc_w(),8) else:bt = self.base.MARK[1].pring(self.calc_w(),8) mid = self.corner.MARK[1].pring(self.calc_w(),8) tps = [chp[0].MARK[1].pring(self.calc_w(x),8) for x,chp in enumerate(self.chprops)] u2s = [self.corner.MARK[1].tov(chp[0].MARK[1]) for chp in self.chprops] u1 = self.base.MARK[1].tov(self.corner.MARK[1]) for u2,tp in zip(u2s,tps): if u1.mag() == 0:q1 = quat(0,0,0,1) else:q1 = quat(0,0,0,1).uu(vec3(0,0,1),u1) q2 = quat(0,0,0,1).uu(vec3(0,0,1),u2) vec3(0,0,0).com(mid).fulc(q1,mid) vec3(0,0,0).com(tp).fulc(q2,tp) self.tribridge(m,gm,mid,tp,'concrete1') if r:self.tribridge(m,gm,bt,mid,'concrete1') vec3(0,0,0).com(mid).fulc(q1.flp(),mid)
def splotch(vb,easement = 10): # WIP vbes = [(vb[0][x-1],vb[0][x]) for x in range(len(vb[0]))] vbels = [vb[0][x-1].d(vb[0][x]) for x in range(len(vb[0]))] vbe_primary = vbels.index(max(vbels)) vbe_primary_tn = vb[0][vbe_primary-1].tov(vb[0][vbe_primary]).nrm() bq = quat(0,0,0,1).uu(vec3(1,0,0),vbe_primary_tn) if not bq:bq = quat(1,0,0,0) vbcon = pym.aggregate(pym.contract(vb[0],easement),5) vbxpj = vbe_primary_tn.prjps(vb[0]) vbypj = vbe_primary_tn.cp().zrot(gtl.PI2).prjps(vb[0]) vbxl,vbyl = vbxpj[1]-vbxpj[0],vbypj[1]-vbypj[0] dx,dy = 20,20 xn,yn = int(1.5*vbxl/dx),int(1.5*vbyl/dy) print('xn,yn',xn,yn) o = vec3(0,0,0).com(vbcon) vgrid = [o.cp().xtrn(dx*(x-(xn/2.0))).ytrn(dy*(y-(yn/2.0))) for x in range(xn) for y in range(yn)] #vgrid = [p for p in vgrid if abs(p.x-10) > 10] boxes = [p.cp().trn(o.flp()).rot(bq).trn(o.flp()).sq(dx,dy) for p in vgrid] for b in boxes: bcom = vec3(0,0,0).com(b).flp() bcom.trnos(b) bq.rotps(b) bcom.flp().trnos(b) boxes = [b for b in boxes if pym.binbxy(b,vbcon)] for ib in vb[1]: boxes = [b for b in boxes if not pym.bintbxy(b,ib) and not b[0].inbxy(ib) and not ib[0].inbxy(b[0])] blgfps = pym.ebuxy_special(boxes,5,4) ps = [vec3(0,0,0).com(blgfp) for blgfp in blgfps] qs = [bq.cp() for blgfp in blgfps] ss = [vec3(1,1,1) for blgfp in blgfps] for p,q,s,blgfp in zip(ps,qs,ss,blgfps): p.cpxy().flp().trnos(blgfp) q.cpf().rotps(blgfp) return zip(ps,qs,ss,blgfps)
def test_avert(self): p1, r1, s1 = vec3(0, 0, 0), quat(0, 0, 0, 1), vec3(1, 1, 1) p2, r2, s2 = vec3(2, 0, 1), quat(0, 0, 0, 1).av(dpr.PI2, vec3(0, 0, 1)), vec3(1, 1, 1) p3, r3, s3 = vec3(0, 3, -1), quat(0, 0, 0, 1).av(dpr.PI4, vec3(0, 0, 1)), vec3(1, 1, 1) tr = dsg.scenegraph() one = tr.avert(p1, r1, s1, tr.root) two = tr.avert(p2, r2, s2, tr.root) three = tr.avert(p3, r3, s3, two) self.assertEqual(tr.below(tr.root), [one, two]) self.assertEqual(tr.above(one), tr.root) self.assertEqual(tr.above(two), tr.root) self.assertEqual(tr.below(one), []) self.assertEqual(tr.below(two), [three]) self.assertEqual(tr.above(three), two)
def branch(self, s, e, l, ml, mw): m = dmo.model() gm = m.atricube('generic') m.trn(vec3(0, 0, 1)) p = s.MARK[1].cp() tn = s.MARK[1].tov(e.MARK[1]) q = quat(0, 0, 0, 0).uu(vec3(0, 0, 1), tn) w = 0.1 * max((mw - (l / ml)**(0.25)), 0.2) s = vec3(w, w, 0.5 * tn.mag()) sgv = self.amodel(p, q, s, m, None)
def gen(self, m, gm, r=False): if r: bt = vec3(0, 0, -1).pring(self.calc_w(), 8) else: bt = self.base.MARK[1].pring(self.calc_w(), 8) mid = self.corner.MARK[1].pring(self.calc_w(), 8) tps = [ chp[0].MARK[1].pring(self.calc_w(x), 8) for x, chp in enumerate(self.chprops) ] u2s = [self.corner.MARK[1].tov(chp[0].MARK[1]) for chp in self.chprops] u1 = self.base.MARK[1].tov(self.corner.MARK[1]) for u2, tp in zip(u2s, tps): if u1.mag() == 0: q1 = quat(0, 0, 0, 1) else: q1 = quat(0, 0, 0, 1).uu(vec3(0, 0, 1), u1) q2 = quat(0, 0, 0, 1).uu(vec3(0, 0, 1), u2) vec3(0, 0, 0).com(mid).fulc(q1, mid) vec3(0, 0, 0).com(tp).fulc(q2, tp) self.tribridge(m, gm, mid, tp, 'concrete1') if r: self.tribridge(m, gm, bt, mid, 'concrete1') vec3(0, 0, 0).com(mid).fulc(q1.flp(), mid)
def branch(self,s,e,l,ml,mw): m = dmo.model() gm = m.atricube('generic') m.trn(vec3(0,0,1)) p = s.MARK[1].cp() tn = s.MARK[1].tov(e.MARK[1]) q = quat(0,0,0,0).uu(vec3(0,0,1),tn) w = 0.1*max((mw-(l/ml)**(0.25)),0.2) s = vec3(w,w,0.5*tn.mag()) sgv = self.amodel(p,q,s,m,None)
def test_av(self): a = 3*dpr.PI4 u1,u2,u3 = vec3(1,0,0),vec3(0,-1,0),vec3(0,0,1) q1,q2 = quat(0,0,0,0).av(a,u1),quat(0,0,0,0).av(a,u2) q3,q4 = quat(0,0,0,0).av(-a,u3),quat(0,0,0,0).av(-a,u2) self.assertTrue(q1.w > 0.1) self.assertTrue(q1.x > 0.1) self.assertTrue(dpr.isnear(q1.y,0)) self.assertTrue(dpr.isnear(q1.z,0)) self.assertTrue(q2.w > 0.1) self.assertTrue(dpr.isnear(q2.x,0)) self.assertTrue(q2.y < -0.1) self.assertTrue(dpr.isnear(q2.z,0)) self.assertTrue(q3.w > 0.1) self.assertTrue(dpr.isnear(q3.x,0)) self.assertTrue(dpr.isnear(q3.y,0)) self.assertTrue(q3.z < -0.1) self.assertFalse(q2 == q4.cp().flp()) self.assertTrue(q2 == q4.cnj())
def leaf(self, s, e): m = dmo.model() gm = m.atricube('generic') p = s.MARK[1].cp() tn = s.MARK[1].tov(e.MARK[1]) q = quat(0, 0, 0, 0).uu(vec3(0, 0, 1), tn) #w = 0.1*max((mw-(l/ml)**(0.25)),0.2) #s = vec3(w,w,0.5*tn.mag()) #q = quat(0,0,0,0).av(0.0,vec3(0,0,1)) s = vec3(0.2, 0.2, 0.5 * tn.mag()) m.trn(vec3(0, 0, 1)) sgv = self.amodel(p, q, s, m, None)
def leaf(self,s,e): m = dmo.model() gm = m.atricube('generic') p = s.MARK[1].cp() tn = s.MARK[1].tov(e.MARK[1]) q = quat(0,0,0,0).uu(vec3(0,0,1),tn) #w = 0.1*max((mw-(l/ml)**(0.25)),0.2) #s = vec3(w,w,0.5*tn.mag()) #q = quat(0,0,0,0).av(0.0,vec3(0,0,1)) s = vec3(0.2,0.2,0.5*tn.mag()) m.trn(vec3(0,0,1)) sgv = self.amodel(p,q,s,m,None)
def test_rot(self): q = quat(0, 0, 0, 0).av(dpr.PI2, vec3(0, 0, 1)) self.pset.rot(q) self.assertTrue(vec3(0, 0, 0) in self.pset.ps) self.assertTrue(vec3(-1, 0, 0) in self.pset.ps) self.assertTrue(vec3(-1, 1, 0) in self.pset.ps) self.assertTrue(vec3(0, 1, 0) in self.pset.ps) self.assertTrue(vec3(0, 0, 1) in self.pset.ps) self.assertTrue(vec3(-1, 0, 1) in self.pset.ps) self.assertTrue(vec3(-1, 1, 1) in self.pset.ps) self.assertTrue(vec3(0, 1, 1) in self.pset.ps) self.assertFalse(vec3(1, 0, 0) in self.pset.ps) self.assertFalse(vec3(1, 1, 0) in self.pset.ps) self.assertFalse(vec3(1, 0, 1) in self.pset.ps) self.assertFalse(vec3(1, 1, 1) in self.pset.ps)
def test_rot(self): q = quat(0,0,0,0).av(dpr.PI2,vec3(0,0,1)) self.pset.rot(q) self.assertTrue(vec3( 0,0,0) in self.pset.ps) self.assertTrue(vec3(-1,0,0) in self.pset.ps) self.assertTrue(vec3(-1,1,0) in self.pset.ps) self.assertTrue(vec3( 0,1,0) in self.pset.ps) self.assertTrue(vec3( 0,0,1) in self.pset.ps) self.assertTrue(vec3(-1,0,1) in self.pset.ps) self.assertTrue(vec3(-1,1,1) in self.pset.ps) self.assertTrue(vec3( 0,1,1) in self.pset.ps) self.assertFalse(vec3(1,0,0) in self.pset.ps) self.assertFalse(vec3(1,1,0) in self.pset.ps) self.assertFalse(vec3(1,0,1) in self.pset.ps) self.assertFalse(vec3(1,1,1) in self.pset.ps)
class lgrammer: push = lambda ls : ls.avert() def pop(ls):ls.tip = ls.above(ls.tip) edge = lambda ls : (ls.tip.p.cp(),ls.tip.p.trn(ls.tip.d.cp().uscl(ls.drho))) term = lambda ls : ls.tip.p.cp() getqv = lambda d : y if (d.isnear(z) or d.isnear(nz)) else z def polar(ls,f = 1.0): ls.tip.d.rot(quat(0,0,0,0).av(f*ls.dpolar,lgrammer.getqv(ls.tip.d))) polar_u = lambda ls : lgrammer.polar(ls, 1) polar_d = lambda ls : lgrammer.polar(ls,-1) def azimuthal(ls,f = 1.0): ls.tip.d.rot(quat(0,0,0,0).av(f*ls.dazimuthal,lgrammer.getqv(ls.tip.d))) azimuthal_u = lambda ls : lgrammer.azimuthal(ls, 1) azimuthal_d = lambda ls : lgrammer.azimuthal(ls,-1) azimuthal_f = lambda ls : lgrammer.azimuthal(ls,numpy.pi/ls.dazimuthal) pitch_u = lambda ls : d.rot(quat(0,0,0,0).av( ls.dpitch,vec3(1,0,0))) pitch_d = lambda ls : d.rot(quat(0,0,0,0).av(-ls.dpitch,vec3(1,0,0))) yaw_u = lambda ls : d.rot(quat(0,0,0,0).av( ls.dyaw, vec3(0,0,1))) yaw_d = lambda ls : d.rot(quat(0,0,0,0).av(-ls.dyaw, vec3(0,0,1))) roll_u = lambda ls : d.rot(quat(0,0,0,0).av( ls.droll, vec3(0,1,0))) roll_d = lambda ls : d.rot(quat(0,0,0,0).av(-ls.droll, vec3(0,1,0))) dic = { '{':push,'}':pop,'F':edge,'Q':term, '(':polar_u,'[':azimuthal_u,'<':pitch_u,'+':yaw_u,'=':roll_u, ')':polar_d,']':azimuthal_d,'>':pitch_d,'-':yaw_d,'|':roll_d, '$':azimuthal_f, } #'&':self.randrot,'~':self.randdirrot, #'^':self.wobblerot, #'O':self.orient, '''#
def test_rot(self): v1,v2 = vec3(0,2,0),vec3(-2,0,0) q1 = quat(0,0,0,0).av(dpr.PI2,vec3(0,0,1)) q2 = quat(0,0,0,0).av(0,vec3(0,0,1)) self.assertEqual(v1.rot(q1),v2) self.assertEqual(v1.cp().rot(q2),v1)
def amodel(self, p=None, q=None, s=None, m=None, par=None): if p is None: p = vec3(0, 0, 0) if q is None: q = quat(1, 0, 0, 0) if s is None: s = vec3(1, 1, 1) return self.sgraph.avert(p, q, s, models=[m], parent=par)
def azimuthal(ls,f = 1.0): ls.tip.d.rot(quat(0,0,0,0).av(f*ls.dazimuthal,lgrammer.getqv(ls.tip.d)))
def polar(ls,f = 1.0): ls.tip.d.rot(quat(0,0,0,0).av(f*ls.dpolar,lgrammer.getqv(ls.tip.d)))
def __init__(self): ntf = tform(vec3(0,0,0),quat(1,0,0,0),vec3(1,1,1)) dtr.tree.__init__(self,ntf)
def atest_bsegbxy(self): def pl(b1, b2, br): ax = dtl.plot_axes_xy() ax = dtl.plot_polygon_xy(b1, ax, col='b', lw=5.0) ax = dtl.plot_polygon_xy(b2, ax, col='g', lw=5.0) for be in br: ax = dtl.plot_edges_xy(be, ax, mk='s', col='r', lw=2.0) #ax = dtl.plot_polygon_xy(br,ax,mk = 's',col = 'r',lw = 2.0) plt.show() boundary = vec3(0, 0, 0).pring(500, 8) b1 = pym.contract(boundary, 100) b2 = vec3(500, 0, 0).sq(800, 300) br = pym.bsegbxy(b1, b2) #pl(b1,b2,br) self.assertTrue(len(br) == 10) b1 = vec3(-4, 0, 0).pring(4, 8) b2 = vec3(2, 2, 0).pring(4, 8) br = pym.bsegbxy(b1, b2) #pl(b1,b2,br) self.assertTrue(len(br) == 9) b1 = vec3(0, 0, 0).sq(3, 3) b2 = vec3(2, 2, 0).sq(3, 3) br = pym.bsegbxy(b1, b2) #pl(b1,b2,br) self.assertTrue(len(br) == 6) b1 = vec3(0, 0, 0).sq(3, 3) b2 = vec3(3, 3, 0).sq(3, 3) br = pym.bsegbxy(b1, b2) #pl(b1,b2,br) self.assertTrue(len(br) == 4) b1 = vec3(0, 0, 0).sq(3, 3) b2 = vec3(3, 0, 0).sq(3, 3) br = pym.bsegbxy(b1, b2) #pl(b1,b2,br) self.assertTrue(len(br) == 4) b1 = vec3(0, 0, 0).sq(3, 3) b2 = vec3(3, 0, 0).sq(3, 1) br = pym.bsegbxy(b1, b2) #pl(b1,b2,br) self.assertTrue(len(br) == 6) b1 = vec3(0, 0, 0).sq(3, 3) b2 = vec3(0, -2, 0).sq(3, 3) quat(0, 0, 0, 0).av(numpy.pi / 4.0, vec3(0, 0, 1)).rotps(b1) br = pym.bsegbxy(b1, b2) #pl(b1,b2,br) self.assertTrue(len(br) == 6) b1 = vec3(0, 0, 0).sq(3, 3) b2 = vec3(1, 1, 0).sq(1, 1) br = pym.bsegbxy(b1, b2) #pl(b1,b2,br) self.assertTrue(len(br) == 6) b1 = vec3(0, 0, 0).sq(3, 3) b2 = vec3(2, 2, 0).sq(3, 3) quat(0, 0, 0, 0).av(numpy.pi / 4.0, vec3(0, 0, 1)).rotps(b2) br = pym.bsegbxy(b1, b2) #pl(b1,b2,br) self.assertTrue(len(br) == 6) b1 = vec3(0, 0, 0).sq(4, 4) b2 = vec3(2, 0, 0).sq(2, 6) br = pym.bsegbxy(b1, b2) #pl(b1,b2,br) self.assertTrue(len(br) == 6)
def atest_bsegbxy(self): def pl(b1,b2,br): ax = dtl.plot_axes_xy() ax = dtl.plot_polygon_xy(b1,ax,col = 'b',lw = 5.0) ax = dtl.plot_polygon_xy(b2,ax,col = 'g',lw = 5.0) for be in br: ax = dtl.plot_edges_xy(be,ax,mk = 's',col = 'r',lw = 2.0) #ax = dtl.plot_polygon_xy(br,ax,mk = 's',col = 'r',lw = 2.0) plt.show() boundary = vec3(0,0,0).pring(500,8) b1 = pym.contract(boundary,100) b2 = vec3(500,0,0).sq(800,300) br = pym.bsegbxy(b1,b2) #pl(b1,b2,br) self.assertTrue(len(br) == 10) b1 = vec3(-4,0,0).pring(4,8) b2 = vec3(2,2,0).pring(4,8) br = pym.bsegbxy(b1,b2) #pl(b1,b2,br) self.assertTrue(len(br) == 9) b1 = vec3(0,0,0).sq(3,3) b2 = vec3(2,2,0).sq(3,3) br = pym.bsegbxy(b1,b2) #pl(b1,b2,br) self.assertTrue(len(br) == 6) b1 = vec3(0,0,0).sq(3,3) b2 = vec3(3,3,0).sq(3,3) br = pym.bsegbxy(b1,b2) #pl(b1,b2,br) self.assertTrue(len(br) == 4) b1 = vec3(0,0,0).sq(3,3) b2 = vec3(3,0,0).sq(3,3) br = pym.bsegbxy(b1,b2) #pl(b1,b2,br) self.assertTrue(len(br) == 4) b1 = vec3(0,0,0).sq(3,3) b2 = vec3(3,0,0).sq(3,1) br = pym.bsegbxy(b1,b2) #pl(b1,b2,br) self.assertTrue(len(br) == 6) b1 = vec3(0,0,0).sq(3,3) b2 = vec3(0,-2,0).sq(3,3) quat(0,0,0,0).av(numpy.pi/4.0,vec3(0,0,1)).rotps(b1) br = pym.bsegbxy(b1,b2) #pl(b1,b2,br) self.assertTrue(len(br) == 6) b1 = vec3(0,0,0).sq(3,3) b2 = vec3(1,1,0).sq(1,1) br = pym.bsegbxy(b1,b2) #pl(b1,b2,br) self.assertTrue(len(br) == 6) b1 = vec3(0,0,0).sq(3,3) b2 = vec3(2,2,0).sq(3,3) quat(0,0,0,0).av(numpy.pi/4.0,vec3(0,0,1)).rotps(b2) br = pym.bsegbxy(b1,b2) #pl(b1,b2,br) self.assertTrue(len(br) == 6) b1 = vec3(0,0,0).sq(4,4) b2 = vec3(2,0,0).sq(2,6) br = pym.bsegbxy(b1,b2) #pl(b1,b2,br) self.assertTrue(len(br) == 6)
def amodel(self,p = None,q = None,s = None,m = None,par = None): if p is None:p = vec3(0,0,0) if q is None:q = quat(1,0,0,0) if s is None:s = vec3(1,1,1) return self.sgraph.avert(p,q,s,models = [m],parent = par)