# Path: op_cutter/profiles/_types.py
# class SectionSize:
#     __slots__ = "x", "y", "z1", "z2"
# 
#     def __init__(self, x: float, y: float, z1: float, z2: float) -> None:
#         self.x = x
#         self.y = y
#         self.z1 = z1
#         self.z2 = z2
# 
#     @property
#     def xyz(self):
#         return self.x, self.y, self.z1


from math import pi, tau, sin, cos
from bmesh.types import BMesh, BMVert
from ._types import SectionSize
        if m2 < 0.0:
            co[1] += m2
            m2 -= m2 / basis

    for x, y, z in reversed(vs[1:-1]):
        app((-x, y, z))

    return vs


class Section:
    __slots__ = (
        "coords",
    )

    def __init__(self, operator) -> None:
        detalization = operator.detalization
        mul_1 = operator.mul_1
        mul_2 = operator.mul_2
        mul_3 = operator.mul_3

        if operator.cut == "MARQUISE":
            self.coords = _get_marquise(detalization, mul_1, mul_2)
        elif operator.cut == "PEAR":
            self.coords = _get_pear(detalization, mul_1, mul_2)
        elif operator.cut == "HEART":
            self.coords = _get_heart(detalization, mul_1, mul_2, mul_3)
        else:
            self.coords = _get_oval(detalization)


# Path: op_cutter/profiles/_types.py
# class SectionSize:
#     __slots__ = "x", "y", "z1", "z2"
# 
#     def __init__(self, x: float, y: float, z1: float, z2: float) -> None:
#         self.x = x
#         self.y = y
#         self.z1 = z1
#         self.z2 = z2
# 
#     @property
#     def xyz(self):
#         return self.x, self.y, self.z1


# Path: op_cutter/profiles/_fantasy.py
from math import pi, tau, sin, cos
from bmesh.types import BMesh, BMVert
from ._types import SectionSize

        if m2 < 0.0:
            co[1] += m2
            m2 -= m2 / basis

    for x, y, z in reversed(vs[1:-1]):
        app((-x, y, z))

    return vs


class Section:
    __slots__ = (
        "coords",
    )

    def __init__(self, operator) -> None:
        detalization = operator.detalization
        mul_1 = operator.mul_1
        mul_2 = operator.mul_2
        mul_3 = operator.mul_3

        if operator.cut == "MARQUISE":
            self.coords = _get_marquise(detalization, mul_1, mul_2)
        elif operator.cut == "PEAR":
            self.coords = _get_pear(detalization, mul_1, mul_2)
        elif operator.cut == "HEART":
            self.coords = _get_heart(detalization, mul_1, mul_2, mul_3)
        else:
            self.coords = _get_oval(detalization)


    def add(self, bm: BMesh, size: SectionSize, co_fmt=lambda a, b: b) -> tuple[list[BMVert], list[BMVert]]: