diff --git a/Inventor/fields/SoMFName.i b/Inventor/fields/SoMFName.i index 2d588ea9..ac1e749b 100644 --- a/Inventor/fields/SoMFName.i +++ b/Inventor/fields/SoMFName.i @@ -5,11 +5,23 @@ if (len > 0) { $1 = (char **)malloc(len * sizeof(char *)); for (int i = 0; i < len; i++) { - PyObject * item = PyObject_Str(PySequence_GetItem($input,i)); #ifdef PY_2 + PyObject * item = PyObject_Str(PySequence_GetItem($input,i)); $1[i] = PyString_AsString(item); #else - $1[i] = PyBytes_AsString(PyUnicode_AsEncodedString(item, "utf-8", "Error ~")); + PyObject * item = PySequence_GetItem($input,i); + if (PyBytes_Check(item)) + { + $1[i] = PyBytes_AsString(item); + } + else if (PyUnicode_Check(item)) + { + $1[i] = PyBytes_AsString(PyUnicode_AsEncodedString(item, "utf-8", "Error ~")); + } + else + { + $1[i] = PyBytes_AsString(PyUnicode_AsEncodedString(PyObject_Str(item), "utf-8", "Error ~")); + } #endif Py_DECREF(item); } diff --git a/Inventor/fields/SoMFPlane.i b/Inventor/fields/SoMFPlane.i index af801314..a0fb2be7 100644 --- a/Inventor/fields/SoMFPlane.i +++ b/Inventor/fields/SoMFPlane.i @@ -9,7 +9,7 @@ SbPlane * plane = NULL; PyObject * item = PyList_GetItem($input,i); SWIG_ConvertPtr(item, (void **) &plane, $1_descriptor, 1); - if (time != NULL) { $1[i] = *plane; } + $1[i] = *plane; } } else { $1 = NULL; } } else { diff --git a/Inventor/fields/SoMFString.i b/Inventor/fields/SoMFString.i index b658565f..421b65d3 100644 --- a/Inventor/fields/SoMFString.i +++ b/Inventor/fields/SoMFString.i @@ -1,25 +1,40 @@ -%typemap(in) const char * [] { - int len; +/* typemap for char* is used from SoMFName!!! */ +/* maybe it's not possible to define two typemaps for the same type? */ +/* +%typemap(in) const char * strings[] { + int len; if (PySequence_Check($input)) { len = PySequence_Length($input); if (len > 0) { $1 = (char **)malloc(len * sizeof(char *)); - for (int i = 0; i < len; i++ ) { - PyObject * item = PyObject_Str(PySequence_GetItem($input,i)); + for (int i = 0; i < len; i++) { #ifdef PY_2 + PyObject * item = PyObject_Str(PySequence_GetItem($input,i)); $1[i] = PyString_AsString(item); #else - $1[i] = PyBytes_AsString(item); + PyObject * item = PySequence_GetItem($input,i); + if (PyBytes_Check(item)) + { + $1[i] = PyBytes_AsString(item); + } + else if (PyUnicode_Check(item)) + { + $1[i] = PyBytes_AsString(PyUnicode_AsEncodedString(item, "utf-8", "Error ~")); + } + else + { + $1[i] = PyBytes_AsString(PyUnicode_AsEncodedString(PyObject_Str(item), "utf-8", "Error ~")); + } #endif Py_DECREF(item); } - } - else { $1 = NULL; } + } else { $1 = NULL; } } else { PyErr_SetString(PyExc_TypeError, "expected a sequence."); return NULL; } } +*/ /* free the list */ %typemap(freearg) const char * [] { diff --git a/Inventor/fields/SoMFTime.i b/Inventor/fields/SoMFTime.i index 4031be2f..d41da69f 100644 --- a/Inventor/fields/SoMFTime.i +++ b/Inventor/fields/SoMFTime.i @@ -9,7 +9,7 @@ SbTime * time = NULL; PyObject * item = PyList_GetItem($input,i); SWIG_ConvertPtr(item, (void **) &time, $1_descriptor, 1); - if (time != NULL) { $1[i] = *time; } + $1[i] = *time; } } else { $1 = NULL; } } else {