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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

# Register SwigPyIterator in _RWStl:
_RWStl.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 _RWStl.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.OSD
import OCC.Core.TCollection
import OCC.Core.Message
import OCC.Core.TColStd
import OCC.Core.Poly
import OCC.Core.gp
import OCC.Core.TColgp
import OCC.Core.TShort

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



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

    @staticmethod
    def ReadAscii(*args) -> "opencascade::handle< Poly_Triangulation >":
        r"""
        Read triangulation from an ascii stl file in case of error, returns null handle.

        Parameters
        ----------
        thePath: OSD_Path
        theProgress: Message_ProgressRange,optional
        	default value is Message_ProgressRange()

        Returns
        -------
        opencascade::handle<Poly_Triangulation>

        """
        return _RWStl.rwstl_ReadAscii(*args)

    @staticmethod
    def ReadBinary(*args) -> "opencascade::handle< Poly_Triangulation >":
        r"""
        Read triangulation from a binary stl file in case of error, returns null handle.

        Parameters
        ----------
        thePath: OSD_Path
        theProgress: Message_ProgressRange,optional
        	default value is Message_ProgressRange()

        Returns
        -------
        opencascade::handle<Poly_Triangulation>

        """
        return _RWStl.rwstl_ReadBinary(*args)

    @staticmethod
    def ReadFile(*args) -> "opencascade::handle< Poly_Triangulation >":
        r"""
        Read specified stl file and returns its content as triangulation. in case of error, returns null handle.

        Parameters
        ----------
        theFile: OSD_Path
        aProgInd: Message_ProgressRange,optional
        	default value is Message_ProgressRange()

        Returns
        -------
        opencascade::handle<Poly_Triangulation>
        Read specified stl file and returns its content as triangulation. in case of error, returns null handle.

        Parameters
        ----------
        theFile: char *
        aProgInd: Message_ProgressRange,optional
        	default value is Message_ProgressRange()

        Returns
        -------
        opencascade::handle<Poly_Triangulation>

        """
        return _RWStl.rwstl_ReadFile(*args)

    @staticmethod
    def WriteAscii(*args) -> "Standard_Boolean":
        r"""
        Write the meshing in a file following the ascii format of an stl file. returns false if the cannot be opened;.

        Parameters
        ----------
        theMesh: Poly_Triangulation
        thePath: OSD_Path
        theProgress: Message_ProgressRange,optional
        	default value is Message_ProgressRange()

        Returns
        -------
        bool

        """
        return _RWStl.rwstl_WriteAscii(*args)

    @staticmethod
    def WriteBinary(*args) -> "Standard_Boolean":
        r"""
        Write triangulation to binary stl file. binary format of an stl file. returns false if the cannot be opened;.

        Parameters
        ----------
        theMesh: Poly_Triangulation
        thePath: OSD_Path
        theProgress: Message_ProgressRange,optional
        	default value is Message_ProgressRange()

        Returns
        -------
        bool

        """
        return _RWStl.rwstl_WriteBinary(*args)

    __repr__ = _dumps_object


    def __init__(self):
        _RWStl.rwstl_swiginit(self, _RWStl.new_rwstl())
    __swig_destroy__ = _RWStl.delete_rwstl

# Register rwstl in _RWStl:
_RWStl.rwstl_swigregister(rwstl)

def rwstl_ReadAscii(*args) -> "opencascade::handle< Poly_Triangulation >":
    r"""
    Read triangulation from an ascii stl file in case of error, returns null handle.

    Parameters
    ----------
    thePath: OSD_Path
    theProgress: Message_ProgressRange,optional
    	default value is Message_ProgressRange()

    Returns
    -------
    opencascade::handle<Poly_Triangulation>

    """
    return _RWStl.rwstl_ReadAscii(*args)

def rwstl_ReadBinary(*args) -> "opencascade::handle< Poly_Triangulation >":
    r"""
    Read triangulation from a binary stl file in case of error, returns null handle.

    Parameters
    ----------
    thePath: OSD_Path
    theProgress: Message_ProgressRange,optional
    	default value is Message_ProgressRange()

    Returns
    -------
    opencascade::handle<Poly_Triangulation>

    """
    return _RWStl.rwstl_ReadBinary(*args)

def rwstl_ReadFile(*args) -> "opencascade::handle< Poly_Triangulation >":
    r"""
    Read specified stl file and returns its content as triangulation. in case of error, returns null handle.

    Parameters
    ----------
    theFile: OSD_Path
    aProgInd: Message_ProgressRange,optional
    	default value is Message_ProgressRange()

    Returns
    -------
    opencascade::handle<Poly_Triangulation>
    Read specified stl file and returns its content as triangulation. in case of error, returns null handle.

    Parameters
    ----------
    theFile: char *
    aProgInd: Message_ProgressRange,optional
    	default value is Message_ProgressRange()

    Returns
    -------
    opencascade::handle<Poly_Triangulation>

    """
    return _RWStl.rwstl_ReadFile(*args)

def rwstl_WriteAscii(*args) -> "Standard_Boolean":
    r"""
    Write the meshing in a file following the ascii format of an stl file. returns false if the cannot be opened;.

    Parameters
    ----------
    theMesh: Poly_Triangulation
    thePath: OSD_Path
    theProgress: Message_ProgressRange,optional
    	default value is Message_ProgressRange()

    Returns
    -------
    bool

    """
    return _RWStl.rwstl_WriteAscii(*args)

def rwstl_WriteBinary(*args) -> "Standard_Boolean":
    r"""
    Write triangulation to binary stl file. binary format of an stl file. returns false if the cannot be opened;.

    Parameters
    ----------
    theMesh: Poly_Triangulation
    thePath: OSD_Path
    theProgress: Message_ProgressRange,optional
    	default value is Message_ProgressRange()

    Returns
    -------
    bool

    """
    return _RWStl.rwstl_WriteBinary(*args)


@classnotwrapped
class RWStl_Reader:
	pass






