Source code for pyleecan.Methods.Slot.HoleM52R.plot_schematics

import matplotlib.pyplot as plt
from numpy import pi, exp, angle

from ....Classes.Arc1 import Arc1
from ....Classes.LamHole import LamHole
from ....Classes.Segment import Segment
from ....definitions import config_dict
from ....Functions.Plot import (
    ARROW_COLOR,
    ARROW_WIDTH,
    MAIN_LINE_COLOR,
    MAIN_LINE_STYLE,
    MAIN_LINE_WIDTH,
    P_FONT_SIZE,
    SC_FONT_SIZE,
    SC_LINE_COLOR,
    SC_LINE_STYLE,
    SC_LINE_WIDTH,
    TEXT_BOX,
    plot_quote,
)
from ....Methods import ParentMissingError

MAGNET_COLOR = config_dict["PLOT"]["COLOR_DICT"]["MAGNET_COLOR"]


[docs]def plot_schematics( self, is_default=False, is_add_point_label=False, is_add_schematics=True, is_add_main_line=True, type_add_active=True, save_path=None, is_show_fig=True, ): """Plot the schematics of the slot Parameters ---------- self : HoleM51 A HoleM51 object is_default : bool True: plot default schematics, else use current slot values is_add_point_label : bool True to display the name of the points (Z1, Z2....) is_add_schematics : bool True to display the schematics information (W0, H0...) is_add_main_line : bool True to display "main lines" (slot opening and 0x axis) type_add_active : int 0: No active surface, 1: active surface as winding, 2: active surface as magnet save_path : str full path including folder, name and extension of the file to save if save_path is not None is_show_fig : bool To call show at the end of the method """ # Use some default parameter if is_default: hole = type(self)(Zh=10, W0=27e-3, W1=5e-3, H0=3e-3, H1=8e-3, H2=3e-3, R0=2e-3) lam = LamHole( Rint=45e-3 / 2, Rext=81.5e-3, is_internal=True, is_stator=False, hole=[hole] ) hole.plot_schematics( is_default=False, is_add_point_label=is_add_point_label, is_add_schematics=is_add_schematics, is_add_main_line=is_add_main_line, type_add_active=type_add_active, save_path=save_path, is_show_fig=is_show_fig, ) elif type_add_active == 0: # Remove magnets lam = self.parent.copy() lam.hole[0].remove_magnet() lam.hole[0].plot_schematics( is_default=False, is_add_point_label=is_add_point_label, is_add_schematics=is_add_schematics, is_add_main_line=is_add_main_line, type_add_active=2, save_path=save_path, is_show_fig=is_show_fig, ) else: # Getting the main plot if self.parent is None: raise ParentMissingError("Error: The hole is not inside a Lamination") lam = self.parent alpha = pi / 2 # To rotate the schematics lam.plot( alpha=pi / self.Zh + alpha, is_show_fig=False, is_lam_only=type_add_active == 0, ) # center hole on Ox axis sp = 2 * pi / self.Zh Rbo = self.get_Rbo() fig = plt.gcf() ax = plt.gca() point_dict = self._comp_point_coordinate() # Adding point label if is_add_point_label: for name, Z in point_dict.items(): Z = Z * exp(1j * alpha) ax.text( Z.real, Z.imag, name, fontsize=P_FONT_SIZE, bbox=TEXT_BOX, ) # Adding schematics if is_add_schematics: # W0 Zlim1 = point_dict["Z4"] - self.H2 * 0.4 Zlim2 = point_dict["Z6"] - self.H2 * 0.4 plot_quote( point_dict["Z4"] * exp(1j * alpha), Zlim1 * exp(1j * alpha), Zlim2 * exp(1j * alpha), point_dict["Z6"] * exp(1j * alpha), offset_label=-1j * self.H2 * 0.7, fig=fig, ax=ax, label="W0", ) # W1 line = Segment( point_dict["Z2"] * exp(1j * alpha), point_dict["Z3"] * exp(1j * alpha) ) line.plot( fig=fig, ax=ax, color=ARROW_COLOR, linewidth=ARROW_WIDTH, label="W1", offset_label=-self.W1 * 0.5 - 1j * self.H2 * 0.7, is_arrow=True, fontsize=SC_FONT_SIZE, ) # H0 line = Segment( point_dict["Z9"] * exp(1j * alpha), Rbo * exp(1j * angle(point_dict["Z9"])) * exp(1j * alpha), ) line.plot( fig=fig, ax=ax, color=ARROW_COLOR, linewidth=ARROW_WIDTH, label="H0", offset_label=self.H2 * 0.5, is_arrow=True, fontsize=SC_FONT_SIZE, ) # H1 line = Segment( point_dict["Z11"] * exp(1j * alpha), point_dict["Z4"] * exp(1j * alpha), ) line.plot( fig=fig, ax=ax, color=ARROW_COLOR, linewidth=ARROW_WIDTH, label="H1", offset_label=self.H2 * 0.3, is_arrow=True, fontsize=SC_FONT_SIZE, ) # H2 line = Segment( point_dict["Z7"] * exp(1j * alpha), point_dict["Z6"] * exp(1j * alpha), ) line.plot( fig=fig, ax=ax, color=ARROW_COLOR, linewidth=ARROW_WIDTH, label="H2", offset_label=(1 - 1j) * self.H2 * 0.3, is_arrow=True, fontsize=SC_FONT_SIZE, ) # R0 line = Segment( (point_dict["Z9"] + (1j - 1) * self.R0) * exp(1j * alpha), (point_dict["Z9"] + 1j * self.R0) * exp(1j * alpha), ) line.plot( fig=fig, ax=ax, color=ARROW_COLOR, linewidth=ARROW_WIDTH, label="R0", offset_label=-self.W1, is_arrow=True, fontsize=SC_FONT_SIZE, ) if is_add_main_line: # Ox axis line = Segment(0, lam.Rext * 1.5 * exp(1j * alpha)) line.plot( fig=fig, ax=ax, color=MAIN_LINE_COLOR, linestyle=MAIN_LINE_STYLE, linewidth=MAIN_LINE_WIDTH, ) # Tooth axis line = Segment(0, lam.Rext * 1.5 * exp(1j * sp / 2) * exp(1j * alpha)) line.plot( fig=fig, ax=ax, color=MAIN_LINE_COLOR, linestyle=MAIN_LINE_STYLE, linewidth=MAIN_LINE_WIDTH, ) line = Segment(0, lam.Rext * 1.5 * exp(-1j * sp / 2) * exp(1j * alpha)) line.plot( fig=fig, ax=ax, color=MAIN_LINE_COLOR, linestyle=MAIN_LINE_STYLE, linewidth=MAIN_LINE_WIDTH, ) # H0 radius R = Rbo - self.H0 rot_N = 1 rot_P = exp(1j * pi * 0.98) line = Arc1( begin=R * rot_N, end=R * rot_P, radius=R, is_trigo_direction=True ) line.plot( fig=fig, ax=ax, color=MAIN_LINE_COLOR, linestyle=MAIN_LINE_STYLE, linewidth=MAIN_LINE_WIDTH, ) # H0 lines line = Segment( 0, abs(point_dict["Z9"]) * 1.5 * exp(1j * angle(point_dict["Z9"])) * exp(1j * alpha), ) line.plot( fig=fig, ax=ax, color=MAIN_LINE_COLOR, linestyle=MAIN_LINE_STYLE, linewidth=MAIN_LINE_WIDTH, ) # H0 lines line = Segment( point_dict["Z10"] * exp(1j * alpha), point_dict["Z9"] * exp(1j * alpha), ) line.plot( fig=fig, ax=ax, color=MAIN_LINE_COLOR, linestyle=MAIN_LINE_STYLE, linewidth=MAIN_LINE_WIDTH, ) line = Segment( point_dict["Z8"] * exp(1j * alpha), point_dict["Z9"] * exp(1j * alpha), ) line.plot( fig=fig, ax=ax, color=MAIN_LINE_COLOR, linestyle=MAIN_LINE_STYLE, linewidth=MAIN_LINE_WIDTH, ) line = Segment( point_dict["Z1"] * exp(1j * alpha), point_dict["Z2"] * exp(1j * alpha), ) line.plot( fig=fig, ax=ax, color=MAIN_LINE_COLOR, linestyle=MAIN_LINE_STYLE, linewidth=MAIN_LINE_WIDTH, ) line = Segment( point_dict["Z1"] * exp(1j * alpha), point_dict["Z11"] * exp(1j * alpha), ) line.plot( fig=fig, ax=ax, color=MAIN_LINE_COLOR, linestyle=MAIN_LINE_STYLE, linewidth=MAIN_LINE_WIDTH, ) # Magnet line line = Segment( point_dict["Z3"] * exp(1j * alpha), point_dict["Z7"] * exp(1j * alpha), ) line.plot( fig=fig, ax=ax, color=MAIN_LINE_COLOR, linestyle=MAIN_LINE_STYLE, linewidth=MAIN_LINE_WIDTH, ) # R0 circle line = Arc1( begin=(point_dict["Z9"] - self.R0) * exp(1j * alpha), end=(point_dict["Z9"] + 1j * self.R0) * exp(1j * alpha), radius=self.R0, is_trigo_direction=False, ) line.plot( fig=fig, ax=ax, color=MAIN_LINE_COLOR, linestyle=MAIN_LINE_STYLE, linewidth=MAIN_LINE_WIDTH, ) # Zooming and cleaning W = -1 * (point_dict["Z9"] * exp(1j * sp) * exp(1j * alpha)).real * 1.2 Rint = (point_dict["Z5"] * exp(1j * alpha)).imag * 0.9 Rext = self.parent.Rext * 1.1 plt.axis("equal") ax.set_ylim(Rint, Rext) ax.set_xlim(-W, W) manager = plt.get_current_fig_manager() if manager is not None: manager.set_window_title(type(self).__name__ + " Schematics") ax.set_title("") ax.get_legend().remove() ax.set_axis_off() # Save / Show if save_path is not None: fig.savefig(save_path) plt.close() if is_show_fig: fig.show()