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

"""
BRepBndLib module, see official documentation at
https://dev.opencascade.org/doc/occt-7.9.0/refman/html/package_brepbndlib.html
"""

from sys import version_info as _swig_python_version_info
# Import the low-level C/C++ module
if getattr(globals().get("__spec__"), "parent", None) or __package__ or "." in __name__:
    from . import _BRepBndLib
else:
    import _BRepBndLib

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 == "this":
            set(self, name, value)
        elif name == "thisown":
            self.this.own(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__ = _BRepBndLib.delete_SwigPyIterator

    def value(self):
        return _BRepBndLib.SwigPyIterator_value(self)

    def incr(self, n=1):
        return _BRepBndLib.SwigPyIterator_incr(self, n)

    def decr(self, n=1):
        return _BRepBndLib.SwigPyIterator_decr(self, n)

    def distance(self, x):
        return _BRepBndLib.SwigPyIterator_distance(self, x)

    def equal(self, x):
        return _BRepBndLib.SwigPyIterator_equal(self, x)

    def copy(self):
        return _BRepBndLib.SwigPyIterator_copy(self)

    def next(self):
        return _BRepBndLib.SwigPyIterator_next(self)

    def __next__(self):
        return _BRepBndLib.SwigPyIterator___next__(self)

    def previous(self):
        return _BRepBndLib.SwigPyIterator_previous(self)

    def advance(self, n):
        return _BRepBndLib.SwigPyIterator_advance(self, n)

    def __eq__(self, x):
        return _BRepBndLib.SwigPyIterator___eq__(self, x)

    def __ne__(self, x):
        return _BRepBndLib.SwigPyIterator___ne__(self, x)

    def __iadd__(self, n):
        return _BRepBndLib.SwigPyIterator___iadd__(self, n)

    def __isub__(self, n):
        return _BRepBndLib.SwigPyIterator___isub__(self, n)

    def __add__(self, n):
        return _BRepBndLib.SwigPyIterator___add__(self, n)

    def __sub__(self, *args):
        return _BRepBndLib.SwigPyIterator___sub__(self, *args)
    def __iter__(self):
        return self

# Register SwigPyIterator in _BRepBndLib:
_BRepBndLib.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, method_name, class_name):
    return _BRepBndLib.process_exception(error, method_name, class_name)

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

