# 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.

"""
SelectBasics module, see official documentation at
https://www.opencascade.com/doc/occt-7.4.0/refman/html/package_selectbasics.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 _SelectBasics
else:
    import _SelectBasics

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__ = _SelectBasics.delete_SwigPyIterator

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

# Register SwigPyIterator in _SelectBasics:
_SelectBasics.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 _SelectBasics.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.gp
import OCC.Core.TColStd
import OCC.Core.TCollection
import OCC.Core.TColgp

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



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

    @staticmethod
    def MaxOwnerPriority(*args) -> "Standard_Integer":
        r"""
        Structure to provide all-in-one result of selection of sensitive for 'matches' method of select3d_sensitiveentity.

        Returns
        -------
        int

        """
        return _SelectBasics.selectbasics_MaxOwnerPriority(*args)

    @staticmethod
    def MinOwnerPriority(*args) -> "Standard_Integer":
        r"""
        No available documentation.

        Returns
        -------
        int

        """
        return _SelectBasics.selectbasics_MinOwnerPriority(*args)

    __repr__ = _dumps_object


    def __init__(self):
        _SelectBasics.selectbasics_swiginit(self, _SelectBasics.new_selectbasics())
    __swig_destroy__ = _SelectBasics.delete_selectbasics

# Register selectbasics in _SelectBasics:
_SelectBasics.selectbasics_swigregister(selectbasics)

def selectbasics_MaxOwnerPriority(*args) -> "Standard_Integer":
    r"""
    Structure to provide all-in-one result of selection of sensitive for 'matches' method of select3d_sensitiveentity.

    Returns
    -------
    int

    """
    return _SelectBasics.selectbasics_MaxOwnerPriority(*args)

def selectbasics_MinOwnerPriority(*args) -> "Standard_Integer":
    r"""
    No available documentation.

    Returns
    -------
    int

    """
    return _SelectBasics.selectbasics_MinOwnerPriority(*args)

class SelectBasics_PickResult(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 defining an invalid result.

        Returns
        -------
        None
        Constructor with initialization.

        Parameters
        ----------
        theDepth: float
        theDistToCenter: float
        theObjPickedPnt: gp_Pnt

        Returns
        -------
        None

        """
        _SelectBasics.SelectBasics_PickResult_swiginit(self, _SelectBasics.new_SelectBasics_PickResult(*args))

    def Depth(self, *args) -> "Standard_Real":
        r"""
        Return depth along picking ray.

        Returns
        -------
        float

        """
        return _SelectBasics.SelectBasics_PickResult_Depth(self, *args)

    def DistToGeomCenter(self, *args) -> "Standard_Real":
        r"""
        Return distance to geometry center (auxiliary value for comparing results).

        Returns
        -------
        float

        """
        return _SelectBasics.SelectBasics_PickResult_DistToGeomCenter(self, *args)

    def HasPickedPoint(self, *args) -> "Standard_Boolean":
        r"""
        Return true if picked point lying on detected entity was set.

        Returns
        -------
        bool

        """
        return _SelectBasics.SelectBasics_PickResult_HasPickedPoint(self, *args)

    def Invalidate(self, *args) -> "void":
        r"""
        Reset depth value.

        Returns
        -------
        None

        """
        return _SelectBasics.SelectBasics_PickResult_Invalidate(self, *args)

    def IsValid(self, *args) -> "Standard_Boolean":
        r"""
        Return true if result was been defined.

        Returns
        -------
        bool

        """
        return _SelectBasics.SelectBasics_PickResult_IsValid(self, *args)

    @staticmethod
    def Min(*args) -> "SelectBasics_PickResult const &":
        r"""
        Return closest result between two pick results according to depth value.

        Parameters
        ----------
        thePickResult1: SelectBasics_PickResult
        thePickResult2: SelectBasics_PickResult

        Returns
        -------
        SelectBasics_PickResult

        """
        return _SelectBasics.SelectBasics_PickResult_Min(*args)

    def PickedPoint(self, *args) -> "gp_Pnt const":
        r"""
        Return picked point lying on detected entity. warning! point is defined in local coordinate system and should be translated into world system before usage!.

        Returns
        -------
        gp_Pnt

        """
        return _SelectBasics.SelectBasics_PickResult_PickedPoint(self, *args)

    def SetDepth(self, *args) -> "void":
        r"""
        Set depth along picking ray.

        Parameters
        ----------
        theDepth: float

        Returns
        -------
        None

        """
        return _SelectBasics.SelectBasics_PickResult_SetDepth(self, *args)

    def SetDistToGeomCenter(self, *args) -> "void":
        r"""
        Set distance to geometry center.

        Parameters
        ----------
        theDistToCenter: float

        Returns
        -------
        None

        """
        return _SelectBasics.SelectBasics_PickResult_SetDistToGeomCenter(self, *args)

    def SetPickedPoint(self, *args) -> "void":
        r"""
        Set picked point.

        Parameters
        ----------
        theObjPickedPnt: gp_Pnt

        Returns
        -------
        None

        """
        return _SelectBasics.SelectBasics_PickResult_SetPickedPoint(self, *args)

    def SetSurfaceNormal(self, *args) -> "void":
        r"""
        Set surface normal at picked point.

        Parameters
        ----------
        theNormal: NCollection_Vec3<float>

        Returns
        -------
        None
        Set surface normal at picked point.

        Parameters
        ----------
        theNormal: gp_Vec

        Returns
        -------
        None

        """
        return _SelectBasics.SelectBasics_PickResult_SetSurfaceNormal(self, *args)

    def SurfaceNormal(self, *args) -> "NCollection_Vec3< float > const &":
        r"""
        Return (unnormalized) surface normal at picked point or zero vector if undefined. warning! normal is defined in local coordinate system and should be translated into world system before usage!.

        Returns
        -------
        NCollection_Vec3<float>

        """
        return _SelectBasics.SelectBasics_PickResult_SurfaceNormal(self, *args)

    __repr__ = _dumps_object

    __swig_destroy__ = _SelectBasics.delete_SelectBasics_PickResult

