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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

# Register SwigPyIterator in _Geom2dEvaluator:
_Geom2dEvaluator.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 _Geom2dEvaluator.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.Geom2d
import OCC.Core.GeomAbs
import OCC.Core.TColgp
import OCC.Core.Geom2dAdaptor
import OCC.Core.Adaptor2d

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




def Handle_Geom2dEvaluator_Curve_Create() -> "opencascade::handle< Geom2dEvaluator_Curve >":
    return _Geom2dEvaluator.Handle_Geom2dEvaluator_Curve_Create()

def Handle_Geom2dEvaluator_Curve_DownCast(t: "opencascade::handle< Standard_Transient > const &") -> "opencascade::handle< Geom2dEvaluator_Curve >":
    return _Geom2dEvaluator.Handle_Geom2dEvaluator_Curve_DownCast(t)

def Handle_Geom2dEvaluator_Curve_IsNull(t: "opencascade::handle< Geom2dEvaluator_Curve > const &") -> "bool":
    return _Geom2dEvaluator.Handle_Geom2dEvaluator_Curve_IsNull(t)

def Handle_Geom2dEvaluator_OffsetCurve_Create() -> "opencascade::handle< Geom2dEvaluator_OffsetCurve >":
    return _Geom2dEvaluator.Handle_Geom2dEvaluator_OffsetCurve_Create()

def Handle_Geom2dEvaluator_OffsetCurve_DownCast(t: "opencascade::handle< Standard_Transient > const &") -> "opencascade::handle< Geom2dEvaluator_OffsetCurve >":
    return _Geom2dEvaluator.Handle_Geom2dEvaluator_OffsetCurve_DownCast(t)

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

    @staticmethod
    def CalculateD0(*args) -> "void":
        r"""
        Recalculate d1 values of base curve into d0 value of offset curve.

        Parameters
        ----------
        theValue: gp_Pnt2d
        theD1: gp_Vec2d
        theOffset: float

        Returns
        -------
        None

        """
        return _Geom2dEvaluator.geom2devaluator_CalculateD0(*args)

    @staticmethod
    def CalculateD1(*args) -> "void":
        r"""
        Recalculate d2 values of base curve into d1 values of offset curve.

        Parameters
        ----------
        theValue: gp_Pnt2d
        theD1: gp_Vec2d
        theD2: gp_Vec2d
        theOffset: float

        Returns
        -------
        None

        """
        return _Geom2dEvaluator.geom2devaluator_CalculateD1(*args)

    @staticmethod
    def CalculateD2(*args) -> "void":
        r"""
        Recalculate d3 values of base curve into d2 values of offset curve.

        Parameters
        ----------
        theValue: gp_Pnt2d
        theD1: gp_Vec2d
        theD2: gp_Vec2d
        theD3: gp_Vec2d
        theIsDirChange: bool
        theOffset: float

        Returns
        -------
        None

        """
        return _Geom2dEvaluator.geom2devaluator_CalculateD2(*args)

    @staticmethod
    def CalculateD3(*args) -> "void":
        r"""
        Recalculate d3 values of base curve into d3 values of offset curve.

        Parameters
        ----------
        theValue: gp_Pnt2d
        theD1: gp_Vec2d
        theD2: gp_Vec2d
        theD3: gp_Vec2d
        theD4: gp_Vec2d
        theIsDirChange: bool
        theOffset: float

        Returns
        -------
        None

        """
        return _Geom2dEvaluator.geom2devaluator_CalculateD3(*args)

    __repr__ = _dumps_object

    @methodnotwrapped
    def A(self):
    	pass

    @methodnotwrapped
    def d(self):
    	pass

    @methodnotwrapped
    def j(self):
    	pass

    @methodnotwrapped
    def u(self):
    	pass

    @methodnotwrapped
    def s(self):
    	pass

    @methodnotwrapped
    def t(self):
    	pass

    @methodnotwrapped
    def D(self):
    	pass

    @methodnotwrapped
    def e(self):
    	pass

    @methodnotwrapped
    def r(self):
    	pass

    @methodnotwrapped
    def i(self):
    	pass

    @methodnotwrapped
    def v(self):
    	pass

    @methodnotwrapped
    def a(self):
    	pass

    @methodnotwrapped
    def t(self):
    	pass

    @methodnotwrapped
    def i(self):
    	pass

    @methodnotwrapped
    def v(self):
    	pass

    @methodnotwrapped
    def e(self):
    	pass


    def __init__(self):
        _Geom2dEvaluator.geom2devaluator_swiginit(self, _Geom2dEvaluator.new_geom2devaluator())
    __swig_destroy__ = _Geom2dEvaluator.delete_geom2devaluator

# Register geom2devaluator in _Geom2dEvaluator:
_Geom2dEvaluator.geom2devaluator_swigregister(geom2devaluator)

def geom2devaluator_CalculateD0(*args) -> "void":
    r"""
    Recalculate d1 values of base curve into d0 value of offset curve.

    Parameters
    ----------
    theValue: gp_Pnt2d
    theD1: gp_Vec2d
    theOffset: float

    Returns
    -------
    None

    """
    return _Geom2dEvaluator.geom2devaluator_CalculateD0(*args)

