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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

# Register SwigPyIterator in _IntAna:
_IntAna.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 _IntAna.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

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

IntAna_Point = _IntAna.IntAna_Point
IntAna_Line = _IntAna.IntAna_Line
IntAna_Circle = _IntAna.IntAna_Circle
IntAna_PointAndCircle = _IntAna.IntAna_PointAndCircle
IntAna_Ellipse = _IntAna.IntAna_Ellipse
IntAna_Parabola = _IntAna.IntAna_Parabola
IntAna_Hyperbola = _IntAna.IntAna_Hyperbola
IntAna_Empty = _IntAna.IntAna_Empty
IntAna_Same = _IntAna.IntAna_Same
IntAna_NoGeometricSolution = _IntAna.IntAna_NoGeometricSolution


class IntAna_ResultType(IntEnum):
	IntAna_Point = 0
	IntAna_Line = 1
	IntAna_Circle = 2
	IntAna_PointAndCircle = 3
	IntAna_Ellipse = 4
	IntAna_Parabola = 5
	IntAna_Hyperbola = 6
	IntAna_Empty = 7
	IntAna_Same = 8
	IntAna_NoGeometricSolution = 9
IntAna_Point = IntAna_ResultType.IntAna_Point
IntAna_Line = IntAna_ResultType.IntAna_Line
IntAna_Circle = IntAna_ResultType.IntAna_Circle
IntAna_PointAndCircle = IntAna_ResultType.IntAna_PointAndCircle
IntAna_Ellipse = IntAna_ResultType.IntAna_Ellipse
IntAna_Parabola = IntAna_ResultType.IntAna_Parabola
IntAna_Hyperbola = IntAna_ResultType.IntAna_Hyperbola
IntAna_Empty = IntAna_ResultType.IntAna_Empty
IntAna_Same = IntAna_ResultType.IntAna_Same
IntAna_NoGeometricSolution = IntAna_ResultType.IntAna_NoGeometricSolution

class IntAna_ListIteratorOfListOfCurve(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):
        _IntAna.IntAna_ListIteratorOfListOfCurve_swiginit(self, _IntAna.new_IntAna_ListIteratorOfListOfCurve(*args))

    def More(self) -> "Standard_Boolean":
        return _IntAna.IntAna_ListIteratorOfListOfCurve_More(self)

    def Next(self) -> "void":
        return _IntAna.IntAna_ListIteratorOfListOfCurve_Next(self)

    def Value(self) -> "IntAna_Curve const &":
        return _IntAna.IntAna_ListIteratorOfListOfCurve_Value(self)

    def ChangeValue(self) -> "IntAna_Curve &":
        return _IntAna.IntAna_ListIteratorOfListOfCurve_ChangeValue(self)
    __swig_destroy__ = _IntAna.delete_IntAna_ListIteratorOfListOfCurve

# Register IntAna_ListIteratorOfListOfCurve in _IntAna:
_IntAna.IntAna_ListIteratorOfListOfCurve_swigregister(IntAna_ListIteratorOfListOfCurve)

