void GLViewer::postSelection(const QPoint& point) { // Compute orig and dir, used to draw a representation of the intersecting line camera()->convertClickToLine(point, orig, dir); // Find the selectedPoint coordinates, using camera()->pointUnderPixel(). bool found; selectedPoint = camera()->pointUnderPixel(point, found); selectedPoint -= 0.01f*dir; // Small offset to make point clearly visible. // Note that "found" is different from (selectedObjectId()>=0) because of the size of the select region. if (selectedName() != -1) QMessageBox::information(this, "Selection", "Spiral number " + QString::number(selectedName()) + " selected under pixel " + QString::number(point.x()) + "," + QString::number(point.y())); }
// New coordinate system selected from the list void QgsProjectionSelectionTreeWidget::lstCoordinateSystems_currentItemChanged( QTreeWidgetItem *current, QTreeWidgetItem * ) { QgsDebugMsgLevel( "Entered.", 4 ); if ( !current ) { QgsDebugMsgLevel( "no current item", 4 ); return; } lstCoordinateSystems->scrollToItem( current ); // If the item has children, it's not an end node in the tree, and // hence is just a grouping thingy, not an actual CRS. if ( current->childCount() == 0 ) { // Found a real CRS emit crsSelected(); teSelected->setText( selectedName() ); updateBoundsPreview(); QList<QTreeWidgetItem *> nodes = lstRecent->findItems( current->text( QgisCrsIdColumn ), Qt::MatchExactly, QgisCrsIdColumn ); if ( !nodes.isEmpty() ) { QgsDebugMsgLevel( QString( "found srs %1 in recent" ).arg( current->text( QgisCrsIdColumn ) ), 4 ); lstRecent->setCurrentItem( nodes.first() ); } else { QgsDebugMsgLevel( QString( "srs %1 not recent" ).arg( current->text( QgisCrsIdColumn ) ), 4 ); lstRecent->clearSelection(); lstCoordinateSystems->setFocus( Qt::OtherFocusReason ); } } else { // Not an CRS - remove the highlight so the user doesn't get too confused current->setSelected( false ); teProjection->clear(); teSelected->clear(); lstRecent->clearSelection(); } }
void postSelection( const QPoint& ) { int id = selectedName(); std::cerr << "id=" << id << std::endl; }
void GLViewer::draw() { #ifdef YADE_GL2PS if(!nextFrameSnapshotFilename.empty() && boost::algorithm::ends_with(nextFrameSnapshotFilename,".pdf")){ gl2psStream=fopen(nextFrameSnapshotFilename.c_str(),"wb"); if(!gl2psStream){ int err=errno; throw runtime_error(string("Error opening file ")+nextFrameSnapshotFilename+": "+strerror(err)); } LOG_DEBUG("Start saving snapshot to "<<nextFrameSnapshotFilename); size_t nBodies=Omega::instance().getScene()->bodies->size(); int sortAlgo=(nBodies<100 ? GL2PS_BSP_SORT : GL2PS_SIMPLE_SORT); gl2psBeginPage(/*const char *title*/"Some title", /*const char *producer*/ "Yade", /*GLint viewport[4]*/ NULL, /*GLint format*/ GL2PS_PDF, /*GLint sort*/ sortAlgo, /*GLint options*/GL2PS_SIMPLE_LINE_OFFSET|GL2PS_USE_CURRENT_VIEWPORT|GL2PS_TIGHT_BOUNDING_BOX|GL2PS_COMPRESS|GL2PS_OCCLUSION_CULL|GL2PS_NO_BLENDING, /*GLint colormode*/ GL_RGBA, /*GLint colorsize*/0, /*GL2PSrgba *colortable*/NULL, /*GLint nr*/0, /*GLint ng*/0, /*GLint nb*/0, /*GLint buffersize*/4096*4096 /* 16MB */, /*FILE *stream*/ gl2psStream, /*const char *filename*/NULL); } #endif qglviewer::Vec vd=camera()->viewDirection(); renderer->viewDirection=Vector3r(vd[0],vd[1],vd[2]); if(Omega::instance().getScene()){ const shared_ptr<Scene>& scene=Omega::instance().getScene(); int selection = selectedName(); if(selection!=-1 && (*(Omega::instance().getScene()->bodies)).exists(selection) && isMoving){ static Real lastTimeMoved(0); float v0,v1,v2; manipulatedFrame()->getPosition(v0,v1,v2); if(last == selection) // delay by one redraw, so the body will not jump into 0,0,0 coords { Quaternionr& q = (*(Omega::instance().getScene()->bodies))[selection]->state->ori; Vector3r& v = (*(Omega::instance().getScene()->bodies))[selection]->state->pos; Vector3r& vel = (*(Omega::instance().getScene()->bodies))[selection]->state->vel; Vector3r& angVel = (*(Omega::instance().getScene()->bodies))[selection]->state->angVel; angVel=Vector3r::Zero(); Real dt=(scene->time-lastTimeMoved); lastTimeMoved=scene->time; if (dt!=0) { vel[0]=-(v[0]-v0)/dt; vel[1]=-(v[1]-v1)/dt; vel[2]=-(v[2]-v2)/dt;} else vel[0]=vel[1]=vel[2]=0; //FIXME: should update spin like velocity above, when the body is rotated: double q0,q1,q2,q3; manipulatedFrame()->getOrientation(q0,q1,q2,q3); q.x()=q0;q.y()=q1;q.z()=q2;q.w()=q3; } (*(Omega::instance().getScene()->bodies))[selection]->userForcedDisplacementRedrawHook(); } if(manipulatedClipPlane>=0){ assert(manipulatedClipPlane<renderer->numClipPlanes); float v0,v1,v2; manipulatedFrame()->getPosition(v0,v1,v2); double q0,q1,q2,q3; manipulatedFrame()->getOrientation(q0,q1,q2,q3); Se3r newSe3(Vector3r(v0,v1,v2),Quaternionr(q0,q1,q2,q3)); newSe3.orientation.normalize(); const Se3r& oldSe3=renderer->clipPlaneSe3[manipulatedClipPlane]; FOREACH(int planeId, boundClipPlanes){ if(planeId>=renderer->numClipPlanes || !renderer->clipPlaneActive[planeId] || planeId==manipulatedClipPlane) continue; Se3r& boundSe3=renderer->clipPlaneSe3[planeId]; Quaternionr relOrient=oldSe3.orientation.conjugate()*boundSe3.orientation; relOrient.normalize(); Vector3r relPos=oldSe3.orientation.conjugate()*(boundSe3.position-oldSe3.position); boundSe3.position=newSe3.position+newSe3.orientation*relPos; boundSe3.orientation=newSe3.orientation*relOrient; boundSe3.orientation.normalize(); } renderer->clipPlaneSe3[manipulatedClipPlane]=newSe3; } scene->renderer=renderer; renderer->render(scene, selectedName()); }
DocLnk OFileViewInterface::selectedDocument()const { return DocLnk( selectedName() ); }