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

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

try:
    import builtins as __builtin__
except ImportError:
    import __builtin__

_swig_new_instance_method = _GProp.SWIG_PyInstanceMethod_New
_swig_new_static_method = _GProp.SWIG_PyStaticMethod_New

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__ = _GProp.delete_SwigPyIterator
    value = _swig_new_instance_method(_GProp.SwigPyIterator_value)
    incr = _swig_new_instance_method(_GProp.SwigPyIterator_incr)
    decr = _swig_new_instance_method(_GProp.SwigPyIterator_decr)
    distance = _swig_new_instance_method(_GProp.SwigPyIterator_distance)
    equal = _swig_new_instance_method(_GProp.SwigPyIterator_equal)
    copy = _swig_new_instance_method(_GProp.SwigPyIterator_copy)
    next = _swig_new_instance_method(_GProp.SwigPyIterator_next)
    __next__ = _swig_new_instance_method(_GProp.SwigPyIterator___next__)
    previous = _swig_new_instance_method(_GProp.SwigPyIterator_previous)
    advance = _swig_new_instance_method(_GProp.SwigPyIterator_advance)
    __eq__ = _swig_new_instance_method(_GProp.SwigPyIterator___eq__)
    __ne__ = _swig_new_instance_method(_GProp.SwigPyIterator___ne__)
    __iadd__ = _swig_new_instance_method(_GProp.SwigPyIterator___iadd__)
    __isub__ = _swig_new_instance_method(_GProp.SwigPyIterator___isub__)
    __add__ = _swig_new_instance_method(_GProp.SwigPyIterator___add__)
    __sub__ = _swig_new_instance_method(_GProp.SwigPyIterator___sub__)
    def __iter__(self):
        return self

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


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.TColgp
import OCC.Core.TColStd
import OCC.Core.TCollection
GProp_Plane = _GProp.GProp_Plane
GProp_Line = _GProp.GProp_Line
GProp_Point = _GProp.GProp_Point
GProp_Space = _GProp.GProp_Space
GProp_None = _GProp.GProp_None
GProp_Mass = _GProp.GProp_Mass
GProp_CenterMassX = _GProp.GProp_CenterMassX
GProp_CenterMassY = _GProp.GProp_CenterMassY
GProp_CenterMassZ = _GProp.GProp_CenterMassZ
GProp_InertiaXX = _GProp.GProp_InertiaXX
GProp_InertiaYY = _GProp.GProp_InertiaYY
GProp_InertiaZZ = _GProp.GProp_InertiaZZ
GProp_InertiaXY = _GProp.GProp_InertiaXY
GProp_InertiaXZ = _GProp.GProp_InertiaXZ
GProp_InertiaYZ = _GProp.GProp_InertiaYZ
GProp_Unknown = _GProp.GProp_Unknown
class gprop(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    HOperator = _swig_new_static_method(_GProp.gprop_HOperator)

    __repr__ = _dumps_object


    def __init__(self):
        _GProp.gprop_swiginit(self, _GProp.new_gprop())
    __swig_destroy__ = _GProp.delete_gprop

# Register gprop in _GProp:
_GProp.gprop_swigregister(gprop)
gprop_HOperator = _GProp.gprop_HOperator

class GProp_GProps(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    Add = _swig_new_instance_method(_GProp.GProp_GProps_Add)
    CentreOfMass = _swig_new_instance_method(_GProp.GProp_GProps_CentreOfMass)

    def __init__(self, *args):
        r"""
        * The origin (0, 0, 0) of the absolute cartesian coordinate system is used to compute the global properties.
        	:rtype: None* The point SystemLocation is used to compute the gobal properties of the system. For more accuracy it is better to define this point closed to the location of the system. For example it could be a point around the centre of mass of the system. This point is referred to as the reference point for this framework. For greater accuracy it is better for the reference point to be close to the location of the system. It can, for example, be a point near the center of mass of the system. At initialization, the framework is empty; i.e. it retains no dimensional information such as mass, or inertia. However, it is now able to bring together global properties of various other systems, whose global properties have already been computed using another framework. To do this, use the function Add to define the components of the system. Use it once per component of the system, and then use the interrogation functions available to access the computed values.
        	:param SystemLocation:
        	:type SystemLocation: gp_Pnt
        	:rtype: None
        """
        _GProp.GProp_GProps_swiginit(self, _GProp.new_GProp_GProps(*args))
    Mass = _swig_new_instance_method(_GProp.GProp_GProps_Mass)
    MatrixOfInertia = _swig_new_instance_method(_GProp.GProp_GProps_MatrixOfInertia)
    MomentOfInertia = _swig_new_instance_method(_GProp.GProp_GProps_MomentOfInertia)
    PrincipalProperties = _swig_new_instance_method(_GProp.GProp_GProps_PrincipalProperties)
    RadiusOfGyration = _swig_new_instance_method(_GProp.GProp_GProps_RadiusOfGyration)
    StaticMoments = _swig_new_instance_method(_GProp.GProp_GProps_StaticMoments)

    __repr__ = _dumps_object

    __swig_destroy__ = _GProp.delete_GProp_GProps

# Register GProp_GProps in _GProp:
_GProp.GProp_GProps_swigregister(GProp_GProps)

class GProp_PEquation(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    Box = _swig_new_instance_method(_GProp.GProp_PEquation_Box)

    def __init__(self, *args):
        r"""
        * Constructs a framework to analyze the collection of points Pnts and computes: - the mean point if the points in question are considered to be coincident within the precision Tol, or - the mean line if they are considered to be collinear within the precision Tol, or - the mean plane if they are considered to be coplanar within the precision Tol, or - the minimal box which contains all the points. Use : - the functions IsPoint, IsLinear, IsPlanar and IsSpace to find the result of the analysis, and - the function Point, Line, Plane or Box to access the computed result.
        	:param Pnts:
        	:type Pnts: TColgp_Array1OfPnt
        	:param Tol:
        	:type Tol: float
        	:rtype: None
        """
        _GProp.GProp_PEquation_swiginit(self, _GProp.new_GProp_PEquation(*args))
    IsLinear = _swig_new_instance_method(_GProp.GProp_PEquation_IsLinear)
    IsPlanar = _swig_new_instance_method(_GProp.GProp_PEquation_IsPlanar)
    IsPoint = _swig_new_instance_method(_GProp.GProp_PEquation_IsPoint)
    IsSpace = _swig_new_instance_method(_GProp.GProp_PEquation_IsSpace)
    Line = _swig_new_instance_method(_GProp.GProp_PEquation_Line)
    Plane = _swig_new_instance_method(_GProp.GProp_PEquation_Plane)
    Point = _swig_new_instance_method(_GProp.GProp_PEquation_Point)

    __repr__ = _dumps_object

    __swig_destroy__ = _GProp.delete_GProp_PEquation

# Register GProp_PEquation in _GProp:
_GProp.GProp_PEquation_swigregister(GProp_PEquation)

class GProp_PrincipalProps(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    FirstAxisOfInertia = _swig_new_instance_method(_GProp.GProp_PrincipalProps_FirstAxisOfInertia)

    def __init__(self, *args):
        r"""
        * creates an undefined PrincipalProps.
        	:rtype: None
        """
        _GProp.GProp_PrincipalProps_swiginit(self, _GProp.new_GProp_PrincipalProps(*args))
    HasSymmetryAxis = _swig_new_instance_method(_GProp.GProp_PrincipalProps_HasSymmetryAxis)
    HasSymmetryPoint = _swig_new_instance_method(_GProp.GProp_PrincipalProps_HasSymmetryPoint)
    Moments = _swig_new_instance_method(_GProp.GProp_PrincipalProps_Moments)
    RadiusOfGyration = _swig_new_instance_method(_GProp.GProp_PrincipalProps_RadiusOfGyration)
    SecondAxisOfInertia = _swig_new_instance_method(_GProp.GProp_PrincipalProps_SecondAxisOfInertia)
    ThirdAxisOfInertia = _swig_new_instance_method(_GProp.GProp_PrincipalProps_ThirdAxisOfInertia)

    __repr__ = _dumps_object

    __swig_destroy__ = _GProp.delete_GProp_PrincipalProps

# Register GProp_PrincipalProps in _GProp:
_GProp.GProp_PrincipalProps_swigregister(GProp_PrincipalProps)

class GProp_CelGProps(GProp_GProps):
    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"""
        :rtype: None:param C:
        	:type C: gp_Circ
        	:param CLocation:
        	:type CLocation: gp_Pnt
        	:rtype: None:param C:
        	:type C: gp_Circ
        	:param U1:
        	:type U1: float
        	:param U2:
        	:type U2: float
        	:param CLocation:
        	:type CLocation: gp_Pnt
        	:rtype: None:param C:
        	:type C: gp_Lin
        	:param U1:
        	:type U1: float
        	:param U2:
        	:type U2: float
        	:param CLocation:
        	:type CLocation: gp_Pnt
        	:rtype: None
        """
        _GProp.GProp_CelGProps_swiginit(self, _GProp.new_GProp_CelGProps(*args))
    Perform = _swig_new_instance_method(_GProp.GProp_CelGProps_Perform)
    SetLocation = _swig_new_instance_method(_GProp.GProp_CelGProps_SetLocation)

    __repr__ = _dumps_object

    __swig_destroy__ = _GProp.delete_GProp_CelGProps

# Register GProp_CelGProps in _GProp:
_GProp.GProp_CelGProps_swigregister(GProp_CelGProps)

class GProp_PGProps(GProp_GProps):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    AddPoint = _swig_new_instance_method(_GProp.GProp_PGProps_AddPoint)
    Barycentre = _swig_new_static_method(_GProp.GProp_PGProps_Barycentre)

    def __init__(self, *args):
        r"""
        * Initializes a framework to compute global properties on a set of points. The point relative to which the inertia of the system is computed will be the origin (0, 0, 0) of the absolute Cartesian coordinate system. At initialization, the framework is empty, i.e. it retains no dimensional information such as mass and inertia. It is, however, now able to keep global properties of a set of points while new points are added using the AddPoint function. The set of points whose global properties are brought together by this framework will then be referred to as the current system. The current system is, however, not kept by this framework, which only keeps that system's global properties. Note that the current system may be more complex than a set of points.
        	:rtype: None* computes the global properties of the system of points Pnts. The density of the points are defaulted to all being 1
        	:param Pnts:
        	:type Pnts: TColgp_Array1OfPnt
        	:rtype: None* computes the global properties of the system of points Pnts. The density of the points are defaulted to all being 1
        	:param Pnts:
        	:type Pnts: TColgp_Array2OfPnt
        	:rtype: None* computes the global properties of the system of points Pnts. A density is associated with each point. //! raises if a density is lower or equal to Resolution from package gp. //! raises if the length of Pnts and the length of Density is not the same.
        	:param Pnts:
        	:type Pnts: TColgp_Array1OfPnt
        	:param Density:
        	:type Density: TColStd_Array1OfReal
        	:rtype: None* computes the global properties of the system of points Pnts. A density is associated with each point. //! Raised if a density is lower or equal to Resolution from package gp. //! Raised if the length of Pnts and the length of Density is not the same.
        	:param Pnts:
        	:type Pnts: TColgp_Array2OfPnt
        	:param Density:
        	:type Density: TColStd_Array2OfReal
        	:rtype: None
        """
        _GProp.GProp_PGProps_swiginit(self, _GProp.new_GProp_PGProps(*args))

    __repr__ = _dumps_object

    __swig_destroy__ = _GProp.delete_GProp_PGProps

# Register GProp_PGProps in _GProp:
_GProp.GProp_PGProps_swigregister(GProp_PGProps)
GProp_PGProps_Barycentre = _GProp.GProp_PGProps_Barycentre

class GProp_SelGProps(GProp_GProps):
    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"""
        :rtype: None:param S:
        	:type S: gp_Cylinder
        	:param Alpha1:
        	:type Alpha1: float
        	:param Alpha2:
        	:type Alpha2: float
        	:param Z1:
        	:type Z1: float
        	:param Z2:
        	:type Z2: float
        	:param SLocation:
        	:type SLocation: gp_Pnt
        	:rtype: None:param S:
        	:type S: gp_Cone
        	:param Alpha1:
        	:type Alpha1: float
        	:param Alpha2:
        	:type Alpha2: float
        	:param Z1:
        	:type Z1: float
        	:param Z2:
        	:type Z2: float
        	:param SLocation:
        	:type SLocation: gp_Pnt
        	:rtype: None:param S:
        	:type S: gp_Sphere
        	:param Teta1:
        	:type Teta1: float
        	:param Teta2:
        	:type Teta2: float
        	:param Alpha1:
        	:type Alpha1: float
        	:param Alpha2:
        	:type Alpha2: float
        	:param SLocation:
        	:type SLocation: gp_Pnt
        	:rtype: None:param S:
        	:type S: gp_Torus
        	:param Teta1:
        	:type Teta1: float
        	:param Teta2:
        	:type Teta2: float
        	:param Alpha1:
        	:type Alpha1: float
        	:param Alpha2:
        	:type Alpha2: float
        	:param SLocation:
        	:type SLocation: gp_Pnt
        	:rtype: None
        """
        _GProp.GProp_SelGProps_swiginit(self, _GProp.new_GProp_SelGProps(*args))
    Perform = _swig_new_instance_method(_GProp.GProp_SelGProps_Perform)
    SetLocation = _swig_new_instance_method(_GProp.GProp_SelGProps_SetLocation)

    __repr__ = _dumps_object

    __swig_destroy__ = _GProp.delete_GProp_SelGProps

# Register GProp_SelGProps in _GProp:
_GProp.GProp_SelGProps_swigregister(GProp_SelGProps)

class GProp_VelGProps(GProp_GProps):
    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"""
        :rtype: None:param S:
        	:type S: gp_Cylinder
        	:param Alpha1:
        	:type Alpha1: float
        	:param Alpha2:
        	:type Alpha2: float
        	:param Z1:
        	:type Z1: float
        	:param Z2:
        	:type Z2: float
        	:param VLocation:
        	:type VLocation: gp_Pnt
        	:rtype: None:param S:
        	:type S: gp_Cone
        	:param Alpha1:
        	:type Alpha1: float
        	:param Alpha2:
        	:type Alpha2: float
        	:param Z1:
        	:type Z1: float
        	:param Z2:
        	:type Z2: float
        	:param VLocation:
        	:type VLocation: gp_Pnt
        	:rtype: None:param S:
        	:type S: gp_Sphere
        	:param Teta1:
        	:type Teta1: float
        	:param Teta2:
        	:type Teta2: float
        	:param Alpha1:
        	:type Alpha1: float
        	:param Alpha2:
        	:type Alpha2: float
        	:param VLocation:
        	:type VLocation: gp_Pnt
        	:rtype: None:param S:
        	:type S: gp_Torus
        	:param Teta1:
        	:type Teta1: float
        	:param Teta2:
        	:type Teta2: float
        	:param Alpha1:
        	:type Alpha1: float
        	:param Alpha2:
        	:type Alpha2: float
        	:param VLocation:
        	:type VLocation: gp_Pnt
        	:rtype: None
        """
        _GProp.GProp_VelGProps_swiginit(self, _GProp.new_GProp_VelGProps(*args))
    Perform = _swig_new_instance_method(_GProp.GProp_VelGProps_Perform)
    SetLocation = _swig_new_instance_method(_GProp.GProp_VelGProps_SetLocation)

    __repr__ = _dumps_object

    __swig_destroy__ = _GProp.delete_GProp_VelGProps

# Register GProp_VelGProps in _GProp:
_GProp.GProp_VelGProps_swigregister(GProp_VelGProps)



