| 2056 | } |
| 2057 | |
| 2058 | Base::Vector3d FunctionExpression::evaluateSecondVectorArgument(const Expression *expression, const std::vector<Expression*> &arguments) |
| 2059 | { |
| 2060 | Py::Tuple vectorValues; |
| 2061 | Py::Object secondParameter = arguments[1]->getPyValue(); |
| 2062 | |
| 2063 | if (arguments.size() == 2) { |
| 2064 | if (!secondParameter.isSequence()) |
| 2065 | _EXPR_THROW("Second parameter is not a sequence type: '" << secondParameter.as_string() << "'.", expression); |
| 2066 | if (PySequence_Size(secondParameter.ptr()) != 3) |
| 2067 | _EXPR_THROW("Second parameter provided has " << PySequence_Size(secondParameter.ptr()) << " elements instead of 3.", expression); |
| 2068 | |
| 2069 | vectorValues = Py::Tuple(Py::Sequence(secondParameter)); |
| 2070 | } else { |
| 2071 | vectorValues = Py::Tuple(3); |
| 2072 | vectorValues.setItem(0, secondParameter); |
| 2073 | vectorValues.setItem(1, arguments[2]->getPyValue()); |
| 2074 | vectorValues.setItem(2, arguments[3]->getPyValue()); |
| 2075 | } |
| 2076 | |
| 2077 | Vector3d vector; |
| 2078 | if (!PyArg_ParseTuple(vectorValues.ptr(), "ddd", &vector.x, &vector.y, &vector.z)) { |
| 2079 | PyErr_Clear(); |
| 2080 | _EXPR_THROW("Error parsing scale values.", expression); |
| 2081 | } |
| 2082 | |
| 2083 | return vector; |
| 2084 | } |
| 2085 | |
| 2086 | void FunctionExpression::initialiseObject(const Py::Object *object, const std::vector<Expression*> &arguments, const unsigned long offset) |
| 2087 | { |