class IntAna_ListOfCurve(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_List< IntAna_Curve >::iterator":
        return _IntAna.IntAna_ListOfCurve_begin(self)

    def end(self) -> "NCollection_List< IntAna_Curve >::iterator":
        return _IntAna.IntAna_ListOfCurve_end(self)

    def cbegin(self) -> "NCollection_List< IntAna_Curve >::const_iterator":
        return _IntAna.IntAna_ListOfCurve_cbegin(self)

    def cend(self) -> "NCollection_List< IntAna_Curve >::const_iterator":
        return _IntAna.IntAna_ListOfCurve_cend(self)

    def __init__(self, *args):
        _IntAna.IntAna_ListOfCurve_swiginit(self, _IntAna.new_IntAna_ListOfCurve(*args))

    def Size(self) -> "Standard_Integer":
        return _IntAna.IntAna_ListOfCurve_Size(self)

    def Assign(self, theOther: "IntAna_ListOfCurve") -> "NCollection_List< IntAna_Curve > &":
        return _IntAna.IntAna_ListOfCurve_Assign(self, theOther)

    def Set(self, theOther: "IntAna_ListOfCurve") -> "NCollection_List< IntAna_Curve > &":
        return _IntAna.IntAna_ListOfCurve_Set(self, theOther)

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

    def First(self) -> "IntAna_Curve const &":
        return _IntAna.IntAna_ListOfCurve_First(self)

    def Last(self) -> "IntAna_Curve const &":
        return _IntAna.IntAna_ListOfCurve_Last(self)

    def Append(self, *args) -> "void":
        return _IntAna.IntAna_ListOfCurve_Append(self, *args)

    def Prepend(self, *args) -> "void":
        return _IntAna.IntAna_ListOfCurve_Prepend(self, *args)

    def RemoveFirst(self) -> "void":
        return _IntAna.IntAna_ListOfCurve_RemoveFirst(self)

    def Remove(self, theIter: "IntAna_ListIteratorOfListOfCurve") -> "void":
        return _IntAna.IntAna_ListOfCurve_Remove(self, theIter)

    def InsertBefore(self, *args) -> "void":
        return _IntAna.IntAna_ListOfCurve_InsertBefore(self, *args)

    def InsertAfter(self, *args) -> "void":
        return _IntAna.IntAna_ListOfCurve_InsertAfter(self, *args)

    def Reverse(self) -> "void":
        return _IntAna.IntAna_ListOfCurve_Reverse(self)
    __swig_destroy__ = _IntAna.delete_IntAna_ListOfCurve

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


# Register IntAna_ListOfCurve in _IntAna:
_IntAna.IntAna_ListOfCurve_swigregister(IntAna_ListOfCurve)

class IntAna_Curve(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

        """
        _IntAna.IntAna_Curve_swiginit(self, _IntAna.new_IntAna_Curve(*args))

    def D1u(self, *args) -> "Standard_Boolean":
        r"""
        Returns the point and the first derivative at parameter theta on the curve.

        Parameters
        ----------
        Theta: float
        P: gp_Pnt
        V: gp_Vec

        Returns
        -------
        bool

        """
        return _IntAna.IntAna_Curve_D1u(self, *args)

    def Domain(self, *args) -> "void":
        r"""
        Returns the paramatric domain of the curve.

        Parameters
        ----------

        Returns
        -------
        theFirst: float
        theLast: float

        """
        return _IntAna.IntAna_Curve_Domain(self, *args)

    def FindParameter(self, *args) -> "void":
        r"""
        Tries to find the parameter of the point p on the curve. if the method returns false, the 'projection' is impossible. if the method returns true at least one parameter has been found. theparams is always sorted in ascending order.

        Parameters
        ----------
        P: gp_Pnt
        theParams: TColStd_ListOfReal

        Returns
        -------
        None

        """
        return _IntAna.IntAna_Curve_FindParameter(self, *args)

    def IsConstant(self, *args) -> "Standard_Boolean":
        r"""
        Returns true if the function is constant.

        Returns
        -------
        bool

        """
        return _IntAna.IntAna_Curve_IsConstant(self, *args)

    def IsFirstOpen(self, *args) -> "Standard_Boolean":
        r"""
        Returns true if the domain is open at the beginning.

        Returns
        -------
        bool

        """
        return _IntAna.IntAna_Curve_IsFirstOpen(self, *args)

    def IsLastOpen(self, *args) -> "Standard_Boolean":
        r"""
        Returns true if the domain is open at the end.

        Returns
        -------
        bool

        """
        return _IntAna.IntAna_Curve_IsLastOpen(self, *args)

    def IsOpen(self, *args) -> "Standard_Boolean":
        r"""
        Returns true if the curve is not infinite at the last parameter or at the first parameter of the domain.

        Returns
        -------
        bool

        """
        return _IntAna.IntAna_Curve_IsOpen(self, *args)

    def SetConeQuadValues(self, *args) -> "void":
        r"""
        Sets the parameters used to compute points and derivative on the curve.

        Parameters
        ----------
        Cone: gp_Cone
        Qxx: float
        Qyy: float
        Qzz: float
        Qxy: float
        Qxz: float
        Qyz: float
        Qx: float
        Qy: float
        Qz: float
        Q1: float
        Tol: float
        DomInf: float
        DomSup: float
        TwoZForATheta: bool
        ZIsPositive: bool

        Returns
        -------
        None

        """
        return _IntAna.IntAna_Curve_SetConeQuadValues(self, *args)

    def SetCylinderQuadValues(self, *args) -> "void":
        r"""
        Sets the parameters used to compute points and derivative on the curve.

        Parameters
        ----------
        Cylinder: gp_Cylinder
        Qxx: float
        Qyy: float
        Qzz: float
        Qxy: float
        Qxz: float
        Qyz: float
        Qx: float
        Qy: float
        Qz: float
        Q1: float
        Tol: float
        DomInf: float
        DomSup: float
        TwoZForATheta: bool
        ZIsPositive: bool

        Returns
        -------
        None

        """
        return _IntAna.IntAna_Curve_SetCylinderQuadValues(self, *args)

    def SetDomain(self, *args) -> "void":
        r"""
        Trims this curve.

        Parameters
        ----------
        theFirst: float
        theLast: float

        Returns
        -------
        None

        """
        return _IntAna.IntAna_Curve_SetDomain(self, *args)

    def SetIsFirstOpen(self, *args) -> "void":
        r"""
        If flag is true, the curve is not defined at the first parameter of its domain.

        Parameters
        ----------
        Flag: bool

        Returns
        -------
        None

        """
        return _IntAna.IntAna_Curve_SetIsFirstOpen(self, *args)

    def SetIsLastOpen(self, *args) -> "void":
        r"""
        If flag is true, the curve is not defined at the first parameter of its domain.

        Parameters
        ----------
        Flag: bool

        Returns
        -------
        None

        """
        return _IntAna.IntAna_Curve_SetIsLastOpen(self, *args)

    def Value(self, *args) -> "gp_Pnt":
        r"""
        Returns the point at parameter theta on the curve.

        Parameters
        ----------
        Theta: float

        Returns
        -------
        gp_Pnt

        """
        return _IntAna.IntAna_Curve_Value(self, *args)

    __repr__ = _dumps_object

    __swig_destroy__ = _IntAna.delete_IntAna_Curve

# Register IntAna_Curve in _IntAna:
_IntAna.IntAna_Curve_swigregister(IntAna_Curve)

class IntAna_Int3Pln(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
        Determination of the intersection point between 3 planes.

        Parameters
        ----------
        P1: gp_Pln
        P2: gp_Pln
        P3: gp_Pln

        Returns
        -------
        None

        """
        _IntAna.IntAna_Int3Pln_swiginit(self, _IntAna.new_IntAna_Int3Pln(*args))

    def IsDone(self, *args) -> "Standard_Boolean":
        r"""
        Returns true if the computation was successful.

        Returns
        -------
        bool

        """
        return _IntAna.IntAna_Int3Pln_IsDone(self, *args)

    def IsEmpty(self, *args) -> "Standard_Boolean":
        r"""
        Returns true if there is no intersection point. if 2 planes are identical or parallel, isempty will return true.

        Returns
        -------
        bool

        """
        return _IntAna.IntAna_Int3Pln_IsEmpty(self, *args)

    def Perform(self, *args) -> "void":
        r"""
        Determination of the intersection point between 3 planes.

        Parameters
        ----------
        P1: gp_Pln
        P2: gp_Pln
        P3: gp_Pln

        Returns
        -------
        None

        """
        return _IntAna.IntAna_Int3Pln_Perform(self, *args)

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

        Returns
        -------
        gp_Pnt

        """
        return _IntAna.IntAna_Int3Pln_Value(self, *args)

    __repr__ = _dumps_object

    __swig_destroy__ = _IntAna.delete_IntAna_Int3Pln

# Register IntAna_Int3Pln in _IntAna:
_IntAna.IntAna_Int3Pln_swigregister(IntAna_Int3Pln)

class IntAna_IntConicQuad(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
        Creates the intersection between a line and a quadric.

        Parameters
        ----------
        L: gp_Lin
        Q: IntAna_Quadric

        Returns
        -------
        None
        Creates the intersection between a circle and a quadric.

        Parameters
        ----------
        C: gp_Circ
        Q: IntAna_Quadric

        Returns
        -------
        None
        Creates the intersection between an ellipse and a quadric.

        Parameters
        ----------
        E: gp_Elips
        Q: IntAna_Quadric

        Returns
        -------
        None
        Creates the intersection between a parabola and a quadric.

        Parameters
        ----------
        P: gp_Parab
        Q: IntAna_Quadric

        Returns
        -------
        None
        Creates the intersection between an hyperbola and a quadric.

        Parameters
        ----------
        H: gp_Hypr
        Q: IntAna_Quadric

        Returns
        -------
        None
        Intersection between a line and a plane. tolang is used to determine if the angle between two vectors is null. tol is used to check the distance between line and plane on the distance <len> from the origin of the line.

        Parameters
        ----------
        L: gp_Lin
        P: gp_Pln
        Tolang: float
        Tol: float,optional
        	default value is 0
        Len: float,optional
        	default value is 0

        Returns
        -------
        None
        Intersection between a circle and a plane. tolang is used to determine if the angle between two vectors is null. tol is used to determine if a distance is null.

        Parameters
        ----------
        C: gp_Circ
        P: gp_Pln
        Tolang: float
        Tol: float

        Returns
        -------
        None
        Intersection between an ellipse and a plane. tolang is used to determine if the angle between two vectors is null. tol is used to determine if a distance is null.

        Parameters
        ----------
        E: gp_Elips
        P: gp_Pln
        Tolang: float
        Tol: float

        Returns
        -------
        None
        Intersection between a parabola and a plane. tolang is used to determine if the angle between two vectors is null.

        Parameters
        ----------
        Pb: gp_Parab
        P: gp_Pln
        Tolang: float

        Returns
        -------
        None
        Intersection between an hyperbola and a plane. tolang is used to determine if the angle between two vectors is null.

        Parameters
        ----------
        H: gp_Hypr
        P: gp_Pln
        Tolang: float

        Returns
        -------
        None

        """
        _IntAna.IntAna_IntConicQuad_swiginit(self, _IntAna.new_IntAna_IntConicQuad(*args))

    def IsDone(self, *args) -> "Standard_Boolean":
        r"""
        Returns true if the creation completed.

        Returns
        -------
        bool

        """
        return _IntAna.IntAna_IntConicQuad_IsDone(self, *args)

    def IsInQuadric(self, *args) -> "Standard_Boolean":
        r"""
        Returns true if the conic is in the quadric.

        Returns
        -------
        bool

        """
        return _IntAna.IntAna_IntConicQuad_IsInQuadric(self, *args)

    def IsParallel(self, *args) -> "Standard_Boolean":
        r"""
        Returns true if the line is in a quadric which is parallel to the quadric.

        Returns
        -------
        bool

        """
        return _IntAna.IntAna_IntConicQuad_IsParallel(self, *args)

    def NbPoints(self, *args) -> "Standard_Integer":
        r"""
        Returns the number of intersection point.

        Returns
        -------
        int

        """
        return _IntAna.IntAna_IntConicQuad_NbPoints(self, *args)

    def ParamOnConic(self, *args) -> "Standard_Real":
        r"""
        Returns the parameter on the line of the intersection point of range n.

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

        Returns
        -------
        float

        """
        return _IntAna.IntAna_IntConicQuad_ParamOnConic(self, *args)

    def Perform(self, *args) -> "void":
        r"""
        Intersects a line and a quadric.

        Parameters
        ----------
        L: gp_Lin
        Q: IntAna_Quadric

        Returns
        -------
        None
        Intersects a circle and a quadric.

        Parameters
        ----------
        C: gp_Circ
        Q: IntAna_Quadric

        Returns
        -------
        None
        Intersects an ellipse and a quadric.

        Parameters
        ----------
        E: gp_Elips
        Q: IntAna_Quadric

        Returns
        -------
        None
        Intersects a parabola and a quadric.

        Parameters
        ----------
        P: gp_Parab
        Q: IntAna_Quadric

        Returns
        -------
        None
        Intersects an hyperbola and a quadric.

        Parameters
        ----------
        H: gp_Hypr
        Q: IntAna_Quadric

        Returns
        -------
        None
        Intersects a line and a plane. tolang is used to determine if the angle between two vectors is null. tol is used to check the distance between line and plane on the distance <len> from the origin of the line.

        Parameters
        ----------
        L: gp_Lin
        P: gp_Pln
        Tolang: float
        Tol: float,optional
        	default value is 0
        Len: float,optional
        	default value is 0

        Returns
        -------
        None
        Intersects a circle and a plane. tolang is used to determine if the angle between two vectors is null. tol is used to determine if a distance is null.

        Parameters
        ----------
        C: gp_Circ
        P: gp_Pln
        Tolang: float
        Tol: float

        Returns
        -------
        None
        Intersects an ellipse and a plane. tolang is used to determine if the angle between two vectors is null. tol is used to determine if a distance is null.

        Parameters
        ----------
        E: gp_Elips
        P: gp_Pln
        Tolang: float
        Tol: float

        Returns
        -------
        None
        Intersects a parabola and a plane. tolang is used to determine if the angle between two vectors is null.

        Parameters
        ----------
        Pb: gp_Parab
        P: gp_Pln
        Tolang: float

        Returns
        -------
        None
        Intersects an hyperbola and a plane. tolang is used to determine if the angle between two vectors is null.

        Parameters
        ----------
        H: gp_Hypr
        P: gp_Pln
        Tolang: float

        Returns
        -------
        None

        """
        return _IntAna.IntAna_IntConicQuad_Perform(self, *args)

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

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

        Returns
        -------
        gp_Pnt

        """
        return _IntAna.IntAna_IntConicQuad_Point(self, *args)

    __repr__ = _dumps_object

    __swig_destroy__ = _IntAna.delete_IntAna_IntConicQuad

# Register IntAna_IntConicQuad in _IntAna:
_IntAna.IntAna_IntConicQuad_swigregister(IntAna_IntConicQuad)

class IntAna_IntLinTorus(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
        Creates the intersection between a line and a torus.

        Parameters
        ----------
        L: gp_Lin
        T: gp_Torus

        Returns
        -------
        None

        """
        _IntAna.IntAna_IntLinTorus_swiginit(self, _IntAna.new_IntAna_IntLinTorus(*args))

    def IsDone(self, *args) -> "Standard_Boolean":
        r"""
        Returns true if the computation was successful.

        Returns
        -------
        bool

        """
        return _IntAna.IntAna_IntLinTorus_IsDone(self, *args)

    def NbPoints(self, *args) -> "Standard_Integer":
        r"""
        Returns the number of intersection points.

        Returns
        -------
        int

        """
        return _IntAna.IntAna_IntLinTorus_NbPoints(self, *args)

    def ParamOnLine(self, *args) -> "Standard_Real":
        r"""
        Returns the parameter on the line of the intersection point of range index.

        Parameters
        ----------
        Index: int

        Returns
        -------
        float

        """
        return _IntAna.IntAna_IntLinTorus_ParamOnLine(self, *args)

    def ParamOnTorus(self, *args) -> "void":
        r"""
        Returns the parameters on the torus of the intersection point of range index.

        Parameters
        ----------
        Index: int

        Returns
        -------
        FI: float
        THETA: float

        """
        return _IntAna.IntAna_IntLinTorus_ParamOnTorus(self, *args)

    def Perform(self, *args) -> "void":
        r"""
        Intersects a line and a torus.

        Parameters
        ----------
        L: gp_Lin
        T: gp_Torus

        Returns
        -------
        None

        """
        return _IntAna.IntAna_IntLinTorus_Perform(self, *args)

    def Value(self, *args) -> "gp_Pnt const":
        r"""
        Returns the intersection point of range index.

        Parameters
        ----------
        Index: int

        Returns
        -------
        gp_Pnt

        """
        return _IntAna.IntAna_IntLinTorus_Value(self, *args)

    __repr__ = _dumps_object

    __swig_destroy__ = _IntAna.delete_IntAna_IntLinTorus

# Register IntAna_IntLinTorus in _IntAna:
_IntAna.IntAna_IntLinTorus_swigregister(IntAna_IntLinTorus)

class IntAna_IntQuadQuad(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
        Creates the intersection between a cylinder and a quadric . tol est a definir plus precisemment.

        Parameters
        ----------
        C: gp_Cylinder
        Q: IntAna_Quadric
        Tol: float

        Returns
        -------
        None
        Creates the intersection between a cone and a quadric. tol est a definir plus precisemment.

        Parameters
        ----------
        C: gp_Cone
        Q: IntAna_Quadric
        Tol: float

        Returns
        -------
        None

        """
        _IntAna.IntAna_IntQuadQuad_swiginit(self, _IntAna.new_IntAna_IntQuadQuad(*args))

    def Curve(self, *args) -> "IntAna_Curve const &":
        r"""
        Returns the curve of range n.

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

        Returns
        -------
        IntAna_Curve

        """
        return _IntAna.IntAna_IntQuadQuad_Curve(self, *args)

    def HasNextCurve(self, *args) -> "Standard_Boolean":
        r"""
        Returns true if the curve i shares its last bound with another curve.

        Parameters
        ----------
        I: int

        Returns
        -------
        bool

        """
        return _IntAna.IntAna_IntQuadQuad_HasNextCurve(self, *args)

    def HasPreviousCurve(self, *args) -> "Standard_Boolean":
        r"""
        Returns true if the curve i shares its first bound with another curve.

        Parameters
        ----------
        I: int

        Returns
        -------
        bool

        """
        return _IntAna.IntAna_IntQuadQuad_HasPreviousCurve(self, *args)

    def IdenticalElements(self, *args) -> "Standard_Boolean":
        r"""
        Returns true if the cylinder, the cone or the sphere is identical to the quadric.

        Returns
        -------
        bool

        """
        return _IntAna.IntAna_IntQuadQuad_IdenticalElements(self, *args)

    def IsDone(self, *args) -> "Standard_Boolean":
        r"""
        Returns true if the computation was successful.

        Returns
        -------
        bool

        """
        return _IntAna.IntAna_IntQuadQuad_IsDone(self, *args)

    def NbCurve(self, *args) -> "Standard_Integer":
        r"""
        Returns the number of curves solution.

        Returns
        -------
        int

        """
        return _IntAna.IntAna_IntQuadQuad_NbCurve(self, *args)

    def NbPnt(self, *args) -> "Standard_Integer":
        r"""
        Returns the number of contact point.

        Returns
        -------
        int

        """
        return _IntAna.IntAna_IntQuadQuad_NbPnt(self, *args)

    def NextCurve(self, *args) -> "Standard_Integer":
        r"""
        If hasnextcurve(i) returns true, this function returns the index j of the curve which has a common bound with the curve i. if theopposite == true , then the last parameter of the curve i, and the last parameter of the curve j give the same point. else the last parameter of the curve i and the first parameter of the curve j are the same point.

        Parameters
        ----------
        I: int

        Returns
        -------
        theOpposite: bool

        """
        return _IntAna.IntAna_IntQuadQuad_NextCurve(self, *args)

    def Parameters(self, *args) -> "void":
        r"""
        Returns the paramaters on the 'explicit quadric' (i.e the cylinder or the cone, the first argument given to the constructor) of the point of range n.

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

        Returns
        -------
        U1: float
        U2: float

        """
        return _IntAna.IntAna_IntQuadQuad_Parameters(self, *args)

    def Perform(self, *args) -> "void":
        r"""
        Intersects a cylinder and a quadric . tol est a definir plus precisemment.

        Parameters
        ----------
        C: gp_Cylinder
        Q: IntAna_Quadric
        Tol: float

        Returns
        -------
        None
        Intersects a cone and a quadric. tol est a definir plus precisemment.

        Parameters
        ----------
        C: gp_Cone
        Q: IntAna_Quadric
        Tol: float

        Returns
        -------
        None

        """
        return _IntAna.IntAna_IntQuadQuad_Perform(self, *args)

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

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

        Returns
        -------
        gp_Pnt

        """
        return _IntAna.IntAna_IntQuadQuad_Point(self, *args)

    def PreviousCurve(self, *args) -> "Standard_Integer":
        r"""
        If haspreviouscurve(i) returns true, this function returns the index j of the curve which has a common bound with the curve i. if theopposite == true , then the first parameter of the curve i, and the first parameter of the curve j give the same point. else the first parameter of the curve i and the last parameter of the curve j are the same point.

        Parameters
        ----------
        I: int

        Returns
        -------
        theOpposite: bool

        """
        return _IntAna.IntAna_IntQuadQuad_PreviousCurve(self, *args)

    __repr__ = _dumps_object

    __swig_destroy__ = _IntAna.delete_IntAna_IntQuadQuad

# Register IntAna_IntQuadQuad in _IntAna:
_IntAna.IntAna_IntQuadQuad_swigregister(IntAna_IntQuadQuad)

class IntAna_QuadQuadGeo(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
        Creates the intersection between two planes. tolang is the angular tolerance used to determine if the planes are parallel. tol is the tolerance used to determine if the planes are identical (only when they are parallel).

        Parameters
        ----------
        P1: gp_Pln
        P2: gp_Pln
        TolAng: float
        Tol: float

        Returns
        -------
        None
        Creates the intersection between a plane and a cylinder. tolang is the angular tolerance used to determine if the axis of the cylinder is parallel to the plane. tol is the tolerance used to determine if the result is a circle or an ellipse. if the maximum distance between the ellipse solution and the circle centered at the ellipse center is less than tol, the result will be the circle. h is the height of the cylinder <cyl>. it is used to check whether the plane and cylinder are parallel.

        Parameters
        ----------
        P: gp_Pln
        C: gp_Cylinder
        Tolang: float
        Tol: float
        H: float,optional
        	default value is 0

        Returns
        -------
        None
        Creates the intersection between a plane and a sphere.

        Parameters
        ----------
        P: gp_Pln
        S: gp_Sphere

        Returns
        -------
        None
        Creates the intersection between a plane and a cone. tolang is the angular tolerance used to determine if the axis of the cone is parallel or perpendicular to the plane, and if the generating line of the cone is parallel to the plane. tol is the tolerance used to determine if the apex of the cone is in the plane.

        Parameters
        ----------
        P: gp_Pln
        C: gp_Cone
        Tolang: float
        Tol: float

        Returns
        -------
        None
        Creates the intersection between two cylinders.

        Parameters
        ----------
        Cyl1: gp_Cylinder
        Cyl2: gp_Cylinder
        Tol: float

        Returns
        -------
        None
        Creates the intersection between a cylinder and a sphere.

        Parameters
        ----------
        Cyl: gp_Cylinder
        Sph: gp_Sphere
        Tol: float

        Returns
        -------
        None
        Creates the intersection between a cylinder and a cone.

        Parameters
        ----------
        Cyl: gp_Cylinder
        Con: gp_Cone
        Tol: float

        Returns
        -------
        None
        Creates the intersection between two spheres.

        Parameters
        ----------
        Sph1: gp_Sphere
        Sph2: gp_Sphere
        Tol: float

        Returns
        -------
        None
        Creates the intersection beween a sphere and a cone.

        Parameters
        ----------
        Sph: gp_Sphere
        Con: gp_Cone
        Tol: float

        Returns
        -------
        None
        Creates the intersection beween two cones.

        Parameters
        ----------
        Con1: gp_Cone
        Con2: gp_Cone
        Tol: float

        Returns
        -------
        None
        Creates the intersection beween plane and torus.

        Parameters
        ----------
        Pln: gp_Pln
        Tor: gp_Torus
        Tol: float

        Returns
        -------
        None
        Creates the intersection beween cylinder and torus.

        Parameters
        ----------
        Cyl: gp_Cylinder
        Tor: gp_Torus
        Tol: float

        Returns
        -------
        None
        Creates the intersection beween cone and torus.

        Parameters
        ----------
        Con: gp_Cone
        Tor: gp_Torus
        Tol: float

        Returns
        -------
        None
        Creates the intersection beween sphere and torus.

        Parameters
        ----------
        Sph: gp_Sphere
        Tor: gp_Torus
        Tol: float

        Returns
        -------
        None
        Creates the intersection beween two toruses.

        Parameters
        ----------
        Tor1: gp_Torus
        Tor2: gp_Torus
        Tol: float

        Returns
        -------
        None

        """
        _IntAna.IntAna_QuadQuadGeo_swiginit(self, _IntAna.new_IntAna_QuadQuadGeo(*args))

    def Circle(self, *args) -> "gp_Circ":
        r"""
        Returns the circle solution of range num.

        Parameters
        ----------
        Num: int

        Returns
        -------
        gp_Circ

        """
        return _IntAna.IntAna_QuadQuadGeo_Circle(self, *args)

    def Ellipse(self, *args) -> "gp_Elips":
        r"""
        Returns the ellipse solution of range num.

        Parameters
        ----------
        Num: int

        Returns
        -------
        gp_Elips

        """
        return _IntAna.IntAna_QuadQuadGeo_Ellipse(self, *args)

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

        Returns
        -------
        bool

        """
        return _IntAna.IntAna_QuadQuadGeo_HasCommonGen(self, *args)

    def Hyperbola(self, *args) -> "gp_Hypr":
        r"""
        Returns the hyperbola solution of range num.

        Parameters
        ----------
        Num: int

        Returns
        -------
        gp_Hypr

        """
        return _IntAna.IntAna_QuadQuadGeo_Hyperbola(self, *args)

    def IsDone(self, *args) -> "Standard_Boolean":
        r"""
        Returns standard_true if the computation was successful.

        Returns
        -------
        bool

        """
        return _IntAna.IntAna_QuadQuadGeo_IsDone(self, *args)

    def Line(self, *args) -> "gp_Lin":
        r"""
        Returns the line solution of range num.

        Parameters
        ----------
        Num: int

        Returns
        -------
        gp_Lin

        """
        return _IntAna.IntAna_QuadQuadGeo_Line(self, *args)

    def NbSolutions(self, *args) -> "Standard_Integer":
        r"""
        Returns the number of interesections. the possible intersections are : - 1 point - 1 or 2 line(s) - 1 point and 1 line - 1 circle - 1 ellipse - 1 parabola - 1 or 2 hyperbola(s).

        Returns
        -------
        int

        """
        return _IntAna.IntAna_QuadQuadGeo_NbSolutions(self, *args)

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

        Returns
        -------
        gp_Pnt

        """
        return _IntAna.IntAna_QuadQuadGeo_PChar(self, *args)

    def Parabola(self, *args) -> "gp_Parab":
        r"""
        Returns the parabola solution of range num.

        Parameters
        ----------
        Num: int

        Returns
        -------
        gp_Parab

        """
        return _IntAna.IntAna_QuadQuadGeo_Parabola(self, *args)

    def Perform(self, *args) -> "void":
        r"""
        Intersects two planes. tolang is the angular tolerance used to determine if the planes are parallel. tol is the tolerance used to determine if the planes are identical (only when they are parallel).

        Parameters
        ----------
        P1: gp_Pln
        P2: gp_Pln
        TolAng: float
        Tol: float

        Returns
        -------
        None
        Intersects a plane and a cylinder. tolang is the angular tolerance used to determine if the axis of the cylinder is parallel to the plane. tol is the tolerance used to determine if the result is a circle or an ellipse. if the maximum distance between the ellipse solution and the circle centered at the ellipse center is less than tol, the result will be the circle. h is the height of the cylinder <cyl>. it is used to check whether the plane and cylinder are parallel.

        Parameters
        ----------
        P: gp_Pln
        C: gp_Cylinder
        Tolang: float
        Tol: float
        H: float,optional
        	default value is 0

        Returns
        -------
        None
        Intersects a plane and a sphere.

        Parameters
        ----------
        P: gp_Pln
        S: gp_Sphere

        Returns
        -------
        None
        Intersects a plane and a cone. tolang is the angular tolerance used to determine if the axis of the cone is parallel or perpendicular to the plane, and if the generating line of the cone is parallel to the plane. tol is the tolerance used to determine if the apex of the cone is in the plane.

        Parameters
        ----------
        P: gp_Pln
        C: gp_Cone
        Tolang: float
        Tol: float

        Returns
        -------
        None
        Intersects two cylinders.

        Parameters
        ----------
        Cyl1: gp_Cylinder
        Cyl2: gp_Cylinder
        Tol: float

        Returns
        -------
        None
        Intersects a cylinder and a sphere.

        Parameters
        ----------
        Cyl: gp_Cylinder
        Sph: gp_Sphere
        Tol: float

        Returns
        -------
        None
        Intersects a cylinder and a cone.

        Parameters
        ----------
        Cyl: gp_Cylinder
        Con: gp_Cone
        Tol: float

        Returns
        -------
        None
        Intersects a two spheres.

        Parameters
        ----------
        Sph1: gp_Sphere
        Sph2: gp_Sphere
        Tol: float

        Returns
        -------
        None
        Intersects a sphere and a cone.

        Parameters
        ----------
        Sph: gp_Sphere
        Con: gp_Cone
        Tol: float

        Returns
        -------
        None
        Intersects two cones.

        Parameters
        ----------
        Con1: gp_Cone
        Con2: gp_Cone
        Tol: float

        Returns
        -------
        None
        Intersects plane and torus.

        Parameters
        ----------
        Pln: gp_Pln
        Tor: gp_Torus
        Tol: float

        Returns
        -------
        None
        Intersects cylinder and torus.

        Parameters
        ----------
        Cyl: gp_Cylinder
        Tor: gp_Torus
        Tol: float

        Returns
        -------
        None
        Intersects cone and torus.

        Parameters
        ----------
        Con: gp_Cone
        Tor: gp_Torus
        Tol: float

        Returns
        -------
        None
        Intersects sphere and torus.

        Parameters
        ----------
        Sph: gp_Sphere
        Tor: gp_Torus
        Tol: float

        Returns
        -------
        None
        Intersects two toruses.

        Parameters
        ----------
        Tor1: gp_Torus
        Tor2: gp_Torus
        Tol: float

        Returns
        -------
        None

        """
        return _IntAna.IntAna_QuadQuadGeo_Perform(self, *args)

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

        Parameters
        ----------
        Num: int

        Returns
        -------
        gp_Pnt

        """
        return _IntAna.IntAna_QuadQuadGeo_Point(self, *args)

    def TypeInter(self, *args) -> "IntAna_ResultType":
        r"""
        Returns the type of intersection.

        Returns
        -------
        IntAna_ResultType

        """
        return _IntAna.IntAna_QuadQuadGeo_TypeInter(self, *args)

    __repr__ = _dumps_object

    __swig_destroy__ = _IntAna.delete_IntAna_QuadQuadGeo

# Register IntAna_QuadQuadGeo in _IntAna:
_IntAna.IntAna_QuadQuadGeo_swigregister(IntAna_QuadQuadGeo)

class IntAna_Quadric(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
        Creates a quadric from a pln.

        Parameters
        ----------
        P: gp_Pln

        Returns
        -------
        None
        Creates a quadric from a sphere.

        Parameters
        ----------
        Sph: gp_Sphere

        Returns
        -------
        None
        Creates a quadric from a cylinder.

        Parameters
        ----------
        Cyl: gp_Cylinder

        Returns
        -------
        None
        Creates a quadric from a cone.

        Parameters
        ----------
        Cone: gp_Cone

        Returns
        -------
        None

        """
        _IntAna.IntAna_Quadric_swiginit(self, _IntAna.new_IntAna_Quadric(*args))

    def Coefficients(self, *args) -> "void":
        r"""
        Returns the coefficients of the polynomial equation which define the quadric: xcxx x**2 + xcyy y**2 + xczz z**2 + 2 ( xcxy x y + xcxz x z + xcyz y z ) + 2 ( xcx x + xcy y + xcz z ) + xccte.

        Parameters
        ----------

        Returns
        -------
        xCXX: float
        xCYY: float
        xCZZ: float
        xCXY: float
        xCXZ: float
        xCYZ: float
        xCX: float
        xCY: float
        xCZ: float
        xCCte: float

        """
        return _IntAna.IntAna_Quadric_Coefficients(self, *args)

    def NewCoefficients(self, *args) -> "void":
        r"""
        Returns the coefficients of the polynomial equation ( written in the natural coordinates system ) in the local coordinates system defined by axis.

        Parameters
        ----------
        Axis: gp_Ax3

        Returns
        -------
        xCXX: float
        xCYY: float
        xCZZ: float
        xCXY: float
        xCXZ: float
        xCYZ: float
        xCX: float
        xCY: float
        xCZ: float
        xCCte: float

        """
        return _IntAna.IntAna_Quadric_NewCoefficients(self, *args)

    def SetQuadric(self, *args) -> "void":
        r"""
        Initializes the quadric with a pln.

        Parameters
        ----------
        P: gp_Pln

        Returns
        -------
        None
        Initialize the quadric with a sphere.

        Parameters
        ----------
        Sph: gp_Sphere

        Returns
        -------
        None
        Initializes the quadric with a cone.

        Parameters
        ----------
        Con: gp_Cone

        Returns
        -------
        None
        Initializes the quadric with a cylinder.

        Parameters
        ----------
        Cyl: gp_Cylinder

        Returns
        -------
        None

        """
        return _IntAna.IntAna_Quadric_SetQuadric(self, *args)

    def SpecialPoints(self, *args) -> "NCollection_List< gp_Pnt > const":
        r"""
        Returns the list of special points (with singularities).

        Returns
        -------
        NCollection_List<gp_Pnt>

        """
        return _IntAna.IntAna_Quadric_SpecialPoints(self, *args)

    __repr__ = _dumps_object

    __swig_destroy__ = _IntAna.delete_IntAna_Quadric

# Register IntAna_Quadric in _IntAna:
_IntAna.IntAna_Quadric_swigregister(IntAna_Quadric)





