def generate_a_tree(cladname, numbranches, numtrees, filenames_in, t1, t2, theta, length): branchings = numbranches x = [branchings] * numtrees #t1=gauss(radians(-29),radians(2)) #t1=radians(-32) #t2=gauss(radians(75),radians(3)) #t2=radians(78) #theta=Branch(Branch(gauss(0.725,0.03),gauss(0.86,0.03)),Branch(gauss(1.05,0.3),gauss(0.807,0.2))) #theta=Branch(Branch(0.738,0.897),Branch(1.05,0.951)) #length=Branch(0.79+random()*0.05,0.63+random()*0.17) #length=Branch(0.8,0.63) #print("Generating tree. t1="+str(t1)+',t2='+str(t2)+',tm='+str(theta)+',lm='+str(length)) m = metatree(start, x, 10, Branch(radians(t1), radians(t2)), theta, length, render=True, debug=False) termpos = [] dwg = svgwrite.Drawing(size=('3600mm', '3600mm'), debug=False) '''threadfilt=dwg.defs.add(svgwrite.filters.Filter()) threadfilt.feMerge(['SourceGraphic'],result='bypass') for i in range(3): threadfilt.feTurbulence(stitchtiles='stitch',type='turbulence',baseFrequency=gauss(0.07,0.03),numOctaves=16,result='haze'+str(i),seed=randrange(193048148176)) threadfilt.feTurbulence(stitchtiles='stitch',type='fractalNoise',baseFrequency=0.1,numOctaves=4,result='noise'+str(i),seed=randrange(109861223425)) threadfilt.feDisplacementMap(in_='SourceGraphic',in2='haze'+str(i),scale=gauss(3.5,0.9),xChannelSelector='R',yChannelSelector='G',result="twiddle"+str(i)) threadfilt.feColorMatrix(in_='twiddle'+str(i),result='black_twiddle'+str(i),type='matrix',values="0.4 0 0 0 0.6 0 0.4 0 0 0.6 0 0 0.4 0 0.6 0 0 0 0.6 0",debug=False) threadfilt.feGaussianBlur(in_='black_twiddle'+str(i),result='shadow_twiddle'+str(i),stdDeviation=0.15) threadfilt.feGaussianBlur(in_='twiddle'+str(i),result='hazy_twiddle'+str(i),stdDeviation=0.09) threadfilt.feComposite(in_='hazy_twiddle'+str(i),in2='shadow_twiddle'+str(i),result='shadowed_twiddle'+str(i),operator='over') threadfilt.feMerge(['shadowed_twiddle'+str(i) for i in range(3)],result='twisted_flax') threadfilt.feGaussianBlur(in_='twisted_flax',stdDeviation=0.05) threadfilt.feMerge(['bypass']) ''' #g=dwg.g(id='topgroup',filter=threadfilt.get_funciri()) for idx, t in enumerate(m['trees']): #pos=tuple(float(s) for s in t['transform'][7:-1].split(',')[1:]) #termpos.append(Vec2D(*pos)) t['id'] = 'choanotree_' + str(idx) dwg.add(t) filename = '/tmp/' + cladname + '.svg' #+'_t1='+myround(degrees(t1),1)+'_t2='+myround(degrees(t2),1)+'_thet=(('+myround(theta.l.l,3)+'_'+myround(theta.l.r,3)+')('+myround(theta.r.l,3)+'_'+myround(theta.r.r,3)+')'+'_len=('+myround(length.l,2)+'_'+myround(length.r,2)+').svg' print(filename) with open(filename, 'w') as f: f.write(dwg.tostring()) with open(filenames_in, 'a') as f: f.write(filename + '\n')
def generate_a_tree(cladname, numbranches, numtrees, filenames_in): branchings = numbranches x = [branchings] * numtrees #t1=radians(-29)+radians(randint(-5,5)) t1 = gauss(radians(-29), radians(2)) t1 = gauss(radians(-26.8), radians(1)) #t2=radians(75)+radians(randint(-9,9)) t2 = gauss(radians(75), radians(3)) t2 = gauss(radians(72.9), radians(1.5)) #theta=Branch(Branch(0.68+random()*0.09,0.83+random()*0.09),Branch(1.05,0.75+random()*0.45)) theta = Branch(Branch(gauss(0.725, 0.03), gauss(0.86, 0.03)), Branch(gauss(1.05, 0.3), gauss(0.807, 0.2))) length = Branch(0.79 + random() * 0.05, 0.63 + random() * 0.17) theta = Branch(Branch(gauss(0.733, 0.03), gauss(0.825, 0.03)), Branch(gauss(0.9, 0.1), gauss(0.62, 0.2))) #Metazoa:t1=-31.0_t2=68.0_thet=((0.757_0.892)(1.05_0.842)_len=(0.8_0.66) t1 = radians(-31) t2 = radians(68) theta = Branch(Branch(0.757, 0.892), Branch(1.05, 0.842)) length = Branch(0.8, 0.66) #theta=Branch(Branch(0.72,0.79),Branch(0.89,0.84)) #length=Branch(0.81,0.68) #file:///home/bwsq/Documents/TreeOfLife/processing-lite/test_15px_2*2%5E15 #t1=-25.0,t2=82.0,thet%3A((0.75,0.87),(1.05,1.054),len=(0.83,0.7).svg #t1=-29.0,t2=78.0,thet:((0.718,0.873),(1.05,0.808),len=(0.81,0.65) #t1=radians(-28) #t2=radians(78) #theta=Branch(Branch(0.694,0.897),Branch(1.05,0.896)) #length=Branch(0.79,0.77) import cProfile #cProfile.run(''' m = metatree(start, x, 10, Branch(t1, t2), theta, length, render=True, debug=False) #''') termpos = [] dwg = svgwrite.Drawing(size=('3600mm', '3600mm'), debug=False) threadfilt = dwg.defs.add(svgwrite.filters.Filter()) threadfilt.feMerge(['SourceGraphic'], result='bypass') for i in range(3): threadfilt.feTurbulence(stitchtiles='stitch', type='turbulence', baseFrequency=gauss(0.07, 0.03), numOctaves=16, result='haze' + str(i), seed=randrange(193048148176)) threadfilt.feTurbulence(stitchtiles='stitch', type='fractalNoise', baseFrequency=0.1, numOctaves=4, result='noise' + str(i), seed=randrange(109861223425)) threadfilt.feDisplacementMap(in_='SourceGraphic', in2='haze' + str(i), scale=gauss(3.5, 0.9), xChannelSelector='R', yChannelSelector='G', result="twiddle" + str(i)) threadfilt.feColorMatrix( in_='twiddle' + str(i), result='black_twiddle' + str(i), type='matrix', values="1 0 0 0 0.7 0 1 0 0 0.7 0 0 1 0 0 0.4 0.4 0.6 0 0", debug=False) threadfilt.feGaussianBlur(in_='black_twiddle' + str(i), result='shadow_twiddle' + str(i), stdDeviation=0.15) threadfilt.feGaussianBlur(in_='twiddle' + str(i), result='hazy_twiddle' + str(i), stdDeviation=0.07) threadfilt.feComposite(in_='hazy_twiddle' + str(i), in2='shadow_twiddle' + str(i), result='shadowed_twiddle' + str(i), operator='over') threadfilt.feMerge(['shadowed_twiddle' + str(i) for i in range(3)], result='twisted_flax') threadfilt.feMorphology(in_='SourceGraphic', operator='dilate', radius=1.25, result='blurrr') threadfilt.feTurbulence(stitchtiles='stitch', type='turbulence', baseFrequency=0.1, numOctaves=4, result='noise') threadfilt.feDisplacementMap(in_='blurrr', in2='noise', scale=1.2, result='fuzzy') threadfilt.feComposite(in_='twisted_flax', in2='fuzzy', operator='in', result='reeesult') threadfilt.feGaussianBlur(in_='reeesult', stdDeviation=0.05) threadfilt.feMerge(['bypass']) g = dwg.g(id='topgroup', filter=threadfilt.get_funciri()) for t in m['trees']: pos = tuple(float(s) for s in t['transform'][7:-1].split(',')[1:]) termpos.append(Vec2D(*pos)) g.add(t) dwg.add(g) filename = cladname + '_t1=' + myround(degrees(t1), 1) + '_t2=' + myround( degrees(t2), 1) + '_thet=((' + myround(theta.l.l, 3) + '_' + myround( theta.l.r, 3) + ')(' + myround(theta.r.l, 3) + '_' + myround( theta.r.r, 3) + ')' + '_len=(' + myround( length.l, 2) + '_' + myround(length.r, 2) + ').svg' print(filename) with open(filename, 'w') as f: f.write(dwg.tostring()) with open(filenames_in, 'a') as f: f.write(filename + '\n')