Esempio n. 1
0
    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)
Esempio n. 3
0
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
Esempio n. 4
0
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
Esempio n. 5
0
    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
Esempio n. 6
0
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
Esempio n. 7
0
    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)
Esempio n. 8
0
    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)
Esempio n. 9
0
File: shape.py Progetto: Ly0n/gpvdm
	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
Esempio n. 10
0
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
Esempio n. 11
0
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
Esempio n. 12
0
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
Esempio n. 13
0
    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=""
Esempio n. 15
0
    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)