PyObject* Application::sInsert(PyObject * /*self*/, PyObject *args,PyObject * /*kwd*/) { const char* Name; const char* DocName=0; if (!PyArg_ParseTuple(args, "s|s",&Name,&DocName)) return NULL; PY_TRY { QString fileName = QString::fromUtf8(Name); QFileInfo fi; fi.setFile(fileName); QString ext = fi.completeSuffix().toLower(); if (ext == QLatin1String("iv")) { App::Document *doc = 0; if (DocName) doc = App::GetApplication().getDocument(DocName); else doc = App::GetApplication().getActiveDocument(); if (!doc) doc = App::GetApplication().newDocument(DocName); App::DocumentObject* obj = doc->addObject("App::InventorObject", (const char*)fi.baseName().toUtf8()); obj->Label.setValue((const char*)fi.baseName().toUtf8()); static_cast<App::PropertyString*>(obj->getPropertyByName("FileName")) ->setValue((const char*)fi.absoluteFilePath().toUtf8()); doc->recompute(); } else if (ext == QLatin1String("wrl") || ext == QLatin1String("vrml") || ext == QLatin1String("wrz")) { App::Document *doc = 0; if (DocName) doc = App::GetApplication().getDocument(DocName); else doc = App::GetApplication().getActiveDocument(); if (!doc) doc = App::GetApplication().newDocument(DocName); App::DocumentObject* obj = doc->addObject("App::VRMLObject", (const char*)fi.baseName().toUtf8()); obj->Label.setValue((const char*)fi.baseName().toUtf8()); static_cast<App::PropertyFileIncluded*>(obj->getPropertyByName("VrmlFile")) ->setValue((const char*)fi.absoluteFilePath().toUtf8()); doc->recompute(); } else if (ext == QLatin1String("py") || ext == QLatin1String("fcmacro") || ext == QLatin1String("fcscript")) { PythonEditor* editor = new PythonEditor(); editor->setWindowIcon(Gui::BitmapFactory().pixmap("python_small")); PythonEditorView* edit = new PythonEditorView(editor, getMainWindow()); edit->open(fileName); edit->resize(400, 300); getMainWindow()->addWindow( edit ); } } PY_CATCH; Py_Return; }
int DocumentObjectProtectorPy::setattr(const char * attr, const Py::Object & value) { if (!_dp) { std::string s; std::ostringstream s_out; s_out << "Cannot access attribute '" << attr << "' of deleted object"; throw Py::RuntimeError(s_out.str()); } else { App::DocumentObject* obj = _dp->getObject(); App::Property* prop = obj->getPropertyByName(attr); if (!prop) { std::string s; std::ostringstream s_out; s_out << "No such attribute '" << attr << "'"; throw Py::AttributeError(s_out.str()); } Base::PyGILStateRelease unlock; std::unique_ptr<App::Property> copy(static_cast<App::Property*> (prop->getTypeId().createInstance())); if (PyObject_TypeCheck(value.ptr(), DocumentObjectProtectorPy::type_object())) { copy->setPyObject(static_cast<const DocumentObjectProtectorPy*>(value.ptr())->getObject().ptr()); } else { copy->setPyObject(value.ptr()); } return _dp->setProperty(attr, *copy) ? 0 : -1; } }
static PyObject * exporter(PyObject *self, PyObject *args) { PyObject* object; char* Name; if (!PyArg_ParseTuple(args, "Oet",&object,"utf-8",&Name)) return NULL; std::string EncodedName = std::string(Name); PyMem_Free(Name); float fTolerance = 0.1f; MeshObject global_mesh; PY_TRY { Py::Sequence list(object); Base::Type meshId = Base::Type::fromName("Mesh::Feature"); Base::Type partId = Base::Type::fromName("Part::Feature"); for (Py::Sequence::iterator it = list.begin(); it != list.end(); ++it) { PyObject* item = (*it).ptr(); if (PyObject_TypeCheck(item, &(App::DocumentObjectPy::Type))) { App::DocumentObject* obj = static_cast<App::DocumentObjectPy*>(item)->getDocumentObjectPtr(); if (obj->getTypeId().isDerivedFrom(meshId)) { const MeshObject& mesh = static_cast<Mesh::Feature*>(obj)->Mesh.getValue(); MeshCore::MeshKernel kernel = mesh.getKernel(); kernel.Transform(mesh.getTransform()); if (global_mesh.countFacets() == 0) global_mesh.setKernel(kernel); else global_mesh.addMesh(kernel); } else if (obj->getTypeId().isDerivedFrom(partId)) { App::Property* shape = obj->getPropertyByName("Shape"); Base::Reference<MeshObject> mesh(new MeshObject()); if (shape && shape->getTypeId().isDerivedFrom(App::PropertyComplexGeoData::getClassTypeId())) { std::vector<Base::Vector3d> aPoints; std::vector<Data::ComplexGeoData::Facet> aTopo; static_cast<App::PropertyComplexGeoData*>(shape)->getFaces(aPoints, aTopo,fTolerance); mesh->addFacets(aTopo, aPoints); if (global_mesh.countFacets() == 0) global_mesh = *mesh; else global_mesh.addMesh(*mesh); } } else { Base::Console().Message("'%s' is not a mesh or shape, export will be ignored.\n", obj->Label.getValue()); } } } // export mesh compound global_mesh.save(EncodedName.c_str()); } PY_CATCH; Py_Return; }
void ViewProviderSpline::onChanged(const App::Property* prop) { if (prop == &ControlPoints) { App::DocumentObject* obj = this->pcObject; App::Property* shape = obj->getPropertyByName("Shape"); showControlPoints(ControlPoints.getValue(), shape); } else { ViewProviderPartExt::onChanged(prop); } }
App::DocumentObjectExecReturn *HarmonizeNormals::execute(void) { App::DocumentObject* link = Source.getValue(); if (!link) return new App::DocumentObjectExecReturn("No mesh linked"); App::Property* prop = link->getPropertyByName("Mesh"); if (prop && prop->getTypeId() == Mesh::PropertyMeshKernel::getClassTypeId()) { Mesh::PropertyMeshKernel* kernel = static_cast<Mesh::PropertyMeshKernel*>(prop); std::auto_ptr<MeshObject> mesh(new MeshObject); *mesh = kernel->getValue(); mesh->harmonizeNormals(); this->Mesh.setValuePtr(mesh.release()); } return App::DocumentObject::StdReturn; }
App::DocumentObjectExecReturn *FixDegenerations::execute(void) { App::DocumentObject* link = Source.getValue(); if (!link) return new App::DocumentObjectExecReturn("No mesh linked"); App::Property* prop = link->getPropertyByName("Mesh"); if (prop && prop->getTypeId() == Mesh::PropertyMeshKernel::getClassTypeId()) { Mesh::PropertyMeshKernel* kernel = static_cast<Mesh::PropertyMeshKernel*>(prop); std::unique_ptr<MeshObject> mesh(new MeshObject); *mesh = kernel->getValue(); mesh->validateDegenerations(static_cast<float>(Epsilon.getValue())); this->Mesh.setValuePtr(mesh.release()); } return App::DocumentObject::StdReturn; }
App::DocumentObjectExecReturn *FillHoles::execute(void) { App::DocumentObject* link = Source.getValue(); if (!link) return new App::DocumentObjectExecReturn("No mesh linked"); App::Property* prop = link->getPropertyByName("Mesh"); if (prop && prop->getTypeId() == Mesh::PropertyMeshKernel::getClassTypeId()) { Mesh::PropertyMeshKernel* kernel = static_cast<Mesh::PropertyMeshKernel*>(prop); std::auto_ptr<MeshObject> mesh(new MeshObject); *mesh = kernel->getValue(); MeshCore::ConstraintDelaunayTriangulator cTria(MaxArea.getValue()); //MeshCore::Triangulator cTria(mesh->getKernel()); mesh->fillupHoles(FillupHolesOfLength.getValue(), 1, cTria); this->Mesh.setValuePtr(mesh.release()); } return App::DocumentObject::StdReturn; }
Py::Object DocumentObjectProtectorPy::getattr(const char * attr) { if (!_dp) { std::string s; std::ostringstream s_out; s_out << "Cannot access attribute '" << attr << "' of deleted object"; throw Py::RuntimeError(s_out.str()); } else { App::DocumentObject* obj = _dp->getObject(); App::Property* prop = obj->getPropertyByName(attr); if (!prop) { return Py::PythonExtension<DocumentObjectProtectorPy>::getattr(attr); //std::string s; //std::ostringstream s_out; //s_out << "No such attribute '" << attr << "'"; //throw Py::AttributeError(s_out.str()); } return Py::asObject(prop->getPyObject()); } }
PyObject* Application::sInsert(PyObject * /*self*/, PyObject *args,PyObject * /*kwd*/) { char* Name; char* DocName=0; if (!PyArg_ParseTuple(args, "et|s","utf-8",&Name,&DocName)) return NULL; std::string Utf8Name = std::string(Name); PyMem_Free(Name); PY_TRY { QString fileName = QString::fromUtf8(Utf8Name.c_str()); QFileInfo fi; fi.setFile(fileName); QString ext = fi.suffix().toLower(); if (ext == QLatin1String("iv")) { App::Document *doc = 0; if (DocName) doc = App::GetApplication().getDocument(DocName); else doc = App::GetApplication().getActiveDocument(); if (!doc) doc = App::GetApplication().newDocument(DocName); App::DocumentObject* obj = doc->addObject("App::InventorObject", (const char*)fi.baseName().toUtf8()); obj->Label.setValue((const char*)fi.baseName().toUtf8()); static_cast<App::PropertyString*>(obj->getPropertyByName("FileName")) ->setValue((const char*)fi.absoluteFilePath().toUtf8()); doc->recompute(); } else if (ext == QLatin1String("wrl") || ext == QLatin1String("vrml") || ext == QLatin1String("wrz")) { App::Document *doc = 0; if (DocName) doc = App::GetApplication().getDocument(DocName); else doc = App::GetApplication().getActiveDocument(); if (!doc) doc = App::GetApplication().newDocument(DocName); // Add this to the search path in order to read inline files (#0002029) QByteArray path = fi.absolutePath().toUtf8(); SoInput::addDirectoryFirst(path.constData()); App::DocumentObject* obj = doc->addObject("App::VRMLObject", (const char*)fi.baseName().toUtf8()); obj->Label.setValue((const char*)fi.baseName().toUtf8()); static_cast<App::PropertyFileIncluded*>(obj->getPropertyByName("VrmlFile")) ->setValue((const char*)fi.absoluteFilePath().toUtf8()); doc->recompute(); SoInput::removeDirectory(path.constData()); } else if (ext == QLatin1String("py") || ext == QLatin1String("fcmacro") || ext == QLatin1String("fcscript")) { PythonEditor* editor = new PythonEditor(); editor->setWindowIcon(Gui::BitmapFactory().iconFromTheme("applications-python")); PythonEditorView* edit = new PythonEditorView(editor, getMainWindow()); edit->open(fileName); edit->resize(400, 300); getMainWindow()->addWindow( edit ); } else { Base::Console().Error("File type '%s' not supported\n", ext.toLatin1().constData()); } } PY_CATCH; Py_Return; }