# This file was automatically generated by SWIG (http://www.swig.org).
# Version 4.0.2
#
# Do not make changes to this file unless you know what you are doing--modify
# the SWIG interface file instead.

"""
BRepExtrema module, see official documentation at
https://www.opencascade.com/doc/occt-7.4.0/refman/html/package_brepextrema.html
"""

from sys import version_info as _swig_python_version_info
if _swig_python_version_info < (2, 7, 0):
    raise RuntimeError("Python 2.7 or later required")

# Import the low-level C/C++ module
if __package__ or "." in __name__:
    from . import _BRepExtrema
else:
    import _BRepExtrema

try:
    import builtins as __builtin__
except ImportError:
    import __builtin__

def _swig_repr(self):
    try:
        strthis = "proxy of " + self.this.__repr__()
    except __builtin__.Exception:
        strthis = ""
    return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,)


def _swig_setattr_nondynamic_instance_variable(set):
    def set_instance_attr(self, name, value):
        if name == "thisown":
            self.this.own(value)
        elif name == "this":
            set(self, name, value)
        elif hasattr(self, name) and isinstance(getattr(type(self), name), property):
            set(self, name, value)
        else:
            raise AttributeError("You cannot add instance attributes to %s" % self)
    return set_instance_attr


def _swig_setattr_nondynamic_class_variable(set):
    def set_class_attr(cls, name, value):
        if hasattr(cls, name) and not isinstance(getattr(cls, name), property):
            set(cls, name, value)
        else:
            raise AttributeError("You cannot add class attributes to %s" % cls)
    return set_class_attr


def _swig_add_metaclass(metaclass):
    """Class decorator for adding a metaclass to a SWIG wrapped class - a slimmed down version of six.add_metaclass"""
    def wrapper(cls):
        return metaclass(cls.__name__, cls.__bases__, cls.__dict__.copy())
    return wrapper


class _SwigNonDynamicMeta(type):
    """Meta class to enforce nondynamic attributes (no new attributes) for a class"""
    __setattr__ = _swig_setattr_nondynamic_class_variable(type.__setattr__)


