void TextureMapping::on_fileChooser_fileNameSelected(const QString& s) { QImage image; if (!image.load(s)) { QMessageBox::warning(this, tr("No image"), tr("The specified file is not a valid image file.")); return; } if (!this->grp) { Gui::Document* doc = Gui::Application::Instance->activeDocument(); if (doc) { Gui::MDIView* mdi = doc->getActiveView(); if (mdi && mdi->isDerivedFrom(View3DInventor::getClassTypeId())) { Gui::View3DInventorViewer* view = static_cast<View3DInventor*>(mdi)->getViewer(); this->grp = static_cast<SoGroup *>(view->getSceneGraph()); this->grp->ref(); this->grp->insertChild(this->tex,1); if (ui->checkEnv->isChecked()) this->grp->insertChild(this->env,2); } } } if (!this->grp) { QMessageBox::warning(this, tr("No 3d view"), tr("No active 3d view found.")); return; } SoSFImage texture; Gui::BitmapFactory().convert(image, texture); this->tex->image = texture; //this->tex->filename = (const char*)s.toUtf8(); App::GetApplication().Config()["TextureImage"] = (const char*)s.toUtf8(); }
void DrawSketchHandler::unsetCursor(void) { Gui::MDIView* view = Gui::getMainWindow()->activeWindow(); if (view && view->isDerivedFrom(Gui::View3DInventor::getClassTypeId())) { Gui::View3DInventorViewer* viewer = static_cast<Gui::View3DInventor*>(view)->getViewer(); viewer->getWidget()->setCursor(oldCursor); } }
Py::Object DocumentPy::getActiveView(void) const { Gui::MDIView *view = getDocumentPtr()->getActiveView(); if (view) { // already incremented in getPyObject(). return Py::Object(view->getPyObject(), true); } else { return Py::None(); } }
void TaskCreateNodeSet::Poly(void) { Gui::Document* doc = Gui::Application::Instance->activeDocument(); Gui::MDIView* view = doc->getActiveView(); if (view->getTypeId().isDerivedFrom(Gui::View3DInventor::getClassTypeId())) { Gui::View3DInventorViewer* viewer = ((Gui::View3DInventor*)view)->getViewer(); viewer->setEditing(true); viewer->startSelection(Gui::View3DInventorViewer::Clip); viewer->addEventCallback(SoMouseButtonEvent::getClassTypeId(), DefineNodesCallback,this); } }
// remove the active SelectionGate void SelectionSingleton::rmvSelectionGate(void) { if (ActiveGate) { delete ActiveGate; ActiveGate=0; Gui::Document* doc = Gui::Application::Instance->activeDocument(); if (doc) { Gui::MDIView* mdi = doc->getActiveView(); mdi->restoreOverrideCursor(); } } }
Gui::View3DInventorViewer* MeshSelection::getViewer() const { Gui::Document* doc = Gui::Application::Instance->activeDocument(); if (!doc) return 0; Gui::MDIView* view = doc->getActiveView(); if (view && view->getTypeId().isDerivedFrom(Gui::View3DInventor::getClassTypeId())) { Gui::View3DInventorViewer* viewer = static_cast<Gui::View3DInventor*>(view)->getViewer(); return viewer; } return 0; }
PyObject* Gui::Application::sActiveView(PyObject * /*self*/, PyObject *args) { if (!PyArg_ParseTuple(args, "")) return NULL; Gui::MDIView* mdiView = Instance->activeView(); if (mdiView) { // already incremented in getPyObject(). return mdiView->getPyObject(); } Py_Return; }
float SoZoomTranslation::getScaleFactor() { // Dividing by 5 seems to work well Gui::MDIView *mdi = Gui::Application::Instance->activeDocument()->getActiveView(); if (mdi && mdi->isDerivedFrom(Gui::View3DInventor::getClassTypeId())) { Gui::View3DInventorViewer *viewer = static_cast<Gui::View3DInventor *>(mdi)->getViewer(); this->scale = viewer->getCamera()->getViewVolume(viewer->getCamera()->aspectRatio.getValue()).getWorldToScreenScale(SbVec3f(0.f, 0.f, 0.f), 0.1f) / 5; return this->scale; } else { return this->scale; } }
void DrawSketchHandler::setCursor(const QPixmap &p,int x,int y) { Gui::MDIView* view = Gui::getMainWindow()->activeWindow(); if (view && view->isDerivedFrom(Gui::View3DInventor::getClassTypeId())) { Gui::View3DInventorViewer* viewer = static_cast<Gui::View3DInventor*>(view)->getViewer(); oldCursor = viewer->getWidget()->cursor(); QCursor cursor(p, x, y); actCursor = cursor; viewer->getWidget()->setCursor(cursor); } }
bool CmdInspectElement::isActive(void) { App::Document* doc = App::GetApplication().getActiveDocument(); if (!doc || doc->countObjectsOfType(Inspection::Feature::getClassTypeId()) == 0) return false; Gui::MDIView* view = Gui::getMainWindow()->activeWindow(); if (view && view->isDerivedFrom(Gui::View3DInventor::getClassTypeId())) { Gui::View3DInventorViewer* viewer = static_cast<Gui::View3DInventor*>(view)->getViewer(); return !viewer->isEditing(); } return false; }
bool CmdFemDefineNodesSet::isActive(void) { // Check for the selected mesh feature (all Mesh types) if (getSelection().countObjectsOfType(Fem::FemMeshObject::getClassTypeId()) != 1) return false; Gui::MDIView* view = Gui::getMainWindow()->activeWindow(); if (view && view->isDerivedFrom(Gui::View3DInventor::getClassTypeId())) { Gui::View3DInventorViewer* viewer = static_cast<Gui::View3DInventor*>(view)->getViewer(); return !viewer->isEditing(); } return false; }
void StdCmdEdit::activated(int iMsg) { Gui::MDIView* view = Gui::getMainWindow()->activeWindow(); if (view && view->isDerivedFrom(Gui::View3DInventor::getClassTypeId())) { Gui::View3DInventorViewer* viewer = static_cast<Gui::View3DInventor*>(view)->getViewer(); if (viewer->isEditingViewProvider()) { doCommand(Command::Gui,"Gui.activeDocument().resetEdit()"); } else { if (Selection().getCompleteSelection().size() > 0) { SelectionSingleton::SelObj obj = Selection().getCompleteSelection()[0]; doCommand(Command::Gui,"Gui.activeDocument().setEdit(\"%s\",0)",obj.FeatName); } } } }
PyObject* Gui::Application::sActiveView(PyObject * /*self*/, PyObject *args) { if (!PyArg_ParseTuple(args, "")) return NULL; Document *pcDoc = Instance->activeDocument(); if (pcDoc) { Gui::MDIView *pcView = pcDoc->getActiveView(); if (pcView) // already incremented in getPyObject(). return pcView->getPyObject(); } Py_Return; }
PyObject* Gui::Application::sActiveView(PyObject * /*self*/, PyObject *args, PyObject * /*kwd*/) { if (!PyArg_ParseTuple(args, "")) // convert args: Python->C return NULL; // NULL triggers exception Document *pcDoc = Instance->activeDocument(); if (pcDoc) { Gui::MDIView *pcView = pcDoc->getActiveView(); if (pcView) // already incremented in getPyObject(). return pcView->getPyObject(); } Py_Return; }
PyObject* DocumentPy::activeView(PyObject *args) { if (!PyArg_ParseTuple(args, "")) // convert args: Python->C return NULL; // NULL triggers exception PY_TRY { Gui::MDIView *pcView = getDocumentPtr()->getActiveView(); if (pcView){ // already incremented in getPyObject(). return pcView->getPyObject(); } else { Py_Return; } } PY_CATCH; }
bool Document::sendMsgToFirstView(const Base::Type& typeId, const char* pMsg, const char** ppReturn) { // first try the active view Gui::MDIView* view = getActiveView(); if (view && view->isDerivedFrom(typeId)) { if (view->onMsg(pMsg, ppReturn)) return true; } // now try the other views std::list<Gui::MDIView*> views = getMDIViewsOfType(typeId); for (std::list<Gui::MDIView*>::iterator it = views.begin(); it != views.end(); ++it) { if ((*it != view) && (*it)->onMsg(pMsg, ppReturn)) { return true; } } return false; }
void CmdPointsPolyCut::activated(int iMsg) { std::vector<App::DocumentObject*> docObj = Gui::Selection().getObjectsOfType(Points::Feature::getClassTypeId()); for (std::vector<App::DocumentObject*>::iterator it = docObj.begin(); it != docObj.end(); ++it) { if (it == docObj.begin()) { Gui::Document* doc = getActiveGuiDocument(); Gui::MDIView* view = doc->getActiveView(); if (view->getTypeId().isDerivedFrom(Gui::View3DInventor::getClassTypeId())) { Gui::View3DInventorViewer* viewer = ((Gui::View3DInventor*)view)->getViewer(); viewer->setEditing(true); viewer->startSelection(Gui::View3DInventorViewer::Lasso); viewer->addEventCallback(SoMouseButtonEvent::getClassTypeId(), PointsGui::ViewProviderPoints::clipPointsCallback); } else { return; } } Gui::ViewProvider* pVP = getActiveGuiDocument()->getViewProvider( *it ); pVP->startEditing(); } }
void SelectionSingleton::rmvPreselect() { if (DocName == "") return; SelectionChanges Chng; Chng.pDocName = DocName.c_str(); Chng.pObjectName = FeatName.c_str(); Chng.pSubName = SubName.c_str(); Chng.Type = SelectionChanges::RmvPreselect; // reset the current preselection CurrentPreselection.pDocName =0; CurrentPreselection.pObjectName = 0; CurrentPreselection.pSubName = 0; CurrentPreselection.x = 0.0; CurrentPreselection.y = 0.0; CurrentPreselection.z = 0.0; // notify observing objects Notify(Chng); signalSelectionChanged(Chng); DocName = ""; FeatName= ""; SubName = ""; hx = 0; hy = 0; hz = 0; if (ActiveGate && getMainWindow()) { Gui::MDIView* mdi = Gui::Application::Instance->activeDocument()->getActiveView(); mdi->restoreOverrideCursor(); } //Base::Console().Log("Sel : Rmv preselect \n"); }
void CmdFemDefineNodesSet::activated(int iMsg) { std::vector<App::DocumentObject*> docObj = Gui::Selection().getObjectsOfType(Fem::FemMeshObject::getClassTypeId()); for (std::vector<App::DocumentObject*>::iterator it = docObj.begin(); it != docObj.end(); ++it) { if (it == docObj.begin()) { Gui::Document* doc = getActiveGuiDocument(); Gui::MDIView* view = doc->getActiveView(); if (view->getTypeId().isDerivedFrom(Gui::View3DInventor::getClassTypeId())) { Gui::View3DInventorViewer* viewer = ((Gui::View3DInventor*)view)->getViewer(); viewer->setEditing(true); viewer->startSelection(Gui::View3DInventorViewer::Clip); viewer->addEventCallback(SoMouseButtonEvent::getClassTypeId(), DefineNodesCallback); } else { return; } } //Gui::ViewProvider* pVP = getActiveGuiDocument()->getViewProvider(*it); //if (pVP->isVisible()) // pVP->startEditing(); } }
bool SelectionSingleton::addSelection(const char* pDocName, const char* pObjectName, const char* pSubName, float x, float y, float z) { // already in ? if (isSelected(pDocName, pObjectName, pSubName)) return true; _SelObj temp; temp.pDoc = getDocument(pDocName); if (temp.pDoc) { if(pObjectName) temp.pObject = temp.pDoc->getObject(pObjectName); else temp.pObject = 0; // check for a Selection Gate if (ActiveGate) { if (!ActiveGate->allow(temp.pDoc,temp.pObject,pSubName)) { if (getMainWindow()) { getMainWindow()->showMessage(QString::fromAscii("Selection not allowed by filter"),5000); Gui::MDIView* mdi = Gui::Application::Instance->activeDocument()->getActiveView(); mdi->setOverrideCursor(Qt::ForbiddenCursor); } QApplication::beep(); return false; } } temp.DocName = pDocName; temp.FeatName = pObjectName ? pObjectName : ""; temp.SubName = pSubName ? pSubName : ""; temp.x = x; temp.y = y; temp.z = z; if (temp.pObject) temp.TypeName = temp.pObject->getTypeId().getName(); _SelList.push_back(temp); SelectionChanges Chng; Chng.pDocName = pDocName; Chng.pObjectName = pObjectName ? pObjectName : ""; Chng.pSubName = pSubName ? pSubName : ""; Chng.x = x; Chng.y = y; Chng.z = z; Chng.Type = SelectionChanges::AddSelection; Notify(Chng); signalSelectionChanged(Chng); Base::Console().Log("Sel : Add Selection \"%s.%s.%s(%f,%f,%f)\"\n",pDocName,pObjectName,pSubName,x,y,z); // allow selection return true; } else { // neither an existing nor active document available //assert(0); // this can often happen when importing .iv files Base::Console().Error("Cannot add to selection: no document '%s' found.\n", pDocName); return false; } }
void Workbench::setupContextMenu(const char* recipient, Gui::MenuItem* item) const { auto selection = Gui::Selection().getSelection(); // Add move Tip Command if ( selection.size () >= 1 ) { App::DocumentObject *feature = selection.front().pObject; PartDesign::Body *body = PartDesignGui::getBodyFor ( feature, false ); // lote of assertion so feature sould be marked as a tip if ( selection.size () == 1 && feature && ( feature->isDerivedFrom ( PartDesign::Body::getClassTypeId () ) || ( feature->isDerivedFrom ( PartDesign::Feature::getClassTypeId () ) && body ) || ( feature->isDerivedFrom ( Part::Feature::getClassTypeId () ) && body && body->BaseFeature.getValue() == feature ) ) ) { *item << "PartDesign_MoveTip"; } if (strcmp(recipient, "Tree") == 0) { Gui::MDIView *activeView = Gui::Application::Instance->activeView(); if ( selection.size () > 0 && activeView ) { bool docHaveBodies = activeView->getAppDocument()->countObjectsOfType ( PartDesign::Body::getClassTypeId () ) > 0; if ( docHaveBodies ) { bool addMoveFeature = true; bool addMoveFeatureInTree = (body != nullptr); for (auto sel: selection) { // if at least one selected feature cannot be moved to a body // disable the entry if ( addMoveFeature && !PartDesign::Body::isAllowed ( sel.pObject ) ) { addMoveFeature = false; } // if all at lest one selected feature doesn't belongs to the same body // disable the menu entry if ( addMoveFeatureInTree && !body->hasFeature ( sel.pObject ) ) { addMoveFeatureInTree = false; } if ( !addMoveFeatureInTree && !addMoveFeature ) { break; } } if (addMoveFeature) { *item << "PartDesign_MoveFeature"; } if (addMoveFeatureInTree) { *item << "PartDesign_MoveFeatureInTree"; } } } if (Gui::Selection().countObjectsOfType(PartDesign::Transformed::getClassTypeId()) - Gui::Selection().countObjectsOfType(PartDesign::MultiTransform::getClassTypeId()) == 1 ) *item << "PartDesign_MultiTransform"; } } }
PyObject* Application::sExport(PyObject * /*self*/, PyObject *args,PyObject * /*kwd*/) { PyObject* object; const char* filename; if (!PyArg_ParseTuple(args, "Os",&object,&filename)) return NULL; PY_TRY { App::Document* doc = 0; Py::List list(object); for (Py::List::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(); doc = obj->getDocument(); break; } } // get the view that belongs to the found document if (doc) { QString fileName = QString::fromUtf8(filename); QFileInfo fi; fi.setFile(fileName); QString ext = fi.completeSuffix().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<MDIView*> view3d = gui_doc->getMDIViewsOfType(View3DInventor::getClassTypeId()); if (view3d.empty()) { PyErr_SetString(PyExc_Exception, "Cannot export to SVG because document doesn't have a 3d view"); return 0; } else { QString cmd = QString::fromLatin1( "Gui.getDocument(\"%1\").mdiViewsOfType('Gui::View3DInventor')[0].dump(\"%2\")" ).arg(QLatin1String(doc->getName())).arg(fi.absoluteFilePath()); Base::Interpreter().runString(cmd.toUtf8()); } } 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<View3DInventor*>(view); if (view3d) view3d->viewAll(); QPrinter printer(QPrinter::ScreenResolution); printer.setOutputFormat(QPrinter::PdfFormat); printer.setOutputFileName(fileName); view->print(&printer); } } } } } PY_CATCH; Py_Return; }
bool SelectionSingleton::setPreselect(const char* pDocName, const char* pObjectName, const char* pSubName, float x, float y, float z) { if (DocName != "") rmvPreselect(); if (ActiveGate) { // if document of object doesn't exist then return with false App::Document* pDoc = getDocument(pDocName); if (!pDoc || !pObjectName) return false; App::DocumentObject* pObject = pDoc->getObject(pObjectName); if (!pObject) return false; if (!ActiveGate->allow(pDoc,pObject,pSubName)) { QString msg; if (ActiveGate->notAllowedReason.length() > 0){ msg = QObject::tr(ActiveGate->notAllowedReason.c_str()); } else { msg = QCoreApplication::translate("SelectionFilter","Not allowed:"); } msg.append( QObject::tr(" %1.%2.%3 ") .arg(QString::fromLatin1(pDocName)) .arg(QString::fromLatin1(pObjectName)) .arg(QString::fromLatin1(pSubName)) ); if (getMainWindow()) { getMainWindow()->showMessage(msg); Gui::MDIView* mdi = Gui::Application::Instance->activeDocument()->getActiveView(); mdi->setOverrideCursor(QCursor(Qt::ForbiddenCursor)); } return false; } } DocName = pDocName; FeatName= pObjectName; SubName = pSubName; hx = x; hy = y; hz = z; // set up the change object SelectionChanges Chng; Chng.pDocName = DocName.c_str(); Chng.pObjectName = FeatName.c_str(); Chng.pSubName = SubName.c_str(); Chng.pTypeName = ""; Chng.x = x; Chng.y = y; Chng.z = z; Chng.Type = SelectionChanges::SetPreselect; // set the current preselection CurrentPreselection = Chng; Notify(Chng); signalSelectionChanged(Chng); // allows the preselection return true; }
PyObject* Application::sExport(PyObject * /*self*/, PyObject *args,PyObject * /*kwd*/) { PyObject* object; char* Name; if (!PyArg_ParseTuple(args, "Oet",&object,"utf-8",&Name)) return NULL; std::string Utf8Name = std::string(Name); PyMem_Free(Name); PY_TRY { App::Document* doc = 0; Py::Sequence list(object); 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(); doc = obj->getDocument(); break; } } 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")) { // build up the graph SoSeparator* sep = new SoSeparator(); sep->ref(); 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(); Gui::ViewProvider* vp = Gui::Application::Instance->getViewProvider(obj); if (vp) { sep->addChild(vp->getRoot()); } } } 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<View3DInventor*>(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; }
bool SelectionSingleton::setPreselect(const char* pDocName, const char* pObjectName, const char* pSubName, float x, float y, float z) { static char buf[513]; if (DocName != "") rmvPreselect(); if (ActiveGate) { App::Document* pDoc = getDocument(pDocName); if (pDoc) { if (pObjectName) { App::DocumentObject* pObject = pDoc->getObject(pObjectName); if (!ActiveGate->allow(pDoc,pObject,pSubName)) { snprintf(buf,512,"Not allowed: %s.%s.%s ",pDocName ,pObjectName ,pSubName ); if (getMainWindow()) { getMainWindow()->showMessage(QString::fromAscii(buf),3000); Gui::MDIView* mdi = Gui::Application::Instance->activeDocument()->getActiveView(); mdi->setOverrideCursor(QCursor(Qt::ForbiddenCursor)); } return false; } } else return ActiveGate->allow(pDoc,0,0); } else return false; } DocName = pDocName; FeatName= pObjectName; SubName = pSubName; hx = x; hy = y; hz = z; // set up the change object SelectionChanges Chng; Chng.pDocName = DocName.c_str(); Chng.pObjectName = FeatName.c_str(); Chng.pSubName = SubName.c_str(); Chng.x = x; Chng.y = y; Chng.z = z; Chng.Type = SelectionChanges::SetPreselect; // set the current preselection CurrentPreselection = Chng; snprintf(buf,512,"Preselected: %s.%s.%s (%f,%f,%f)",Chng.pDocName ,Chng.pObjectName ,Chng.pSubName ,x,y,z); //FIXME: We shouldn't replace the possibly defined edit cursor //with the arrow cursor. But it seems that we don't even have to. //if (getMainWindow()){ // getMainWindow()->showMessage(QString::fromAscii(buf),3000); // Gui::MDIView* mdi = Gui::Application::Instance->activeDocument()->getActiveView(); // mdi->restoreOverrideCursor(); //} Notify(Chng); signalSelectionChanged(Chng); //Base::Console().Log("Sel : Add preselect %s \n",pObjectName); // allows the preselection return true; }