diff --git a/src/Gui/ApplicationPy.cpp b/src/Gui/ApplicationPy.cpp index d47badfa6..7fdb1f9bc 100644 --- a/src/Gui/ApplicationPy.cpp +++ b/src/Gui/ApplicationPy.cpp @@ -399,71 +399,62 @@ PyObject* Application::sExport(PyObject * /*self*/, PyObject *args,PyObject * /* } } - // get the view that belongs to the found document - if (doc) { - QString fileName = QString::fromUtf8(Utf8Name.c_str()); - QFileInfo fi; - fi.setFile(fileName); - QString ext = fi.suffix().toLower(); - if (ext == QLatin1String("iv") || ext == QLatin1String("wrl") || - ext == QLatin1String("vrml") || ext == QLatin1String("wrz") || - ext == QLatin1String("svg") || ext == QLatin1String("idtf")) { - Gui::Document* gui_doc = Application::Instance->getDocument(doc); - std::list view3d = gui_doc->getMDIViewsOfType(View3DInventor::getClassTypeId()); - if (view3d.empty()) { - PyErr_SetString(Base::BaseExceptionFreeCADError, "Cannot export to SVG because document doesn't have a 3d view"); - return 0; - } - else { - SoSeparator* sep = new SoSeparator(); - sep->ref(); + QString fileName = QString::fromUtf8(Utf8Name.c_str()); + QFileInfo fi; + fi.setFile(fileName); + QString ext = fi.suffix().toLower(); + if (ext == QLatin1String("iv") || ext == QLatin1String("wrl") || + ext == QLatin1String("vrml") || ext == QLatin1String("wrz")) { - 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(item)->getDocumentObjectPtr(); + // build up the graph + SoSeparator* sep = new SoSeparator(); + sep->ref(); - Gui::ViewProvider* vp = Gui::Application::Instance->getViewProvider(obj); - if (vp) { - sep->addChild(vp->getRoot()); - } - } - } + 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(item)->getDocumentObjectPtr(); - - SoGetPrimitiveCountAction action; - action.setCanApproximate(true); - action.apply(sep); - - bool binary = false; - if (action.getTriangleCount() > 100000 || - action.getPointCount() > 30000 || - action.getLineCount() > 10000) - binary = true; - - SoFCDB::writeToFile(sep, Utf8Name.c_str(), binary); - sep->unref(); - } - } - else if (ext == QLatin1String("pdf")) { - Gui::Document* gui_doc = Application::Instance->getDocument(doc); - if (gui_doc) { - Gui::MDIView* view = gui_doc->getActiveView(); - if (view) { - View3DInventor* view3d = qobject_cast(view); - if (view3d) - view3d->viewAll(); - QPrinter printer(QPrinter::ScreenResolution); - printer.setOutputFormat(QPrinter::PdfFormat); - printer.setOutputFileName(fileName); - view->print(&printer); + Gui::ViewProvider* vp = Gui::Application::Instance->getViewProvider(obj); + if (vp) { + sep->addChild(vp->getRoot()); } } } - else { - Base::Console().Error("File type '%s' not supported\n", ext.toLatin1().constData()); + + + SoGetPrimitiveCountAction action; + action.setCanApproximate(true); + action.apply(sep); + + bool binary = false; + if (action.getTriangleCount() > 100000 || + action.getPointCount() > 30000 || + action.getLineCount() > 10000) + binary = true; + + SoFCDB::writeToFile(sep, Utf8Name.c_str(), binary); + sep->unref(); + } + else if (ext == QLatin1String("pdf")) { + // get the view that belongs to the found document + Gui::Document* gui_doc = Application::Instance->getDocument(doc); + if (gui_doc) { + Gui::MDIView* view = gui_doc->getActiveView(); + if (view) { + View3DInventor* view3d = qobject_cast(view); + if (view3d) + view3d->viewAll(); + QPrinter printer(QPrinter::ScreenResolution); + printer.setOutputFormat(QPrinter::PdfFormat); + printer.setOutputFileName(fileName); + view->print(&printer); + } } } + else { + Base::Console().Error("File type '%s' not supported\n", ext.toLatin1().constData()); + } } PY_CATCH; Py_Return; diff --git a/src/Gui/FreeCADGuiInit.py b/src/Gui/FreeCADGuiInit.py index 0700b566d..4fb68162b 100644 --- a/src/Gui/FreeCADGuiInit.py +++ b/src/Gui/FreeCADGuiInit.py @@ -143,7 +143,7 @@ FreeCAD.addImportType("Python (*.py *.FCMacro *.FCScript)","FreeCADGui") FreeCAD.addExportType("Inventor V2.1 (*.iv)","FreeCADGui") FreeCAD.addExportType("VRML V2.0 (*.wrl *.vrml *.wrz *.wrl.gz)","FreeCADGui") #FreeCAD.addExportType("IDTF (for 3D PDF) (*.idtf)","FreeCADGui") -FreeCAD.addExportType("3D View (*.svg)","FreeCADGui") +#FreeCAD.addExportType("3D View (*.svg)","FreeCADGui") FreeCAD.addExportType("Portable Document Format (*.pdf)","FreeCADGui") del(InitApplications)