Source code for pyleecan.Methods.Machine.CondType12.plot
from matplotlib.patches import Circle, Patch
from ....Functions.init_fig import init_fig
from numpy import exp, pi, sqrt
from ....definitions import config_dict
COND_COLOR = config_dict["PLOT"]["COLOR_DICT"]["PHASE_COLORS"][0].copy()
INS_COLOR = config_dict["PLOT"]["COLOR_DICT"]["PHASE_COLORS"][1].copy()
COND_INS_COLOR = config_dict["PLOT"]["COLOR_DICT"]["PHASE_COLORS"][2].copy()
# Remove alpha from phases
COND_COLOR[3] = 1
INS_COLOR[3] = 1
COND_INS_COLOR[3] = 1
[docs]def plot(self, is_show_fig=True, fig=None, ax=None):
"""Plot a Conductor in a matplotlib fig
Parameters
----------
self : CondType12
A CondType12 object
is_show_fig : bool
To call show at the end of the method
fig : Matplotlib.figure.Figure
existing figure to use if None create a new one
ax : Matplotlib.axes.Axes object
Axis on which to plot the data
Returns
-------
fig : Matplotlib.figure.Figure
Figure containing the plot
ax : Matplotlib.axes.Axes object
Axis containing the plot
Raises
_______
NotPlotableError
You can't plot a coil with Nwppc>4
"""
patches_list = []
# Conductor insultation
patches_list.append(Circle((0, 0), self.Wins_cond / 2, color=COND_INS_COLOR))
# Computation of the center of the wire
center_list = []
if self.Nwppc == 1:
center_list.append((0, 0))
elif self.Nwppc == 2:
center_list.append((0, self.Wwire / 2 + self.Wins_wire))
center_list.append((0, -self.Wwire / 2 - self.Wins_wire))
elif self.Nwppc == 3:
# The 3 centers are on the edges of an Equilateral Triangle
# (side length : a = Dwire + 2Wins_wire)
# The Radius of the circumscribed cercle is : a *sqrt(3)/3
R = (self.Wwire + 2 * self.Wins_wire) * sqrt(3) / 3.0
center_list.append((0, R))
# We found the coordinate of the other center by complex rotation
Z2 = R * 1j * exp(1j * 2 * pi / 3)
Z3 = R * 1j * exp(-1j * 2 * pi / 3)
center_list.append((Z2.real, Z2.imag))
center_list.append((Z3.real, Z3.imag))
elif self.Nwppc == 4:
# The 4 centers are on the edges of a square
# (side length : a =Dwire + 2Wins_wire)
a = self.Wwire / 2 + self.Wins_wire
center_list.append((a, a))
center_list.append((a, -a))
center_list.append((-a, a))
center_list.append((-a, -a))
else:
raise NotPlotableError("You can't plot a coil with Nwppc>4")
# Creation of the wires
for center in center_list:
# Wire insulation
patches_list.append(
Circle(center, self.Wwire / 2 + self.Wins_wire, color=INS_COLOR)
)
# Wire conductor
patches_list.append(Circle(center, self.Wwire / 2, color=COND_COLOR))
# Display
(fig, ax, _, _) = init_fig(fig=fig, ax=ax)
for patch in patches_list:
ax.add_patch(patch)
# Axis Setup
ax.axis("equal")
# The conductor is centered
ax_lim = self.Wins_cond / 2 + self.Wins_cond / 10
ax.set_xlim(-ax_lim, ax_lim)
ax.set_ylim(-ax_lim, ax_lim)
# Legend
patch_leg = list() # Symbol
label_leg = list() # Text
patch_leg.append(Patch(color=COND_INS_COLOR))
label_leg.append("Coil insulation")
patch_leg.append(Patch(color=INS_COLOR))
label_leg.append("Wire insulation")
patch_leg.append(Patch(color=COND_COLOR))
label_leg.append("Active wire section")
ax.legend(patch_leg, label_leg)
if is_show_fig:
fig.show()
return fig, ax
[docs]class NotPlotableError(Exception):
""" """
pass