class SwigPyIterator(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined - class is abstract")
    __repr__ = _swig_repr
    __swig_destroy__ = _BRepExtrema.delete_SwigPyIterator

    def value(self) -> "PyObject *":
        return _BRepExtrema.SwigPyIterator_value(self)

    def incr(self, n: "size_t"=1) -> "swig::SwigPyIterator *":
        return _BRepExtrema.SwigPyIterator_incr(self, n)

    def decr(self, n: "size_t"=1) -> "swig::SwigPyIterator *":
        return _BRepExtrema.SwigPyIterator_decr(self, n)

    def distance(self, x: "SwigPyIterator") -> "ptrdiff_t":
        return _BRepExtrema.SwigPyIterator_distance(self, x)

    def equal(self, x: "SwigPyIterator") -> "bool":
        return _BRepExtrema.SwigPyIterator_equal(self, x)

    def copy(self) -> "swig::SwigPyIterator *":
        return _BRepExtrema.SwigPyIterator_copy(self)

    def next(self) -> "PyObject *":
        return _BRepExtrema.SwigPyIterator_next(self)

    def __next__(self) -> "PyObject *":
        return _BRepExtrema.SwigPyIterator___next__(self)

    def previous(self) -> "PyObject *":
        return _BRepExtrema.SwigPyIterator_previous(self)

    def advance(self, n: "ptrdiff_t") -> "swig::SwigPyIterator *":
        return _BRepExtrema.SwigPyIterator_advance(self, n)

    def __eq__(self, x: "SwigPyIterator") -> "bool":
        return _BRepExtrema.SwigPyIterator___eq__(self, x)

    def __ne__(self, x: "SwigPyIterator") -> "bool":
        return _BRepExtrema.SwigPyIterator___ne__(self, x)

    def __iadd__(self, n: "ptrdiff_t") -> "swig::SwigPyIterator &":
        return _BRepExtrema.SwigPyIterator___iadd__(self, n)

    def __isub__(self, n: "ptrdiff_t") -> "swig::SwigPyIterator &":
        return _BRepExtrema.SwigPyIterator___isub__(self, n)

    def __add__(self, n: "ptrdiff_t") -> "swig::SwigPyIterator *":
        return _BRepExtrema.SwigPyIterator___add__(self, n)

    def __sub__(self, *args) -> "ptrdiff_t":
        return _BRepExtrema.SwigPyIterator___sub__(self, *args)
    def __iter__(self):
        return self

# Register SwigPyIterator in _BRepExtrema:
_BRepExtrema.SwigPyIterator_swigregister(SwigPyIterator)


def _dumps_object(klass):
    """ Overwrite default string output for any wrapped object.
    By default, __repr__ method returns something like:
    <OCC.Core.TopoDS.TopoDS_Shape; proxy of <Swig Object of type 'TopoDS_Shape *' at 0x02BB0758> >
    This is too much verbose.
    We prefer :
    <class 'gp_Pnt'>
    or
    <class 'TopoDS_Shape'>
    """
    klass_name = str(klass.__class__).split(".")[3].split("'")[0]
    repr_string = "<class '" + klass_name + "'"
# for TopoDS_Shape, we also look for the base type
    if klass_name == "TopoDS_Shape":
        if klass.IsNull():
            repr_string += ": Null>"
            return repr_string
        st = klass.ShapeType()
        types = {OCC.Core.TopAbs.TopAbs_VERTEX: "Vertex",
                 OCC.Core.TopAbs.TopAbs_SOLID: "Solid",
                 OCC.Core.TopAbs.TopAbs_EDGE: "Edge",
                 OCC.Core.TopAbs.TopAbs_FACE: "Face",
                 OCC.Core.TopAbs.TopAbs_SHELL: "Shell",
                 OCC.Core.TopAbs.TopAbs_WIRE: "Wire",
                 OCC.Core.TopAbs.TopAbs_COMPOUND: "Compound",
                 OCC.Core.TopAbs.TopAbs_COMPSOLID: "Compsolid"}
        repr_string += "; Type:%s" % types[st]        
    elif hasattr(klass, "IsNull"):
        if klass.IsNull():
            repr_string += "; Null"
    repr_string += ">"
    return repr_string


def process_exception(error: "Standard_Failure", method_name: "std::string", class_name: "std::string") -> "void":
    return _BRepExtrema.process_exception(error, method_name, class_name)

from six import with_metaclass
import warnings
from OCC.Wrapper.wrapper_utils import Proxy, deprecated

import OCC.Core.Standard
import OCC.Core.NCollection
import OCC.Core.TopoDS
import OCC.Core.Message
import OCC.Core.TCollection
import OCC.Core.OSD
import OCC.Core.TColStd
import OCC.Core.TopAbs
import OCC.Core.TopLoc
import OCC.Core.gp
import OCC.Core.Extrema
import OCC.Core.math
import OCC.Core.Adaptor3d
import OCC.Core.Geom
import OCC.Core.GeomAbs
import OCC.Core.TColgp
import OCC.Core.Adaptor2d
import OCC.Core.Geom2d
import OCC.Core.GeomAdaptor
import OCC.Core.Bnd
import OCC.Core.BVH

from enum import IntEnum
from OCC.Core.Exception import *

BRepExtrema_IsVertex = _BRepExtrema.BRepExtrema_IsVertex
BRepExtrema_IsOnEdge = _BRepExtrema.BRepExtrema_IsOnEdge
BRepExtrema_IsInFace = _BRepExtrema.BRepExtrema_IsInFace


class BRepExtrema_SupportType(IntEnum):
	BRepExtrema_IsVertex = 0
	BRepExtrema_IsOnEdge = 1
	BRepExtrema_IsInFace = 2
BRepExtrema_IsVertex = BRepExtrema_SupportType.BRepExtrema_IsVertex
BRepExtrema_IsOnEdge = BRepExtrema_SupportType.BRepExtrema_IsOnEdge
BRepExtrema_IsInFace = BRepExtrema_SupportType.BRepExtrema_IsInFace


def Handle_BRepExtrema_TriangleSet_Create() -> "opencascade::handle< BRepExtrema_TriangleSet >":
    return _BRepExtrema.Handle_BRepExtrema_TriangleSet_Create()

def Handle_BRepExtrema_TriangleSet_DownCast(t: "opencascade::handle< Standard_Transient > const &") -> "opencascade::handle< BRepExtrema_TriangleSet >":
    return _BRepExtrema.Handle_BRepExtrema_TriangleSet_DownCast(t)

def Handle_BRepExtrema_TriangleSet_IsNull(t: "opencascade::handle< BRepExtrema_TriangleSet > const &") -> "bool":
    return _BRepExtrema.Handle_BRepExtrema_TriangleSet_IsNull(t)
class BRepExtrema_MapOfIntegerPackedMapOfInteger(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def begin(self) -> "NCollection_DataMap< int,TColStd_PackedMapOfInteger >::iterator":
        return _BRepExtrema.BRepExtrema_MapOfIntegerPackedMapOfInteger_begin(self)

    def end(self) -> "NCollection_DataMap< int,TColStd_PackedMapOfInteger >::iterator":
        return _BRepExtrema.BRepExtrema_MapOfIntegerPackedMapOfInteger_end(self)

    def cbegin(self) -> "NCollection_DataMap< int,TColStd_PackedMapOfInteger >::const_iterator":
        return _BRepExtrema.BRepExtrema_MapOfIntegerPackedMapOfInteger_cbegin(self)

    def cend(self) -> "NCollection_DataMap< int,TColStd_PackedMapOfInteger >::const_iterator":
        return _BRepExtrema.BRepExtrema_MapOfIntegerPackedMapOfInteger_cend(self)

    def __init__(self, *args):
        _BRepExtrema.BRepExtrema_MapOfIntegerPackedMapOfInteger_swiginit(self, _BRepExtrema.new_BRepExtrema_MapOfIntegerPackedMapOfInteger(*args))

    def Exchange(self, theOther: "BRepExtrema_MapOfIntegerPackedMapOfInteger") -> "void":
        return _BRepExtrema.BRepExtrema_MapOfIntegerPackedMapOfInteger_Exchange(self, theOther)

    def Assign(self, theOther: "BRepExtrema_MapOfIntegerPackedMapOfInteger") -> "NCollection_DataMap< Standard_Integer,TColStd_PackedMapOfInteger > &":
        return _BRepExtrema.BRepExtrema_MapOfIntegerPackedMapOfInteger_Assign(self, theOther)

    def Set(self, theOther: "BRepExtrema_MapOfIntegerPackedMapOfInteger") -> "NCollection_DataMap< Standard_Integer,TColStd_PackedMapOfInteger > &":
        return _BRepExtrema.BRepExtrema_MapOfIntegerPackedMapOfInteger_Set(self, theOther)

    def ReSize(self, N: "Standard_Integer const") -> "void":
        return _BRepExtrema.BRepExtrema_MapOfIntegerPackedMapOfInteger_ReSize(self, N)

    def Bind(self, theKey: "int const &", theItem: "TColStd_PackedMapOfInteger const &") -> "Standard_Boolean":
        return _BRepExtrema.BRepExtrema_MapOfIntegerPackedMapOfInteger_Bind(self, theKey, theItem)

    def Bound(self, theKey: "int const &", theItem: "TColStd_PackedMapOfInteger const &") -> "TColStd_PackedMapOfInteger *":
        return _BRepExtrema.BRepExtrema_MapOfIntegerPackedMapOfInteger_Bound(self, theKey, theItem)

    def IsBound(self, theKey: "int const &") -> "Standard_Boolean":
        return _BRepExtrema.BRepExtrema_MapOfIntegerPackedMapOfInteger_IsBound(self, theKey)

    def UnBind(self, theKey: "int const &") -> "Standard_Boolean":
        return _BRepExtrema.BRepExtrema_MapOfIntegerPackedMapOfInteger_UnBind(self, theKey)

    def Seek(self, theKey: "int const &") -> "TColStd_PackedMapOfInteger const *":
        return _BRepExtrema.BRepExtrema_MapOfIntegerPackedMapOfInteger_Seek(self, theKey)

    def Find(self, *args) -> "Standard_Boolean":
        return _BRepExtrema.BRepExtrema_MapOfIntegerPackedMapOfInteger_Find(self, *args)

    def ChangeSeek(self, theKey: "int const &") -> "TColStd_PackedMapOfInteger *":
        return _BRepExtrema.BRepExtrema_MapOfIntegerPackedMapOfInteger_ChangeSeek(self, theKey)

    def ChangeFind(self, theKey: "int const &") -> "TColStd_PackedMapOfInteger &":
        return _BRepExtrema.BRepExtrema_MapOfIntegerPackedMapOfInteger_ChangeFind(self, theKey)

    def __call__(self, *args) -> "TColStd_PackedMapOfInteger &":
        return _BRepExtrema.BRepExtrema_MapOfIntegerPackedMapOfInteger___call__(self, *args)

    def Clear(self, *args) -> "void":
        return _BRepExtrema.BRepExtrema_MapOfIntegerPackedMapOfInteger_Clear(self, *args)
    __swig_destroy__ = _BRepExtrema.delete_BRepExtrema_MapOfIntegerPackedMapOfInteger

    def Size(self) -> "Standard_Integer":
        return _BRepExtrema.BRepExtrema_MapOfIntegerPackedMapOfInteger_Size(self)

    def Keys(self) -> "PyObject *":
        return _BRepExtrema.BRepExtrema_MapOfIntegerPackedMapOfInteger_Keys(self)

# Register BRepExtrema_MapOfIntegerPackedMapOfInteger in _BRepExtrema:
_BRepExtrema.BRepExtrema_MapOfIntegerPackedMapOfInteger_swigregister(BRepExtrema_MapOfIntegerPackedMapOfInteger)

class BRepExtrema_SeqOfSolution(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def begin(self) -> "NCollection_Sequence< BRepExtrema_SolutionElem >::iterator":
        return _BRepExtrema.BRepExtrema_SeqOfSolution_begin(self)

    def end(self) -> "NCollection_Sequence< BRepExtrema_SolutionElem >::iterator":
        return _BRepExtrema.BRepExtrema_SeqOfSolution_end(self)

    def cbegin(self) -> "NCollection_Sequence< BRepExtrema_SolutionElem >::const_iterator":
        return _BRepExtrema.BRepExtrema_SeqOfSolution_cbegin(self)

    def cend(self) -> "NCollection_Sequence< BRepExtrema_SolutionElem >::const_iterator":
        return _BRepExtrema.BRepExtrema_SeqOfSolution_cend(self)

    def __init__(self, *args):
        _BRepExtrema.BRepExtrema_SeqOfSolution_swiginit(self, _BRepExtrema.new_BRepExtrema_SeqOfSolution(*args))

    def Size(self) -> "Standard_Integer":
        return _BRepExtrema.BRepExtrema_SeqOfSolution_Size(self)

    def Length(self) -> "Standard_Integer":
        return _BRepExtrema.BRepExtrema_SeqOfSolution_Length(self)

    def Lower(self) -> "Standard_Integer":
        return _BRepExtrema.BRepExtrema_SeqOfSolution_Lower(self)

    def Upper(self) -> "Standard_Integer":
        return _BRepExtrema.BRepExtrema_SeqOfSolution_Upper(self)

    def IsEmpty(self) -> "Standard_Boolean":
        return _BRepExtrema.BRepExtrema_SeqOfSolution_IsEmpty(self)

    def Reverse(self) -> "void":
        return _BRepExtrema.BRepExtrema_SeqOfSolution_Reverse(self)

    def Exchange(self, I: "Standard_Integer const", J: "Standard_Integer const") -> "void":
        return _BRepExtrema.BRepExtrema_SeqOfSolution_Exchange(self, I, J)

    @staticmethod
    def delNode(theNode: "NCollection_SeqNode *", theAl: "opencascade::handle< NCollection_BaseAllocator > &") -> "void":
        return _BRepExtrema.BRepExtrema_SeqOfSolution_delNode(theNode, theAl)

    def Clear(self, theAllocator: "opencascade::handle< NCollection_BaseAllocator > const &"=0) -> "void":
        return _BRepExtrema.BRepExtrema_SeqOfSolution_Clear(self, theAllocator)

    def Assign(self, theOther: "BRepExtrema_SeqOfSolution") -> "NCollection_Sequence< BRepExtrema_SolutionElem > &":
        return _BRepExtrema.BRepExtrema_SeqOfSolution_Assign(self, theOther)

    def Set(self, theOther: "BRepExtrema_SeqOfSolution") -> "NCollection_Sequence< BRepExtrema_SolutionElem > &":
        return _BRepExtrema.BRepExtrema_SeqOfSolution_Set(self, theOther)

    def Remove(self, *args) -> "void":
        return _BRepExtrema.BRepExtrema_SeqOfSolution_Remove(self, *args)

    def Append(self, *args) -> "void":
        return _BRepExtrema.BRepExtrema_SeqOfSolution_Append(self, *args)

    def Prepend(self, *args) -> "void":
        return _BRepExtrema.BRepExtrema_SeqOfSolution_Prepend(self, *args)

    def InsertBefore(self, *args) -> "void":
        return _BRepExtrema.BRepExtrema_SeqOfSolution_InsertBefore(self, *args)

    def InsertAfter(self, *args) -> "void":
        return _BRepExtrema.BRepExtrema_SeqOfSolution_InsertAfter(self, *args)

    def Split(self, theIndex: "Standard_Integer const", theSeq: "BRepExtrema_SeqOfSolution") -> "void":
        return _BRepExtrema.BRepExtrema_SeqOfSolution_Split(self, theIndex, theSeq)

    def First(self) -> "BRepExtrema_SolutionElem const &":
        return _BRepExtrema.BRepExtrema_SeqOfSolution_First(self)

    def ChangeFirst(self) -> "BRepExtrema_SolutionElem &":
        return _BRepExtrema.BRepExtrema_SeqOfSolution_ChangeFirst(self)

    def Last(self) -> "BRepExtrema_SolutionElem const &":
        return _BRepExtrema.BRepExtrema_SeqOfSolution_Last(self)

    def ChangeLast(self) -> "BRepExtrema_SolutionElem &":
        return _BRepExtrema.BRepExtrema_SeqOfSolution_ChangeLast(self)

    def Value(self, theIndex: "Standard_Integer const") -> "BRepExtrema_SolutionElem const &":
        return _BRepExtrema.BRepExtrema_SeqOfSolution_Value(self, theIndex)

    def ChangeValue(self, theIndex: "Standard_Integer const") -> "BRepExtrema_SolutionElem &":
        return _BRepExtrema.BRepExtrema_SeqOfSolution_ChangeValue(self, theIndex)

    def __call__(self, *args) -> "BRepExtrema_SolutionElem &":
        return _BRepExtrema.BRepExtrema_SeqOfSolution___call__(self, *args)

    def SetValue(self, theIndex: "Standard_Integer const", theItem: "BRepExtrema_SolutionElem") -> "void":
        return _BRepExtrema.BRepExtrema_SeqOfSolution_SetValue(self, theIndex, theItem)
    __swig_destroy__ = _BRepExtrema.delete_BRepExtrema_SeqOfSolution

    def __len__(self):
        return self.Size()


# Register BRepExtrema_SeqOfSolution in _BRepExtrema:
_BRepExtrema.BRepExtrema_SeqOfSolution_swigregister(BRepExtrema_SeqOfSolution)

def BRepExtrema_SeqOfSolution_delNode(theNode: "NCollection_SeqNode *", theAl: "opencascade::handle< NCollection_BaseAllocator > &") -> "void":
    return _BRepExtrema.BRepExtrema_SeqOfSolution_delNode(theNode, theAl)

class BRepExtrema_ShapeList(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def begin(self) -> "NCollection_Vector< TopoDS_Face >::iterator":
        return _BRepExtrema.BRepExtrema_ShapeList_begin(self)

    def end(self) -> "NCollection_Vector< TopoDS_Face >::iterator":
        return _BRepExtrema.BRepExtrema_ShapeList_end(self)

    def cbegin(self) -> "NCollection_Vector< TopoDS_Face >::const_iterator":
        return _BRepExtrema.BRepExtrema_ShapeList_cbegin(self)

    def cend(self) -> "NCollection_Vector< TopoDS_Face >::const_iterator":
        return _BRepExtrema.BRepExtrema_ShapeList_cend(self)

    def __init__(self, *args):
        _BRepExtrema.BRepExtrema_ShapeList_swiginit(self, _BRepExtrema.new_BRepExtrema_ShapeList(*args))
    __swig_destroy__ = _BRepExtrema.delete_BRepExtrema_ShapeList

    def Length(self) -> "Standard_Integer":
        return _BRepExtrema.BRepExtrema_ShapeList_Length(self)

    def Size(self) -> "Standard_Integer":
        return _BRepExtrema.BRepExtrema_ShapeList_Size(self)

    def Lower(self) -> "Standard_Integer":
        return _BRepExtrema.BRepExtrema_ShapeList_Lower(self)

    def Upper(self) -> "Standard_Integer":
        return _BRepExtrema.BRepExtrema_ShapeList_Upper(self)

    def IsEmpty(self) -> "Standard_Boolean":
        return _BRepExtrema.BRepExtrema_ShapeList_IsEmpty(self)

    def Assign(self, *args) -> "void":
        return _BRepExtrema.BRepExtrema_ShapeList_Assign(self, *args)

    def Set(self, theOther: "BRepExtrema_ShapeList") -> "NCollection_Vector< TopoDS_Face > &":
        return _BRepExtrema.BRepExtrema_ShapeList_Set(self, theOther)

    def Append(self, theValue: "TopoDS_Face") -> "TopoDS_Face &":
        return _BRepExtrema.BRepExtrema_ShapeList_Append(self, theValue)

    def Appended(self) -> "TopoDS_Face &":
        return _BRepExtrema.BRepExtrema_ShapeList_Appended(self)

    def Value(self, theIndex: "Standard_Integer const") -> "TopoDS_Face const &":
        return _BRepExtrema.BRepExtrema_ShapeList_Value(self, theIndex)

    def First(self) -> "TopoDS_Face const &":
        return _BRepExtrema.BRepExtrema_ShapeList_First(self)

    def ChangeFirst(self) -> "TopoDS_Face &":
        return _BRepExtrema.BRepExtrema_ShapeList_ChangeFirst(self)

    def Last(self) -> "TopoDS_Face const &":
        return _BRepExtrema.BRepExtrema_ShapeList_Last(self)

    def ChangeLast(self) -> "TopoDS_Face &":
        return _BRepExtrema.BRepExtrema_ShapeList_ChangeLast(self)

    def __call__(self, *args) -> "TopoDS_Face &":
        return _BRepExtrema.BRepExtrema_ShapeList___call__(self, *args)

    def ChangeValue(self, theIndex: "Standard_Integer const") -> "TopoDS_Face &":
        return _BRepExtrema.BRepExtrema_ShapeList_ChangeValue(self, theIndex)

    def SetValue(self, theIndex: "Standard_Integer const", theValue: "TopoDS_Face") -> "TopoDS_Face &":
        return _BRepExtrema.BRepExtrema_ShapeList_SetValue(self, theIndex, theValue)

# Register BRepExtrema_ShapeList in _BRepExtrema:
_BRepExtrema.BRepExtrema_ShapeList_swigregister(BRepExtrema_ShapeList)

class BRepExtrema_DistShapeShape(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        r"""
        Create empty tool .

        Returns
        -------
        None
        Computation of the minimum distance (value and pair of points) using default deflection default value is precision::confusion(). .

        Parameters
        ----------
        Shape1: TopoDS_Shape
        Shape2: TopoDS_Shape
        F: Extrema_ExtFlag,optional
        	default value is Extrema_ExtFlag_MINMAX
        A: Extrema_ExtAlgo,optional
        	default value is Extrema_ExtAlgo_Grad

        Returns
        -------
        None
        Create tool and load both shapes into it .

        Parameters
        ----------
        Shape1: TopoDS_Shape
        Shape2: TopoDS_Shape
        theDeflection: float
        F: Extrema_ExtFlag,optional
        	default value is Extrema_ExtFlag_MINMAX
        A: Extrema_ExtAlgo,optional
        	default value is Extrema_ExtAlgo_Grad

        Returns
        -------
        None

        """
        _BRepExtrema.BRepExtrema_DistShapeShape_swiginit(self, _BRepExtrema.new_BRepExtrema_DistShapeShape(*args))

    def DumpToString(self) -> "std::string":
        r"""DumpToString(BRepExtrema_DistShapeShape self) -> std::string"""
        return _BRepExtrema.BRepExtrema_DistShapeShape_DumpToString(self)

    def InnerSolution(self, *args) -> "Standard_Boolean":
        r"""
        True if one of the shapes is a solid and the other shape is completely or partially inside the solid. .

        Returns
        -------
        bool

        """
        return _BRepExtrema.BRepExtrema_DistShapeShape_InnerSolution(self, *args)

    def IsDone(self, *args) -> "Standard_Boolean":
        r"""
        True if the minimum distance is found. .

        Returns
        -------
        bool

        """
        return _BRepExtrema.BRepExtrema_DistShapeShape_IsDone(self, *args)

    def LoadS1(self, *args) -> "void":
        r"""
        Load first shape into extrema .

        Parameters
        ----------
        Shape1: TopoDS_Shape

        Returns
        -------
        None

        """
        return _BRepExtrema.BRepExtrema_DistShapeShape_LoadS1(self, *args)

    def LoadS2(self, *args) -> "void":
        r"""
        Load second shape into extrema .

        Parameters
        ----------
        Shape1: TopoDS_Shape

        Returns
        -------
        None

        """
        return _BRepExtrema.BRepExtrema_DistShapeShape_LoadS2(self, *args)

    def NbSolution(self, *args) -> "Standard_Integer":
        r"""
        Returns the number of solutions satisfying the minimum distance. .

        Returns
        -------
        int

        """
        return _BRepExtrema.BRepExtrema_DistShapeShape_NbSolution(self, *args)

    def ParOnEdgeS1(self, *args) -> "void":
        r"""
        Gives the corresponding parameter t if the nth solution is situated on an egde of the first shape .

        Parameters
        ----------
        N: int

        Returns
        -------
        t: float

        """
        return _BRepExtrema.BRepExtrema_DistShapeShape_ParOnEdgeS1(self, *args)

    def ParOnEdgeS2(self, *args) -> "void":
        r"""
        Gives the corresponding parameter t if the nth solution is situated on an egde of the first shape .

        Parameters
        ----------
        N: int

        Returns
        -------
        t: float

        """
        return _BRepExtrema.BRepExtrema_DistShapeShape_ParOnEdgeS2(self, *args)

    def ParOnFaceS1(self, *args) -> "void":
        r"""
        Gives the corresponding parameters (u,v) if the nth solution is situated on an face of the first shape .

        Parameters
        ----------
        N: int

        Returns
        -------
        u: float
        v: float

        """
        return _BRepExtrema.BRepExtrema_DistShapeShape_ParOnFaceS1(self, *args)

    def ParOnFaceS2(self, *args) -> "void":
        r"""
        Gives the corresponding parameters (u,v) if the nth solution is situated on an face of the second shape .

        Parameters
        ----------
        N: int

        Returns
        -------
        u: float
        v: float

        """
        return _BRepExtrema.BRepExtrema_DistShapeShape_ParOnFaceS2(self, *args)

    def Perform(self, *args) -> "Standard_Boolean":
        r"""
        Computation of the minimum distance (value and  couple of points). parameter thedeflection is used  to specify a maximum deviation of extreme distances  from the minimum one.  returns isdone status. .

        Returns
        -------
        bool

        """
        return _BRepExtrema.BRepExtrema_DistShapeShape_Perform(self, *args)

    def PointOnShape1(self, *args) -> "gp_Pnt const":
        r"""
        Returns the point corresponding to the <n>th solution on the first shape .

        Parameters
        ----------
        N: int

        Returns
        -------
        gp_Pnt

        """
        return _BRepExtrema.BRepExtrema_DistShapeShape_PointOnShape1(self, *args)

    def PointOnShape2(self, *args) -> "gp_Pnt const":
        r"""
        Returns the point corresponding to the <n>th solution on the second shape .

        Parameters
        ----------
        N: int

        Returns
        -------
        gp_Pnt

        """
        return _BRepExtrema.BRepExtrema_DistShapeShape_PointOnShape2(self, *args)

    def SetAlgo(self, *args) -> "void":
        r"""
        No available documentation.

        Parameters
        ----------
        A: Extrema_ExtAlgo

        Returns
        -------
        None

        """
        return _BRepExtrema.BRepExtrema_DistShapeShape_SetAlgo(self, *args)

    def SetDeflection(self, *args) -> "void":
        r"""
        No available documentation.

        Parameters
        ----------
        theDeflection: float

        Returns
        -------
        None

        """
        return _BRepExtrema.BRepExtrema_DistShapeShape_SetDeflection(self, *args)

    def SetFlag(self, *args) -> "void":
        r"""
        No available documentation.

        Parameters
        ----------
        F: Extrema_ExtFlag

        Returns
        -------
        None

        """
        return _BRepExtrema.BRepExtrema_DistShapeShape_SetFlag(self, *args)

    def SupportOnShape1(self, *args) -> "TopoDS_Shape":
        r"""
        Gives the support where the nth solution on the first shape is situated. this support can be a vertex, an edge or a face. .

        Parameters
        ----------
        N: int

        Returns
        -------
        TopoDS_Shape

        """
        return _BRepExtrema.BRepExtrema_DistShapeShape_SupportOnShape1(self, *args)

    def SupportOnShape2(self, *args) -> "TopoDS_Shape":
        r"""
        Gives the support where the nth solution on the second shape is situated. this support can be a vertex, an edge or a face. .

        Parameters
        ----------
        N: int

        Returns
        -------
        TopoDS_Shape

        """
        return _BRepExtrema.BRepExtrema_DistShapeShape_SupportOnShape2(self, *args)

    def SupportTypeShape1(self, *args) -> "BRepExtrema_SupportType":
        r"""
        Gives the type of the support where the nth solution on the first shape is situated: isvertex => the nth solution on the first shape is a vertex isonedge => the nth soluion on the first shape is on a edge isinface => the nth solution on the first shape is inside a face the corresponding support is obtained by the method supportonshape1 .

        Parameters
        ----------
        N: int

        Returns
        -------
        BRepExtrema_SupportType

        """
        return _BRepExtrema.BRepExtrema_DistShapeShape_SupportTypeShape1(self, *args)

    def SupportTypeShape2(self, *args) -> "BRepExtrema_SupportType":
        r"""
        Gives the type of the support where the nth solution on the second shape is situated: isvertex => the nth solution on the second shape is a vertex isonedge => the nth soluion on the secondt shape is on a edge isinface => the nth solution on the second shape is inside a face the corresponding support is obtained by the method supportonshape2 .

        Parameters
        ----------
        N: int

        Returns
        -------
        BRepExtrema_SupportType

        """
        return _BRepExtrema.BRepExtrema_DistShapeShape_SupportTypeShape2(self, *args)

    def Value(self, *args) -> "Standard_Real":
        r"""
        Returns the value of the minimum distance. .

        Returns
        -------
        float

        """
        return _BRepExtrema.BRepExtrema_DistShapeShape_Value(self, *args)

    __repr__ = _dumps_object

    __swig_destroy__ = _BRepExtrema.delete_BRepExtrema_DistShapeShape

# Register BRepExtrema_DistShapeShape in _BRepExtrema:
_BRepExtrema.BRepExtrema_DistShapeShape_swigregister(BRepExtrema_DistShapeShape)

class BRepExtrema_DistanceSS(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        r"""
        Computes the distance between two shapes ( face edge vertex). .

        Parameters
        ----------
        S1: TopoDS_Shape
        S2: TopoDS_Shape
        B1: Bnd_Box
        B2: Bnd_Box
        DstRef: float
        F: Extrema_ExtFlag,optional
        	default value is Extrema_ExtFlag_MINMAX
        A: Extrema_ExtAlgo,optional
        	default value is Extrema_ExtAlgo_Grad

        Returns
        -------
        None
        Computes the distance between two shapes ( face edge vertex). parameter thedeflection is used to specify a maximum deviation of extreme distances from the minimum one. default value is precision::confusion(). .

        Parameters
        ----------
        S1: TopoDS_Shape
        S2: TopoDS_Shape
        B1: Bnd_Box
        B2: Bnd_Box
        DstRef: float
        aDeflection: float
        F: Extrema_ExtFlag,optional
        	default value is Extrema_ExtFlag_MINMAX
        A: Extrema_ExtAlgo,optional
        	default value is Extrema_ExtAlgo_Grad

        Returns
        -------
        None

        """
        _BRepExtrema.BRepExtrema_DistanceSS_swiginit(self, _BRepExtrema.new_BRepExtrema_DistanceSS(*args))

    def DistValue(self, *args) -> "Standard_Real":
        r"""
        Returns the distance value .

        Returns
        -------
        float

        """
        return _BRepExtrema.BRepExtrema_DistanceSS_DistValue(self, *args)

    def IsDone(self, *args) -> "Standard_Boolean":
        r"""
        True if the distance has been computed .

        Returns
        -------
        bool

        """
        return _BRepExtrema.BRepExtrema_DistanceSS_IsDone(self, *args)

    def Seq1Value(self, *args) -> "BRepExtrema_SeqOfSolution const &":
        r"""
        Returns the list of solutions on the first shape .

        Returns
        -------
        BRepExtrema_SeqOfSolution

        """
        return _BRepExtrema.BRepExtrema_DistanceSS_Seq1Value(self, *args)

    def Seq2Value(self, *args) -> "BRepExtrema_SeqOfSolution const &":
        r"""
        Returns the list of solutions on the second shape .

        Returns
        -------
        BRepExtrema_SeqOfSolution

        """
        return _BRepExtrema.BRepExtrema_DistanceSS_Seq2Value(self, *args)

    def SetAlgo(self, *args) -> "void":
        r"""
        Sets the flag controlling ...

        Parameters
        ----------
        A: Extrema_ExtAlgo

        Returns
        -------
        None

        """
        return _BRepExtrema.BRepExtrema_DistanceSS_SetAlgo(self, *args)

    def SetFlag(self, *args) -> "void":
        r"""
        Sets the flag controlling minimum and maximum search.

        Parameters
        ----------
        F: Extrema_ExtFlag

        Returns
        -------
        None

        """
        return _BRepExtrema.BRepExtrema_DistanceSS_SetFlag(self, *args)

    __repr__ = _dumps_object

    __swig_destroy__ = _BRepExtrema.delete_BRepExtrema_DistanceSS

# Register BRepExtrema_DistanceSS in _BRepExtrema:
_BRepExtrema.BRepExtrema_DistanceSS_swigregister(BRepExtrema_DistanceSS)

class BRepExtrema_ElementFilter(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    NoCheck = _BRepExtrema.BRepExtrema_ElementFilter_NoCheck
    Overlap = _BRepExtrema.BRepExtrema_ElementFilter_Overlap
    DoCheck = _BRepExtrema.BRepExtrema_ElementFilter_DoCheck


    class FilterResult(IntEnum):
    	NoCheck = 0
    	Overlap = 1
    	DoCheck = 2
    NoCheck = FilterResult.NoCheck
    Overlap = FilterResult.Overlap
    DoCheck = FilterResult.DoCheck


    def PreCheckElements(self, *args) -> "BRepExtrema_ElementFilter::FilterResult":
        r"""
        Checks if two mesh elements should be tested for overlapping/intersection (used for detection correct/incorrect cases of shared edges and vertices).

        Parameters
        ----------
        Standard_Integer: 
        Standard_Integer: 

        Returns
        -------
        BRepExtrema_ElementFilter::FilterResult

        """
        return _BRepExtrema.BRepExtrema_ElementFilter_PreCheckElements(self, *args)

    __repr__ = _dumps_object


    def __init__(self):
        _BRepExtrema.BRepExtrema_ElementFilter_swiginit(self, _BRepExtrema.new_BRepExtrema_ElementFilter())
    __swig_destroy__ = _BRepExtrema.delete_BRepExtrema_ElementFilter

# Register BRepExtrema_ElementFilter in _BRepExtrema:
_BRepExtrema.BRepExtrema_ElementFilter_swigregister(BRepExtrema_ElementFilter)

class BRepExtrema_ExtCC(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        r"""
        No available documentation.

        Returns
        -------
        None
        It calculates all the distances. .

        Parameters
        ----------
        E1: TopoDS_Edge
        E2: TopoDS_Edge

        Returns
        -------
        None

        """
        _BRepExtrema.BRepExtrema_ExtCC_swiginit(self, _BRepExtrema.new_BRepExtrema_ExtCC(*args))

    def Initialize(self, *args) -> "void":
        r"""
        No available documentation.

        Parameters
        ----------
        E2: TopoDS_Edge

        Returns
        -------
        None

        """
        return _BRepExtrema.BRepExtrema_ExtCC_Initialize(self, *args)

    def IsDone(self, *args) -> "Standard_Boolean":
        r"""
        True if the distances are found. .

        Returns
        -------
        bool

        """
        return _BRepExtrema.BRepExtrema_ExtCC_IsDone(self, *args)

    def IsParallel(self, *args) -> "Standard_Boolean":
        r"""
        Returns true if e1 and e2 are parallel. .

        Returns
        -------
        bool

        """
        return _BRepExtrema.BRepExtrema_ExtCC_IsParallel(self, *args)

    def NbExt(self, *args) -> "Standard_Integer":
        r"""
        Returns the number of extremum distances. .

        Returns
        -------
        int

        """
        return _BRepExtrema.BRepExtrema_ExtCC_NbExt(self, *args)

    def ParameterOnE1(self, *args) -> "Standard_Real":
        r"""
        Returns the parameter on the first edge of the <n>th extremum distance. .

        Parameters
        ----------
        N: int

        Returns
        -------
        float

        """
        return _BRepExtrema.BRepExtrema_ExtCC_ParameterOnE1(self, *args)

    def ParameterOnE2(self, *args) -> "Standard_Real":
        r"""
        Returns the parameter on the second edge of the <n>th extremum distance. .

        Parameters
        ----------
        N: int

        Returns
        -------
        float

        """
        return _BRepExtrema.BRepExtrema_ExtCC_ParameterOnE2(self, *args)

    def Perform(self, *args) -> "void":
        r"""
        An exception is raised if the fields have not been initialized. .

        Parameters
        ----------
        E1: TopoDS_Edge

        Returns
        -------
        None

        """
        return _BRepExtrema.BRepExtrema_ExtCC_Perform(self, *args)

    def PointOnE1(self, *args) -> "gp_Pnt":
        r"""
        Returns the point of the <n>th extremum distance on the edge e1. .

        Parameters
        ----------
        N: int

        Returns
        -------
        gp_Pnt

        """
        return _BRepExtrema.BRepExtrema_ExtCC_PointOnE1(self, *args)

    def PointOnE2(self, *args) -> "gp_Pnt":
        r"""
        Returns the point of the <n>th extremum distance on the edge e2. .

        Parameters
        ----------
        N: int

        Returns
        -------
        gp_Pnt

        """
        return _BRepExtrema.BRepExtrema_ExtCC_PointOnE2(self, *args)

    def SquareDistance(self, *args) -> "Standard_Real":
        r"""
        Returns the value of the <n>th extremum square distance. .

        Parameters
        ----------
        N: int

        Returns
        -------
        float

        """
        return _BRepExtrema.BRepExtrema_ExtCC_SquareDistance(self, *args)

    def TrimmedSquareDistances(self, *args) -> "void":
        r"""
        If the edges is a trimmed curve, dist11 is a square distance between the point on e1 of parameter firstparameter and the point of parameter firstparameter on e2. .

        Parameters
        ----------
        P11: gp_Pnt
        P12: gp_Pnt
        P21: gp_Pnt
        P22: gp_Pnt

        Returns
        -------
        dist11: float
        distP12: float
        distP21: float
        distP22: float

        """
        return _BRepExtrema.BRepExtrema_ExtCC_TrimmedSquareDistances(self, *args)

    __repr__ = _dumps_object

    __swig_destroy__ = _BRepExtrema.delete_BRepExtrema_ExtCC

# Register BRepExtrema_ExtCC in _BRepExtrema:
_BRepExtrema.BRepExtrema_ExtCC_swigregister(BRepExtrema_ExtCC)

class BRepExtrema_ExtCF(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        r"""
        No available documentation.

        Returns
        -------
        None
        It calculates all the distances. .

        Parameters
        ----------
        E: TopoDS_Edge
        F: TopoDS_Face

        Returns
        -------
        None

        """
        _BRepExtrema.BRepExtrema_ExtCF_swiginit(self, _BRepExtrema.new_BRepExtrema_ExtCF(*args))

    def Initialize(self, *args) -> "void":
        r"""
        No available documentation.

        Parameters
        ----------
        E: TopoDS_Edge
        F: TopoDS_Face

        Returns
        -------
        None

        """
        return _BRepExtrema.BRepExtrema_ExtCF_Initialize(self, *args)

    def IsDone(self, *args) -> "Standard_Boolean":
        r"""
        True if the distances are found. .

        Returns
        -------
        bool

        """
        return _BRepExtrema.BRepExtrema_ExtCF_IsDone(self, *args)

    def IsParallel(self, *args) -> "Standard_Boolean":
        r"""
        Returns true if the curve is on a parallel surface. .

        Returns
        -------
        bool

        """
        return _BRepExtrema.BRepExtrema_ExtCF_IsParallel(self, *args)

    def NbExt(self, *args) -> "Standard_Integer":
        r"""
        Returns the number of extremum distances. .

        Returns
        -------
        int

        """
        return _BRepExtrema.BRepExtrema_ExtCF_NbExt(self, *args)

    def ParameterOnEdge(self, *args) -> "Standard_Real":
        r"""
        Returns the parameters on the edge of the <n>th extremum distance. .

        Parameters
        ----------
        N: int

        Returns
        -------
        float

        """
        return _BRepExtrema.BRepExtrema_ExtCF_ParameterOnEdge(self, *args)

    def ParameterOnFace(self, *args) -> "void":
        r"""
        Returns the parameters on the face of the <n>th extremum distance. .

        Parameters
        ----------
        N: int

        Returns
        -------
        U: float
        V: float

        """
        return _BRepExtrema.BRepExtrema_ExtCF_ParameterOnFace(self, *args)

    def Perform(self, *args) -> "void":
        r"""
        An exception is raised if the fields have not been initialized. be careful: this method uses the face only for classify not for the fields. .

        Parameters
        ----------
        E: TopoDS_Edge
        F: TopoDS_Face

        Returns
        -------
        None

        """
        return _BRepExtrema.BRepExtrema_ExtCF_Perform(self, *args)

    def PointOnEdge(self, *args) -> "gp_Pnt":
        r"""
        Returns the point of the <n>th extremum distance. .

        Parameters
        ----------
        N: int

        Returns
        -------
        gp_Pnt

        """
        return _BRepExtrema.BRepExtrema_ExtCF_PointOnEdge(self, *args)

    def PointOnFace(self, *args) -> "gp_Pnt":
        r"""
        Returns the point of the <n>th extremum distance. .

        Parameters
        ----------
        N: int

        Returns
        -------
        gp_Pnt

        """
        return _BRepExtrema.BRepExtrema_ExtCF_PointOnFace(self, *args)

    def SquareDistance(self, *args) -> "Standard_Real":
        r"""
        Returns the value of the <n>th extremum square distance. .

        Parameters
        ----------
        N: int

        Returns
        -------
        float

        """
        return _BRepExtrema.BRepExtrema_ExtCF_SquareDistance(self, *args)

    __repr__ = _dumps_object

    __swig_destroy__ = _BRepExtrema.delete_BRepExtrema_ExtCF

# Register BRepExtrema_ExtCF in _BRepExtrema:
_BRepExtrema.BRepExtrema_ExtCF_swigregister(BRepExtrema_ExtCF)

class BRepExtrema_ExtFF(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        r"""
        No available documentation.

        Returns
        -------
        None
        It calculates all the distances. .

        Parameters
        ----------
        F1: TopoDS_Face
        F2: TopoDS_Face

        Returns
        -------
        None

        """
        _BRepExtrema.BRepExtrema_ExtFF_swiginit(self, _BRepExtrema.new_BRepExtrema_ExtFF(*args))

    def Initialize(self, *args) -> "void":
        r"""
        No available documentation.

        Parameters
        ----------
        F2: TopoDS_Face

        Returns
        -------
        None

        """
        return _BRepExtrema.BRepExtrema_ExtFF_Initialize(self, *args)

    def IsDone(self, *args) -> "Standard_Boolean":
        r"""
        True if the distances are found. .

        Returns
        -------
        bool

        """
        return _BRepExtrema.BRepExtrema_ExtFF_IsDone(self, *args)

    def IsParallel(self, *args) -> "Standard_Boolean":
        r"""
        Returns true if the surfaces are parallel. .

        Returns
        -------
        bool

        """
        return _BRepExtrema.BRepExtrema_ExtFF_IsParallel(self, *args)

    def NbExt(self, *args) -> "Standard_Integer":
        r"""
        Returns the number of extremum distances. .

        Returns
        -------
        int

        """
        return _BRepExtrema.BRepExtrema_ExtFF_NbExt(self, *args)

    def ParameterOnFace1(self, *args) -> "void":
        r"""
        Returns the parameters on the face f1 of the <n>th extremum distance. .

        Parameters
        ----------
        N: int

        Returns
        -------
        U: float
        V: float

        """
        return _BRepExtrema.BRepExtrema_ExtFF_ParameterOnFace1(self, *args)

    def ParameterOnFace2(self, *args) -> "void":
        r"""
        Returns the parameters on the face f2 of the <n>th extremum distance. .

        Parameters
        ----------
        N: int

        Returns
        -------
        U: float
        V: float

        """
        return _BRepExtrema.BRepExtrema_ExtFF_ParameterOnFace2(self, *args)

    def Perform(self, *args) -> "void":
        r"""
        An exception is raised if the fields have not been initialized. be careful: this method uses the face f2 only for classify, not for the fields. .

        Parameters
        ----------
        F1: TopoDS_Face
        F2: TopoDS_Face

        Returns
        -------
        None

        """
        return _BRepExtrema.BRepExtrema_ExtFF_Perform(self, *args)

    def PointOnFace1(self, *args) -> "gp_Pnt":
        r"""
        Returns the point of the <n>th extremum distance. .

        Parameters
        ----------
        N: int

        Returns
        -------
        gp_Pnt

        """
        return _BRepExtrema.BRepExtrema_ExtFF_PointOnFace1(self, *args)

    def PointOnFace2(self, *args) -> "gp_Pnt":
        r"""
        Returns the point of the <n>th extremum distance. .

        Parameters
        ----------
        N: int

        Returns
        -------
        gp_Pnt

        """
        return _BRepExtrema.BRepExtrema_ExtFF_PointOnFace2(self, *args)

    def SquareDistance(self, *args) -> "Standard_Real":
        r"""
        Returns the value of the <n>th extremum square distance. .

        Parameters
        ----------
        N: int

        Returns
        -------
        float

        """
        return _BRepExtrema.BRepExtrema_ExtFF_SquareDistance(self, *args)

    __repr__ = _dumps_object

    __swig_destroy__ = _BRepExtrema.delete_BRepExtrema_ExtFF

# Register BRepExtrema_ExtFF in _BRepExtrema:
_BRepExtrema.BRepExtrema_ExtFF_swigregister(BRepExtrema_ExtFF)

class BRepExtrema_ExtPC(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        r"""
        No available documentation.

        Returns
        -------
        None
        It calculates all the distances. .

        Parameters
        ----------
        V: TopoDS_Vertex
        E: TopoDS_Edge

        Returns
        -------
        None

        """
        _BRepExtrema.BRepExtrema_ExtPC_swiginit(self, _BRepExtrema.new_BRepExtrema_ExtPC(*args))

    def Initialize(self, *args) -> "void":
        r"""
        No available documentation.

        Parameters
        ----------
        E: TopoDS_Edge

        Returns
        -------
        None

        """
        return _BRepExtrema.BRepExtrema_ExtPC_Initialize(self, *args)

    def IsDone(self, *args) -> "Standard_Boolean":
        r"""
        True if the distances are found. .

        Returns
        -------
        bool

        """
        return _BRepExtrema.BRepExtrema_ExtPC_IsDone(self, *args)

    def IsMin(self, *args) -> "Standard_Boolean":
        r"""
        Returns true if the <n>th extremum distance is a minimum. .

        Parameters
        ----------
        N: int

        Returns
        -------
        bool

        """
        return _BRepExtrema.BRepExtrema_ExtPC_IsMin(self, *args)

    def NbExt(self, *args) -> "Standard_Integer":
        r"""
        Returns the number of extremum distances. .

        Returns
        -------
        int

        """
        return _BRepExtrema.BRepExtrema_ExtPC_NbExt(self, *args)

    def Parameter(self, *args) -> "Standard_Real":
        r"""
        Returns the parameter on the edge of the <n>th extremum distance. .

        Parameters
        ----------
        N: int

        Returns
        -------
        float

        """
        return _BRepExtrema.BRepExtrema_ExtPC_Parameter(self, *args)

    def Perform(self, *args) -> "void":
        r"""
        An exception is raised if the fields have not been initialized. .

        Parameters
        ----------
        V: TopoDS_Vertex

        Returns
        -------
        None

        """
        return _BRepExtrema.BRepExtrema_ExtPC_Perform(self, *args)

    def Point(self, *args) -> "gp_Pnt":
        r"""
        Returns the point of the <n>th extremum distance. .

        Parameters
        ----------
        N: int

        Returns
        -------
        gp_Pnt

        """
        return _BRepExtrema.BRepExtrema_ExtPC_Point(self, *args)

    def SquareDistance(self, *args) -> "Standard_Real":
        r"""
        Returns the value of the <n>th extremum square distance. .

        Parameters
        ----------
        N: int

        Returns
        -------
        float

        """
        return _BRepExtrema.BRepExtrema_ExtPC_SquareDistance(self, *args)

    def TrimmedSquareDistances(self, *args) -> "void":
        r"""
        If the curve is a trimmed curve, dist1 is a square distance between <p> and the point of parameter firstparameter <pnt1> and dist2 is a square distance between <p> and the point of parameter lastparameter <pnt2>. .

        Parameters
        ----------
        pnt1: gp_Pnt
        pnt2: gp_Pnt

        Returns
        -------
        dist1: float
        dist2: float

        """
        return _BRepExtrema.BRepExtrema_ExtPC_TrimmedSquareDistances(self, *args)

    __repr__ = _dumps_object

    __swig_destroy__ = _BRepExtrema.delete_BRepExtrema_ExtPC

# Register BRepExtrema_ExtPC in _BRepExtrema:
_BRepExtrema.BRepExtrema_ExtPC_swigregister(BRepExtrema_ExtPC)

class BRepExtrema_ExtPF(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        r"""
        No available documentation.

        Returns
        -------
        None
        It calculates all the distances. .

        Parameters
        ----------
        TheVertex: TopoDS_Vertex
        TheFace: TopoDS_Face
        TheFlag: Extrema_ExtFlag,optional
        	default value is Extrema_ExtFlag_MINMAX
        TheAlgo: Extrema_ExtAlgo,optional
        	default value is Extrema_ExtAlgo_Grad

        Returns
        -------
        None

        """
        _BRepExtrema.BRepExtrema_ExtPF_swiginit(self, _BRepExtrema.new_BRepExtrema_ExtPF(*args))

    def Initialize(self, *args) -> "void":
        r"""
        No available documentation.

        Parameters
        ----------
        TheFace: TopoDS_Face
        TheFlag: Extrema_ExtFlag,optional
        	default value is Extrema_ExtFlag_MINMAX
        TheAlgo: Extrema_ExtAlgo,optional
        	default value is Extrema_ExtAlgo_Grad

        Returns
        -------
        None

        """
        return _BRepExtrema.BRepExtrema_ExtPF_Initialize(self, *args)

    def IsDone(self, *args) -> "Standard_Boolean":
        r"""
        True if the distances are found. .

        Returns
        -------
        bool

        """
        return _BRepExtrema.BRepExtrema_ExtPF_IsDone(self, *args)

    def NbExt(self, *args) -> "Standard_Integer":
        r"""
        Returns the number of extremum distances. .

        Returns
        -------
        int

        """
        return _BRepExtrema.BRepExtrema_ExtPF_NbExt(self, *args)

    def Parameter(self, *args) -> "void":
        r"""
        Returns the parameters on the face of the <n>th extremum distance. .

        Parameters
        ----------
        N: int

        Returns
        -------
        U: float
        V: float

        """
        return _BRepExtrema.BRepExtrema_ExtPF_Parameter(self, *args)

    def Perform(self, *args) -> "void":
        r"""
        An exception is raised if the fields have not been initialized. be careful: this method uses the face only for classify not for the fields. .

        Parameters
        ----------
        TheVertex: TopoDS_Vertex
        TheFace: TopoDS_Face

        Returns
        -------
        None

        """
        return _BRepExtrema.BRepExtrema_ExtPF_Perform(self, *args)

    def Point(self, *args) -> "gp_Pnt":
        r"""
        Returns the point of the <n>th extremum distance. .

        Parameters
        ----------
        N: int

        Returns
        -------
        gp_Pnt

        """
        return _BRepExtrema.BRepExtrema_ExtPF_Point(self, *args)

    def SetAlgo(self, *args) -> "void":
        r"""
        No available documentation.

        Parameters
        ----------
        A: Extrema_ExtAlgo

        Returns
        -------
        None

        """
        return _BRepExtrema.BRepExtrema_ExtPF_SetAlgo(self, *args)

    def SetFlag(self, *args) -> "void":
        r"""
        No available documentation.

        Parameters
        ----------
        F: Extrema_ExtFlag

        Returns
        -------
        None

        """
        return _BRepExtrema.BRepExtrema_ExtPF_SetFlag(self, *args)

    def SquareDistance(self, *args) -> "Standard_Real":
        r"""
        Returns the value of the <n>th extremum square distance. .

        Parameters
        ----------
        N: int

        Returns
        -------
        float

        """
        return _BRepExtrema.BRepExtrema_ExtPF_SquareDistance(self, *args)

    __repr__ = _dumps_object

    __swig_destroy__ = _BRepExtrema.delete_BRepExtrema_ExtPF

# Register BRepExtrema_ExtPF in _BRepExtrema:
_BRepExtrema.BRepExtrema_ExtPF_swigregister(BRepExtrema_ExtPF)

class BRepExtrema_Poly(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    @staticmethod
    def Distance(*args) -> "Standard_Real &":
        r"""
        Returns standard_true if ok.

        Parameters
        ----------
        S1: TopoDS_Shape
        S2: TopoDS_Shape
        P1: gp_Pnt
        P2: gp_Pnt

        Returns
        -------
        dist: float

        """
        return _BRepExtrema.BRepExtrema_Poly_Distance(*args)

    __repr__ = _dumps_object


    def __init__(self):
        _BRepExtrema.BRepExtrema_Poly_swiginit(self, _BRepExtrema.new_BRepExtrema_Poly())
    __swig_destroy__ = _BRepExtrema.delete_BRepExtrema_Poly

# Register BRepExtrema_Poly in _BRepExtrema:
_BRepExtrema.BRepExtrema_Poly_swigregister(BRepExtrema_Poly)

def BRepExtrema_Poly_Distance(*args) -> "Standard_Real &":
    r"""
    Returns standard_true if ok.

    Parameters
    ----------
    S1: TopoDS_Shape
    S2: TopoDS_Shape
    P1: gp_Pnt
    P2: gp_Pnt

    Returns
    -------
    dist: float

    """
    return _BRepExtrema.BRepExtrema_Poly_Distance(*args)

class BRepExtrema_ShapeProximity(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        r"""
        Creates empty proximity tool.

        Parameters
        ----------
        theTolerance: float,optional
        	default value is 0.0

        Returns
        -------
        None
        Creates proximity tool for the given two shapes.

        Parameters
        ----------
        theShape1: TopoDS_Shape
        theShape2: TopoDS_Shape
        theTolerance: float,optional
        	default value is 0.0

        Returns
        -------
        None

        """
        _BRepExtrema.BRepExtrema_ShapeProximity_swiginit(self, _BRepExtrema.new_BRepExtrema_ShapeProximity(*args))

    def ElementSet1(self, *args) -> "opencascade::handle< BRepExtrema_TriangleSet > const &":
        r"""
        Returns set of all the face triangles of the 1st shape.

        Returns
        -------
        opencascade::handle<BRepExtrema_TriangleSet>

        """
        return _BRepExtrema.BRepExtrema_ShapeProximity_ElementSet1(self, *args)

    def ElementSet2(self, *args) -> "opencascade::handle< BRepExtrema_TriangleSet > const &":
        r"""
        Returns set of all the face triangles of the 2nd shape.

        Returns
        -------
        opencascade::handle<BRepExtrema_TriangleSet>

        """
        return _BRepExtrema.BRepExtrema_ShapeProximity_ElementSet2(self, *args)

    def GetSubShape1(self, *args) -> "TopoDS_Face const":
        r"""
        Returns sub-shape from 1st shape with the given index (started from 0).

        Parameters
        ----------
        theID: int

        Returns
        -------
        TopoDS_Face

        """
        return _BRepExtrema.BRepExtrema_ShapeProximity_GetSubShape1(self, *args)

    def GetSubShape2(self, *args) -> "TopoDS_Face const":
        r"""
        Returns sub-shape from 1st shape with the given index (started from 0).

        Parameters
        ----------
        theID: int

        Returns
        -------
        TopoDS_Face

        """
        return _BRepExtrema.BRepExtrema_ShapeProximity_GetSubShape2(self, *args)

    def IsDone(self, *args) -> "Standard_Boolean":
        r"""
        True if the search is completed.

        Returns
        -------
        bool

        """
        return _BRepExtrema.BRepExtrema_ShapeProximity_IsDone(self, *args)

    def LoadShape1(self, *args) -> "Standard_Boolean":
        r"""
        Loads 1st shape into proximity tool.

        Parameters
        ----------
        theShape1: TopoDS_Shape

        Returns
        -------
        bool

        """
        return _BRepExtrema.BRepExtrema_ShapeProximity_LoadShape1(self, *args)

    def LoadShape2(self, *args) -> "Standard_Boolean":
        r"""
        Loads 2nd shape into proximity tool.

        Parameters
        ----------
        theShape2: TopoDS_Shape

        Returns
        -------
        bool

        """
        return _BRepExtrema.BRepExtrema_ShapeProximity_LoadShape2(self, *args)

    def OverlapSubShapes1(self, *args) -> "BRepExtrema_MapOfIntegerPackedMapOfInteger const &":
        r"""
        Returns set of ids of overlapped faces of 1st shape (started from 0).

        Returns
        -------
        BRepExtrema_MapOfIntegerPackedMapOfInteger

        """
        return _BRepExtrema.BRepExtrema_ShapeProximity_OverlapSubShapes1(self, *args)

    def OverlapSubShapes2(self, *args) -> "BRepExtrema_MapOfIntegerPackedMapOfInteger const &":
        r"""
        Returns set of ids of overlapped faces of 2nd shape (started from 0).

        Returns
        -------
        BRepExtrema_MapOfIntegerPackedMapOfInteger

        """
        return _BRepExtrema.BRepExtrema_ShapeProximity_OverlapSubShapes2(self, *args)

    def Perform(self, *args) -> "void":
        r"""
        Performs search of overlapped faces.

        Returns
        -------
        None

        """
        return _BRepExtrema.BRepExtrema_ShapeProximity_Perform(self, *args)

    def SetTolerance(self, *args) -> "void":
        r"""
        Sets tolerance value for overlap test (distance between shapes).

        Parameters
        ----------
        theTolerance: float

        Returns
        -------
        None

        """
        return _BRepExtrema.BRepExtrema_ShapeProximity_SetTolerance(self, *args)

    def Tolerance(self, *args) -> "Standard_Real":
        r"""
        Returns tolerance value for overlap test (distance between shapes).

        Returns
        -------
        float

        """
        return _BRepExtrema.BRepExtrema_ShapeProximity_Tolerance(self, *args)

    __repr__ = _dumps_object

    __swig_destroy__ = _BRepExtrema.delete_BRepExtrema_ShapeProximity

# Register BRepExtrema_ShapeProximity in _BRepExtrema:
_BRepExtrema.BRepExtrema_ShapeProximity_swigregister(BRepExtrema_ShapeProximity)

class BRepExtrema_SolutionElem(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        r"""
        Empty constructor.

        Returns
        -------
        None
        This constructor is used when the solution of a distance is a vertex. the different initialized fields are: @param thedist the distance @param thepoint the solution point @param thesoltype the type of solution @param thevertex and the vertex.

        Parameters
        ----------
        theDist: float
        thePoint: gp_Pnt
        theSolType: BRepExtrema_SupportType
        theVertex: TopoDS_Vertex

        Returns
        -------
        None
        This constructor is used when the solution of distance is on an edge. the different initialized fields are: @param thedist the distance @param thepoint the solution point @param thesoltype the type of solution @param theedge the edge @param theparam the parameter to locate the solution.

        Parameters
        ----------
        theDist: float
        thePoint: gp_Pnt
        theSolType: BRepExtrema_SupportType
        theEdge: TopoDS_Edge
        theParam: float

        Returns
        -------
        None
        This constructor is used when the solution of distance is in a face. the different initialized fields are: @param thedist the distance @param thepoint the solution point @param thesoltype the type of solution @param theface the face @param theu u parameter to locate the solution @param thev v parameter to locate the solution.

        Parameters
        ----------
        theDist: float
        thePoint: gp_Pnt
        theSolType: BRepExtrema_SupportType
        theFace: TopoDS_Face
        theU: float
        theV: float

        Returns
        -------
        None

        """
        _BRepExtrema.BRepExtrema_SolutionElem_swiginit(self, _BRepExtrema.new_BRepExtrema_SolutionElem(*args))

    def Dist(self, *args) -> "Standard_Real":
        r"""
        Returns the value of the minimum distance.

        Returns
        -------
        float

        """
        return _BRepExtrema.BRepExtrema_SolutionElem_Dist(self, *args)

    def Edge(self, *args) -> "TopoDS_Edge const":
        r"""
        Returns the vertex if the solution is an edge.

        Returns
        -------
        TopoDS_Edge

        """
        return _BRepExtrema.BRepExtrema_SolutionElem_Edge(self, *args)

    def EdgeParameter(self, *args) -> "void":
        r"""
        Returns the parameter value if the solution is on edge.

        Parameters
        ----------

        Returns
        -------
        theParam: float

        """
        return _BRepExtrema.BRepExtrema_SolutionElem_EdgeParameter(self, *args)

    def Face(self, *args) -> "TopoDS_Face const":
        r"""
        Returns the vertex if the solution is an face.

        Returns
        -------
        TopoDS_Face

        """
        return _BRepExtrema.BRepExtrema_SolutionElem_Face(self, *args)

    def FaceParameter(self, *args) -> "void":
        r"""
        Returns the parameters u and v if the solution is in a face.

        Parameters
        ----------

        Returns
        -------
        theU: float
        theV: float

        """
        return _BRepExtrema.BRepExtrema_SolutionElem_FaceParameter(self, *args)

    def Point(self, *args) -> "gp_Pnt const":
        r"""
        Returns the solution point.

        Returns
        -------
        gp_Pnt

        """
        return _BRepExtrema.BRepExtrema_SolutionElem_Point(self, *args)

    def SupportKind(self, *args) -> "BRepExtrema_SupportType":
        r"""
        Returns the support type: isvertex => the solution is a vertex. isonedge => the solution belongs to an edge. isinface => the solution is inside a face.

        Returns
        -------
        BRepExtrema_SupportType

        """
        return _BRepExtrema.BRepExtrema_SolutionElem_SupportKind(self, *args)

    def Vertex(self, *args) -> "TopoDS_Vertex const":
        r"""
        Returns the vertex if the solution is a vertex.

        Returns
        -------
        TopoDS_Vertex

        """
        return _BRepExtrema.BRepExtrema_SolutionElem_Vertex(self, *args)

    __repr__ = _dumps_object

    __swig_destroy__ = _BRepExtrema.delete_BRepExtrema_SolutionElem

# Register BRepExtrema_SolutionElem in _BRepExtrema:
_BRepExtrema.BRepExtrema_SolutionElem_swigregister(BRepExtrema_SolutionElem)

class BRepExtrema_TriangleSet(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        r"""
        Creates empty triangle set.

        Returns
        -------
        None
        Creates triangle set from the given face.

        Parameters
        ----------
        theFaces: BRepExtrema_ShapeList

        Returns
        -------
        None

        """
        _BRepExtrema.BRepExtrema_TriangleSet_swiginit(self, _BRepExtrema.new_BRepExtrema_TriangleSet(*args))

    def Box(self, *args) -> "BVH_Box< Standard_Real,3 >":
        r"""
        Returns aabb of the given triangle.

        Parameters
        ----------
        theIndex: int

        Returns
        -------
        BVH_Box<float, 3 >

        """
        return _BRepExtrema.BRepExtrema_TriangleSet_Box(self, *args)

    def Center(self, *args) -> "Standard_Real":
        r"""
        Returns centroid position along specified axis.

        Parameters
        ----------
        theIndex: int
        theAxis: int

        Returns
        -------
        float

        """
        return _BRepExtrema.BRepExtrema_TriangleSet_Center(self, *args)

    def Clear(self, *args) -> "void":
        r"""
        Clears triangle set data.

        Returns
        -------
        None

        """
        return _BRepExtrema.BRepExtrema_TriangleSet_Clear(self, *args)

    def GetFaceID(self, *args) -> "Standard_Integer":
        r"""
        Returns face id of the given triangle.

        Parameters
        ----------
        theIndex: int

        Returns
        -------
        int

        """
        return _BRepExtrema.BRepExtrema_TriangleSet_GetFaceID(self, *args)

    def GetVertices(self, *args) -> "void":
        r"""
        Returns vertices of the given triangle.

        Parameters
        ----------
        theIndex: int
        theVertex1: BVH_Vec3d
        theVertex2: BVH_Vec3d
        theVertex3: BVH_Vec3d

        Returns
        -------
        None

        """
        return _BRepExtrema.BRepExtrema_TriangleSet_GetVertices(self, *args)

    def Init(self, *args) -> "Standard_Boolean":
        r"""
        Initializes triangle set.

        Parameters
        ----------
        theFaces: BRepExtrema_ShapeList

        Returns
        -------
        bool

        """
        return _BRepExtrema.BRepExtrema_TriangleSet_Init(self, *args)

    def Size(self, *args) -> "Standard_Integer":
        r"""
        Returns total number of triangles.

        Returns
        -------
        int

        """
        return _BRepExtrema.BRepExtrema_TriangleSet_Size(self, *args)

    def Swap(self, *args) -> "void":
        r"""
        Swaps indices of two specified triangles.

        Parameters
        ----------
        theIndex1: int
        theIndex2: int

        Returns
        -------
        None

        """
        return _BRepExtrema.BRepExtrema_TriangleSet_Swap(self, *args)


    @staticmethod
    def DownCast(t):
      return Handle_BRepExtrema_TriangleSet_DownCast(t)


    __repr__ = _dumps_object

    __swig_destroy__ = _BRepExtrema.delete_BRepExtrema_TriangleSet

# Register BRepExtrema_TriangleSet in _BRepExtrema:
_BRepExtrema.BRepExtrema_TriangleSet_swigregister(BRepExtrema_TriangleSet)

class BRepExtrema_SelfIntersection(BRepExtrema_ElementFilter):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        r"""
        Creates unitialized self-intersection tool.

        Parameters
        ----------
        theTolerance: float,optional
        	default value is 0.0

        Returns
        -------
        None
        Creates self-intersection tool for the given shape.

        Parameters
        ----------
        theShape: TopoDS_Shape
        theTolerance: float,optional
        	default value is 0.0

        Returns
        -------
        None

        """
        _BRepExtrema.BRepExtrema_SelfIntersection_swiginit(self, _BRepExtrema.new_BRepExtrema_SelfIntersection(*args))

    def ElementSet(self, *args) -> "opencascade::handle< BRepExtrema_TriangleSet > const &":
        r"""
        Returns set of all the face triangles of the shape.

        Returns
        -------
        opencascade::handle<BRepExtrema_TriangleSet>

        """
        return _BRepExtrema.BRepExtrema_SelfIntersection_ElementSet(self, *args)

    def GetSubShape(self, *args) -> "TopoDS_Face const":
        r"""
        Returns sub-shape from the shape for the given index (started from 0).

        Parameters
        ----------
        theID: int

        Returns
        -------
        TopoDS_Face

        """
        return _BRepExtrema.BRepExtrema_SelfIntersection_GetSubShape(self, *args)

    def IsDone(self, *args) -> "Standard_Boolean":
        r"""
        True if the detection is completed.

        Returns
        -------
        bool

        """
        return _BRepExtrema.BRepExtrema_SelfIntersection_IsDone(self, *args)

    def LoadShape(self, *args) -> "Standard_Boolean":
        r"""
        Loads shape for detection of self-intersections.

        Parameters
        ----------
        theShape: TopoDS_Shape

        Returns
        -------
        bool

        """
        return _BRepExtrema.BRepExtrema_SelfIntersection_LoadShape(self, *args)

    def OverlapElements(self, *args) -> "BRepExtrema_MapOfIntegerPackedMapOfInteger const &":
        r"""
        Returns set of ids of overlapped sub-shapes (started from 0).

        Returns
        -------
        BRepExtrema_MapOfIntegerPackedMapOfInteger

        """
        return _BRepExtrema.BRepExtrema_SelfIntersection_OverlapElements(self, *args)

    def Perform(self, *args) -> "void":
        r"""
        Performs detection of self-intersections.

        Returns
        -------
        None

        """
        return _BRepExtrema.BRepExtrema_SelfIntersection_Perform(self, *args)

    def SetTolerance(self, *args) -> "void":
        r"""
        Sets tolerance value used for self-intersection test.

        Parameters
        ----------
        theTolerance: float

        Returns
        -------
        None

        """
        return _BRepExtrema.BRepExtrema_SelfIntersection_SetTolerance(self, *args)

    def Tolerance(self, *args) -> "Standard_Real":
        r"""
        Returns tolerance value used for self-intersection test.

        Returns
        -------
        float

        """
        return _BRepExtrema.BRepExtrema_SelfIntersection_Tolerance(self, *args)

    __repr__ = _dumps_object

    @methodnotwrapped
    def OverlapTriangles(self):
    	pass

    __swig_destroy__ = _BRepExtrema.delete_BRepExtrema_SelfIntersection

# Register BRepExtrema_SelfIntersection in _BRepExtrema:
_BRepExtrema.BRepExtrema_SelfIntersection_swigregister(BRepExtrema_SelfIntersection)


@classnotwrapped
class BRepExtrema_OverlapTool:
	pass






