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 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); } }
bool Command::isViewOfType(Base::Type t) const { Gui::Document *d = getGuiApplication()->activeDocument(); if (!d) return false; Gui::BaseView *v = d->getActiveView(); if (!v) return false; if (v->getTypeId().isDerivedFrom(t)) return true; else return false; }
// 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; }
void CmdInspectElement::activated(int iMsg) { Gui::Document* doc = Gui::Application::Instance->activeDocument(); Gui::View3DInventor* view = static_cast<Gui::View3DInventor*>(doc->getActiveView()); if (view) { Gui::View3DInventorViewer* viewer = view->getViewer(); viewer->setEditing(true); viewer->setRedirectToSceneGraph(true); viewer->setEditingCursor(QCursor(Gui::BitmapFactory().pixmap("mesh_pipette"),4,29)); viewer->addEventCallback(SoButtonEvent::getClassTypeId(), InspectionGui::ViewProviderInspection::inspectCallback); } }
void DlgEvaluateMeshImp::on_refreshButton_clicked() { // Connect to application and active document Gui::Document* gui = Gui::Application::Instance->activeDocument(); if (gui) { App::Document* doc = gui->getDocument(); // switch to the active document if (doc && doc != this->getDocument()) { attachDocument(doc); removeViewProviders(); d->view = dynamic_cast<Gui::View3DInventor*>(gui->getActiveView()); } } refreshList(); }
void StdCmdAlignment::activated(int iMsg) { std::vector<App::DocumentObject*> sel = Gui::Selection().getObjectsOfType (App::GeoFeature::getClassTypeId()); ManualAlignment* align = ManualAlignment::instance(); QObject::connect(align, SIGNAL(emitCanceled()), align, SLOT(deleteLater())); QObject::connect(align, SIGNAL(emitFinished()), align, SLOT(deleteLater())); // Get the fixed and moving meshes FixedGroup fixedGroup; std::map<int, MovableGroup> groupMap; fixedGroup.addView(sel[0]); groupMap[0].addView(sel[1]); // add the fixed group align->setFixedGroup(fixedGroup); // create the model of movable groups MovableGroupModel model; model.addGroups(groupMap); align->setModel(model); Base::Type style = Base::Type::fromName("Gui::CADNavigationStyle"); Base::Vector3d upDir(0,1,0), viewDir(0,0,-1); Gui::Document* doc = Application::Instance->activeDocument(); if (doc) { View3DInventor* mdi = qobject_cast<View3DInventor*>(doc->getActiveView()); if (mdi) { View3DInventorViewer* viewer = mdi->getViewer(); SoCamera* camera = viewer->getCamera(); if (camera) { SbVec3f up(0,1,0), dir(0,0,-1); camera->orientation.getValue().multVec(dir, dir); viewDir.Set(dir[0],dir[1],dir[2]); camera->orientation.getValue().multVec(up, up); upDir.Set(up[0],up[1],up[2]); } style = viewer->navigationStyle()->getTypeId(); } } align->setMinPoints(1); align->startAlignment(style); align->setViewingDirections(viewDir,upDir, viewDir,upDir); Gui::Selection().clearSelection(); }
CrossSections::CrossSections(const Base::BoundBox3d& bb, QWidget* parent, Qt::WFlags fl) : QDialog(parent, fl), bbox(bb) { ui = new Ui_CrossSections(); ui->setupUi(this); ui->position->setRange(-DBL_MAX, DBL_MAX); vp = new ViewProviderCrossSections(); Base::Vector3d c = bbox.CalcCenter(); calcPlane(CrossSections::XY, c.z); ui->position->setValue(c.z); Gui::Document* doc = Gui::Application::Instance->activeDocument(); view = qobject_cast<Gui::View3DInventor*>(doc->getActiveView()); if (view) { view->getViewer()->addViewProvider(vp); } }
void DlgInspector::on_refreshButton_clicked() { Gui::Document* doc = Application::Instance->activeDocument(); if (doc) { setNodeNames(doc); View3DInventor* view = qobject_cast<View3DInventor*>(doc->getActiveView()); if (view) { View3DInventorViewer* viewer = view->getViewer(); setNode(viewer->getSceneGraph()); ui->treeView->expandToDepth(3); } } else { SceneModel* model = static_cast<SceneModel*>(ui->treeView->model()); model->clear(); } }
void ViewProviderDocumentObjectGroup::updateData(const App::Property* prop) { #if 0 if (prop->getTypeId() == App::PropertyLinkList::getClassTypeId()) { std::vector<App::DocumentObject*> obj = static_cast<const App::PropertyLinkList*>(prop)->getValues(); Gui::Document* doc = Gui::Application::Instance->getDocument (&this->getObject()->getDocument()); MDIView* mdi = doc->getActiveView(); if (mdi && mdi->isDerivedFrom(View3DInventor::getClassTypeId())) { View3DInventorViewer* view = static_cast<View3DInventor*>(mdi)->getViewer(); SoSeparator* scene_graph = static_cast<SoSeparator*>(view->getSceneGraph()); std::vector<ViewProvider*> current_nodes; for (std::vector<App::DocumentObject*>::iterator it = obj.begin(); it != obj.end(); ++it) current_nodes.push_back(doc->getViewProvider(*it)); std::sort(current_nodes.begin(), current_nodes.end()); std::sort(this->nodes.begin(), this->nodes.end()); // get the removed views std::vector<ViewProvider*> diff_1, diff_2; std::back_insert_iterator<std::vector<ViewProvider*> > biit(diff_2); std::set_difference(this->nodes.begin(), this->nodes.end(), current_nodes.begin(), current_nodes.end(), biit); diff_1 = diff_2; diff_2.clear(); // get the added views std::set_difference(current_nodes.begin(), current_nodes.end(), this->nodes.begin(), this->nodes.end(), biit); this->nodes = current_nodes; // move from root node to switch for (std::vector<ViewProvider*>::iterator it = diff_1.begin(); it != diff_1.end(); ++it) { view->addViewProviderToGroup(*it, scene_graph); view->removeViewProviderFromGroup(*it, this->pcModeSwitch); } // move from switch node to root node for (std::vector<ViewProvider*>::iterator it = diff_2.begin(); it != diff_2.end(); ++it) { view->addViewProviderToGroup(*it, this->pcModeSwitch); view->removeViewProviderFromGroup(*it, scene_graph); } } } #else Q_UNUSED(prop); #endif }
void Command::adjustCameraPosition() { Gui::Document* doc = Gui::Application::Instance->activeDocument(); if (doc) { Gui::View3DInventor* view = static_cast<Gui::View3DInventor*>(doc->getActiveView()); Gui::View3DInventorViewer* viewer = view->getViewer(); SoCamera* camera = viewer->getSoRenderManager()->getCamera(); if (!camera || !camera->isOfType(SoOrthographicCamera::getClassTypeId())) return; // get scene bounding box SoGetBoundingBoxAction action(viewer->getSoRenderManager()->getViewportRegion()); action.apply(viewer->getSceneGraph()); SbBox3f box = action.getBoundingBox(); if (box.isEmpty()) return; // get cirumscribing sphere and check if camera is inside SbVec3f cam_pos = camera->position.getValue(); SbVec3f box_cnt = box.getCenter(); SbSphere bs; bs.circumscribe(box); float radius = bs.getRadius(); float distance_to_midpoint = (box_cnt-cam_pos).length(); if (radius >= distance_to_midpoint) { // Move the camera to the edge of the bounding sphere, while still // pointing at the scene. SbVec3f direction = cam_pos - box_cnt; (void) direction.normalize(); // we know this is not a null vector camera->position.setValue(box_cnt + direction * radius); // New distance to mid point distance_to_midpoint = (camera->position.getValue() - box.getCenter()).length(); camera->nearDistance = distance_to_midpoint - radius; camera->farDistance = distance_to_midpoint + radius; camera->focalDistance = distance_to_midpoint; } } }
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(); } }
Py::Object interactiveFilletArc(const Py::Tuple& args) { Gui::Document* doc = Gui::Application::Instance->activeDocument(); if (doc) { Gui::View3DInventor* view = qobject_cast<Gui::View3DInventor*>(doc->getActiveView()); if (view) { Gui::View3DInventorViewer* viewer = view->getViewer(); SoSeparator* scene = static_cast<SoSeparator*>(viewer->getSceneGraph()); SoSeparator* node = new SoSeparator(); SoBaseColor* rgb = new SoBaseColor(); rgb->rgb.setValue(1,1,0); node->addChild(rgb); SoCoordinate3* coords = new SoCoordinate3(); node->addChild(coords); node->addChild(new SoLineSet()); scene->addChild(node); ObjectObserver* obs = new ObjectObserver(doc->getDocument()->getActiveObject(), coords); obs->attachDocument(doc->getDocument()); } } return Py::None(); }
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(); } }
Gui::MDIView* ViewProviderDocumentObject::getActiveView() const { App::Document* pAppDoc = pcObject->getDocument(); Gui::Document* pGuiDoc = Gui::Application::Instance->getDocument(pAppDoc); return pGuiDoc->getActiveView(); }
void CmdPartDesignBody::activated(int iMsg) { Q_UNUSED(iMsg); if ( !PartDesignGui::assureModernWorkflow( getDocument() ) ) return; App::Part *actPart = PartDesignGui::getActivePart (); App::Part* partOfBaseFeature = nullptr; std::vector<App::DocumentObject*> features = getSelection().getObjectsOfType(Part::Feature::getClassTypeId()); App::DocumentObject* baseFeature = nullptr; bool viewAll = features.empty(); if (!features.empty()) { if (features.size() == 1) { baseFeature = features[0]; if ( baseFeature->isDerivedFrom ( PartDesign::Feature::getClassTypeId() ) && PartDesign::Body::findBodyOf ( baseFeature ) ) { // Prevent creating bodies based on features already belonging to other bodies QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Bad base feature"), QObject::tr("Body can't be based on a PartDesign feature.")); baseFeature = nullptr; } else if (PartDesign::Body::findBodyOf ( baseFeature )){ QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Bad base feature"), QObject::tr("%1 already belongs to a body, can't use it as base feature for another body.") .arg(QString::fromUtf8(baseFeature->Label.getValue()))); baseFeature = nullptr; } else if ( baseFeature->isDerivedFrom ( Part::BodyBase::getClassTypeId() ) ) { // Prevent creating bodies based on bodies QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Bad base feature"), QObject::tr("Body can't be based on another body.")); baseFeature = nullptr; } else { partOfBaseFeature = App::Part::getPartOfObject(baseFeature); if (partOfBaseFeature != 0 && partOfBaseFeature != actPart){ //prevent cross-part mess QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Bad base feature"), QObject::tr("Base feature (%1) belongs to other part.") .arg(QString::fromUtf8(baseFeature->Label.getValue()))); baseFeature = nullptr; }; } } else { QMessageBox::warning(Gui::getMainWindow(), QObject::tr("Bad base feature"), QObject::tr("Body may be based no more than on one feature.")); return; } } openCommand("Add a Body"); std::string bodyName = getUniqueObjectName("Body"); // add the Body feature itself, and make it active doCommand(Doc,"App.activeDocument().addObject('PartDesign::Body','%s')", bodyName.c_str()); if (baseFeature) { if (partOfBaseFeature){ //withdraw base feature from Part, otherwise visibility mandess results doCommand(Doc,"App.activeDocument().%s.removeObject(App.activeDocument().%s)", partOfBaseFeature->getNameInDocument(), baseFeature->getNameInDocument()); } doCommand(Doc,"App.activeDocument().%s.BaseFeature = App.activeDocument().%s", bodyName.c_str(), baseFeature->getNameInDocument()); } addModule(Gui,"PartDesignGui"); // import the Gui module only once a session doCommand(Gui::Command::Gui, "Gui.activeView().setActiveObject('%s', App.activeDocument().%s)", PDBODYKEY, bodyName.c_str()); // Make the "Create sketch" prompt appear in the task panel doCommand(Gui,"Gui.Selection.clearSelection()"); doCommand(Gui,"Gui.Selection.addSelection(App.ActiveDocument.%s)", bodyName.c_str()); if (actPart) { doCommand(Doc,"App.activeDocument().%s.addObject(App.ActiveDocument.%s)", actPart->getNameInDocument(), bodyName.c_str()); } // The method 'SoCamera::viewBoundingBox' is still declared as protected in Coin3d versions // older than 4.0. #if COIN_MAJOR_VERSION >= 4 // if no part feature was there then auto-adjust the camera if (viewAll) { Gui::Document* doc = Gui::Application::Instance->getDocument(getDocument()); Gui::View3DInventor* view = doc ? qobject_cast<Gui::View3DInventor*>(doc->getActiveView()) : nullptr; if (view) { SoCamera* camera = view->getViewer()->getCamera(); SbViewportRegion vpregion = view->getViewer()->getViewportRegion(); float aspectratio = vpregion.getViewportAspectRatio(); float size = Gui::ViewProviderOrigin::defaultSize(); SbBox3f bbox; bbox.setBounds(-size,-size,-size,size,size,size); camera->viewBoundingBox(bbox, aspectratio, 1.0f); } } #endif updateActive(); }
void CmdShapeInfo::activated(int iMsg) { static const char * const part_pipette[]={ "32 32 17 1", "# c #000000", "j c #080808", "b c #101010", "f c #1c1c1c", "g c #4c4c4c", "c c #777777", "a c #848484", "i c #9c9c9c", "l c #b9b9b9", "e c #cacaca", "n c #d6d6d6", "k c #dedede", "d c #e7e7e7", "m c #efefef", "h c #f7f7f7", "w c #ffffff", ". c None", "................................", ".....................#####......", "...................#######......", "...................#########....", "..................##########....", "..................##########....", "..................##########....", ".................###########....", "...............#############....", ".............###############....", ".............#############......", ".............#############......", "...............ab######.........", "..............cdef#####.........", ".............ghdacf####.........", "............#ehiacj####.........", "............awiaaf####..........", "...........iheacf##.............", "..........#kdaag##..............", ".........gedaacb#...............", ".........lwiac##................", ".......#amlaaf##................", ".......cheaag#..................", "......#ndaag##..................", ".....#imaacb#...................", ".....iwlacf#....................", "....#nlaag##....................", "....feaagj#.....................", "....caag##......................", "....ffbj##......................", "................................", "................................"}; Gui::Document* doc = Gui::Application::Instance->activeDocument(); Gui::View3DInventor* view = static_cast<Gui::View3DInventor*>(doc->getActiveView()); //if (view) { // Gui::View3DInventorViewer* viewer = view->getViewer(); // viewer->setEditing(true); // viewer->getWidget()->setCursor(QCursor(QPixmap(part_pipette),4,29)); // viewer->addEventCallback(SoMouseButtonEvent::getClassTypeId(), PartGui::ViewProviderPart::shapeInfoCallback); // } }