# Register SelectBasics_PickResult in _SelectBasics:
_SelectBasics.SelectBasics_PickResult_swigregister(SelectBasics_PickResult)

def SelectBasics_PickResult_Min(*args) -> "SelectBasics_PickResult const &":
    r"""
    Return closest result between two pick results according to depth value.

    Parameters
    ----------
    thePickResult1: SelectBasics_PickResult
    thePickResult2: SelectBasics_PickResult

    Returns
    -------
    SelectBasics_PickResult

    """
    return _SelectBasics.SelectBasics_PickResult_Min(*args)

class SelectBasics_SelectingVolumeManager(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")
    __repr__ = _swig_repr
    Point = _SelectBasics.SelectBasics_SelectingVolumeManager_Point
    Box = _SelectBasics.SelectBasics_SelectingVolumeManager_Box
    Polyline = _SelectBasics.SelectBasics_SelectingVolumeManager_Polyline
    Unknown = _SelectBasics.SelectBasics_SelectingVolumeManager_Unknown


    class SelectionType(IntEnum):
    	Point = 0
    	Box = 1
    	Polyline = 2
    	Unknown = 3
    Point = SelectionType.Point
    Box = SelectionType.Box
    Polyline = SelectionType.Polyline
    Unknown = SelectionType.Unknown


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

        Parameters
        ----------
        theDepth: float

        Returns
        -------
        gp_Pnt

        """
        return _SelectBasics.SelectBasics_SelectingVolumeManager_DetectedPoint(self, *args)

    def DistToGeometryCenter(self, *args) -> "Standard_Real":
        r"""
        Calculates distance from 3d projection of user-defined selection point to the given point thecog.

        Parameters
        ----------
        theCOG: gp_Pnt

        Returns
        -------
        float

        """
        return _SelectBasics.SelectBasics_SelectingVolumeManager_DistToGeometryCenter(self, *args)

    def DumpJsonToString(self, depth: "int"=-1) -> "std::string":
        r"""DumpJsonToString(SelectBasics_SelectingVolumeManager self, int depth=-1) -> std::string"""
        return _SelectBasics.SelectBasics_SelectingVolumeManager_DumpJsonToString(self, depth)

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

        Returns
        -------
        int

        """
        return _SelectBasics.SelectBasics_SelectingVolumeManager_GetActiveSelectionType(self, *args)

    def GetFarPickedPnt(self, *args) -> "gp_Pnt":
        r"""
        Valid only for point and rectangular selection. returns projection of 2d mouse picked point or projection of center of 2d rectangle (for point and rectangular selection correspondingly) onto far view frustum plane.

        Returns
        -------
        gp_Pnt

        """
        return _SelectBasics.SelectBasics_SelectingVolumeManager_GetFarPickedPnt(self, *args)

    def GetMousePosition(self, *args) -> "gp_Pnt2d":
        r"""
        Return mouse coordinates for point selection mode.

        Returns
        -------
        gp_Pnt2d

        """
        return _SelectBasics.SelectBasics_SelectingVolumeManager_GetMousePosition(self, *args)

    def GetNearPickedPnt(self, *args) -> "gp_Pnt":
        r"""
        Valid only for point and rectangular selection. returns projection of 2d mouse picked point or projection of center of 2d rectangle (for point and rectangular selection correspondingly) onto near view frustum plane.

        Returns
        -------
        gp_Pnt

        """
        return _SelectBasics.SelectBasics_SelectingVolumeManager_GetNearPickedPnt(self, *args)

    def GetPlanes(self, *args) -> "void":
        r"""
        Stores plane equation coefficients (in the following form: ax + by + cz + d = 0) to the given vector.

        Parameters
        ----------
        thePlaneEquations: NCollection_Vector<NCollection_Vec4<float> >

        Returns
        -------
        None

        """
        return _SelectBasics.SelectBasics_SelectingVolumeManager_GetPlanes(self, *args)

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

        Returns
        -------
        bool

        """
        return _SelectBasics.SelectBasics_SelectingVolumeManager_IsOverlapAllowed(self, *args)

    def Overlaps(self, *args) -> "Standard_Boolean":
        r"""
        Returns true if selecting volume is overlapped by box thebox.

        Parameters
        ----------
        theBoxMin: NCollection_Vec3<float>
        theBoxMax: NCollection_Vec3<float>
        thePickResult: SelectBasics_PickResult

        Returns
        -------
        bool
        Returns true if selecting volume is overlapped by axis-aligned bounding box with minimum corner at point theminpt and maximum at point themaxpt.

        Parameters
        ----------
        theBoxMin: NCollection_Vec3<float>
        theBoxMax: NCollection_Vec3<float>
        theInside: bool *,optional
        	default value is NULL

        Returns
        -------
        bool
        Returns true if selecting volume is overlapped by point thepnt.

        Parameters
        ----------
        thePnt: gp_Pnt
        thePickResult: SelectBasics_PickResult

        Returns
        -------
        bool
        Returns true if selecting volume is overlapped by point thepnt. does not perform depth calculation, so this method is defined as helper function for inclusion test.

        Parameters
        ----------
        thePnt: gp_Pnt

        Returns
        -------
        bool
        Returns true if selecting volume is overlapped by planar convex polygon, which points are stored in thearrayofpts, taking into account sensitivity type thesenstype.

        Parameters
        ----------
        theArrayOfPts: TColgp_HArray1OfPnt
        theSensType: int
        thePickResult: SelectBasics_PickResult

        Returns
        -------
        bool
        Returns true if selecting volume is overlapped by planar convex polygon, which points are stored in thearrayofpts, taking into account sensitivity type thesenstype.

        Parameters
        ----------
        theArrayOfPts: TColgp_Array1OfPnt
        theSensType: int
        thePickResult: SelectBasics_PickResult

        Returns
        -------
        bool
        Returns true if selecting volume is overlapped by line segment with start point at thept1 and end point at thept2.

        Parameters
        ----------
        thePt1: gp_Pnt
        thePt2: gp_Pnt
        thePickResult: SelectBasics_PickResult

        Returns
        -------
        bool
        Returns true if selecting volume is overlapped by triangle with vertices thept1, thept2 and thept3, taking into account sensitivity type thesenstype.

        Parameters
        ----------
        thePt1: gp_Pnt
        thePt2: gp_Pnt
        thePt3: gp_Pnt
        theSensType: int
        thePickResult: SelectBasics_PickResult

        Returns
        -------
        bool

        """
        return _SelectBasics.SelectBasics_SelectingVolumeManager_Overlaps(self, *args)

    __repr__ = _dumps_object

    __swig_destroy__ = _SelectBasics.delete_SelectBasics_SelectingVolumeManager

# Register SelectBasics_SelectingVolumeManager in _SelectBasics:
_SelectBasics.SelectBasics_SelectingVolumeManager_swigregister(SelectBasics_SelectingVolumeManager)





