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

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

try:
    import builtins as __builtin__
except ImportError:
    import __builtin__

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

# Register SwigPyIterator in _BRepAlgo:
_BRepAlgo.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.TopoDS
import OCC.Core.Message
import OCC.Core.TopAbs
import OCC.Core.TopLoc
import OCC.Core.gp
import OCC.Core.GeomAbs
import OCC.Core.TopTools
import OCC.Core.TCollection
import OCC.Core.BRepBuilderAPI
import OCC.Core.Geom
import OCC.Core.TColgp
import OCC.Core.TColStd
import OCC.Core.BRepTools
import OCC.Core.Bnd
import OCC.Core.BVH
import OCC.Core.Geom2d
import OCC.Core.BRep
import OCC.Core.Poly
import OCC.Core.TShort
import OCC.Core.TopOpeBRepBuild
import OCC.Core.TopOpeBRepDS
import OCC.Core.TopOpeBRepTool
import OCC.Core.BRepClass3d
import OCC.Core.IntCurveSurface
import OCC.Core.math
import OCC.Core.Adaptor3d
import OCC.Core.Adaptor2d
import OCC.Core.Intf
import OCC.Core.IntSurf
import OCC.Core.IntCurvesFace
import OCC.Core.BRepAdaptor
import OCC.Core.GeomAdaptor
import OCC.Core.Geom2dAdaptor
import OCC.Core.TopExp
import OCC.Core.Extrema
BRepAlgo_OK = _BRepAlgo.BRepAlgo_OK
BRepAlgo_NOK = _BRepAlgo.BRepAlgo_NOK
Handle_BRepAlgo_AsDes_Create = _BRepAlgo.Handle_BRepAlgo_AsDes_Create
Handle_BRepAlgo_AsDes_DownCast = _BRepAlgo.Handle_BRepAlgo_AsDes_DownCast
Handle_BRepAlgo_AsDes_IsNull = _BRepAlgo.Handle_BRepAlgo_AsDes_IsNull
class brepalgo(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    ConcatenateWire = _swig_new_static_method(_BRepAlgo.brepalgo_ConcatenateWire)
    ConcatenateWireC0 = _swig_new_static_method(_BRepAlgo.brepalgo_ConcatenateWireC0)
    IsTopologicallyValid = _swig_new_static_method(_BRepAlgo.brepalgo_IsTopologicallyValid)
    IsValid = _swig_new_static_method(_BRepAlgo.brepalgo_IsValid)

    __repr__ = _dumps_object


    def __init__(self):
        _BRepAlgo.brepalgo_swiginit(self, _BRepAlgo.new_brepalgo())
    __swig_destroy__ = _BRepAlgo.delete_brepalgo

# Register brepalgo in _BRepAlgo:
_BRepAlgo.brepalgo_swigregister(brepalgo)
brepalgo_ConcatenateWire = _BRepAlgo.brepalgo_ConcatenateWire
brepalgo_ConcatenateWireC0 = _BRepAlgo.brepalgo_ConcatenateWireC0
brepalgo_IsTopologicallyValid = _BRepAlgo.brepalgo_IsTopologicallyValid
brepalgo_IsValid = _BRepAlgo.brepalgo_IsValid

class BRepAlgo_AsDes(OCC.Core.Standard.Standard_Transient):
    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(_BRepAlgo.BRepAlgo_AsDes_Add)
    Ascendant = _swig_new_instance_method(_BRepAlgo.BRepAlgo_AsDes_Ascendant)

    def __init__(self, *args):
        r"""
        * Creates an empty AsDes.
        	:rtype: None
        """
        _BRepAlgo.BRepAlgo_AsDes_swiginit(self, _BRepAlgo.new_BRepAlgo_AsDes(*args))
    ChangeDescendant = _swig_new_instance_method(_BRepAlgo.BRepAlgo_AsDes_ChangeDescendant)
    Clear = _swig_new_instance_method(_BRepAlgo.BRepAlgo_AsDes_Clear)
    Descendant = _swig_new_instance_method(_BRepAlgo.BRepAlgo_AsDes_Descendant)
    HasAscendant = _swig_new_instance_method(_BRepAlgo.BRepAlgo_AsDes_HasAscendant)
    HasCommonDescendant = _swig_new_instance_method(_BRepAlgo.BRepAlgo_AsDes_HasCommonDescendant)
    HasDescendant = _swig_new_instance_method(_BRepAlgo.BRepAlgo_AsDes_HasDescendant)
    Remove = _swig_new_instance_method(_BRepAlgo.BRepAlgo_AsDes_Remove)
    Replace = _swig_new_instance_method(_BRepAlgo.BRepAlgo_AsDes_Replace)


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


    __repr__ = _dumps_object

    __swig_destroy__ = _BRepAlgo.delete_BRepAlgo_AsDes

# Register BRepAlgo_AsDes in _BRepAlgo:
_BRepAlgo.BRepAlgo_AsDes_swigregister(BRepAlgo_AsDes)

class BRepAlgo_BooleanOperation(OCC.Core.BRepBuilderAPI.BRepBuilderAPI_MakeShape):
    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
    Builder = _swig_new_instance_method(_BRepAlgo.BRepAlgo_BooleanOperation_Builder)
    Perform = _swig_new_instance_method(_BRepAlgo.BRepAlgo_BooleanOperation_Perform)
    PerformDS = _swig_new_instance_method(_BRepAlgo.BRepAlgo_BooleanOperation_PerformDS)
    Shape1 = _swig_new_instance_method(_BRepAlgo.BRepAlgo_BooleanOperation_Shape1)
    Shape2 = _swig_new_instance_method(_BRepAlgo.BRepAlgo_BooleanOperation_Shape2)

    __repr__ = _dumps_object

    __swig_destroy__ = _BRepAlgo.delete_BRepAlgo_BooleanOperation

# Register BRepAlgo_BooleanOperation in _BRepAlgo:
_BRepAlgo.BRepAlgo_BooleanOperation_swigregister(BRepAlgo_BooleanOperation)

class BRepAlgo_FaceRestrictor(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(_BRepAlgo.BRepAlgo_FaceRestrictor_Add)

    def __init__(self, *args):
        r""":rtype: None"""
        _BRepAlgo.BRepAlgo_FaceRestrictor_swiginit(self, _BRepAlgo.new_BRepAlgo_FaceRestrictor(*args))
    Clear = _swig_new_instance_method(_BRepAlgo.BRepAlgo_FaceRestrictor_Clear)
    Current = _swig_new_instance_method(_BRepAlgo.BRepAlgo_FaceRestrictor_Current)
    Init = _swig_new_instance_method(_BRepAlgo.BRepAlgo_FaceRestrictor_Init)
    IsDone = _swig_new_instance_method(_BRepAlgo.BRepAlgo_FaceRestrictor_IsDone)
    More = _swig_new_instance_method(_BRepAlgo.BRepAlgo_FaceRestrictor_More)
    Next = _swig_new_instance_method(_BRepAlgo.BRepAlgo_FaceRestrictor_Next)
    Perform = _swig_new_instance_method(_BRepAlgo.BRepAlgo_FaceRestrictor_Perform)

    __repr__ = _dumps_object

    __swig_destroy__ = _BRepAlgo.delete_BRepAlgo_FaceRestrictor

# Register BRepAlgo_FaceRestrictor in _BRepAlgo:
_BRepAlgo.BRepAlgo_FaceRestrictor_swigregister(BRepAlgo_FaceRestrictor)

class BRepAlgo_Image(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(_BRepAlgo.BRepAlgo_Image_Add)

    def __init__(self, *args):
        r""":rtype: None"""
        _BRepAlgo.BRepAlgo_Image_swiginit(self, _BRepAlgo.new_BRepAlgo_Image(*args))
    Bind = _swig_new_instance_method(_BRepAlgo.BRepAlgo_Image_Bind)
    Clear = _swig_new_instance_method(_BRepAlgo.BRepAlgo_Image_Clear)
    Compact = _swig_new_instance_method(_BRepAlgo.BRepAlgo_Image_Compact)
    Filter = _swig_new_instance_method(_BRepAlgo.BRepAlgo_Image_Filter)
    HasImage = _swig_new_instance_method(_BRepAlgo.BRepAlgo_Image_HasImage)
    Image = _swig_new_instance_method(_BRepAlgo.BRepAlgo_Image_Image)
    ImageFrom = _swig_new_instance_method(_BRepAlgo.BRepAlgo_Image_ImageFrom)
    IsImage = _swig_new_instance_method(_BRepAlgo.BRepAlgo_Image_IsImage)
    LastImage = _swig_new_instance_method(_BRepAlgo.BRepAlgo_Image_LastImage)
    Remove = _swig_new_instance_method(_BRepAlgo.BRepAlgo_Image_Remove)
    Root = _swig_new_instance_method(_BRepAlgo.BRepAlgo_Image_Root)
    Roots = _swig_new_instance_method(_BRepAlgo.BRepAlgo_Image_Roots)
    SetRoot = _swig_new_instance_method(_BRepAlgo.BRepAlgo_Image_SetRoot)

    __repr__ = _dumps_object

    __swig_destroy__ = _BRepAlgo.delete_BRepAlgo_Image

# Register BRepAlgo_Image in _BRepAlgo:
_BRepAlgo.BRepAlgo_Image_swigregister(BRepAlgo_Image)

class BRepAlgo_Loop(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    AddConstEdge = _swig_new_instance_method(_BRepAlgo.BRepAlgo_Loop_AddConstEdge)
    AddConstEdges = _swig_new_instance_method(_BRepAlgo.BRepAlgo_Loop_AddConstEdges)
    AddEdge = _swig_new_instance_method(_BRepAlgo.BRepAlgo_Loop_AddEdge)

    def __init__(self, *args):
        r""":rtype: None"""
        _BRepAlgo.BRepAlgo_Loop_swiginit(self, _BRepAlgo.new_BRepAlgo_Loop(*args))
    CutEdge = _swig_new_instance_method(_BRepAlgo.BRepAlgo_Loop_CutEdge)
    GetVerticesForSubstitute = _swig_new_instance_method(_BRepAlgo.BRepAlgo_Loop_GetVerticesForSubstitute)
    Init = _swig_new_instance_method(_BRepAlgo.BRepAlgo_Loop_Init)
    NewEdges = _swig_new_instance_method(_BRepAlgo.BRepAlgo_Loop_NewEdges)
    NewFaces = _swig_new_instance_method(_BRepAlgo.BRepAlgo_Loop_NewFaces)
    NewWires = _swig_new_instance_method(_BRepAlgo.BRepAlgo_Loop_NewWires)
    Perform = _swig_new_instance_method(_BRepAlgo.BRepAlgo_Loop_Perform)
    VerticesForSubstitute = _swig_new_instance_method(_BRepAlgo.BRepAlgo_Loop_VerticesForSubstitute)
    WiresToFaces = _swig_new_instance_method(_BRepAlgo.BRepAlgo_Loop_WiresToFaces)

    __repr__ = _dumps_object

    __swig_destroy__ = _BRepAlgo.delete_BRepAlgo_Loop

# Register BRepAlgo_Loop in _BRepAlgo:
_BRepAlgo.BRepAlgo_Loop_swigregister(BRepAlgo_Loop)

class BRepAlgo_NormalProjection(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(_BRepAlgo.BRepAlgo_NormalProjection_Add)
    Ancestor = _swig_new_instance_method(_BRepAlgo.BRepAlgo_NormalProjection_Ancestor)

    def __init__(self, *args):
        r"""
        :rtype: None:param S:
        	:type S: TopoDS_Shape
        	:rtype: None
        """
        _BRepAlgo.BRepAlgo_NormalProjection_swiginit(self, _BRepAlgo.new_BRepAlgo_NormalProjection(*args))
    Build = _swig_new_instance_method(_BRepAlgo.BRepAlgo_NormalProjection_Build)
    BuildWire = _swig_new_instance_method(_BRepAlgo.BRepAlgo_NormalProjection_BuildWire)
    Compute3d = _swig_new_instance_method(_BRepAlgo.BRepAlgo_NormalProjection_Compute3d)
    Couple = _swig_new_instance_method(_BRepAlgo.BRepAlgo_NormalProjection_Couple)
    Generated = _swig_new_instance_method(_BRepAlgo.BRepAlgo_NormalProjection_Generated)
    Init = _swig_new_instance_method(_BRepAlgo.BRepAlgo_NormalProjection_Init)
    IsDone = _swig_new_instance_method(_BRepAlgo.BRepAlgo_NormalProjection_IsDone)
    IsElementary = _swig_new_instance_method(_BRepAlgo.BRepAlgo_NormalProjection_IsElementary)
    Projection = _swig_new_instance_method(_BRepAlgo.BRepAlgo_NormalProjection_Projection)
    SetDefaultParams = _swig_new_instance_method(_BRepAlgo.BRepAlgo_NormalProjection_SetDefaultParams)
    SetLimit = _swig_new_instance_method(_BRepAlgo.BRepAlgo_NormalProjection_SetLimit)
    SetMaxDistance = _swig_new_instance_method(_BRepAlgo.BRepAlgo_NormalProjection_SetMaxDistance)
    SetParams = _swig_new_instance_method(_BRepAlgo.BRepAlgo_NormalProjection_SetParams)

    __repr__ = _dumps_object

    __swig_destroy__ = _BRepAlgo.delete_BRepAlgo_NormalProjection

# Register BRepAlgo_NormalProjection in _BRepAlgo:
_BRepAlgo.BRepAlgo_NormalProjection_swigregister(BRepAlgo_NormalProjection)

class BRepAlgo_Tool(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    Deboucle3D = _swig_new_static_method(_BRepAlgo.BRepAlgo_Tool_Deboucle3D)

    __repr__ = _dumps_object


    def __init__(self):
        _BRepAlgo.BRepAlgo_Tool_swiginit(self, _BRepAlgo.new_BRepAlgo_Tool())
    __swig_destroy__ = _BRepAlgo.delete_BRepAlgo_Tool

# Register BRepAlgo_Tool in _BRepAlgo:
_BRepAlgo.BRepAlgo_Tool_swigregister(BRepAlgo_Tool)
BRepAlgo_Tool_Deboucle3D = _BRepAlgo.BRepAlgo_Tool_Deboucle3D

class BRepAlgo_Common(BRepAlgo_BooleanOperation):
    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"""
        * Constructs the common part of shapes S1 and S2.
        	:param S1:
        	:type S1: TopoDS_Shape
        	:param S2:
        	:type S2: TopoDS_Shape
        	:rtype: None
        """
        _BRepAlgo.BRepAlgo_Common_swiginit(self, _BRepAlgo.new_BRepAlgo_Common(*args))

    __repr__ = _dumps_object

    __swig_destroy__ = _BRepAlgo.delete_BRepAlgo_Common

# Register BRepAlgo_Common in _BRepAlgo:
_BRepAlgo.BRepAlgo_Common_swigregister(BRepAlgo_Common)

class BRepAlgo_Cut(BRepAlgo_BooleanOperation):
    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"""
        * Cuts the shape S2 from the shape S1.
        	:param S1:
        	:type S1: TopoDS_Shape
        	:param S2:
        	:type S2: TopoDS_Shape
        	:rtype: None
        """
        _BRepAlgo.BRepAlgo_Cut_swiginit(self, _BRepAlgo.new_BRepAlgo_Cut(*args))

    __repr__ = _dumps_object

    __swig_destroy__ = _BRepAlgo.delete_BRepAlgo_Cut

# Register BRepAlgo_Cut in _BRepAlgo:
_BRepAlgo.BRepAlgo_Cut_swigregister(BRepAlgo_Cut)

class BRepAlgo_Fuse(BRepAlgo_BooleanOperation):
    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"""
        * Fuse S1 and S2.
        	:param S1:
        	:type S1: TopoDS_Shape
        	:param S2:
        	:type S2: TopoDS_Shape
        	:rtype: None
        """
        _BRepAlgo.BRepAlgo_Fuse_swiginit(self, _BRepAlgo.new_BRepAlgo_Fuse(*args))

    __repr__ = _dumps_object

    __swig_destroy__ = _BRepAlgo.delete_BRepAlgo_Fuse

# Register BRepAlgo_Fuse in _BRepAlgo:
_BRepAlgo.BRepAlgo_Fuse_swigregister(BRepAlgo_Fuse)

class BRepAlgo_Section(BRepAlgo_BooleanOperation):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    Approximation = _swig_new_instance_method(_BRepAlgo.BRepAlgo_Section_Approximation)

    def __init__(self, *args):
        r"""
        :param Sh1:
        	:type Sh1: TopoDS_Shape
        	:param Sh2:
        	:type Sh2: TopoDS_Shape
        	:param PerformNow: default value is Standard_True
        	:type PerformNow: bool
        	:rtype: None:param Sh:
        	:type Sh: TopoDS_Shape
        	:param Pl:
        	:type Pl: gp_Pln
        	:param PerformNow: default value is Standard_True
        	:type PerformNow: bool
        	:rtype: None:param Sh:
        	:type Sh: TopoDS_Shape
        	:param Sf:
        	:type Sf: Geom_Surface
        	:param PerformNow: default value is Standard_True
        	:type PerformNow: bool
        	:rtype: None:param Sf:
        	:type Sf: Geom_Surface
        	:param Sh:
        	:type Sh: TopoDS_Shape
        	:param PerformNow: default value is Standard_True
        	:type PerformNow: bool
        	:rtype: None* This and the above algorithms construct a framework for computing the section lines of - the two shapes Sh1 and Sh2, or - the shape Sh and the plane Pl, or - the shape Sh and the surface Sf, or - the surface Sf and the shape Sh, or - the two surfaces Sf1 and Sf2, and builds the result if PerformNow equals true, its default value. If PerformNow equals false, the intersection will be computed later by the function Build. The constructed shape will be returned by the function Shape. This is a compound object composed of edges. These intersection edges may be built: - on new intersection lines, or - on coincident portions of edges in the two intersected shapes. These intersection edges are independent: they are not chained or grouped in wires. If no intersection edge exists, the result is an empty compound object. Note that other objects than TopoDS_Shape shapes involved in these syntaxes are converted into faces or shells before performing the computation of the intersection. A shape resulting from this conversion can be retrieved with the function Shape1 or Shape2. Parametric 2D curves on intersection edges No parametric 2D curve (pcurve) is defined for each elementary edge of the result. To attach such parametric curves to the constructed edges you may use a constructor with the PerformNow flag equal to false; then you use: - the function ComputePCurveOn1 to ask for the additional computation of a pcurve in the parametric space of the first shape, - the function ComputePCurveOn2 to ask for the additional computation of a pcurve in the parametric space of the second shape, - in the end, the function Build to construct the result. Note that as a result, pcurves will only be added on edges built on new intersection lines. Approximation of intersection edges The underlying 3D geometry attached to each elementary edge of the result is: - analytic where possible, provided the corresponding geometry corresponds to a type of analytic curve defined in the Geom package; for example, the intersection of a cylindrical shape with a plane gives an ellipse or a circle; - or elsewhere, given as a succession of points grouped together in a BSpline curve of degree 1. If you prefer to have an attached 3D geometry which is a BSpline approximation of the computed set of points on computed elementary intersection edges whose underlying geometry is not analytic, you may use a constructor with the PerformNow flag equal to false. Then you use: - the function Approximation to ask for this computation option, and - the function Build to construct the result. Note that as a result, approximations will only be computed on edges built on new intersection lines. Example You may also combine these computation options. In the following example: - each elementary edge of the computed intersection, built on a new intersection line, which does not correspond to an analytic Geom curve, will be approximated by a BSpline curve whose degree is not greater than 8. - each elementary edge built on a new intersection line, will have: - a pcurve in the parametric space of the shape S1, - no pcurve in the parametric space of the shape S2. // TopoDS_Shape S1 = ... , S2 = ... ; Standard_Boolean PerformNow = Standard_False; BRepAlgo_Section S ( S1, S2, PerformNow ); S.ComputePCurveOn1 (Standard_True); S.Approximation (Standard_True); S.Build(); TopoDS_Shape R = S.Shape();
        	:param Sf1:
        	:type Sf1: Geom_Surface
        	:param Sf2:
        	:type Sf2: Geom_Surface
        	:param PerformNow: default value is Standard_True
        	:type PerformNow: bool
        	:rtype: None
        """
        _BRepAlgo.BRepAlgo_Section_swiginit(self, _BRepAlgo.new_BRepAlgo_Section(*args))
    ComputePCurveOn1 = _swig_new_instance_method(_BRepAlgo.BRepAlgo_Section_ComputePCurveOn1)
    ComputePCurveOn2 = _swig_new_instance_method(_BRepAlgo.BRepAlgo_Section_ComputePCurveOn2)
    HasAncestorFaceOn1 = _swig_new_instance_method(_BRepAlgo.BRepAlgo_Section_HasAncestorFaceOn1)
    HasAncestorFaceOn2 = _swig_new_instance_method(_BRepAlgo.BRepAlgo_Section_HasAncestorFaceOn2)
    Init1 = _swig_new_instance_method(_BRepAlgo.BRepAlgo_Section_Init1)
    Init2 = _swig_new_instance_method(_BRepAlgo.BRepAlgo_Section_Init2)

    __repr__ = _dumps_object

    __swig_destroy__ = _BRepAlgo.delete_BRepAlgo_Section

# Register BRepAlgo_Section in _BRepAlgo:
_BRepAlgo.BRepAlgo_Section_swigregister(BRepAlgo_Section)



