Source code for pyleecan.Methods.Machine.MagnetType14.build_geometry
# -*- coding: utf-8 -*-
from numpy import angle, exp
from ....Classes.Arc1 import Arc1
from ....Classes.Segment import Segment
from ....Classes.SurfLine import SurfLine
from ....Functions.Geometry.comp_flower_arc import comp_flower_arc
from ....Methods import ParentMissingError
[docs]def build_geometry(self, alpha=0, delta=0, is_simplified=False):
"""Compute the curve (Segment, Arc1) needed to plot the Magnet.
The list represents a closed surface.
The ending point of a curve is always the starting point of the next
curve in the list
Parameters
----------
self : MagnetType14
A MagnetType14 object
alpha : float
Angle for rotation [rad]
delta : complex
Complex value for translation
is_simplified: bool
True to avoid line superposition
Returns
-------
surf_list : list
list of surfaces needed to draw the lamination
"""
# defining label for type_magnetization
if self.type_magnetization == 0:
t_p = "Radial"
else:
t_p = "Parallel"
if self.parent is not None:
(Z1, Z2) = self.parent.get_point_bottom()
H0 = self.parent.H0
W0 = self.parent.W0
else:
raise ParentMissingError(
"Error: The magnet object is not inside a " + "slot object"
)
# comp point coordinate (in complex)
if W0 > self.Wmag: # The magnet is smaller than the slot => center the mag
Z1 = Z1 * exp(1j * (W0 - self.Wmag) / 2)
Z2 = Z2 * exp(-1j * (W0 - self.Wmag) / 2)
if self.is_outwards():
(alpha_lim, Z4, Z3) = comp_flower_arc(
abs(angle(Z1) - angle(Z2)), self.Rtop, abs(Z1) - self.Hmag
)
Zs3 = (abs(Z1) - H0) * exp(1j * angle(Z1))
Zs4 = (abs(Z2) - H0) * exp(1j * angle(Z2))
Zref = abs(Z1) - self.Hmag / 2
else:
(alpha_lim, Z4, Z3) = comp_flower_arc(
abs(angle(Z1) - angle(Z2)), self.Rtop, abs(Z1) + self.Hmag
)
Zs3 = (abs(Z1) + H0) * exp(1j * angle(Z1))
Zs4 = (abs(Z2) + H0) * exp(1j * angle(Z2))
Zref = abs(Z1) + self.Hmag / 2
# Creation of curve
curve_list = list()
if is_simplified and W0 > self.Wmag:
curve_list.append(Segment(Z1, Z3))
elif is_simplified and H0 < self.Hmag:
curve_list.append(Segment(Zs3, Z3))
elif not is_simplified:
curve_list.append(Segment(Z1, Z3))
curve_list.append(Arc1(Z3, Z4, self.Rtop))
if is_simplified and W0 > self.Wmag:
curve_list.append(Segment(Z4, Z2))
elif is_simplified and H0 < self.Hmag:
curve_list.append(Segment(Z4, Zs4))
elif not is_simplified:
curve_list.append(Segment(Z4, Z2))
if not is_simplified:
curve_list.append(Arc1(Z2, Z1, -abs(Z2), is_trigo_direction=False))
surf_list = list()
surf_list.append(
SurfLine(
line_list=curve_list,
label="MagnetRotor" + t_p + "_N_R0_T0_S0",
point_ref=Zref,
)
)
# Apply transformation
for surf in surf_list:
surf.rotate(alpha)
surf.translate(delta)
return surf_list