Source code for pyleecan.Methods.Slot.HoleM57.build_geometry

from numpy import arcsin, cos, exp, angle, pi, sin, tan

from ....Classes.Segment import Segment
from ....Classes.SurfLine import SurfLine
from ....Functions.Geometry.inter_line_line import inter_line_line
from ....Functions.labels import HOLEV_LAB, HOLEM_LAB


[docs]def build_geometry(self, alpha=0, delta=0, is_simplified=False): """Compute the curve (Segment) needed to plot the Slot. The ending point of a curve is the starting point of the next curve in the list Parameters ---------- self : HoleM57 A HoleM57 object alpha : float Angle to rotate the slot (Default value = 0) [rad] delta : complex Complex to translate the slot (Default value = 0) is_simplified : bool True to avoid line superposition Returns ------- surf_list: list List of SurfLine needed to draw the HoleM57 """ # Get correct label for surfaces lam_label = self.parent.get_label() R_id, surf_type = self.get_R_id() vent_label = lam_label + "_" + surf_type + "_R" + str(R_id) + "-" mag_label = lam_label + "_" + HOLEM_LAB + "_R" + str(R_id) + "-" # Get all the points point_dict = self._comp_point_coordinate() Z1 = point_dict["Z1"] Z2 = point_dict["Z2"] Z3 = point_dict["Z3"] Z4 = point_dict["Z4"] Z5 = point_dict["Z5"] Z6 = point_dict["Z6"] Z7 = point_dict["Z7"] Z8 = point_dict["Z8"] Z1s = point_dict["Z1s"] Z2s = point_dict["Z2s"] Z3s = point_dict["Z3s"] Z4s = point_dict["Z4s"] Z5s = point_dict["Z5s"] Z6s = point_dict["Z6s"] Z7s = point_dict["Z7s"] Z8s = point_dict["Z8s"] surf_list = list() # Z_list = array([Z1, Z2, Z3, Z4, Z5, Z6, Z7, Z8]) # plt.plot(Z_list.real, Z_list.imag, "x r") # for ii in range(8): # plt.text(Z_list[ii].real, Z_list[ii].imag, "Z" + str(ii + 1)) # plt.show() # Check schematics: assert abs(abs(Z7 - Z8) - self.W2) < 1e-6 assert abs(abs(Z6 - Z7) - self.W4) < 1e-6 assert abs(abs(Z2 - Z3) - self.W4) < 1e-6 assert abs(abs(Z2 - Z7) - self.H2) < 1e-6 assert abs(abs(Z4 - Z4s) - self.W1) < 1e-6 assert abs(abs(Z5 - Z5s) - self.W1) < 1e-6 # TODO: Create all the surfaces for all the cases # (with/without magnet W1>0 or W1=0) # Air surface (W3) with magnet_0 curve_list = list() curve_list.append(Segment(Z1, Z2)) curve_list.append(Segment(Z2, Z7)) if self.W2 > 0: curve_list.append(Segment(Z7, Z8)) curve_list.append(Segment(Z8, Z1)) # initiating the label of the line on the air surface # curve_list = set_name_line(curve_list, "hole_1_line") point_ref = (Z1 + Z2 + Z7 + Z8) / 4 S1 = SurfLine(line_list=curve_list, label=vent_label + "T0-S0", point_ref=point_ref) # Magnet_0 surface curve_list = list() if is_simplified: curve_list.append(Segment(Z7, Z2)) curve_list.append(Segment(Z3, Z6)) else: curve_list.append(Segment(Z2, Z3)) curve_list.append(Segment(Z3, Z6)) curve_list.append(Segment(Z6, Z7)) curve_list.append(Segment(Z7, Z2)) # initiating the label of the line of the magnet surface # curve_list = set_name_line(curve_list, "magnet_1_line") point_ref = (Z2 + Z3 + Z6 + Z7) / 4 S2 = SurfLine( line_list=curve_list, label=mag_label + "T0-S0", point_ref=point_ref, ) # Air surface with magnet_0 and W1 > 0 curve_list = list() curve_list.append(Segment(Z4, Z5)) curve_list.append(Segment(Z5, Z6)) curve_list.append(Segment(Z6, Z3)) if abs(Z4 - Z3) > 1e-6: curve_list.append(Segment(Z3, Z4)) # initiating the label of the line on the air surface # curve_list = set_name_line(curve_list, "hole_2_line") point_ref = (Z6 + Z5 + Z4) / 3 S3 = SurfLine(line_list=curve_list, label=vent_label + "T1-S0", point_ref=point_ref) # Symmetry Air surface (W3) with magnet_1 curve_list = list() curve_list.append(Segment(Z2s, Z1s)) curve_list.append(Segment(Z1s, Z8s)) if self.W2 > 0: curve_list.append(Segment(Z8s, Z7s)) curve_list.append(Segment(Z7s, Z2s)) point_ref = (Z1s + Z2s + Z8s + Z7s) / 4 # initiating the label of the line on the air surface # curve_list = set_name_line(curve_list, "hole_3_line") S4 = SurfLine(line_list=curve_list, label=vent_label + "T2-S0", point_ref=point_ref) # magnet_1 surface curve_list = list() if is_simplified: curve_list.append(Segment(Z2s, Z7s)) curve_list.append(Segment(Z6s, Z3s)) else: curve_list.append(Segment(Z3s, Z2s)) curve_list.append(Segment(Z2s, Z7s)) curve_list.append(Segment(Z7s, Z6s)) curve_list.append(Segment(Z6s, Z3s)) point_ref = (Z3s + Z2s + Z7s + Z6s) / 4 # initiating the label of the line on the magnet surface # curve_list = set_name_line(curve_list, "magnet_2_line") S5 = SurfLine( line_list=curve_list, label=mag_label + "T1-S0", point_ref=point_ref, ) # Air surface with magnet_1 and W1 > 0 curve_list = list() curve_list.append(Segment(Z3s, Z6s)) curve_list.append(Segment(Z6s, Z5s)) curve_list.append(Segment(Z5s, Z4s)) if abs(Z4 - Z3) > 1e-6: curve_list.append(Segment(Z4s, Z3s)) point_ref = (Z3s + Z6s + Z5s) / 3 # initiating the label of the line on the air surface # curve_list = set_name_line(curve_list, "hole_4_line") S6 = SurfLine(line_list=curve_list, label=vent_label + "T1-S0", point_ref=point_ref) # Air surface between magnet_0 and magnet_1 with W1 == 0 curve_list = list() curve_list.append(Segment(Z3, Z4)) curve_list.append(Segment(Z4, Z3s)) curve_list.append(Segment(Z3s, Z6s)) curve_list.append(Segment(Z6s, Z5)) curve_list.append(Segment(Z5, Z6)) curve_list.append(Segment(Z6, Z3)) # initiating the label of the line on the air surface # curve_list = set_name_line(curve_list, "hole_2_line") point_ref = (Z5 + Z4) / 2 S7 = SurfLine(line_list=curve_list, label=vent_label + "T2-S0", point_ref=point_ref) # Air surface without magnet_0 and W1 > 0 curve_list = list() curve_list.append(Segment(Z1, Z8)) curve_list.append(Segment(Z8, Z5)) curve_list.append(Segment(Z5, Z4)) curve_list.append(Segment(Z4, Z1)) # initiating the label of the line on the air surface # curve_list = set_name_line(curve_list, "hole_1_line") point_ref = (Z5 + Z1) / 2 S8 = SurfLine(line_list=curve_list, label=vent_label + "T1-S0", point_ref=point_ref) # Air surface without magnet_1 and W1 > 0 curve_list = list() curve_list.append(Segment(Z1s, Z8s)) curve_list.append(Segment(Z8s, Z5s)) curve_list.append(Segment(Z5s, Z4s)) curve_list.append(Segment(Z4s, Z1s)) # initiating the label of the line on the air surface # curve_list = set_name_line(curve_list, "hole_2_line") point_ref = (Z5s + Z1s) / 2 S9 = SurfLine(line_list=curve_list, label=vent_label + "T0-S0", point_ref=point_ref) # Air surface No magnet and W1 == 0 curve_list = list() curve_list.append(Segment(Z4, Z1)) curve_list.append(Segment(Z1, Z8)) curve_list.append(Segment(Z8, Z5)) curve_list.append(Segment(Z5, Z8s)) curve_list.append(Segment(Z8s, Z1s)) curve_list.append(Segment(Z1s, Z4)) # initiating the label of the line on the air surface # curve_list = set_name_line(curve_list, "hole_1_line") point_ref = (Z4 + Z5) / 2 S12 = SurfLine( line_list=curve_list, label=vent_label + "T0-S0", point_ref=point_ref ) # TODO correct vent_label TX id # Create the surface list by selecting the correct ones if self.magnet_0 and self.magnet_1 and self.W1 > 0: surf_list = [S1, S2, S3, S6, S5, S4] elif self.magnet_0 and self.magnet_1 and self.W1 == 0: surf_list = [S1, S2, S7, S5, S4] # elif self.magnet_0 and not self.magnet_1 and self.W1 > 0: # surf_list = [S1, S2, S3, S9] # elif self.magnet_0 and not self.magnet_1 and self.W1 == 0: # surf_list = [S1, S2, S10] # elif not self.magnet_0 and self.magnet_1 and self.W1 > 0: # surf_list = [S8, S6, S5, S4] # elif not self.magnet_0 and self.magnet_1 and self.W1 == 0: # surf_list = [S11, S5, S4] elif not self.magnet_0 and not self.magnet_1 and self.W1 > 0: surf_list = [S8, S9] elif not self.magnet_0 and not self.magnet_1 and self.W1 == 0: surf_list = [S12] else: raise Exception("Not implemented Yet") # Apply the transformations for surf in surf_list: surf.rotate(alpha) surf.translate(delta) return surf_list
[docs]def set_name_line(hole_lines, name): """Define the label of each line of the hole Parameters ---------- hole_lines: list a list of line object of the slot name: str the name to give to the line Returns ------- hole_lines: list List of line object with label """ for ii in range(len(hole_lines)): hole_lines[ii].label = name + "_" + str(ii) return hole_lines