from Base.Metadata import export, constmethod
from Base.PyObjectBase import PyObjectBase
from typing import overload

@export(
    PythonName="Part.ShapeUpgrade.UnifySameDomain",
    Include="ShapeUpgrade_UnifySameDomain.hxx",
    Twin="ShapeUpgrade_UnifySameDomain",
    TwinPointer="ShapeUpgrade_UnifySameDomain",
    Constructor=True,
    Delete=True,
)
class UnifySameDomain(PyObjectBase):
    """
    This tool tries to unify faces and edges of the shape which lie on the same geometry.

    Author: Werner Mayer (wmayer@users.sourceforge.net)
    Licence: LGPL
    """

    def initialize(self, **kwargs) -> None:
        """
        Initializes with a shape and necessary flags
        """
        ...

    def allowInternalEdges(self) -> None:
        """
        Sets the flag defining whether it is allowed to create
        internal edges inside merged faces in the case of non-manifold
        topology. Without this flag merging through multi connected edge
        is forbidden. Default value is false.
        """
        ...

    def keepShape(self) -> None:
        """
        Sets the shape for avoid merging of the faces/edges.
        """
        ...

    def keepShapes(self) -> None:
        """
        Sets the map of shapes for avoid merging of the faces/edges.
        """
        ...

    def setSafeInputMode(self) -> None:
        """
        Sets the flag defining the behavior of the algorithm regarding
        modification of input shape.
        If this flag is equal to True then the input (original) shape can't be
        modified during modification process. Default value is true.
        """
        ...

    def setLinearTolerance(self) -> None:
        """
        Sets the linear tolerance
        """
        ...

    def setAngularTolerance(self) -> None:
        """
        Sets the angular tolerance
        """
        ...

    def build(self) -> None:
        """
        Performs unification and builds the resulting shape
        """
        ...

    @constmethod
    def shape(self) -> None:
        """
        Gives the resulting shape
        """
        ...
