#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import numpy
from GWL.GWL_parser import GWLobject
from GWL.parallelepiped import Parallelepiped
[docs]class TiltedGrating(GWLobject):
def __init__(self):
self.Nlines = 11
self.angle_deg = 60
self.line_width = 1
self.line_height = 2
self.line_length = 10
self.period = 2
self.connected = False
GWLobject.__init__(self)
[docs] def computePoints(self):
self.clear()
# TODO: Only create block (with point list) once and add offsets during writing?
for i in range(self.Nlines):
block = Parallelepiped()
block.center_vec3 = [i*self.period,0,0]
block.connected = self.connected
block.e1_vec3 = [0,1,0]
block.e2_vec3 = [1,0,0]
block.e3_vec3 = 1*numpy.array([numpy.cos(numpy.radians(self.angle_deg)),0,numpy.sin(numpy.radians(self.angle_deg))])
block.size_vec3 = [self.line_length, self.line_width, self.line_height]
block.computePoints()
self.addGWLobject(block)
[docs] def writeGWL(self, filename, writingOffset = [0,0,0,0]):
self.computePoints()
GWLobject.writeGWL(self, filename, writingOffset)
return
[docs] def getMeshData(self):
self.computePoints()
return(GWLobject.getMeshData(self))
[docs]def block_example_2():
obj = Parallelepiped()
obj.e1_vec3 = [1,1,0]
obj.e2_vec3 = [-1,1,0]
obj.e3_vec3 = [0,1,1]
obj.size_vec3 = [5,10,15]
obj.center_vec3 = [1,2,3]
obj.writeGWL('block.example2.gwl')
return
[docs]def block_example():
main_obj = GWLobject()
size = 10
height = 5
width = 2
angle_deg = 170
e3_horiz = numpy.cos(numpy.radians(angle_deg))
e3_vert = -1*numpy.sin(numpy.radians(angle_deg))
distFromCentre = 0.5*size-0.5*e3_horiz*height
obj = Parallelepiped()
obj.e1_vec3 = [0,1,0]
obj.e2_vec3 = [1,0,0]
obj.e3_vec3 = [-e3_horiz,0,e3_vert]
obj.size_vec3 = [size,width,height]
obj.center_vec3 = [distFromCentre,0,0]
obj.computePoints()
obj.writeGWL('blockxp.gwl')
main_obj.addGWLobject(obj)
obj = Parallelepiped()
obj.e1_vec3 = [0,1,0]
obj.e2_vec3 = [1,0,0]
obj.e3_vec3 = [e3_horiz,0,e3_vert]
obj.size_vec3 = [size,width,height]
obj.center_vec3 = [-distFromCentre,0,0]
obj.computePoints()
obj.writeGWL('blockxm.gwl')
main_obj.addGWLobject(obj)
obj = Parallelepiped()
obj.e1_vec3 = [1,0,0]
obj.e2_vec3 = [0,1,0]
obj.e3_vec3 = [0,-e3_horiz,e3_vert]
obj.size_vec3 = [size,width,height]
obj.center_vec3 = [0,distFromCentre,0]
obj.computePoints()
obj.writeGWL('blockyp.gwl')
main_obj.addGWLobject(obj)
obj = Parallelepiped()
obj.e1_vec3 = [1,0,0]
obj.e2_vec3 = [0,1,0]
obj.e3_vec3 = [0,e3_horiz,e3_vert]
obj.size_vec3 = [size,width,height]
obj.center_vec3 = [0,-distFromCentre,0]
obj.computePoints()
obj.writeGWL('blockym.gwl')
main_obj.addGWLobject(obj)
main_obj.writeGWL('tilted_box.gwl')
return
[docs]def main():
obj = TiltedGrating()
#obj.writeGWL('tilted_grating.TopToBottom.gwl')
obj.writeGWL('tilted_grating.BottomToTop.gwl')
if __name__ == "__main__":
#main()
#block_example()
#block_example_2()
foo = TiltedGrating()
print(foo.getMeshData())