@@ -437,23 +437,25 @@ static PyObject *Py_affine_transform(PyObject *self, PyObject *args, PyObject *k
437437 return NULL ;
438438 }
439439
440- try {
441- numpy::array_view<double , 2 > vertices (vertices_obj);
440+ PyArrayObject* vertices_arr = (PyArrayObject *)PyArray_ContiguousFromAny (vertices_obj, NPY_DOUBLE, 1 , 2 );
441+ if (vertices_arr == NULL ) {
442+ return NULL ;
443+ }
444+
445+ if (PyArray_NDIM (vertices_arr) == 2 ) {
446+ numpy::array_view<double , 2 > vertices (vertices_arr);
442447 npy_intp dims[] = { (npy_intp)vertices.size (), 2 };
443448 numpy::array_view<double , 2 > result (dims);
444449 CALL_CPP (" affine_transform" , (affine_transform_2d (vertices, trans, result)));
450+ Py_DECREF (vertices_arr);
451+ return result.pyobj ();
452+ } else { // PyArray_NDIM(vertices_arr) == 1
453+ numpy::array_view<double , 1 > vertices (vertices_arr);
454+ npy_intp dims[] = { (npy_intp)vertices.size () };
455+ numpy::array_view<double , 1 > result (dims);
456+ CALL_CPP (" affine_transform" , (affine_transform_1d (vertices, trans, result)));
457+ Py_DECREF (vertices_arr);
445458 return result.pyobj ();
446- } catch (py::exception &) {
447- PyErr_Clear ();
448- try {
449- numpy::array_view<double , 1 > vertices (vertices_obj);
450- npy_intp dims[] = { (npy_intp)vertices.size () };
451- numpy::array_view<double , 1 > result (dims);
452- CALL_CPP (" affine_transform" , (affine_transform_1d (vertices, trans, result)));
453- return result.pyobj ();
454- } catch (py::exception &) {
455- return NULL ;
456- }
457459 }
458460}
459461
0 commit comments