def gl_objects_selected_min_max_vec(self): min = vec() min.x = 1000 min.y = 1000 min.z = 1000 max = vec() max.x = -1 max.y = -1 max.z = -1 for i in range(0, len(self.objects)): if self.objects[i].selected == True: #min if self.objects[i].xyz.x < min.x: min.x = self.objects[i].xyz.x if self.objects[i].xyz.x + self.objects[i].dxyz.x < min.x: min.x = self.objects[i].xyz.x + self.objects[i].dxyz.x if self.objects[i].xyz.y < min.y: min.y = self.objects[i].xyz.y #print("screen",self.objects[i].dxyz.y) if self.objects[i].xyz.y + self.objects[i].dxyz.y < min.y: min.y = self.objects[i].xyz.y + self.objects[i].dxyz.y if self.objects[i].xyz.z < min.z: min.z = self.objects[i].xyz.z if self.objects[i].xyz.z + self.objects[i].dxyz.z < min.z: min.z = self.objects[i].xyz.z + self.objects[i].dxyz.z #max if self.objects[i].xyz.x > max.x: max.x = self.objects[i].xyz.x if self.objects[i].xyz.x + self.objects[i].dxyz.x > max.x: max.x = self.objects[i].xyz.x + self.objects[i].dxyz.x if self.objects[i].xyz.y > max.y: max.y = self.objects[i].xyz.y if self.objects[i].xyz.y + self.objects[i].dxyz.y > max.y: max.y = self.objects[i].xyz.y + self.objects[i].dxyz.y if self.objects[i].xyz.z > max.z: max.z = self.objects[i].xyz.z if self.objects[i].xyz.z + self.objects[i].dxyz.z > max.z: max.z = self.objects[i].xyz.z + self.objects[i].dxyz.z return min, max
def draw_light_profile(self): self.gl_objects_remove_regex("light_profile") name = inp_get_token_value(os.path.join(get_sim_path(), "light.inp"), "#light_profile") if name != "box": epi = get_epi() s = shape() s.type = name s.load_triangles() s.triangles.data = triangles_remove_below(s.triangles.data, 0.1) a = gl_base_object() a.id = ["light_profile"] a.type = "open_triangles" a.x = gl_scale.project_m2screen_x(0) a.y = gl_scale.project_m2screen_y(0) a.z = gl_scale.project_m2screen_z(0) a.dx = 1.0 a.dy = scale_get_ymul() * 1.0 a.dz = 1.0 a.r = 0.0 a.g = 1.0 a.b = 0.0 a.alpha = 1.0 my_vec = vec() my_vec.x = get_mesh().get_xlen() my_vec.y = epi.ylen() * 1.0 my_vec.z = get_mesh().get_zlen() t = triangles_mul_vec(s.triangles.data, my_vec) my_vec = vec() my_vec.x = 0.0 my_vec.y = -epi.ylen() * 3.0 my_vec.z = 0.0 t = triangles_add_vec(t, my_vec) a.triangles = scale_trianges_m2screen(t) #triangles_mul_vec(triangles_flip_in_box(s.triangles.data),my_vec) #print("bing!",gl_scale.project_m2screen_x(0)) self.gl_objects_add(a)
def triangles_norm_y(data, min_value, mav_value): v = vec() v.y = triangles_get_min(data) v.x = 0.0 v.z = 0.0 triangles_sub_vec(data, v) v.y = triangles_get_min(data) v.x = 0.0 v.z = 0.0 triangles_add_vec(data, min_value) v.y = triangles_get_max(data) v.x = 0.0 v.z = 0.0 triangles_div_vec(data, v) v.y = mav_value v.x = 0.0 v.z = 0.0 triangles_mul_vec(data, v) return data
def triangles_flip(data): v = vec() v.x = 1.0 v.y = -1.0 v.z = 1.0 ret = triangles_mul_vec(data, v) return ret
def __init__(self, x=0.0, y=0.0, z=0.0, dx=0.0, dy=0.0, dz=0.0, r=1.0, g=1.0, b=1.0): self.id = [] self.type = "" self.xyz = vec() self.xyz.x = x self.xyz.y = y self.xyz.z = z self.dxyz = vec() self.dxyz.x = dx self.dxyz.y = dy self.dxyz.z = dz self.r = r self.g = g self.b = b self.r_false = None self.g_false = None self.b_false = None self.alpha = 0.5 self.selected = False self.selectable = False self.moveable = False self.allow_cut_view = True self.triangles = [] self.points = [] self.text = "" self.texture = None self.origonal_object = False
def triangles_flip_in_box(data): v = vec() v.x = 1.0 v.y = -1.0 v.z = 1.0 ret = triangles_mul_vec(data, v) m = triangles_get_min(ret) m.x = 0 m.z = 0 ret = triangles_sub_vec(ret, m) return ret
def shape_to_screen(self, a, pos, s): if s.shape_enabled == True: a.type = "solid_and_mesh" if self.draw_device_cut_through == True: # and l!=len(epi.layers)-1 a.type = "box_cut_through" else: a.type = "marker" a.id = [s.id] a.xyz.x = gl_scale.project_m2screen_x(pos.x) #a.xyz.y=gl_scale.project_m2screen_y(pos.y) if s.shape_flip_y == False: a.xyz.y = gl_scale.project_m2screen_y(pos.y) else: a.xyz.y = gl_scale.project_m2screen_y(pos.y + s.dy) a.xyz.z = gl_scale.project_m2screen_z(pos.z) #print(">>>>>>",project_m2screen_z(0)) a.dxyz.x = s.dx * scale_get_xmul() a.dxyz.y = s.dy * scale_get_ymul() a.dxyz.z = s.dz * scale_get_zmul() if s.shape_flip_y == False: a.dxyz.y = a.dxyz.y * -1.0 a.r = s.r a.g = s.g a.b = s.b a.alpha = 1.0 if len(s.shapes) > 0: a.alpha = 0.5 a.allow_cut_view = True a.selectable = True v = vec() v.x = s.dx v.y = s.dy v.z = s.dz #resize the shape to the mesh if s.triangles != None: a.triangles = triangles_mul_vec(s.triangles.data, v) if s.shape_flip_y == True: a.triangles = triangles_flip(a.triangles) a.triangles = scale_trianges_m2screen(a.triangles) self.gl_objects_add(a)
def shape_layer(self, epi_layer, shape_list, y_padding=0.0, name="name"): self.gl_objects_remove_regex(name) for s in shape_list: n = 0 for pos in s.expand_xyz0(epi_layer): a = gl_base_object() if n == 0: a.origonal_object = True n = n + 1 a.id = [s.id] a.type = "solid_and_mesh" a.xyz.x = gl_scale.project_m2screen_x(pos.x) a.xyz.y = gl_scale.project_m2screen_y(pos.y) a.xyz.z = gl_scale.project_m2screen_z(pos.z) #print(">>>>>>",project_m2screen_z(0)) a.dxyz.x = s.dx * scale_get_xmul() a.dxyz.y = s.dy * scale_get_ymul() a.dxyz.z = s.dz * scale_get_zmul() if s.shape_flip_y == False: a.dxyz.y = a.dxyz.y * -1.0 a.r = s.r a.g = s.g a.b = s.b a.allow_cut_view = True a.selectable = True v = vec() v.x = s.dx v.y = s.dy v.z = s.dz #resize the shape to the mesh if s.triangles != None: a.triangles = triangles_mul_vec(s.triangles.data, v) if s.shape_flip_y == True: a.triangles = triangles_flip(a.triangles) a.triangles = scale_trianges_m2screen(a.triangles) self.gl_objects_add(a)
def expand_xyz0(self,epi_layer): vectors=[] for x in range(0,self.shape_nx): for y in range(0,self.shape_ny): for z in range(0,self.shape_nz): if self.shape_enabled==True: pos=vec() if self.shape_flip_y==True: pos.x=(self.x0+(self.dx+self.dx_padding)*x) pos.y=epi_layer.end-(self.y0+(self.dy+self.dy_padding)*y) pos.z=(self.z0+(self.dz+self.dz_padding)*z) else: pos.x=(self.x0+(self.dx+self.dx_padding)*x) pos.y=(self.y0+(self.dy+self.dy_padding)*y)+epi_layer.start pos.z=(self.z0+(self.dz+self.dz_padding)*z) vectors.append(pos) return vectors
def triangles_scale_for_gl(data): if len(data) == 0: return False min = triangles_get_min(data) ret = triangles_sub_vec(data, min) max = triangles_get_max(ret) max.x = max.x / 10.0 max.y = max.y / 2.0 max.z = max.z / 10.0 ret = triangles_div_vec(ret, max) #ret=triangles_flip(ret) #min=triangles_get_min(ret) #ret=triangles_sub_vec(ret,min) v = vec() v.x = 5.0 v.y = 0.0 v.z = 5.0 ret = triangles_sub_vec(ret, v) return ret
def triangles_get_max(data): if len(data) == 0: return None x = data[0].max_x() y = data[0].max_y() z = data[0].max_z() for t in data: if t.max_x() > x: x = t.max_x() if t.max_y() > y: y = t.max_y() if t.max_z() > z: z = t.max_z() ret = vec() ret.x = x ret.y = y ret.z = z return ret
def triangles_get_min(data): if len(data) == 0: return None x = data[0].min_x() y = data[0].min_y() z = data[0].min_z() for t in data: if t.min_x() < x: x = t.min_x() if t.min_y() < y: y = t.min_y() if t.min_z() < z: z = t.min_z() ret = vec() ret.x = x ret.y = y ret.z = z return ret
def shape_layer(self, epi_layer, y_padding=0.0, name="name"): self.gl_objects_remove_regex(name) a = gl_base_object() pos = vec() pos.x = epi_layer.x0 pos.y = epi_layer.y0 pos.z = epi_layer.z0 epi_layer.dx = get_mesh().get_xlen() epi_layer.dz = get_mesh().get_zlen() a.origonal_object = True self.shape_to_screen(a, pos, epi_layer) for s in epi_layer.shapes: n = 0 for pos in s.expand_xyz0(epi_layer): a = gl_base_object() if n == 0: a.origonal_object = True n = n + 1 self.shape_to_screen(a, pos, s)
def __init__(self): self.v0=vec() self.v1=vec() self.type="l" self.r=1.0 self.text=""
def draw_contacts(self): #print("draw contacts") epi = get_epi() box = vec() pos = vec() y_mesh = get_mesh().y x_mesh = get_mesh().x z_mesh = get_mesh().z self.gl_objects_remove_regex("contact") top_contact_layer = epi.get_top_contact_layer() btm_contact_layer = epi.get_btm_contact_layer() for c in epi.contacts.contacts: if c.shape_enabled == True: a = gl_base_object() a.id = [c.id] if c.position == "left": if len(x_mesh.points) > 1: sticking_out_bit = 0.2 a.type = "solid_and_mesh" a.xyz.x = gl_scale.project_m2screen_x( 0) - sticking_out_bit a.xyz.y = gl_scale.project_m2screen_y(c.y0) a.xyz.z = gl_scale.project_m2screen_z(0) a.dxyz.x = 1.0 a.dxyz.y = scale_get_ymul() * c.dy a.dxyz.z = scale_get_device_z() a.r = c.r a.g = c.g a.b = c.b a.alpha = 1.0 my_vec = vec() my_vec.x = sticking_out_bit / scale_get_xmul( ) #+c.ingress my_vec.y = c.dy my_vec.z = get_mesh().get_zlen() if c.triangles != None: a.triangles = triangles_flip_in_box( c.triangles.data) a.triangles = triangles_mul_vec(a.triangles, box) a.triangles = triangles_add_vec(a.triangles, pos) a.triangles = scale_trianges_m2screen(a.triangles) self.gl_objects_add(a) elif c.position == "top": if top_contact_layer != -1: #if epi.layers[0].name!="air": box = vec() if len(x_mesh.points) == 1 and len(z_mesh.points) == 1: xstart = 0 box.x = get_mesh().get_xlen() else: xstart = c.x0 box.x = c.dx box.y = epi.layers[0].dy #+c.ingress box.z = get_mesh().get_zlen() if self.draw_device_cut_through == False: a.type = "solid_and_mesh" else: a.type = "solid_and_mesh_cut_through" a.xyz.x = gl_scale.project_m2screen_x(xstart) if c.shape_flip_y == False: a.xyz.y = gl_scale.project_m2screen_y( epi.get_layer_start(0)) else: a.xyz.y = gl_scale.project_m2screen_y( epi.get_layer_end(0)) a.xyz.z = gl_scale.project_m2screen_z(0.0) a.dxyz.x = box.x * scale_get_xmul() a.dxyz.y = box.y * scale_get_ymul() a.dxyz.z = scale_get_device_z() if c.shape_flip_y == False: a.dxyz.y = a.dxyz.y * -1.0 a.r = c.r a.g = c.g a.b = c.b a.alpha = 1.0 if c.triangles != None: a.triangles = triangles_mul_vec( c.triangles.data, box) if c.shape_flip_y == True: a.triangles = triangles_flip(a.triangles) a.triangles = scale_trianges_m2screen(a.triangles) self.gl_objects_add(a) elif c.position == "bottom": if btm_contact_layer != -1: if len(x_mesh.points) == 1 and len(z_mesh.points) == 1: xstart = 0 box.x = get_mesh().get_xlen() else: xstart = c.x0 box.x = c.dx box.y = epi.layers[len(epi.layers) - 1].dy #+c.ingress box.z = get_mesh().get_zlen() a.type = "solid_and_mesh" pos.x = xstart pos.y = epi.get_layer_start(len(epi.layers) - 1) pos.z = 0 a.xyz.x = gl_scale.project_m2screen_x(pos.x) a.xyz.y = gl_scale.project_m2screen_y(pos.y) a.xyz.z = gl_scale.project_m2screen_z(pos.z) a.dxyz.x = box.x * scale_get_xmul() a.dxyz.y = -box.y * scale_get_ymul() a.dxyz.z = scale_get_device_z() a.r = epi.layers[len(epi.layers) - 1].r a.g = epi.layers[len(epi.layers) - 1].g a.b = epi.layers[len(epi.layers) - 1].b a.alpha = 1.0 my_vec = vec() my_vec.x = c.dx my_vec.y = epi.layers[len(epi.layers) - 1].dy my_vec.z = get_mesh().get_zlen() a.r = c.r a.g = c.g a.b = c.b a.alpha = 1.0 a.triangles = triangles_flip_in_box(c.triangles.data) a.triangles = triangles_mul_vec(a.triangles, box) #a.triangles=triangles_add_vec(a.triangles,pos) a.triangles = scale_trianges_m2screen(a.triangles) self.gl_objects_add(a)