class ios_base(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
    erase_event = _BRepBndLib.ios_base_erase_event
    imbue_event = _BRepBndLib.ios_base_imbue_event
    copyfmt_event = _BRepBndLib.ios_base_copyfmt_event

    def register_callback(self, __fn, __index):
        return _BRepBndLib.ios_base_register_callback(self, __fn, __index)

    def flags(self, *args):
        return _BRepBndLib.ios_base_flags(self, *args)

    def setf(self, *args):
        return _BRepBndLib.ios_base_setf(self, *args)

    def unsetf(self, __mask):
        return _BRepBndLib.ios_base_unsetf(self, __mask)

    def precision(self, *args):
        return _BRepBndLib.ios_base_precision(self, *args)

    def width(self, *args):
        return _BRepBndLib.ios_base_width(self, *args)

    @staticmethod
    def sync_with_stdio(__sync=True):
        return _BRepBndLib.ios_base_sync_with_stdio(__sync)

    def imbue(self, __loc):
        return _BRepBndLib.ios_base_imbue(self, __loc)

    def getloc(self):
        return _BRepBndLib.ios_base_getloc(self)

    @staticmethod
    def xalloc():
        return _BRepBndLib.ios_base_xalloc()

    def iword(self, __ix):
        return _BRepBndLib.ios_base_iword(self, __ix)

    def pword(self, __ix):
        return _BRepBndLib.ios_base_pword(self, __ix)
    __swig_destroy__ = _BRepBndLib.delete_ios_base

# Register ios_base in _BRepBndLib:
_BRepBndLib.ios_base_swigregister(ios_base)
cvar = _BRepBndLib.cvar
ios_base.boolalpha = _BRepBndLib.cvar.ios_base_boolalpha
ios_base.dec = _BRepBndLib.cvar.ios_base_dec
ios_base.fixed = _BRepBndLib.cvar.ios_base_fixed
ios_base.hex = _BRepBndLib.cvar.ios_base_hex
ios_base.internal = _BRepBndLib.cvar.ios_base_internal
ios_base.left = _BRepBndLib.cvar.ios_base_left
ios_base.oct = _BRepBndLib.cvar.ios_base_oct
ios_base.right = _BRepBndLib.cvar.ios_base_right
ios_base.scientific = _BRepBndLib.cvar.ios_base_scientific
ios_base.showbase = _BRepBndLib.cvar.ios_base_showbase
ios_base.showpoint = _BRepBndLib.cvar.ios_base_showpoint
ios_base.showpos = _BRepBndLib.cvar.ios_base_showpos
ios_base.skipws = _BRepBndLib.cvar.ios_base_skipws
ios_base.unitbuf = _BRepBndLib.cvar.ios_base_unitbuf
ios_base.uppercase = _BRepBndLib.cvar.ios_base_uppercase
ios_base.adjustfield = _BRepBndLib.cvar.ios_base_adjustfield
ios_base.basefield = _BRepBndLib.cvar.ios_base_basefield
ios_base.floatfield = _BRepBndLib.cvar.ios_base_floatfield
ios_base.badbit = _BRepBndLib.cvar.ios_base_badbit
ios_base.eofbit = _BRepBndLib.cvar.ios_base_eofbit
ios_base.failbit = _BRepBndLib.cvar.ios_base_failbit
ios_base.goodbit = _BRepBndLib.cvar.ios_base_goodbit
ios_base.app = _BRepBndLib.cvar.ios_base_app
ios_base.ate = _BRepBndLib.cvar.ios_base_ate
ios_base.binary = _BRepBndLib.cvar.ios_base_binary
ios_base.ios_base_in = _BRepBndLib.cvar.ios_base_ios_base_in
ios_base.out = _BRepBndLib.cvar.ios_base_out
ios_base.trunc = _BRepBndLib.cvar.ios_base_trunc
ios_base.beg = _BRepBndLib.cvar.ios_base_beg
ios_base.cur = _BRepBndLib.cvar.ios_base_cur
ios_base.end = _BRepBndLib.cvar.ios_base_end

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

    def rdstate(self):
        return _BRepBndLib.ios_rdstate(self)

    def clear(self, *args):
        return _BRepBndLib.ios_clear(self, *args)

    def setstate(self, __state):
        return _BRepBndLib.ios_setstate(self, __state)

    def good(self):
        return _BRepBndLib.ios_good(self)

    def eof(self):
        return _BRepBndLib.ios_eof(self)

    def fail(self):
        return _BRepBndLib.ios_fail(self)

    def bad(self):
        return _BRepBndLib.ios_bad(self)

    def exceptions(self, *args):
        return _BRepBndLib.ios_exceptions(self, *args)

    def __init__(self, __sb):
        _BRepBndLib.ios_swiginit(self, _BRepBndLib.new_ios(__sb))
    __swig_destroy__ = _BRepBndLib.delete_ios

    def tie(self, *args):
        return _BRepBndLib.ios_tie(self, *args)

    def rdbuf(self, *args):
        return _BRepBndLib.ios_rdbuf(self, *args)

    def copyfmt(self, __rhs):
        return _BRepBndLib.ios_copyfmt(self, __rhs)

    def fill(self, *args):
        return _BRepBndLib.ios_fill(self, *args)

    def imbue(self, __loc):
        return _BRepBndLib.ios_imbue(self, __loc)

    def narrow(self, __c, __dfault):
        return _BRepBndLib.ios_narrow(self, __c, __dfault)

    def widen(self, __c):
        return _BRepBndLib.ios_widen(self, __c)

# Register ios in _BRepBndLib:
_BRepBndLib.ios_swigregister(ios)
class ostream(ios):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, __sb):
        _BRepBndLib.ostream_swiginit(self, _BRepBndLib.new_ostream(__sb))
    __swig_destroy__ = _BRepBndLib.delete_ostream

    def __lshift__(self, *args):
        return _BRepBndLib.ostream___lshift__(self, *args)

    def put(self, __c):
        return _BRepBndLib.ostream_put(self, __c)

    def write(self, __s, __n):
        return _BRepBndLib.ostream_write(self, __s, __n)

    def flush(self):
        return _BRepBndLib.ostream_flush(self)

    def tellp(self):
        return _BRepBndLib.ostream_tellp(self)

    def seekp(self, *args):
        return _BRepBndLib.ostream_seekp(self, *args)

# Register ostream in _BRepBndLib:
_BRepBndLib.ostream_swigregister(ostream)
class istream(ios):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, __sb):
        _BRepBndLib.istream_swiginit(self, _BRepBndLib.new_istream(__sb))
    __swig_destroy__ = _BRepBndLib.delete_istream

    def __rshift__(self, *args):
        return _BRepBndLib.istream___rshift__(self, *args)

    def gcount(self):
        return _BRepBndLib.istream_gcount(self)

    def get(self, *args):
        return _BRepBndLib.istream_get(self, *args)

    def getline(self, *args):
        return _BRepBndLib.istream_getline(self, *args)

    def ignore(self, *args):
        return _BRepBndLib.istream_ignore(self, *args)

    def peek(self):
        return _BRepBndLib.istream_peek(self)

    def read(self, __s, __n):
        return _BRepBndLib.istream_read(self, __s, __n)

    def readsome(self, __s, __n):
        return _BRepBndLib.istream_readsome(self, __s, __n)

    def putback(self, __c):
        return _BRepBndLib.istream_putback(self, __c)

    def unget(self):
        return _BRepBndLib.istream_unget(self)

    def sync(self):
        return _BRepBndLib.istream_sync(self)

    def tellg(self):
        return _BRepBndLib.istream_tellg(self)

    def seekg(self, *args):
        return _BRepBndLib.istream_seekg(self, *args)

# Register istream in _BRepBndLib:
_BRepBndLib.istream_swigregister(istream)
class iostream(istream, ostream):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, __sb):
        _BRepBndLib.iostream_swiginit(self, _BRepBndLib.new_iostream(__sb))
    __swig_destroy__ = _BRepBndLib.delete_iostream

