Py::Object projectEx(const Py::Tuple& args) { PyObject *pcObjShape; PyObject *pcObjDir=0; if (!PyArg_ParseTuple(args.ptr(), "O!|O!", &(TopoShapePy::Type), &pcObjShape, &(Base::VectorPy::Type), &pcObjDir)) throw Py::Exception(); TopoShapePy* pShape = static_cast<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 TopoShapePy(new TopoShape(Alg.V)) , true)); list.append(Py::Object(new TopoShapePy(new TopoShape(Alg.V1)), true)); list.append(Py::Object(new TopoShapePy(new TopoShape(Alg.VN)), true)); list.append(Py::Object(new TopoShapePy(new TopoShape(Alg.VO)), true)); list.append(Py::Object(new TopoShapePy(new TopoShape(Alg.VI)), true)); list.append(Py::Object(new TopoShapePy(new TopoShape(Alg.H)) , true)); list.append(Py::Object(new TopoShapePy(new TopoShape(Alg.H1)), true)); list.append(Py::Object(new TopoShapePy(new TopoShape(Alg.HN)), true)); list.append(Py::Object(new TopoShapePy(new TopoShape(Alg.HO)), true)); list.append(Py::Object(new TopoShapePy(new TopoShape(Alg.HI)), true)); return list; }
PyObject* FemMeshPy::getFacesByFace(PyObject *args) { PyObject *pW; if (!PyArg_ParseTuple(args, "O!", &(Part::TopoShapeFacePy::Type), &pW)) return 0; try { const TopoDS_Shape& sh = static_cast<Part::TopoShapeFacePy*>(pW)->getTopoShapePtr()->getShape(); if (sh.IsNull()) { PyErr_SetString(Base::BaseExceptionFreeCADError, "Face is empty"); return 0; } const TopoDS_Face& fc = TopoDS::Face(sh); Py::List ret; std::list<int> resultSet = getFemMeshPtr()->getFacesByFace(fc); for (std::list<int>::const_iterator it = resultSet.begin();it!=resultSet.end();++it) { #if PY_MAJOR_VERSION >= 3 ret.append(Py::Long(*it)); #else ret.append(Py::Int(*it)); #endif } return Py::new_reference_to(ret); } catch (Standard_Failure& e) { PyErr_SetString(Base::BaseExceptionFreeCADError, e.GetMessageString()); return 0; } }
PyObject* BezierSurfacePy::getPoles(PyObject *args) { if (!PyArg_ParseTuple(args, "")) return 0; try { Handle_Geom_BezierSurface surf = Handle_Geom_BezierSurface::DownCast (getGeometryPtr()->handle()); TColgp_Array2OfPnt p(1,surf->NbUPoles(),1,surf->NbVPoles()); surf->Poles(p); Py::List poles; for (Standard_Integer i=p.LowerRow(); i<=p.UpperRow(); i++) { Py::List row; for (Standard_Integer j=p.LowerCol(); j<=p.UpperCol(); j++) { const gp_Pnt& pole = p(i,j); row.append(Py::Object(new Base::VectorPy( Base::Vector3d(pole.X(),pole.Y(),pole.Z())))); } poles.append(row); } return Py::new_reference_to(poles); } catch (Standard_Failure) { Handle_Standard_Failure e = Standard_Failure::Caught(); PyErr_SetString(PartExceptionOCCError, e->GetMessageString()); return 0; } }
PyObject* PropertyContainerPy::getTypeOfProperty(PyObject *args) { Py::List ret; char *pstr; if (!PyArg_ParseTuple(args, "s", &pstr)) // convert args: Python->C return NULL; // NULL triggers exception Property* prop = getPropertyContainerPtr()->getPropertyByName(pstr); if (!prop) { PyErr_Format(PyExc_AttributeError, "Property container has no property '%s'", pstr); return 0; } short Type = prop->getType(); if (Type & Prop_Hidden) ret.append(Py::String("Hidden")); if (Type & Prop_ReadOnly) ret.append(Py::String("ReadOnly")); if (Type & Prop_Output) ret.append(Py::String("Output")); if (Type & Prop_Transient) ret.append(Py::String("Transient")); return Py::new_reference_to(ret); }
PyObject* BezierSurfacePy::getWeights(PyObject *args) { if (!PyArg_ParseTuple(args, "")) return 0; try { Handle_Geom_BezierSurface surf = Handle_Geom_BezierSurface::DownCast (getGeometryPtr()->handle()); TColStd_Array2OfReal w(1,surf->NbUPoles(),1,surf->NbVPoles()); surf->Weights(w); Py::List weights; for (Standard_Integer i=w.LowerRow(); i<=w.UpperRow(); i++) { Py::List row; for (Standard_Integer j=w.LowerCol(); j<=w.UpperCol(); j++) { row.append(Py::Float(w(i,j))); } weights.append(row); } return Py::new_reference_to(weights); } catch (Standard_Failure) { Handle_Standard_Failure e = Standard_Failure::Caught(); PyErr_SetString(PartExceptionOCCError, e->GetMessageString()); return 0; } }
static PyObject * projectEx(PyObject *self, PyObject *args) { PyObject *pcObjShape; PyObject *pcObjDir=0; if (!PyArg_ParseTuple(args, "O!|O!", &(TopoShapePy::Type), &pcObjShape,&(Base::VectorPy::Type), &pcObjDir)) // convert args: Python->C return NULL; // NULL triggers exception PY_TRY { TopoShapePy* pShape = static_cast<TopoShapePy*>(pcObjShape); Base::Vector3d Vector(0,0,1); if (pcObjDir) Vector = *static_cast<Base::VectorPy*>(pcObjDir)->getVectorPtr(); ProjectionAlgos Alg(pShape->getTopoShapePtr()->_Shape,Base::Vector3f((float)Vector.x,(float)Vector.y,(float)Vector.z)); Py::List list; list.append(Py::Object(new TopoShapePy(new TopoShape(Alg.V)) , true)); list.append(Py::Object(new TopoShapePy(new TopoShape(Alg.V1)), true)); list.append(Py::Object(new TopoShapePy(new TopoShape(Alg.VN)), true)); list.append(Py::Object(new TopoShapePy(new TopoShape(Alg.VO)), true)); list.append(Py::Object(new TopoShapePy(new TopoShape(Alg.VI)), true)); list.append(Py::Object(new TopoShapePy(new TopoShape(Alg.H)) , true)); list.append(Py::Object(new TopoShapePy(new TopoShape(Alg.H1)), true)); list.append(Py::Object(new TopoShapePy(new TopoShape(Alg.HN)), true)); list.append(Py::Object(new TopoShapePy(new TopoShape(Alg.HO)), true)); list.append(Py::Object(new TopoShapePy(new TopoShape(Alg.HI)), true)); return Py::new_reference_to(list); } PY_CATCH; }
PyObject* TopoShapeEdgePy::parameters(PyObject *args) { PyObject* pyface = 0; if (!PyArg_ParseTuple(args, "|O!", &(TopoShapeFacePy::Type), &pyface)) return 0; const TopoDS_Edge& e = TopoDS::Edge(getTopoShapePtr()->getShape()); TopLoc_Location aLoc; Handle(Poly_Polygon3D) aPoly = BRep_Tool::Polygon3D(e, aLoc); if (!aPoly.IsNull()) { Py::List list; if (!aPoly->HasParameters()) { return Py::new_reference_to(list); } const TColStd_Array1OfReal& aNodes = aPoly->Parameters(); for (int i=aNodes.Lower(); i<=aNodes.Upper(); i++) { list.append(Py::Float(aNodes(i))); } return Py::new_reference_to(list); } else if (pyface) { // build up map edge->face const TopoDS_Shape& face = static_cast<TopoShapeFacePy*>(pyface)->getTopoShapePtr()->getShape(); TopTools_IndexedDataMapOfShapeListOfShape edge2Face; TopExp::MapShapesAndAncestors(TopoDS::Face(face), TopAbs_EDGE, TopAbs_FACE, edge2Face); if (edge2Face.Contains(e)) { Handle(Poly_Triangulation) aPolyTria = BRep_Tool::Triangulation(TopoDS::Face(face),aLoc); if (!aPolyTria.IsNull()) { Handle(Poly_PolygonOnTriangulation) aPoly = BRep_Tool::PolygonOnTriangulation(e, aPolyTria, aLoc); if (!aPoly.IsNull()) { if (!aPoly->HasParameters()) { Py::List list; return Py::new_reference_to(list); } Handle(TColStd_HArray1OfReal) aNodes = aPoly->Parameters(); if (!aNodes.IsNull()) { Py::List list; for (int i=aNodes->Lower(); i<=aNodes->Upper(); i++) { list.append(Py::Float(aNodes->Value(i))); } return Py::new_reference_to(list); } } } } else { PyErr_SetString(PyExc_ValueError, "Edge is not part of the face"); return 0; } } PyErr_SetString(PyExc_RuntimeError, "Edge has no polygon"); return 0; }
Py::Object CyPy_Element::listAsPyObject(const ListType& list, bool useNativePythonType) { Py::List pyList; for (auto& entry : list) { if (useNativePythonType) { pyList.append(CyPy_Element::asPyObject(entry, useNativePythonType)); } else { pyList.append(CyPy_Element::wrap(entry)); } } return pyList; }
PyObject* GeometrySurfacePy::intersectSS(PyObject *args) { Handle_Geom_Surface surf1 = Handle_Geom_Surface::DownCast(getGeometryPtr()->handle()); try { if (!surf1.IsNull()) { PyObject *p; double prec = Precision::Confusion(); if (!PyArg_ParseTuple(args, "O!|d", &(Part::GeometrySurfacePy::Type), &p, &prec)) return 0; Handle_Geom_Surface surf2 = Handle_Geom_Surface::DownCast(static_cast<GeometryPy*>(p)->getGeometryPtr()->handle()); GeomAPI_IntSS intersector(surf1, surf2, prec); if (!intersector.IsDone()) { PyErr_SetString(PyExc_Exception, "Intersection of surfaces failed"); return 0; } Py::List result; for (int i = 1; i <= intersector.NbLines(); i++) { Handle_Geom_Curve line = intersector.Line(i); result.append(makeGeometryCurvePy(line)); } return Py::new_reference_to(result); } } catch (Standard_Failure) { Handle_Standard_Failure e = Standard_Failure::Caught(); PyErr_SetString(PyExc_Exception, e->GetMessageString()); return 0; } PyErr_SetString(PyExc_Exception, "intersectSS(): Geometry is not a surface"); return 0; }
PyObject *SelectionSingleton::sGetSelection(PyObject * /*self*/, PyObject *args) { char *documentName=0; if (!PyArg_ParseTuple(args, "|s", &documentName)) return NULL; std::vector<SelectionSingleton::SelObj> sel; sel = Selection().getSelection(documentName); try { std::set<App::DocumentObject*> noduplicates; std::vector<App::DocumentObject*> selectedObjects; // keep the order of selection Py::List list; for (std::vector<SelectionSingleton::SelObj>::iterator it = sel.begin(); it != sel.end(); ++it) { if (noduplicates.insert(it->pObject).second) { selectedObjects.push_back(it->pObject); } } for (std::vector<App::DocumentObject*>::iterator it = selectedObjects.begin(); it != selectedObjects.end(); ++it) { list.append(Py::asObject((*it)->getPyObject())); } return Py::new_reference_to(list); } catch (Py::Exception&) { return 0; } }
Py::Object wireFromSegment(const Py::Tuple& args) { PyObject *o, *m; if (!PyArg_ParseTuple(args.ptr(), "O!O!", &(Mesh::MeshPy::Type), &m,&PyList_Type,&o)) throw Py::Exception(); Py::List list(o); Mesh::MeshObject* mesh = static_cast<Mesh::MeshPy*>(m)->getMeshObjectPtr(); std::vector<unsigned long> segm; segm.reserve(list.size()); for (unsigned int i=0; i<list.size(); i++) { segm.push_back((int)Py::Int(list[i])); } std::list<std::vector<Base::Vector3f> > bounds; MeshCore::MeshAlgorithm algo(mesh->getKernel()); algo.GetFacetBorders(segm, bounds); Py::List wires; std::list<std::vector<Base::Vector3f> >::iterator bt; for (bt = bounds.begin(); bt != bounds.end(); ++bt) { BRepBuilderAPI_MakePolygon mkPoly; for (std::vector<Base::Vector3f>::reverse_iterator it = bt->rbegin(); it != bt->rend(); ++it) { mkPoly.Add(gp_Pnt(it->x,it->y,it->z)); } if (mkPoly.IsDone()) { PyObject* wire = new Part::TopoShapeWirePy(new Part::TopoShape(mkPoly.Wire())); wires.append(Py::Object(wire, true)); } } return wires; }
PyObject* FemMeshPy::getccxVolumesByFace(PyObject *args) { PyObject *pW; if (!PyArg_ParseTuple(args, "O!", &(Part::TopoShapeFacePy::Type), &pW)) return 0; try { const TopoDS_Shape& sh = static_cast<Part::TopoShapeFacePy*>(pW)->getTopoShapePtr()->getShape(); if (sh.IsNull()) { PyErr_SetString(Base::BaseExceptionFreeCADError, "Face is empty"); return 0; } const TopoDS_Face& fc = TopoDS::Face(sh); Py::List ret; std::map<int, int> resultSet = getFemMeshPtr()->getccxVolumesByFace(fc); for (std::map<int, int>::const_iterator it = resultSet.begin();it!=resultSet.end();++it) { Py::Tuple vol_face(2); vol_face.setItem(0, Py::Long(it->first)); vol_face.setItem(1, Py::Long(it->second)); ret.append(vol_face); } return Py::new_reference_to(ret); } catch (Standard_Failure& e) { PyErr_SetString(Base::BaseExceptionFreeCADError, e.GetMessageString()); return 0; } }
PyObject* FemMeshPy::getNodesByVertex(PyObject *args) { PyObject *pW; if (!PyArg_ParseTuple(args, "O!", &(Part::TopoShapeVertexPy::Type), &pW)) return 0; try { const TopoDS_Shape& sh = static_cast<Part::TopoShapeVertexPy*>(pW)->getTopoShapePtr()->getShape(); const TopoDS_Vertex& fc = TopoDS::Vertex(sh); if (sh.IsNull()) { PyErr_SetString(Base::BaseExceptionFreeCADError, "Vertex is empty"); return 0; } Py::List ret; std::set<int> resultSet = getFemMeshPtr()->getNodesByVertex(fc); for (std::set<int>::const_iterator it = resultSet.begin();it!=resultSet.end();++it) ret.append(Py::Long(*it)); return Py::new_reference_to(ret); } catch (Standard_Failure& e) { PyErr_SetString(Base::BaseExceptionFreeCADError, e.GetMessageString()); return 0; } }
Py::List PathPy::getCommands(void) const { Py::List list; for(unsigned int i = 0; i < getToolpathPtr()->getSize(); i++) list.append(Py::Object(new Path::CommandPy(new Path::Command(getToolpathPtr()->getCommand(i))))); return list; }
PyObject* BSplineCurve2dPy::getPolesAndWeights(PyObject * args) { if (!PyArg_ParseTuple(args, "")) return 0; try { Handle_Geom2d_BSplineCurve curve = Handle_Geom2d_BSplineCurve::DownCast (getGeometry2dPtr()->handle()); TColgp_Array1OfPnt2d p(1,curve->NbPoles()); curve->Poles(p); TColStd_Array1OfReal w(1,curve->NbPoles()); curve->Weights(w); Py::List poles; for (Standard_Integer i=p.Lower(); i<=p.Upper(); i++) { gp_Pnt2d pnt = p(i); double weight = w(i); Py::Tuple t(3); t.setItem(0, Py::Float(pnt.X())); t.setItem(1, Py::Float(pnt.Y())); t.setItem(2, Py::Float(weight)); poles.append(t); } return Py::new_reference_to(poles); } catch (Standard_Failure) { Handle_Standard_Failure e = Standard_Failure::Caught(); PyErr_SetString(PartExceptionOCCError, e->GetMessageString()); return 0; } }
PyObject* GeometryCurvePy::intersect2d(PyObject *args) { PyObject *c,*p; if (!PyArg_ParseTuple(args, "O!O!", &(Part::GeometryCurvePy::Type), &c, &(Part::PlanePy::Type), &p)) return 0; try { Handle_Geom_Curve self = Handle_Geom_Curve::DownCast(getGeometryPtr()->handle()); Handle_Geom_Curve curv = Handle_Geom_Curve::DownCast(static_cast<GeometryPy*>(c)-> getGeometryPtr()->handle()); Handle_Geom_Plane plane = Handle_Geom_Plane::DownCast(static_cast<GeometryPy*>(p)-> getGeometryPtr()->handle()); Handle_Geom2d_Curve curv1 = GeomAPI::To2d(self, plane->Pln()); Handle_Geom2d_Curve curv2 = GeomAPI::To2d(curv, plane->Pln()); Geom2dAPI_InterCurveCurve intCC(curv1, curv2); int nbPoints = intCC.NbPoints(); Py::List list; for (int i=1; i<= nbPoints; i++) { gp_Pnt2d pt = intCC.Point(i); Py::Tuple tuple(2); tuple.setItem(0, Py::Float(pt.X())); tuple.setItem(1, Py::Float(pt.Y())); list.append(tuple); } return Py::new_reference_to(list); } catch (Standard_Failure) { Handle_Standard_Failure e = Standard_Failure::Caught(); PyErr_SetString(PartExceptionOCCError, e->GetMessageString()); return 0; } }
PyObject* TopoShapeFacePy::getUVNodes(PyObject *args) { if (!PyArg_ParseTuple(args, "")) return 0; const TopoDS_Face& f = TopoDS::Face(getTopoShapePtr()->getShape()); TopLoc_Location aLoc; Handle (Poly_Triangulation) mesh = BRep_Tool::Triangulation(f,aLoc); if (mesh.IsNull()) { PyErr_SetString(PyExc_RuntimeError, "Face has no triangulation"); return 0; } Py::List list; if (!mesh->HasUVNodes()) { return Py::new_reference_to(list); } const TColgp_Array1OfPnt2d& aNodesUV = mesh->UVNodes(); for (int i=aNodesUV.Lower(); i<=aNodesUV.Upper(); i++) { gp_Pnt2d pt2d = aNodesUV(i); Py::Tuple uv(2); uv.setItem(0, Py::Float(pt2d.X())); uv.setItem(1, Py::Float(pt2d.Y())); list.append(uv); } return Py::new_reference_to(list); }
PyObject* BSplineCurve2dPy::getPoles(PyObject * args) { if (!PyArg_ParseTuple(args, "")) return 0; try { Handle_Geom2d_BSplineCurve curve = Handle_Geom2d_BSplineCurve::DownCast (getGeometry2dPtr()->handle()); TColgp_Array1OfPnt2d p(1,curve->NbPoles()); curve->Poles(p); Py::List poles; Py::Module module("__FreeCADBase__"); Py::Callable method(module.getAttr("Vector2d")); Py::Tuple arg(2); for (Standard_Integer i=p.Lower(); i<=p.Upper(); i++) { gp_Pnt2d pnt = p(i); arg.setItem(0, Py::Float(pnt.X())); arg.setItem(1, Py::Float(pnt.Y())); poles.append(method.apply(arg)); } return Py::new_reference_to(poles); } catch (Standard_Failure) { Handle_Standard_Failure e = Standard_Failure::Caught(); PyErr_SetString(PartExceptionOCCError, e->GetMessageString()); return 0; } }
PyObject* FemMeshPy::getNodesByEdge(PyObject *args) { PyObject *pW; if (!PyArg_ParseTuple(args, "O!", &(Part::TopoShapeEdgePy::Type), &pW)) return 0; try { const TopoDS_Shape& sh = static_cast<Part::TopoShapeEdgePy*>(pW)->getTopoShapePtr()->_Shape; const TopoDS_Edge& fc = TopoDS::Edge(sh); if (sh.IsNull()) { PyErr_SetString(Base::BaseExceptionFreeCADError, "Edge is empty"); return 0; } Py::List ret; std::set<long> resultSet = getFemMeshPtr()->getNodesByEdge(fc); for (std::set<long>::const_iterator it = resultSet.begin();it!=resultSet.end();++it) ret.append(Py::Int(*it)); return Py::new_reference_to(ret); } catch (Standard_Failure) { Handle_Standard_Failure e = Standard_Failure::Caught(); PyErr_SetString(Base::BaseExceptionFreeCADError, e->GetMessageString()); return 0; } }
Py::List TrajectoryPy::getWaypoints(void) const { Py::List list; for(unsigned int i = 0; i < getTrajectoryPtr()->getSize(); i++) list.append(Py::Object(new Robot::WaypointPy(new Robot::Waypoint(getTrajectoryPtr()->getWaypoint(i))))); return list; }
Py::List SelectionObjectPy::getSubObjects(void) const { Py::List temp; std::vector<PyObject *> objs = getSelectionObjectPtr()->getObject()->getPySubObjects(getSelectionObjectPtr()->getSubNames()); for(std::vector<PyObject *>::const_iterator it= objs.begin();it!=objs.end();++it) temp.append(Py::Object(*it,true)); return temp; }
PyObject* PropertyContainerPy::getEditorMode(PyObject *args) { char* name; if (!PyArg_ParseTuple(args, "s", &name)) // convert args: Python->C return NULL; // NULL triggers exception App::Property* prop = getPropertyContainerPtr()->getPropertyByName(name); Py::List ret; if (prop) { short Type = prop->getType(); if ((prop->testStatus(Property::ReadOnly)) || (Type & Prop_ReadOnly)) ret.append(Py::String("ReadOnly")); if ((prop->testStatus(Property::Hidden)) || (Type & Prop_Hidden)) ret.append(Py::String("Hidden")); } return Py::new_reference_to(ret); }
PyObject* Application::sGetVersion(PyObject * /*self*/, PyObject *args,PyObject * /*kwd*/) { if (!PyArg_ParseTuple(args, "")) // convert args: Python->C return NULL; // NULL triggers exception Py::List list; const std::map<std::string, std::string>& cfg = Application::Config(); std::map<std::string, std::string>::const_iterator it; it = cfg.find("BuildVersionMajor"); list.append(Py::String(it != cfg.end() ? it->second : "")); it = cfg.find("BuildVersionMinor"); list.append(Py::String(it != cfg.end() ? it->second : "")); it = cfg.find("BuildRevision"); list.append(Py::String(it != cfg.end() ? it->second : "")); it = cfg.find("BuildRepositoryURL"); list.append(Py::String(it != cfg.end() ? it->second : "")); it = cfg.find("BuildRevisionDate"); list.append(Py::String(it != cfg.end() ? it->second : "")); it = cfg.find("BuildRevisionBranch"); if (it != cfg.end()) list.append(Py::String(it->second)); it = cfg.find("BuildRevisionHash"); if (it != cfg.end()) list.append(Py::String(it->second)); return Py::new_reference_to(list); }
Py::List DocumentObjectPy::getState(void) const { DocumentObject* object = this->getDocumentObjectPtr(); Py::List list; bool uptodate = true; if (object->isTouched()) { uptodate = false; list.append(Py::String("Touched")); } if (object->isError()) { uptodate = false; list.append(Py::String("Invalid")); } if (uptodate) { list.append(Py::String("Up-to-date")); } return list; }
Py::List MeshPy::getFacets(void) const { Py::List FacetList; MeshObject* mesh = getMeshObjectPtr(); for (MeshObject::const_facet_iterator it = mesh->facets_begin(); it != mesh->facets_end(); ++it) { FacetList.append(Py::Object(new FacetPy(new Facet(*it)), true)); } return FacetList; }
TaskDialogPython::TaskDialogPython(const Py::Object& o) : dlg(o) { if (dlg.hasAttr(std::string("ui"))) { UiLoader loader; #if QT_VERSION >= 0x040500 loader.setLanguageChangeEnabled(true); #endif QString fn, icon; Py::String ui(dlg.getAttr(std::string("ui"))); std::string path = (std::string)ui; fn = QString::fromUtf8(path.c_str()); QFile file(fn); QWidget* form = 0; if (file.open(QFile::ReadOnly)) form = loader.load(&file, 0); file.close(); if (form) { Gui::TaskView::TaskBox* taskbox = new Gui::TaskView::TaskBox( QPixmap(icon), form->windowTitle(), true, 0); taskbox->groupLayout()->addWidget(form); Content.push_back(taskbox); } else { Base::Console().Error("Failed to load UI file from '%s'\n", (const char*)fn.toUtf8()); } } else if (dlg.hasAttr(std::string("form"))) { Py::Object f(dlg.getAttr(std::string("form"))); Py::List widgets; if (f.isList()) { widgets = f; } else { widgets.append(f); } for (Py::List::iterator it = widgets.begin(); it != widgets.end(); ++it) { Py::Module mainmod(PyImport_AddModule((char*)"sip")); Py::Callable func = mainmod.getDict().getItem("unwrapinstance"); Py::Tuple arguments(1); arguments[0] = *it; //PyQt pointer Py::Object result = func.apply(arguments); void* ptr = PyLong_AsVoidPtr(result.ptr()); QObject* object = reinterpret_cast<QObject*>(ptr); if (object) { QWidget* form = qobject_cast<QWidget*>(object); if (form) { Gui::TaskView::TaskBox* taskbox = new Gui::TaskView::TaskBox( form->windowIcon().pixmap(32), form->windowTitle(), true, 0); taskbox->groupLayout()->addWidget(form); Content.push_back(taskbox); } } } } }
Py::List PointsPy::getPoints(void) const { Py::List PointList; const PointKernel* points = getPointKernelPtr(); for (PointKernel::const_point_iterator it = points->begin(); it != points->end(); ++it) { PointList.append(Py::Object(new Base::VectorPy(*it))); } return PointList; }
PyObject* AttachEnginePy::getModeInfo(PyObject* args) { char* modeName; if (!PyArg_ParseTuple(args, "s", &modeName)) return 0; try { AttachEngine &attacher = *(this->getAttachEnginePtr()); eMapMode mmode = attacher.getModeByName(modeName); Py::List pyListOfCombinations; Py::List pyCombination; refTypeStringList &listOfCombinations = attacher.modeRefTypes.at(mmode); for(const refTypeString &combination: listOfCombinations){ pyCombination = Py::List(combination.size()); for(int iref = 0 ; iref < combination.size() ; iref++){ pyCombination[iref] = Py::String(AttachEngine::getRefTypeName(combination[iref])); } pyListOfCombinations.append(pyCombination); } Py::Dict ret; ret["ReferenceCombinations"] = pyListOfCombinations; ret["ModeIndex"] = Py::Int(mmode); try { Py::Module module(PyImport_ImportModule("PartGui"),true); if (!module.hasAttr("AttachEngineResources")) { // in v0.14+, the GUI module can be loaded in console mode (but doesn't have all its document methods) throw Py::RuntimeError("Gui is not up");//DeepSOIC: wanted to throw ImportError here, but it's not defined, so I don't know... } Py::Object submod(module.getAttr("AttachEngineResources")); Py::Callable method(submod.getAttr("getModeStrings")); Py::Tuple arg(2); arg.setItem(0, Py::String(this->getAttachEnginePtr()->getTypeId().getName())); arg.setItem(1, Py::Int(mmode)); Py::List strs = method.apply(arg); assert(strs.size() == 2); ret["UserFriendlyName"] = strs[0]; ret["BriefDocu"] = strs[1]; } catch (Py::Exception& e) { if (PyErr_ExceptionMatches(PyExc_ImportError)) { // the GUI is not up. Base::Console().Warning("AttachEngine: Gui not up, so no gui-related entries in getModeInfo.\n"); e.clear(); } else { Base::Console().Warning("AttachEngine.getModeInfo: error obtaining GUI strings\n"); e.clear(); } } catch (Base::Exception &e){ Base::Console().Warning("AttachEngine.getModeInfo: error obtaining GUI strings:"); Base::Console().Warning(e.what()); Base::Console().Warning("\n"); } return Py::new_reference_to(ret); } ATTACHERPY_STDCATCH_METH; }
Py::List MeshPy::getPoints(void) const { Py::List PointList; unsigned int Index=0; MeshObject* mesh = getMeshObjectPtr(); for (MeshObject::const_point_iterator it = mesh->points_begin(); it != mesh->points_end(); ++it) { PointList.append(Py::Object(new MeshPointPy(new MeshPoint(*it,getMeshObjectPtr(),Index++)), true)); } return PointList; }
Py::List DocumentPy::getRedoNames(void) const { std::vector<std::string> vList = getDocumentPtr()->getAvailableRedoNames(); Py::List res; for (std::vector<std::string>::const_iterator It = vList.begin();It!=vList.end();++It) res.append(Py::String(*It)); return res; }