MCPcopy Create free account
hub / github.com/FreeCAD/FreeCAD / evaluateSecondVectorArgument

Method evaluateSecondVectorArgument

src/App/Expression.cpp:2058–2084  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2056}
2057
2058Base::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
2086void FunctionExpression::initialiseObject(const Py::Object *object, const std::vector<Expression*> &arguments, const unsigned long offset)
2087{

Callers

nothing calls this directly

Calls 6

SequenceClass · 0.85
TupleClass · 0.50
getPyValueMethod · 0.45
sizeMethod · 0.45
as_stringMethod · 0.45
ptrMethod · 0.45

Tested by

no test coverage detected