# Register iostream in _BRepBndLib:
_BRepBndLib.iostream_swigregister(iostream)
cin = cvar.cin
cout = cvar.cout
cerr = cvar.cerr
clog = cvar.clog

endl_cb_ptr = _BRepBndLib.endl_cb_ptr
endl = _BRepBndLib.endl
ends_cb_ptr = _BRepBndLib.ends_cb_ptr
ends = _BRepBndLib.ends
flush_cb_ptr = _BRepBndLib.flush_cb_ptr
flush = _BRepBndLib.flush
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.Bnd
import OCC.Core.TColgp
import OCC.Core.BVH

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



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

    @staticmethod
    def Add(*args):
        r"""

        Parameters
        ----------
        S: TopoDS_Shape
        B: Bnd_Box
        useTriangulation: bool (optional, default to Standard_True)

        Return
        -------
        None

        Description
        -----------
        Adds the shape S to the bounding box B. More precisely are successively added to B: - each face of S; the triangulation of the face is used if it exists, - then each edge of S which does not belong to a face, the polygon of the edge is used if it exists - and last each vertex of S which does not belong to an edge. After each elementary operation, the bounding box B is enlarged by the tolerance value of the relative sub-shape. When working with the triangulation of a face this value of enlargement is the sum of the triangulation deflection and the face tolerance. When working with the polygon of an edge this value of enlargement is the sum of the polygon deflection and the edge tolerance. Warning - This algorithm is time consuming if triangulation has not been inserted inside the data structure of the shape S. - The resulting bounding box may be somewhat larger than the object.

        """
        return _BRepBndLib.brepbndlib_Add(*args)

    @staticmethod
    def AddClose(*args):
        r"""

        Parameters
        ----------
        S: TopoDS_Shape
        B: Bnd_Box

        Return
        -------
        None

        Description
        -----------
        Adds the shape S to the bounding box B. This is a quick algorithm but only works if the shape S is composed of polygonal planar faces, as is the case if S is an approached polyhedral representation of an exact shape. Pay particular attention to this because this condition is not checked and, if it not respected, an error may occur in the algorithm for which the bounding box is built. Note that the resulting bounding box is not enlarged by the tolerance value of the sub-shapes as is the case with the Add function. So the added part of the resulting bounding box is closer to the shape S.

        """
        return _BRepBndLib.brepbndlib_AddClose(*args)

    @staticmethod
    def AddOBB(*args):
        r"""

        Parameters
        ----------
        theS: TopoDS_Shape
        theOBB: Bnd_OBB
        theIsTriangulationUsed: bool (optional, default to Standard_True)
        theIsOptimal: bool (optional, default to Standard_False)
        theIsShapeToleranceUsed: bool (optional, default to Standard_True)

        Return
        -------
        None

        Description
        -----------
        Computes the Oriented Bounding box for the shape <theS>. Two independent methods of computation are implemented: first method based on set of points (so, it demands the triangulated shape or shape with planar faces and linear edges). The second method is based on use of inertia axes and is called if use of the first method is impossible. If theIsTriangulationUsed == False then the triangulation will be ignored at all. If theIsShapeToleranceUsed == True then resulting box will be extended on the tolerance of the shape. theIsOptimal flag defines whether to look for the more tight OBB for the cost of performance or not.

        """
        return _BRepBndLib.brepbndlib_AddOBB(*args)

    @staticmethod
    def AddOptimal(*args):
        r"""

        Parameters
        ----------
        S: TopoDS_Shape
        B: Bnd_Box
        useTriangulation: bool (optional, default to Standard_True)
        useShapeTolerance: bool (optional, default to Standard_False)

        Return
        -------
        None

        Description
        -----------
        Adds the shape S to the bounding box B. This algorithm builds precise bounding box, which differs from exact geometry boundaries of shape only on shape entities tolerances Algorithm is the same as for method Add(..), but uses more precise methods for building boxes for geometry objects. If useShapeTolerance = True, bounding box is enlardged by shape tolerances and these tolerances are used for numerical methods of bounding box size calculations, otherwise bounding box is built according to sizes of uderlined geometrical entities, numerical calculation use tolerance Precision::Confusion().

        """
        return _BRepBndLib.brepbndlib_AddOptimal(*args)

    __repr__ = _dumps_object


    def __init__(self):
        _BRepBndLib.brepbndlib_swiginit(self, _BRepBndLib.new_brepbndlib())
    __swig_destroy__ = _BRepBndLib.delete_brepbndlib

# Register brepbndlib in _BRepBndLib:
_BRepBndLib.brepbndlib_swigregister(brepbndlib)



@deprecated
def brepbndlib_Add(*args):
	return brepbndlib.Add(*args)

@deprecated
def brepbndlib_AddClose(*args):
	return brepbndlib.AddClose(*args)

@deprecated
def brepbndlib_AddOBB(*args):
	return brepbndlib.AddOBB(*args)

@deprecated
def brepbndlib_AddOptimal(*args):
	return brepbndlib.AddOptimal(*args)



