X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FGeomAlgoAPI%2FGeomAlgoAPI.i;h=4eb97f97904a310c1155ee6d24d81666f14a58e0;hb=06e7f5859095193fc7f498bd89a7d28009794f53;hp=153bf5b89c040f6c15cde0a3a96062a9916de508;hpb=4cb94080355bcda617d6560b14bb39619ba90a4a;p=modules%2Fshaper.git diff --git a/src/GeomAlgoAPI/GeomAlgoAPI.i b/src/GeomAlgoAPI/GeomAlgoAPI.i index 153bf5b89..4eb97f979 100644 --- a/src/GeomAlgoAPI/GeomAlgoAPI.i +++ b/src/GeomAlgoAPI/GeomAlgoAPI.i @@ -1,4 +1,4 @@ -// Copyright (C) 2014-2022 CEA/DEN, EDF R&D +// Copyright (C) 2014-2023 CEA, EDF // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -21,6 +21,16 @@ %module GeomAlgoAPI %{ #include "GeomAlgoAPI_swig.h" + +// fix for SWIG v4.1.1 +#if PY_VERSION_HEX >= 0x03020000 +# define SWIGPY_SLICEOBJECT PyObject +#else +# define SWIGPY_SLICEOBJECT PySliceObject +#endif + +// fix for SWIG v2.0.4 +#define SWIGPY_SLICE_ARG(obj) ((SWIGPY_SLICEOBJECT*)(obj)) %} // import other modules @@ -34,6 +44,7 @@ %include "std_string.i" %include "std_list.i" %include "std_shared_ptr.i" +%include "std_vector.i" %exceptionclass GeomAlgoAPI_Exception; @@ -48,6 +59,107 @@ } } +%typemap(out) std::list< std::shared_ptr< GeomAPI_Shape > >::value_type & { + $result = SWIG_NewPointerObj(SWIG_as_voidptr(new std::shared_ptr(*$1)), $descriptor(std::shared_ptr *), SWIG_POINTER_OWN | 0 ); +} + +%template(ShapeList) std::list >; +%template(ValuesList) std::list; +%template(VectorOfDouble) std::vector; + +%typemap(in) std::vector& (std::vector temp) { + if (PyList_Check($input)) { + for (Py_ssize_t i = 0; i < PyList_Size($input); ++i) { + PyObject * item = PySequence_GetItem($input, i); + if (PyNumber_Check(item)) { + temp.push_back(PyFloat_AsDouble(item)); + } else { + PyErr_SetString(PyExc_TypeError, "argument must be double value."); + return NULL; + } + Py_DECREF(item); + } + $1 = &temp; + } else { + PyErr_SetString(PyExc_ValueError, "argument must be a list of double values."); + return NULL; + } +} + +%typemap(argout) std::vector& { + PyObject* outList = PyList_New(0); + int error; + std::vector::iterator it; + for ( it=$1->begin() ; it != $1->end(); it++ ) + { + error = PyList_Append(outList, PyFloat_FromDouble(*it)); + if (error) + SWIG_fail; + } + if ((!$result) || ($result == Py_None)) { + $result = outList; + } else { + PyObject *aObj1, *aObj2; + if (!PyTuple_Check($result)) { + PyObject* aObj = $result; + $result = PyTuple_New(1); + PyTuple_SetItem($result,0,aObj); + } + aObj2 = PyTuple_New(1); + PyTuple_SetItem(aObj2,0,outList); + aObj1 = $result; + $result = PySequence_Concat(aObj1,aObj2); + Py_DECREF(aObj1); + Py_DECREF(aObj2); + } +} + +%typecheck(SWIG_TYPECHECK_POINTER) std::vector, const std::vector& { + if (PyTuple_Check($input)) { + for (Py_ssize_t i = 0; i < PyTuple_Size($input); ++i) { + PyObject * item = PySequence_GetItem($input, i); + if (PyNumber_Check(item)) { + $1 = 1; + } else { + $1 = 0; + break; + } + Py_DECREF(item); + } + } else { + $1 = 0; + } +} + +%typemap(in) double& (double temp) { + if (PyFloat_Check($input)) { + temp = PyFloat_AsDouble($input); + $1 = &temp; + } else { + PyErr_SetString(PyExc_ValueError, "argument must be a double value."); + return NULL; + } +} + +%typemap(argout) double& { + if ((!$result) || ($result == Py_None)) { + $result = PyFloat_FromDouble(*$1); + } else { + PyObject *aObj1, *aObj2; + if (!PyTuple_Check($result)) { + PyObject* aObj = $result; + $result = PyTuple_New(1); + PyTuple_SetItem($result,0,aObj); + } + aObj2 = PyTuple_New(1); + PyTuple_SetItem(aObj2,0,PyFloat_FromDouble(*$1)); + aObj1 = $result; + $result = PySequence_Concat(aObj1,aObj2); + Py_DECREF(aObj1); + Py_DECREF(aObj2); + } +} + // shared pointers %shared_ptr(GeomAlgoAPI_Boolean) %shared_ptr(GeomAlgoAPI_Intersection) @@ -114,9 +226,4 @@ %include "GeomAlgoAPI_Box.h" %include "GeomAlgoAPI_MapShapesAndAncestors.h" %include "GeomAlgoAPI_ShapeInfo.h" - -%typemap(out) std::list< std::shared_ptr< GeomAPI_Shape > >::value_type & { - $result = SWIG_NewPointerObj(SWIG_as_voidptr(new std::shared_ptr(*$1)), $descriptor(std::shared_ptr *), SWIG_POINTER_OWN | 0 ); -} -%template(ShapeList) std::list >; -%template(ValuesList) std::list; +%include "GeomAlgoAPI_CanonicalRecognition.h"