def redraw(): global p1,p2,p3 print "p1 = %s, p2 = %s, p3 = %s" % (p1,p2,p3) z = Zell( p1, 0, p2, p2, p3, p1 ) vo = Voron( *z.to_reper() ) drawgl.clear() drawgl( vo )
def redraw(): global p1, p2, p3 print "p1 = %s, p2 = %s, p3 = %s" % (p1, p2, p3) z = Zell(p1, 0, p2, p2, p3, p1) vo = Voron(*z.to_reper()) drawgl.clear() drawgl(vo)
def sel(obj): global ucm if type(obj) is Vec: s = SpGrp(166, 2) p = ucm.rep.dec2frac(obj) for v in s * p: v = ucm.rep * v drawgl(v, r=0.05, color=(1, 0, 0))
def sel( obj ): global ucm if type( obj ) is Vec: s = SpGrp( 166, 2 ) p = ucm.rep.dec2frac( obj ) for v in s * p: v = ucm.rep * v drawgl( v, r = 0.05, color = (1,0,0) )
def draw(r, c=(1, 1, 1)): print "-------------" cs = [(1, 0, 0), (0, 1, 0), (0, 0, 1)] for i, v in enumerate(r): print "--->", v.vlen() drawgl(v, style="line", color=cs[i]) # drawgl( v, color = c ) drawgl(Voron(*r))
def draw( r, c = (1,1,1) ): print '-------------' cs = [ (1,0,0), (0,1,0), (0,0,1) ] for i,v in enumerate( r ): print '--->', v.vlen() drawgl( v, style = "line", color = cs[ i ] ) #drawgl( v, color = c ) drawgl( Voron( *r ) )
def redraw(): global pos, reps #### constructing sublattice reper #r1 = Zell( -1, 0, -1, -1, 0, -1 ).to_reper() r1, r2 = reps[ pos ] vo1 = Voron( *r1 ) vo2 = Voron( *r2 ) drawgl.clear() drawgl( vo1 ) drawgl( vo2 ) print r1, r2
def to_ipe2(*args): v = vo3.rep[0] + vo3.rep[1] v = v.norm() pln = v.to_plane(v * 2) drawgl(v * 2, style="line") drawipe.setup_plane(pln, 10) for p in vo3.has(ds1): drawipe(p, color=(0, 1, 0)) for p in vo3.has(ds2): drawipe(p, r=0.04, color=(1, 0, 0)) drawipe(vo3)
def to_ipe2( *args ): v = vo3.rep[0] + vo3.rep[1] v = v.norm() pln = v.to_plane( v * 2 ) drawgl( v * 2, style="line" ) drawipe.setup_plane( pln, 10 ) for p in vo3.has( ds1 ): drawipe( p, color=(0,1,0) ) for p in vo3.has( ds2 ): drawipe( p, r=0.04, color=(1,0,0) ) drawipe( vo3 )
def w_si( *args ): drawgl.clear() drawgl( vo ) for v in si: drawgl( v ) for vv in o: if abs( (v - vv).vlen() - d2 ) < 0.1: drawgl( Vec( *vv ), style='line', start=v ) drawgl( Vec( *vv ), r=0.1, color=(0,0,1) )
def w_si(*args): drawgl.clear() drawgl(vo) for v in si: drawgl(v) for vv in o: if abs((v - vv).vlen() - d2) < 0.1: drawgl(Vec(*vv), style='line', start=v) drawgl(Vec(*vv), r=0.1, color=(0, 0, 1))
def redraw(): global vc, pos, delta v = vc.norm() * delta * pos p = vc.to_plane( v ) drawgl.clear() drawgl( vo_h ) drawgl( p ) for x in p.touch( ds1_h ): drawgl( x, r = 0.10, color=(0,1,0) ) for x in p.touch( ds2_h ): drawgl( x, r = 0.11, color=(1,0,0) )
def redraw(): global vc, pos, delta v = vc.norm() * delta * pos p = vc.to_plane(v) drawgl.clear() drawgl(vo_h) drawgl(p) for x in p.touch(ds1_h): drawgl(x, r=0.10, color=(0, 1, 0)) for x in p.touch(ds2_h): drawgl(x, r=0.11, color=(1, 0, 0))
def draw(n): drawgl.clear() drawgl(vo3) vn = edg.norm() pln = vn.to_plane(vn * dr * n) drawgl(pln) for p in pln.touch(vo3.has(ds1)): drawgl(p, color=(0, 1, 0)) for p in pln.touch(vo3.has(ds2)): drawgl(p, r=0.04, color=(1, 0, 0))
def draw( n ): drawgl.clear() drawgl( vo3 ) vn = edg.norm() pln = vn.to_plane( vn * dr * n ) drawgl( pln ) for p in pln.touch( vo3.has( ds1 ) ): drawgl( p, color=(0,1,0) ) for p in pln.touch( vo3.has( ds2 ) ): drawgl( p, r=0.04, color=(1,0,0) )
def min_cell( *args ): uc = UCell( vo3.rep ) uc.add( 'A', vo3.has( ds1 ) ) uc.add( 'B', vo3.has( ds2 ) ) print len( uc.pnts['A'] ) print len( uc.pnts['B'] ) uc = uc.to_min() print len( uc.pnts['A'] ) print len( uc.pnts['B'] ) #drawgl.clear() for v in uc.rep: drawgl( v, style="line" ) f = open( '/tmp/basis_ock_ock.txt', 'w' ) r = uc.rep print r.v3 * r.v1.vcross( r.v2 ) f.write( "rprim %s %s %s\n %s %s %s\n %s %s %s\n" % ( tuple( r[0] ) + tuple( r[1] ) + tuple( r[2] ) ) ) f.write( '-----------\n' ) for v in uc.pnts['A']: f.write( "%s %s %s\n" % tuple( r.dec2frac( v ) ) ) drawgl( v, r=0.04, color=(0,0,1) ) f.write( '-----------\n' ) for v in uc.pnts['B']: f.write( "%s %s %s\n" % tuple( r.dec2frac( v ) ) ) drawgl( v, r=0.06, color=(1,0,0) ) f.close()
def symm(*args): global ucm uc = UCell(r_hex) uc.add('A', vhex.has(ds1)) uc.add('B', vhex.has(ds2)) ucm = uc.to_min() print uc print ucm r = ucm.rep r.v1 = -1 * r.v1 print r.v3 * r.v1.vcross(r.v2) f = open('/tmp/basis_pcub_pcub.txt', 'w') f.write("rprim %s %s %s\n %s %s %s\n %s %s %s\n" % (tuple(r[0]) + tuple(r[1]) + tuple(r[2]))) f.write('-----------\n') for v in ucm.atoms['A']: f.write("%s %s %s\n" % tuple(r.dec2frac(v))) drawgl(v) f.write('-----------\n') for v in ucm.atoms['B']: f.write("%s %s %s\n" % tuple(r.dec2frac(v))) drawgl(v, r=0.1, color=(1, 0, 0)) f.close() for v in ucm.rep: drawgl(v, style='line', color=(0, 1, 0))
def minimize(*xxx): global args, u ## test mimimization for correction if args.testmin: vo = Voron(*u.rep) ## original Voronoi cell u = u.to_min() u_exp = u * 1 u_exp.to_decart() drawgl.clear() drawgl(vo) ## draw all atoms which are in "vo" for n, ats in u_exp: r, col = UCell.data[n] col = [x / 255.0 for x in col] for v in vo.has(ats): drawgl(v, r=r, color=col, invis=False) ## now draw all cloned Voronoi cells #import reper2dots #for v in vo.cut( u.rep.to_dots( 1, 1, 1 ) ): # drawgl( Voron( *u.rep, pos = v ) ) drawgl(Voron(*u.rep)) ## usual minimization process else: u = u.to_min() print '------------' print 'sort of minimized cell: ', u.rep.to_zell().to_sort().name print 'zell of minimized cell: ', u.rep.to_zell().norm() draw_with(drawgl)
def min_cell(*args): uc = UCell(vo3.rep) uc.add('A', vo3.has(ds1)) uc.add('B', vo3.has(ds2)) print len(uc.pnts['A']) print len(uc.pnts['B']) uc = uc.to_min() print len(uc.pnts['A']) print len(uc.pnts['B']) #drawgl.clear() for v in uc.rep: drawgl(v, style="line") f = open('/tmp/basis_ock_ock.txt', 'w') r = uc.rep print r.v3 * r.v1.vcross(r.v2) f.write("rprim %s %s %s\n %s %s %s\n %s %s %s\n" % (tuple(r[0]) + tuple(r[1]) + tuple(r[2]))) f.write('-----------\n') for v in uc.pnts['A']: f.write("%s %s %s\n" % tuple(r.dec2frac(v))) drawgl(v, r=0.04, color=(0, 0, 1)) f.write('-----------\n') for v in uc.pnts['B']: f.write("%s %s %s\n" % tuple(r.dec2frac(v))) drawgl(v, r=0.06, color=(1, 0, 0)) f.close()
def symm( *args ): global ucm uc = UCell( r_hex ) uc.add( 'A', vhex.has( ds1 ) ) uc.add( 'B', vhex.has( ds2 ) ) ucm = uc.to_min() print uc print ucm r = ucm.rep r.v1 = -1 * r.v1 print r.v3 * r.v1.vcross( r.v2 ) f = open( '/tmp/basis_pcub_pcub.txt', 'w' ) f.write( "rprim %s %s %s\n %s %s %s\n %s %s %s\n" % ( tuple( r[0] ) + tuple( r[1] ) + tuple( r[2] ) ) ) f.write( '-----------\n' ) for v in ucm.atoms['A']: f.write( "%s %s %s\n" % tuple( r.dec2frac( v ) ) ) drawgl( v ) f.write( '-----------\n' ) for v in ucm.atoms['B']: f.write( "%s %s %s\n" % tuple( r.dec2frac( v ) ) ) drawgl( v, r = 0.1, color = (1,0,0) ) f.close() for v in ucm.rep: drawgl( v, style = 'line', color = (0,1,0) )
def draw(): print num drawgl.clear() #drawgl( vo1 ) #drawgl( vo2 ) drawgl(vhex) pln = n.to_plane(r0 + num * dr) for p in pln.touch(vhex.has(ds1)): drawgl(p, r=0.02, color=(0, 1, 0)) for p in pln.touch(vhex.has(ds2)): drawgl(p, r=0.04, color=(1, 0, 0))
def draw(): print num drawgl.clear() #drawgl( vo1 ) #drawgl( vo2 ) drawgl( vhex ) pln = n.to_plane( r0 + num * dr ) for p in pln.touch( vhex.has( ds1 ) ): drawgl( p, r=0.02, color = (0,1,0) ) for p in pln.touch( vhex.has( ds2 ) ): drawgl( p, r=0.04, color = (1,0,0) )
def minimize( *xxx ): global args, u ## test mimimization for correction if args.testmin: vo = Voron( *u.rep ) ## original Voronoi cell u = u.to_min() u_exp = u * 1 u_exp.to_decart() drawgl.clear() drawgl( vo ) ## draw all atoms which are in "vo" for n, ats in u_exp: r, col = UCell.data[ n ] col = [ x/255.0 for x in col ] for v in vo.has( ats ): drawgl( v, r = r, color = col, invis = False ) ## now draw all cloned Voronoi cells #import reper2dots #for v in vo.cut( u.rep.to_dots( 1, 1, 1 ) ): # drawgl( Voron( *u.rep, pos = v ) ) drawgl( Voron( *u.rep ) ) ## usual minimization process else: u = u.to_min() print '------------' print 'sort of minimized cell: ', u.rep.to_zell().to_sort().name print 'zell of minimized cell: ', u.rep.to_zell().norm() draw_with( drawgl )
r1 = Reper( Vec( -1,-1,0 ), Vec( 1,0,1 ), Vec( 0,1,1 ) ) r2 = n * r1 r2 = Reper( r2[0] + r2[2], r2[2] - r2[1], r2[2] ) vo1 = Voron( *r1 ) vo2 = Voron( *r2 ) ds1 = r1.to_dots( 5,5,5 ) ds2 = r2.to_dots( 2,2,2 ) drawgl( vo1 ) drawgl( vo2 ) for v in r2: drawgl( v, style ="line" ) for d in vo2.has( ds1 ): drawgl( d, r = 0.05, color=(0,1,0) ) for d in vo2.has( ds2 ): drawgl( d, r = 0.06, color=(1,0,0) ) drawgl.start()
def draw( to_ipe = False ): from draw_gl import drawgl import vec_gl import ucell_gl drawgl( u ) drawgl.start()
#sr = Reper( Vec( 0.5, 0.5, 0.0 ), ## hardcoded vectors of face centered lattice # Vec( 0.5, 0.0, 0.5 ), # Vec( 0.0, 0.5, 0.5 ) ) print 'sort of sublattice -', sr.to_zell().to_sort() ## build & draw Voronoi polyhedra print '-----------------' print 'parameters a,b,c=', a,b,c print 'parameter as=', sub_a print 'translateional matrix:', m.inv() print 'invert translateional matrix:', m print 'lattice reper', r print 'sublattice reper', sr vo = Voron( *r ) vos = Voron( *sr ) drawgl( vo ) drawgl( vos ) drawipe( vo ) drawipe( vos ) drawgl( sr[ 0 ], style = 'line' ) drawgl( sr[ 1 ], style = 'line' ) drawgl( sr[ 2 ], style = 'line' ) ## additional testing for conversion of cubic sublattice to volume-centered... m_vc = Mat( 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.5, 0.5, 0.5 ) print mv * m_vc.inv()
d2_1 = (Vec( 3.426423, -1.3460447, 2.5054464 ) -\ Vec( 3.5035, 4.4408920985e-16, 1.616 ) ).vlen() print "d2_1 =", d2_1 d3 = ( Vec( -1.75175, 1.100099, -0.808 ) -\ Vec( -2.1574553, -0.077077, 0.7265536 ) ).vlen() print "d3 = ", d3 #------------------------------------- r = Reper.from_abc( 7.007, 7.007, 6.464, pi/2, pi/2, pi/2 ) c = ( r[0] + r[1] + r[2] ) * 0.5 vo = Voron( *r ) drawgl( vo ) s = SpGrp( 122, 1 ) print s.mydata si = s * Vec( 0.0, 0.0, 0.5 ) zn = s * Vec( 0.157, 0.25, 0.125 ) o = s * Vec( 0.3079, 0.489, 0.1376 ) si = set( map( lambda v: v.z2o(), si ) ) zn = set( map( lambda v: v.z2o(), zn ) ) o = set( map( lambda v: v.z2o(), o ) ) si = vo.cut( map( lambda v: v-c, r.frac2dec( si ) ) ) zn = vo.cut( map( lambda v: v-c, r.frac2dec( zn ) ) ) o = vo.cut( map( lambda v: v-c, r.frac2dec( o ) ) )
vc = 1/3.0 * ( v1 + v2 + v3 ) v1,v2 = v1 - vc, v2 - vc v3 = (ve1 - ve2).vlen() * v1.vcross( v2 ).norm() v1,v2 = v1+v2+v1, v1+v2+v2 r3 = Reper( v1, v2, v3 ) vo3 = Voron( *r3 ) #for p in r3.to_dots( 2, 2, 2 ): # drawgl( p, r=0.05, color=(0,1,0) ) ## ----------- planes for cutting edg = ve1 - ve2 pln = ( 0.5 * edg ).to_plane( 0.5 * edg ) drawgl( pln ) pln.do_norm() drs = map( lambda p: ( pln.r - p ) * pln.n, vo3.has( ds1 ) ) drs = filter( lambda d: abs( d ) > 0.0001, drs ) dr = min( drs ) print dr ## ----------- drawing f = open( '/home/ont/make_it/kem/cbox/tmp/ock.txt', 'a' ) for p in vo3.has( ds1 ): drawgl( p, color=(0,1,0) ) f.write( 'A %s %s %s\n' % tuple( p ) )
d2_1 = (Vec( 3.426423, -1.3460447, 2.5054464 ) -\ Vec( 3.5035, 4.4408920985e-16, 1.616 ) ).vlen() print "d2_1 =", d2_1 d3 = ( Vec( -1.75175, 1.100099, -0.808 ) -\ Vec( -2.1574553, -0.077077, 0.7265536 ) ).vlen() print "d3 = ", d3 #------------------------------------- r = Reper.from_abc(7.007, 7.007, 6.464, pi / 2, pi / 2, pi / 2) c = (r[0] + r[1] + r[2]) * 0.5 vo = Voron(*r) drawgl(vo) s = SpGrp(122, 1) print s.mydata si = s * Vec(0.0, 0.0, 0.5) zn = s * Vec(0.157, 0.25, 0.125) o = s * Vec(0.3079, 0.489, 0.1376) si = set(map(lambda v: v.z2o(), si)) zn = set(map(lambda v: v.z2o(), zn)) o = set(map(lambda v: v.z2o(), o)) si = vo.cut(map(lambda v: v - c, r.frac2dec(si))) zn = vo.cut(map(lambda v: v - c, r.frac2dec(zn))) o = vo.cut(map(lambda v: v - c, r.frac2dec(o)))
vc = 1 / 3.0 * (v1 + v2 + v3) v1, v2 = v1 - vc, v2 - vc v3 = (ve1 - ve2).vlen() * v1.vcross(v2).norm() v1, v2 = v1 + v2 + v1, v1 + v2 + v2 r3 = Reper(v1, v2, v3) vo3 = Voron(*r3) #for p in r3.to_dots( 2, 2, 2 ): # drawgl( p, r=0.05, color=(0,1,0) ) ## ----------- planes for cutting edg = ve1 - ve2 pln = (0.5 * edg).to_plane(0.5 * edg) drawgl(pln) pln.do_norm() drs = map(lambda p: (pln.r - p) * pln.n, vo3.has(ds1)) drs = filter(lambda d: abs(d) > 0.0001, drs) dr = min(drs) print dr ## ----------- drawing f = open('/home/ont/make_it/kem/cbox/tmp/ock.txt', 'a') for p in vo3.has(ds1): drawgl(p, color=(0, 1, 0)) f.write('A %s %s %s\n' % tuple(p)) for p in vo3.has(ds2): drawgl(p, r=0.04, color=(1, 0, 0))
## -------- after selecting vc = Vec(0.0, 0.0, 0.0) v1 = Vec(-3.99991151312e-12, 2.44948974278, 0.0) v2 = Vec(-2.12132034356, 1.22474487139, 0.0) v3 = Vec(2.12132034355, 1.22474487139, 0.0) va = v1 + v2 vb = v1 + v3 #vc = v2.vcross( v1 ) vc = Vec(0, 0, 10.3923048454) #drawgl( v1, style='line' ) #drawgl( v2, style='line' ) #drawgl( v3, style='line' ) drawgl(va, style='line') drawgl(vb, style='line') drawgl(vc, style='line') #drawgl( -1 * vc, style='line' ) vo_h = Voron(va, vb, vc) vo_h_m = Voron(va, vb, vc, pos=vc) drawgl(vo_h) drawgl(vo_h_m) ## -------- cut dots ds1_h = vo_h.has(ds1) + vo_h_m.has(ds1) ds2_h = vo_h.has(ds2) + vo_h_m.has(ds2) ## -------- calculating deltas for planes pos = 0 ## global position in deltas array
def cubic(*args): ## old cube vc = Vec(-0.5, -0.707106781187, 0.244948974278) v1 = Vec(-0.7, 0.282842712476, 0.489897948556) v2 = Vec(-0.3, -0.424264068713, -0.734846922836) v3 = Vec(0.5, -0.565685424949, 0.489897948556) v1, v2, v3 = v1 - vc, v2 - vc, v3 - vc ## new cube vc = Vec(0.8, -0.141421356235, 1.22474487139) v1 = Vec(-0.2, -0.282842712473, 0.979795897112) v2 = Vec(1.0, 0.141421356238, 0.244948974278) v3 = Vec(1.0, -1.1313708499, 0.979795897112) v1, v2, v3 = v1 - vc, v2 - vc, v3 - vc drawgl.clear() ## -- draw cube vc = Voron(v1, v2, v3, pos=0.5 * (v1 + v2 + v3)) for v in vc.has(ds1): drawgl(v, color=(0, 1, 0)) for v in vc.has(ds2): drawgl(v, r=0.04, color=(1, 0, 0)) #drawgl( vc ) drawgl(vo1) drawgl(vo2) basisA = vc.has(ds1) basisA = vc.rep.dec2frac(basisA) basisA = map(lambda v: v.z2o(), basisA) basisB = [Vec(0.0, 0.0, 0.0), Vec(0.5, 0.5, 0.5)] basisA = set(basisA) basisB = set(basisB) print 'len( basisA ) = ', len(basisA) print 'len( basisB ) = ', len(basisB) basisA = basisA - basisB print 'len( basisA ) = ', len(basisA) print 'len( basisB ) = ', len(basisB) ## -- output basis to file f = open('/tmp/basis_ock_ock.txt', 'w') r = vc.rep print r.v3 * r.v1.vcross(r.v2) f.write("rprim %s %s %s\n %s %s %s\n %s %s %s\n" % (tuple(r[0]) + tuple(r[1]) + tuple(r[2]))) f.write("vc.rep\t%s\n\t\t%s\n\t\t%s\n" % (vc.rep[0], vc.rep[1], vc.rep[2])) for v in (vc.rep[0], vc.rep[1], vc.rep[2]): drawgl(v, style='line') f.write('-----------\n') for v in basisA: f.write("%s %s %s\n" % tuple(v)) f.write('-----------\n') for v in basisB: f.write("%s %s %s\n" % tuple(v)) f.close() ## -- test space groups for i in xrange(1, 231): for j in SpGrp.subs(i): s = SpGrp(i, j) f = True for p in basisA: for v in s * p: if v not in basisA: f = False break if not f: break if f: for p in basisB: for v in s * p: if v not in basisB: f = False if f: print '---', s, 'YES' #if f: # print '---', s, 'YES' return ## -- output other basis v1, v2, v3 = v1, v2, 0.5 * (v1 + v2 + v3) vc = Voron(v1, v2, v3) drawgl(vc) f = open('/tmp/basis_ock_ock2.txt', 'w') r = vc.rep print r.v3 * r.v1.vcross(r.v2) for v in r: drawgl(v, style="line", color=(1, 0, 0)) basisA = vc.has(ds1) basisA = vc.rep.dec2frac(basisA) basisA = map(lambda v: v.z2o(), basisA) basisB = [Vec(0.0, 0.0, 0.0)] basisA = set(basisA) basisB = set(basisB) print 'len( basisA ) = ', len(basisA) print 'len( basisB ) = ', len(basisB) basisA = basisA - basisB print 'len( basisA ) = ', len(basisA) print 'len( basisB ) = ', len(basisB) f.write("rprim %s %s %s\n %s %s %s\n %s %s %s\n" % (tuple(r[0]) + tuple(r[1]) + tuple(r[2]))) f.write('-----------\n') for v in basisA: f.write("%s %s %s\n" % tuple(v)) drawgl(r.frac2dec(v), r=0.05, color=(0, 0, 1)) f.write('-----------\n') for v in basisB: f.write("%s %s %s\n" % tuple(v)) drawgl(r.frac2dec(v), r=0.05, color=(0, 1, 1)) f.close()
r3 = Reper(v1, v2, v3) v1 = (r1.v1 + r1.v2) v2 = (r1.v1 + r1.v3) v3 = v1.norm().vcross(v2.norm()) * v1.vlen() r4 = Reper(v1, v2, v3) r1 = r1.minimize() r2 = r2.minimize() vo1 = Voron(r1.v1, r1.v2, r1.v3) vo2 = Voron(r2.v1, r2.v2, r2.v3) vo3 = Voron(r3.v1, r3.v2, r3.v3) vo4 = Voron(r4.v1, r4.v2, r4.v3) drawgl(vo1) #vo2.draw() drawgl(vo3) drawgl(vo4) #pnts = set() #for a,b,c in ( (i,j,k) for i in xrange( -3,4 )\ # for j in xrange( -3,4 )\ # for k in xrange( -3,4 ) ): # pnts.add( a*r1.v1 + b*r1.v2 + c*r1.v3 ) # #for p in v2.cut( pnts ): # p.draw( r=0.02 ) ps1 = set() for a,b,c in ( (i,j,k) for i in xrange( -3,4 )\
from math import * from draw_gl import drawgl import ucell_min import vec_gl u = UCell( 1,1,1, pi/2, pi/2, pi/2 ) u.add( 'K', [ Vec( 0.0, 0.0, 0.0 ), Vec( 0.5, 0.5, 0.0 ), Vec( 0.5, 0.0, 0.5 ), Vec( 0.0, 0.5, 0.5 ), Vec( 0.5, 0.5, 1.0 ), Vec( 0.5, 1.0, 0.5 ), Vec( 1.0, 0.5, 0.5 ), Vec( 1.0, 0.0, 0.0 ), Vec( 0.0, 1.0, 0.0 ), Vec( 0.0, 0.0, 1.0 ), Vec( 1.0, 0.0, 1.0 ), Vec( 1.0, 1.0, 0.0 ), Vec( 0.0, 1.0, 1.0 ), Vec( 1.0, 1.0, 1.0 ), ] ) for v in u.pnts['K']: drawgl( v ) u.to_min() drawgl.start()
## -------- after selecting vc = Vec( 0.0, 0.0, 0.0 ) v1 = Vec( -3.99991151312e-12, 2.44948974278, 0.0 ) v2 = Vec( -2.12132034356, 1.22474487139, 0.0 ) v3 = Vec( 2.12132034355, 1.22474487139, 0.0 ) va = v1 + v2 vb = v1 + v3 #vc = v2.vcross( v1 ) vc = Vec( 0, 0, 10.3923048454 ) #drawgl( v1, style='line' ) #drawgl( v2, style='line' ) #drawgl( v3, style='line' ) drawgl( va, style='line' ) drawgl( vb, style='line' ) drawgl( vc, style='line' ) #drawgl( -1 * vc, style='line' ) vo_h = Voron( va, vb, vc ) vo_h_m = Voron( va, vb, vc, pos = vc ) drawgl( vo_h ) drawgl( vo_h_m ) ## -------- cut dots ds1_h = vo_h.has( ds1 ) + vo_h_m.has( ds1 ) ds2_h = vo_h.has( ds2 ) + vo_h_m.has( ds2 ) ## -------- calculating deltas for planes
import ucell_min ## filtering import geom_inout import voron_inout r1 = Reper(Vec(0.3, 0.0, 0.0), Vec(0.0, 0.3, 0.0), Vec(0.0, 0.0, 0.3)) r2 = Reper(Vec(-0.6, -0.6, 0.3), Vec(-0.6, 0.3, -0.6), Vec(0.3, -0.6, -0.6)) vo1 = Voron(*r1) vo2 = Voron(*r2) vo21 = Voron(r2[0], r2[1], r2[2], pos=Vec(-0.45, -0.45, -0.45)) vo22 = Voron(r2[0], r2[1], r2[2], pos=Vec(0.45, 0.45, 0.45)) drawgl(vo1) drawgl(vo2) n = (0.5 * r2[0] + 0.5 * r2[1] + 0.5 * r2[2]).norm() ## normal to plane ## creating set of dots ds1 = r1.to_dots(5, 5, 5) ds2 = r2.to_dots(3, 3, 3) plns = set() for d in vo2.cut(ds1): plns.add(n.to_plane(d)) plns = list(plns) np = min(plns[1:], key=lambda p: (plns[0].r - p.r).vlen()) ## find nearest plane (np)
v1 = (r1.v1 + r1.v2) v2 = (r1.v1 + r1.v3) v3 = v1.norm().vcross( v2.norm() ) * v1.vlen() r4 = Reper( v1,v2,v3 ) r1 = r1.minimize() r2 = r2.minimize() vo1 = Voron( r1.v1, r1.v2, r1.v3 ) vo2 = Voron( r2.v1, r2.v2, r2.v3 ) vo3 = Voron( r3.v1, r3.v2, r3.v3 ) vo4 = Voron( r4.v1, r4.v2, r4.v3 ) drawgl( vo1 ) #vo2.draw() drawgl( vo3 ) drawgl( vo4 ) #pnts = set() #for a,b,c in ( (i,j,k) for i in xrange( -3,4 )\ # for j in xrange( -3,4 )\ # for k in xrange( -3,4 ) ): # pnts.add( a*r1.v1 + b*r1.v2 + c*r1.v3 ) # #for p in v2.cut( pnts ): # p.draw( r=0.02 ) ps1 = set() for a,b,c in ( (i,j,k) for i in xrange( -3,4 )\
import ucell_min import vec_gl u = UCell(1, 1, 1, pi / 2, pi / 2, pi / 2) u.add( "K", [ Vec(0.0, 0.0, 0.0), Vec(0.5, 0.5, 0.0), Vec(0.5, 0.0, 0.5), Vec(0.0, 0.5, 0.5), Vec(0.5, 0.5, 1.0), Vec(0.5, 1.0, 0.5), Vec(1.0, 0.5, 0.5), Vec(1.0, 0.0, 0.0), Vec(0.0, 1.0, 0.0), Vec(0.0, 0.0, 1.0), Vec(1.0, 0.0, 1.0), Vec(1.0, 1.0, 0.0), Vec(0.0, 1.0, 1.0), Vec(1.0, 1.0, 1.0), ], ) for v in u.pnts["K"]: drawgl(v) u.to_min() drawgl.start()
(c-b)/(2*sub_a), (c+a)/(2*sub_a), (a-b)/(2*sub_a), (b-c)/(2*sub_a), (a-c)/(2*sub_a), (b+a)/(2*sub_a) ) m = m.inv() ## invert matrix print 'matrix of vectors (mv):', mv print 'translational matrix (m):', m.inv() print 'invert translational matrix (m.inv()):', m print 'm.inv() * mv =', m * mv sv1 = Vec( *( m * mv )[ 0 ] ) sv2 = Vec( *( m * mv )[ 1 ] ) sv3 = Vec( *( m * mv )[ 2 ] ) print sv1 print sv2 print sv3 sr = Reper( sv1, sv2, sv3 ) print 'sort of sublattice -', sr.to_zell().to_sort() ## build & draw Voronoi polyhedra print '-----------------' print 'parameters a,b,c=', a,b,c print 'parameter as=', sub_a print 'translateional matrix:', m.inv() print 'invert translateional matrix:', m print 'lattice reper', r print 'sublattice reper', sr vo = Voron( *r ) vos = Voron( *sr ) drawgl( vo ) drawgl( vos ) drawgl.start()
def cubic( *args ): ## old cube vc = Vec( -0.5, -0.707106781187, 0.244948974278 ) v1 = Vec( -0.7, 0.282842712476, 0.489897948556 ) v2 = Vec( -0.3, -0.424264068713, -0.734846922836 ) v3 = Vec( 0.5, -0.565685424949, 0.489897948556 ) v1,v2,v3 = v1 - vc, v2 - vc, v3 - vc ## new cube vc = Vec( 0.8, -0.141421356235, 1.22474487139 ) v1 = Vec( -0.2, -0.282842712473, 0.979795897112 ) v2 = Vec( 1.0, 0.141421356238, 0.244948974278 ) v3 = Vec( 1.0, -1.1313708499, 0.979795897112 ) v1,v2,v3 = v1 - vc, v2 - vc, v3 - vc drawgl.clear() ## -- draw cube vc = Voron( v1, v2, v3, pos = 0.5 * ( v1+v2+v3 ) ) for v in vc.has( ds1 ): drawgl( v, color=(0,1,0) ) for v in vc.has( ds2 ): drawgl( v, r=0.04, color=(1,0,0) ) #drawgl( vc ) drawgl( vo1 ) drawgl( vo2 ) basisA = vc.has( ds1 ) basisA = vc.rep.dec2frac( basisA ) basisA = map( lambda v: v.z2o(), basisA ) basisB = [ Vec( 0.0, 0.0, 0.0 ), Vec( 0.5, 0.5, 0.5 ) ] basisA = set( basisA ) basisB = set( basisB ) print 'len( basisA ) = ', len( basisA ) print 'len( basisB ) = ', len( basisB ) basisA = basisA - basisB print 'len( basisA ) = ', len( basisA ) print 'len( basisB ) = ', len( basisB ) ## -- output basis to file f = open( '/tmp/basis_ock_ock.txt', 'w' ) r = vc.rep print r.v3 * r.v1.vcross( r.v2 ) f.write( "rprim %s %s %s\n %s %s %s\n %s %s %s\n" % ( tuple( r[0] ) + tuple( r[1] ) + tuple( r[2] ) ) ) f.write( "vc.rep\t%s\n\t\t%s\n\t\t%s\n" % ( vc.rep[ 0 ], vc.rep[ 1 ], vc.rep[ 2 ] ) ) for v in ( vc.rep[ 0 ], vc.rep[ 1 ], vc.rep[ 2 ] ): drawgl( v, style = 'line' ) f.write( '-----------\n' ) for v in basisA: f.write( "%s %s %s\n" % tuple( v ) ) f.write( '-----------\n' ) for v in basisB: f.write( "%s %s %s\n" % tuple( v ) ) f.close() ## -- test space groups for i in xrange( 1, 231 ): for j in SpGrp.subs( i ): s = SpGrp( i, j ) f = True for p in basisA: for v in s * p: if v not in basisA: f = False break if not f: break if f: for p in basisB: for v in s * p: if v not in basisB: f = False if f: print '---', s, 'YES' #if f: # print '---', s, 'YES' return ## -- output other basis v1, v2, v3 = v1, v2, 0.5 * (v1 + v2 + v3) vc = Voron( v1, v2, v3 ) drawgl( vc ) f = open( '/tmp/basis_ock_ock2.txt', 'w' ) r = vc.rep print r.v3 * r.v1.vcross( r.v2 ) for v in r: drawgl( v, style="line", color=( 1,0,0 ) ) basisA = vc.has( ds1 ) basisA = vc.rep.dec2frac( basisA ) basisA = map( lambda v: v.z2o(), basisA ) basisB = [ Vec( 0.0, 0.0, 0.0 ) ] basisA = set( basisA ) basisB = set( basisB ) print 'len( basisA ) = ', len( basisA ) print 'len( basisB ) = ', len( basisB ) basisA = basisA - basisB print 'len( basisA ) = ', len( basisA ) print 'len( basisB ) = ', len( basisB ) f.write( "rprim %s %s %s\n %s %s %s\n %s %s %s\n" % ( tuple( r[0] ) + tuple( r[1] ) + tuple( r[2] ) ) ) f.write( '-----------\n' ) for v in basisA: f.write( "%s %s %s\n" % tuple( v ) ) drawgl( r.frac2dec( v ), r=0.05, color = (0,0,1) ) f.write( '-----------\n' ) for v in basisB: f.write( "%s %s %s\n" % tuple( v ) ) drawgl( r.frac2dec( v ), r=0.05, color = (0,1,1) ) f.close()
def fill_hex(*args): print args drawgl.clear() drawgl(vo1) drawgl(vo21) drawgl(vo22) drawgl(vhex) for p in vhex.has(ds1): drawgl(p, r=0.02, color=(0, 1, 0)) for p in vhex.has(ds2): drawgl(p, r=0.04, color=(1, 0, 0))
print sv2 print sv3 sr = Reper(sv1, sv2, sv3) print 'sort of sublattice -', sr.to_zell().to_sort() ## build & draw Voronoi polyhedra print '-----------------' print 'parameters a,b,c=', a, b, c print 'parameter as=', sub_a print 'translateional matrix:', m.inv() print 'invert translateional matrix:', m print 'lattice reper', r print 'sublattice reper', sr vo = Voron(*r) vos = Voron(*sr) drawgl(vo) drawgl(vos) drawipe(vo) drawipe(vos) drawgl(sr[0], style='line') drawgl(sr[1], style='line') drawgl(sr[2], style='line') ## button for output camera angles and distance def pinfo(some): print drawgl.gl.alpha, drawgl.gl.theta, drawgl.gl.dist drawgl.button('camera info', pinfo)
#ths = ( th, -th, th + pi / 2, th - pi / 2 ) #for ai, al in enumerate( als ): # for ti, th in enumerate( ths ): # drawipe.setup( al, th, drawgl.gl.dist ) # drawipe.clear() # drawipe.group() # drawipe( v1, style = 'line' ) # drawipe( v2, style = 'line' ) # drawipe( v3, style = 'line' ) # drawipe.save( '/tmp/out_%s_%s.ipe' % ( ai, ti ) ) #for i in xrange( 1,9 ): # getattr( drawipe, 'setup_drawgl' + str( i ) )( drawgl ) # drawipe.clear() # drawipe.group() # drawipe( vo ) # drawipe.save( '/tmp/out%s.ipe' % i ) drawipe.setup_drawgl( drawgl ) drawipe.clear() drawipe.group() drawipe( vo ) drawipe.save( '/tmp/out.ipe' ) #drawgl( v1, style = 'line' ) #drawgl( v2, style = 'line' ) #drawgl( v3, style = 'line' ) drawgl( vo ) drawgl.button( "to_ipe", to_ipe ) drawgl.start()
def draw(to_ipe=False): from draw_gl import drawgl import vec_gl import ucell_gl drawgl(u) drawgl.start()
r1 = Reper( Vec( 0.3, 0.0, 0.0 ), Vec( 0.0, 0.3, 0.0 ), Vec( 0.0, 0.0, 0.3 ) ) r2 = Reper( Vec( -0.6, -0.6, 0.3 ), Vec( -0.6, 0.3, -0.6 ), Vec( 0.3, -0.6, -0.6 ) ) vo1 = Voron( *r1 ) vo2 = Voron( *r2 ) vo21 = Voron( r2[0], r2[1], r2[2], pos = Vec( -0.45, -0.45, -0.45 ) ) vo22 = Voron( r2[0], r2[1], r2[2], pos = Vec( 0.45, 0.45, 0.45 ) ) drawgl( vo1 ) drawgl( vo2 ) n = ( 0.5*r2[0] + 0.5*r2[1] + 0.5*r2[2] ).norm() ## normal to plane ## creating set of dots ds1 = r1.to_dots( 5,5,5 ) ds2 = r2.to_dots( 3,3,3 ) plns = set() for d in vo2.cut( ds1 ): plns.add( n.to_plane( d ) ) plns = list( plns )
import sys sys.path.extend(['../lib', '../liba', '../libc']) from draw_gl import drawgl from vec import * from voron import * import vec_gl import voron_gl vo = Voron(Vec(1.0, 0.0, 0.0), Vec(0.0, 1.0, 0.0), Vec(0.0, 0.0, 1.0)) drawgl(vo) drawgl.start()
def fill_hex( *args ): print args drawgl.clear() drawgl( vo1 ) drawgl( vo21 ) drawgl( vo22 ) drawgl( vhex ) for p in vhex.has( ds1 ): drawgl( p, r=0.02, color = (0,1,0) ) for p in vhex.has( ds2 ): drawgl( p, r=0.04, color = (1,0,0) )
## trans matrix n = Mat(-3, -3, 0, 0, 3, 0, 2, 1, 3) r1 = Reper(Vec(-1, -1, 0), Vec(1, 0, 1), Vec(0, 1, 1)) r2 = n * r1 r2 = Reper(r2[0] + r2[2], r2[2] - r2[1], r2[2]) vo1 = Voron(*r1) vo2 = Voron(*r2) ds1 = r1.to_dots(5, 5, 5) ds2 = r2.to_dots(2, 2, 2) drawgl(vo1) drawgl(vo2) for v in r2: drawgl(v, style="line") for d in vo2.has(ds1): drawgl(d, r=0.05, color=(0, 1, 0)) for d in vo2.has(ds2): drawgl(d, r=0.06, color=(1, 0, 0)) drawgl.start() print "%s %s %s" % tuple(r2[0]) print "%s %s %s" % tuple(r2[1])
#!/usr/bin/env python2 import sys sys.path.extend( [ '../lib', '../liba', '../libc' ] ) from draw_gl import drawgl from strutils import * from voron import * import voron_gl import ucell_gl ls = list( stdlines() ) opts = sys.argv[ 1: ] print opts for i,u in enumerate( lines2cells( ls ) ): v = Voron( *u.rep ) if i < len( opts ) : if opts[ i ] == '1': drawgl( u ) else: drawgl( u ) drawgl( v ) drawgl.start()