def geom2devaluator_CalculateD1(*args) -> "void":
    r"""
    Recalculate d2 values of base curve into d1 values of offset curve.

    Parameters
    ----------
    theValue: gp_Pnt2d
    theD1: gp_Vec2d
    theD2: gp_Vec2d
    theOffset: float

    Returns
    -------
    None

    """
    return _Geom2dEvaluator.geom2devaluator_CalculateD1(*args)

def geom2devaluator_CalculateD2(*args) -> "void":
    r"""
    Recalculate d3 values of base curve into d2 values of offset curve.

    Parameters
    ----------
    theValue: gp_Pnt2d
    theD1: gp_Vec2d
    theD2: gp_Vec2d
    theD3: gp_Vec2d
    theIsDirChange: bool
    theOffset: float

    Returns
    -------
    None

    """
    return _Geom2dEvaluator.geom2devaluator_CalculateD2(*args)

def geom2devaluator_CalculateD3(*args) -> "void":
    r"""
    Recalculate d3 values of base curve into d3 values of offset curve.

    Parameters
    ----------
    theValue: gp_Pnt2d
    theD1: gp_Vec2d
    theD2: gp_Vec2d
    theD3: gp_Vec2d
    theD4: gp_Vec2d
    theIsDirChange: bool
    theOffset: float

    Returns
    -------
    None

    """
    return _Geom2dEvaluator.geom2devaluator_CalculateD3(*args)

class Geom2dEvaluator_Curve(OCC.Core.Standard.Standard_Transient):
    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

    def D0(self, *args) -> "void":
        r"""
        Value of 2d curve.

        Parameters
        ----------
        theU: float
        theValue: gp_Pnt2d

        Returns
        -------
        None

        """
        return _Geom2dEvaluator.Geom2dEvaluator_Curve_D0(self, *args)

    def D1(self, *args) -> "void":
        r"""
        Value and first derivatives of curve.

        Parameters
        ----------
        theU: float
        theValue: gp_Pnt2d
        theD1: gp_Vec2d

        Returns
        -------
        None

        """
        return _Geom2dEvaluator.Geom2dEvaluator_Curve_D1(self, *args)

    def D2(self, *args) -> "void":
        r"""
        Value, first and second derivatives of curve.

        Parameters
        ----------
        theU: float
        theValue: gp_Pnt2d
        theD1: gp_Vec2d
        theD2: gp_Vec2d

        Returns
        -------
        None

        """
        return _Geom2dEvaluator.Geom2dEvaluator_Curve_D2(self, *args)

    def D3(self, *args) -> "void":
        r"""
        Value, first, second and third derivatives of curve.

        Parameters
        ----------
        theU: float
        theValue: gp_Pnt2d
        theD1: gp_Vec2d
        theD2: gp_Vec2d
        theD3: gp_Vec2d

        Returns
        -------
        None

        """
        return _Geom2dEvaluator.Geom2dEvaluator_Curve_D3(self, *args)

    def DN(self, *args) -> "gp_Vec2d":
        r"""
        Calculates n-th derivatives of curve, where n = thederu. raises if n < 1.

        Parameters
        ----------
        theU: float
        theDerU: int

        Returns
        -------
        gp_Vec2d

        """
        return _Geom2dEvaluator.Geom2dEvaluator_Curve_DN(self, *args)


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


    __repr__ = _dumps_object

    __swig_destroy__ = _Geom2dEvaluator.delete_Geom2dEvaluator_Curve

# Register Geom2dEvaluator_Curve in _Geom2dEvaluator:
_Geom2dEvaluator.Geom2dEvaluator_Curve_swigregister(Geom2dEvaluator_Curve)

class Geom2dEvaluator_OffsetCurve(Geom2dEvaluator_Curve):
    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"""
        Initialize evaluator by curve.

        Parameters
        ----------
        theBase: Geom2d_Curve
        theOffset: float

        Returns
        -------
        None
        Initialize evaluator by curve adaptor.

        Parameters
        ----------
        theBase: Geom2dAdaptor_HCurve
        theOffset: float

        Returns
        -------
        None

        """
        _Geom2dEvaluator.Geom2dEvaluator_OffsetCurve_swiginit(self, _Geom2dEvaluator.new_Geom2dEvaluator_OffsetCurve(*args))

    def SetOffsetValue(self, *args) -> "void":
        r"""
        Change the offset value.

        Parameters
        ----------
        theOffset: float

        Returns
        -------
        None

        """
        return _Geom2dEvaluator.Geom2dEvaluator_OffsetCurve_SetOffsetValue(self, *args)


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


    __repr__ = _dumps_object

    __swig_destroy__ = _Geom2dEvaluator.delete_Geom2dEvaluator_OffsetCurve

# Register Geom2dEvaluator_OffsetCurve in _Geom2dEvaluator:
_Geom2dEvaluator.Geom2dEvaluator_OffsetCurve_swigregister(Geom2dEvaluator_OffsetCurve)





