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(); }
static void selectionCallback(void * ud, SoEventCallback * cb) { Gui::View3DInventorViewer* view = reinterpret_cast<Gui::View3DInventorViewer*>(cb->getUserData()); view->removeEventCallback(SoMouseButtonEvent::getClassTypeId(), selectionCallback, ud); SoNode* root = view->getSceneGraph(); static_cast<Gui::SoFCUnifiedSelection*>(root)->selectionRole.setValue(true); std::vector<SbVec2f> picked = view->getGLPolygon(); SoCamera* cam = view->getSoRenderManager()->getCamera(); SbViewVolume vv = cam->getViewVolume(); Gui::ViewVolumeProjection proj(vv); Base::Polygon2d polygon; if (picked.size() == 2) { SbVec2f pt1 = picked[0]; SbVec2f pt2 = picked[1]; polygon.Add(Base::Vector2d(pt1[0], pt1[1])); polygon.Add(Base::Vector2d(pt1[0], pt2[1])); polygon.Add(Base::Vector2d(pt2[0], pt2[1])); polygon.Add(Base::Vector2d(pt2[0], pt1[1])); } else { for (std::vector<SbVec2f>::const_iterator it = picked.begin(); it != picked.end(); ++it) polygon.Add(Base::Vector2d((*it)[0],(*it)[1])); } FaceColors* self = reinterpret_cast<FaceColors*>(ud); self->d->view = 0; if (self->d->obj && self->d->obj->getTypeId().isDerivedFrom(Part::Feature::getClassTypeId())) { cb->setHandled(); const TopoDS_Shape& shape = static_cast<Part::Feature*>(self->d->obj)->Shape.getValue(); self->d->addFacesToSelection(view, proj, polygon, shape); view->redraw(); } }
void CmdTestWidgetShape::activated(int iMsg) { SandboxGui::SoWidgetShape* shape = new SandboxGui::SoWidgetShape; shape->setWidget(new QCalendarWidget()); Gui::MDIView* view = Gui::getMainWindow()->activeWindow(); Gui::View3DInventorViewer* viewer = static_cast<Gui::View3DInventor*>(view)->getViewer(); static_cast<SoGroup*>(viewer->getSceneGraph())->addChild(shape); }
void MeshFillHole::finishEditing() { Gui::View3DInventor* view = static_cast<Gui::View3DInventor*>(parent()); Gui::View3DInventorViewer* viewer = view->getViewer(); viewer->setEditing(false); //viewer->setRedirectToSceneGraph(false); viewer->removeEventCallback(SoEvent::getClassTypeId(), MeshFillHole::fileHoleCallback, this); myConnection.disconnect(); this->deleteLater(); static_cast<SoGroup*>(viewer->getSceneGraph())->removeChild(myBridgeRoot); }
void paintSelection() { #if 0 SoAnnotation* hudRoot = new SoAnnotation; hudRoot->ref(); SoOrthographicCamera* hudCam = new SoOrthographicCamera(); hudCam->viewportMapping = SoCamera::LEAVE_ALONE; // Set the position in the window. // [0, 0] is in the center of the screen. // SoTranslation* hudTrans = new SoTranslation; hudTrans->translation.setValue(-1.0f, -1.0f, 0.0f); QImage image(100,100,QImage::Format_ARGB32_Premultiplied); image.fill(0x00000000); SoSFImage sfimage; Gui::BitmapFactory().convert(image, sfimage); SoImage* hudImage = new SoImage(); hudImage->image = sfimage; // Assemble the parts... // hudRoot->addChild(hudCam); hudRoot->addChild(hudTrans); hudRoot->addChild(hudImage); Gui::View3DInventorViewer* viewer = this->getViewer(); static_cast<SoGroup*>(viewer->getSceneGraph())->addChild(hudRoot); QWidget* gl = viewer->getGLWidget(); DrawingPlane pln(hudImage->image, viewer, gl); gl->installEventFilter(&pln); QEventLoop loop; QObject::connect(&pln, SIGNAL(emitSelection()), &loop, SLOT(quit())); loop.exec(); static_cast<SoGroup*>(viewer->getSceneGraph())->removeChild(hudRoot); #endif }
void FaceColors::on_boxSelection_clicked() { Gui::View3DInventor* view = qobject_cast<Gui::View3DInventor*>(Gui::getMainWindow()->activeWindow()); if (view) { Gui::View3DInventorViewer* viewer = view->getViewer(); if (!viewer->isSelecting()) { viewer->startSelection(Gui::View3DInventorViewer::Rubberband); viewer->addEventCallback(SoMouseButtonEvent::getClassTypeId(), Private::selectionCallback, this); // avoid that the selection node handles the event otherwise the callback function won't be // called immediately SoNode* root = viewer->getSceneGraph(); static_cast<Gui::SoFCUnifiedSelection*>(root)->selectionRole.setValue(false); d->view = viewer; } } }
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; } } }
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 MeshFillHole::startEditing(MeshGui::ViewProviderMesh* vp) { this->myMesh = static_cast<Mesh::Feature*>(vp->getObject()); Gui::View3DInventor* view = static_cast<Gui::View3DInventor*>(parent()); Gui::View3DInventorViewer* viewer = view->getViewer(); viewer->setEditing(true); //viewer->setRedirectToSceneGraph(true); viewer->addEventCallback(SoEvent::getClassTypeId(), MeshFillHole::fileHoleCallback, this); myConnection = App::GetApplication().signalChangedObject.connect( boost::bind(&MeshFillHole::slotChangedObject, this, _1, _2)); myBoundariesRoot->removeAllChildren(); myBoundariesRoot->addChild(viewer->getHeadlight()); myBoundariesRoot->addChild(viewer->getCamera()); myBoundariesRoot->addChild(myBoundariesGroup); myBoundaryRoot->removeAllChildren(); myBoundaryRoot->addChild(viewer->getHeadlight()); myBoundaryRoot->addChild(viewer->getCamera()); createPolygons(); static_cast<SoGroup*>(viewer->getSceneGraph())->addChild(myBridgeRoot); }
void CmdTestImageNode::activated(int iMsg) { QString text = QString::fromAscii("Distance: 2.7jgiorjgor84mm"); QFont font; QFontMetrics fm(font); int w = fm.width(text); int h = fm.height(); QPainterPath roundRectPath; //roundRectPath.moveTo(80.0, 35.0); //roundRectPath.arcTo(70.0, 30.0, 10.0, 10.0, 0.0, 90.0); //roundRectPath.lineTo(25.0, 30.0); //roundRectPath.arcTo(20.0, 30.0, 10.0, 10.0, 90.0, 90.0); //roundRectPath.lineTo(20.0, 65.0); //roundRectPath.arcTo(20.0, 60.0, 10.0, 10.0, 180.0, 90.0); //roundRectPath.lineTo(75.0, 70.0); //roundRectPath.arcTo(70.0, 60.0, 10.0, 10.0, 270.0, 90.0); roundRectPath.moveTo(100.0, 5.0); roundRectPath.arcTo(90.0, 0.0, 10.0, 10.0, 0.0, 90.0); roundRectPath.lineTo(5.0, 0.0); roundRectPath.arcTo(0.0, 0.0, 10.0, 10.0, 90.0, 90.0); roundRectPath.lineTo(0.0, 95.0); roundRectPath.arcTo(0.0, 90.0, 10.0, 10.0, 180.0, 90.0); roundRectPath.lineTo(95.0, 100.0); roundRectPath.arcTo(90.0, 90.0, 10.0, 10.0, 270.0, 90.0); roundRectPath.closeSubpath(); QLabel* l = new QLabel(); //l.setText(QLatin1String("Distance: 2.784mm")); //QPixmap p = QPixmap::grabWidget(&l, 0,0,100,100); //l.show(); //QPixmap p = Gui::BitmapFactory().pixmap("edit-cut"); Gui::MDIView* view = Gui::getMainWindow()->activeWindow(); Gui::View3DInventorViewer* viewer = static_cast<Gui::View3DInventor*>(view)->getViewer(); SoImage* node = new SoImage(); QImage image(w+10,h+10,QImage::Format_ARGB32_Premultiplied);// = p.toImage(); image.fill(0x00000000); QPainter painter(&image); painter.setRenderHint(QPainter::Antialiasing); painter.setPen(QPen(QColor(0,0,127), 2, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); painter.setBrush(QBrush(QColor(0,85,255), Qt::SolidPattern)); QRectF rectangle(0.0, 0.0, w+10, h+10); painter.drawRoundedRect(rectangle, 5, 5); //painter.drawRect(rectangle); //painter.drawPath(roundRectPath); painter.setPen(QColor(255,255,255)); painter.drawText(5,h+3, text); painter.end(); //l->setPixmap(QPixmap::fromImage(image)); //l->show(); //RenderArea* ra = new RenderArea(roundRectPath); //ra->show(); //QPixmap p = QPixmap::grabWidget(ra, 0,0,100,30); //image = p.toImage(); SoSFImage texture; Gui::BitmapFactory().convert(image, texture); node->image = texture; SoAnnotation* anno = new SoAnnotation(); anno->addChild(node); static_cast<SoGroup*>(viewer->getSceneGraph())->addChild(anno); }