Py::Object project(const Py::Tuple& args) { PyObject *pcObjShape; PyObject *pcObjDir=0; if (!PyArg_ParseTuple(args.ptr(), "O!|O!", &(Part::TopoShapePy::Type), &pcObjShape, &(Base::VectorPy::Type), &pcObjDir)) throw Py::Exception(); Part::TopoShapePy* pShape = static_cast<Part::TopoShapePy*>(pcObjShape); Base::Vector3d Vector(0,0,1); if (pcObjDir) Vector = *static_cast<Base::VectorPy*>(pcObjDir)->getVectorPtr(); ProjectionAlgos Alg(pShape->getTopoShapePtr()->getShape(),Vector); Py::List list; list.append(Py::Object(new Part::TopoShapePy(new Part::TopoShape(Alg.V)) , true)); list.append(Py::Object(new Part::TopoShapePy(new Part::TopoShape(Alg.V1)), true)); list.append(Py::Object(new Part::TopoShapePy(new Part::TopoShape(Alg.H)) , true)); list.append(Py::Object(new Part::TopoShapePy(new Part::TopoShape(Alg.H1)), true)); return list; }
static PyObject * loftOnCurve(PyObject *self, PyObject *args) { Part::TopoShapePy *pcObject; PyObject *pcTopoObj,*pcListObj; float x=0.0f,y=0.0f,z=1.0f,size = 0.1f; if (!PyArg_ParseTuple(args, "O!O(fff)f", &(Part::TopoShapePy::Type), &pcTopoObj,&pcListObj,&x,&y,&z,&size)) // convert args: Python->C // if (!PyArg_ParseTuple(args, "O!O!", &(App::TopoShapePy::Type), &pcTopoObj,&PyList_Type,&pcListObj,x,y,z,size)) // convert args: Python->C return NULL; // NULL triggers exception pcObject = (Part::TopoShapePy*)pcTopoObj; MeshCore::MeshKernel M; std::vector<Base::Vector3f> poly; if (!PyList_Check(pcListObj)) Py_Error(Base::BaseExceptionFreeCADError,"List of Tuble of three or two floats needed as second parameter!"); int nSize = PyList_Size(pcListObj); for (int i=0; i<nSize;++i) { PyObject* item = PyList_GetItem(pcListObj, i); if (!PyTuple_Check(item)) Py_Error(Base::BaseExceptionFreeCADError,"List of Tuble of three or two floats needed as second parameter!"); int nTSize = PyTuple_Size(item); if(nTSize != 2 && nTSize != 3) Py_Error(Base::BaseExceptionFreeCADError,"List of Tuble of three or two floats needed as second parameter!"); Base::Vector3f vec(0,0,0); for(int l = 0; l < nTSize;l++) { PyObject* item2 = PyTuple_GetItem(item, l); if (!PyFloat_Check(item2)) Py_Error(Base::BaseExceptionFreeCADError,"List of Tuble of three or two floats needed as second parameter!"); vec[l] = (float)PyFloat_AS_DOUBLE(item2); } poly.push_back(vec); } PY_TRY { TopoDS_Shape aShape = pcObject->getTopoShapePtr()->_Shape; // use the MeshAlgos MeshPart::MeshAlgos::LoftOnCurve(M,aShape,poly,Base::Vector3f(x,y,z),size); } PY_CATCH; return new Mesh::MeshPy(new Mesh::MeshObject(M)); }
Py::Object loftOnCurve(const Py::Tuple& args) { Part::TopoShapePy *pcObject; PyObject *pcTopoObj,*pcListObj; float x=0.0f,y=0.0f,z=1.0f,size = 0.1f; if (!PyArg_ParseTuple(args.ptr(), "O!O(fff)f", &(Part::TopoShapePy::Type), &pcTopoObj,&pcListObj,&x,&y,&z,&size)) // if (!PyArg_ParseTuple(args, "O!O!", &(App::TopoShapePy::Type), &pcTopoObj,&PyList_Type,&pcListObj,x,y,z,size)) throw Py::Exception(); pcObject = static_cast<Part::TopoShapePy*>(pcTopoObj); MeshCore::MeshKernel M; std::vector<Base::Vector3f> poly; if (!PyList_Check(pcListObj)) throw Py::Exception(Base::BaseExceptionFreeCADError,"List of Tuble of three or two floats needed as second parameter!"); int nSize = PyList_Size(pcListObj); for (int i=0; i<nSize;++i) { PyObject* item = PyList_GetItem(pcListObj, i); if (!PyTuple_Check(item)) throw Py::Exception(Base::BaseExceptionFreeCADError,"List of Tuble of three or two floats needed as second parameter!"); int nTSize = PyTuple_Size(item); if (nTSize != 2 && nTSize != 3) throw Py::Exception(Base::BaseExceptionFreeCADError,"List of Tuble of three or two floats needed as second parameter!"); Base::Vector3f vec(0,0,0); for(int l = 0; l < nTSize;l++) { PyObject* item2 = PyTuple_GetItem(item, l); if (!PyFloat_Check(item2)) throw Py::Exception(Base::BaseExceptionFreeCADError,"List of Tuble of three or two floats needed as second parameter!"); vec[l] = (float)PyFloat_AS_DOUBLE(item2); } poly.push_back(vec); } TopoDS_Shape aShape = pcObject->getTopoShapePtr()->getShape(); // use the MeshAlgos MeshPart::MeshAlgos::LoftOnCurve(M,aShape,poly,Base::Vector3f(x,y,z),size); return Py::asObject(new Mesh::MeshPy(new Mesh::MeshObject(M))); }