/*!
  Sets up the grasp visualization window.  If one exists already it is
  deleted.  The window consists of a render area, and the scene graph uses
  the same camera as the main viewer.  The primitives sub-graph, pointed to by
  \a prim , is added using the same transform as \a myBody has in the main
  world.  The candidate grasps can then be added to this scene later.
*/
void
grasp_tester::setupGraspVisWindow(GraspableBody *myBody, SoGroup *prim)
{

  if (projectionViewer) {
    QWidget *topShell = projectionViewer->getShellWidget();
    delete projectionViewer;
    delete topShell;
  }

  /* get global stuff from ivmgr */
  updateGlobals();

  SoSeparator *VisTop = new SoSeparator();
  SoTransformSeparator *lightSep = new SoTransformSeparator();
  SoRotation *lightDir = new SoRotation();
  SoSeparator *objSep = new SoSeparator();
  glRoot = new SoSeparator();

  lightDir->rotation.connectFrom(&myViewer->getCamera()->orientation);
  lightSep->addChild(lightDir);
  lightSep->addChild(myViewer->getHeadlight());

  objSep->addChild(myBody->getIVTran());
  objSep->addChild(prim);

  VisTop->addChild(myViewer->getCamera());
  VisTop->addChild(lightSep);
  VisTop->addChild(objSep);
  VisTop->addChild(glRoot);

  projectionViewer = new SoQtRenderArea();
  projectionViewer->setTransparencyType(SoGLRenderAction::SORTED_OBJECT_BLEND);
  projectionViewer->setBackgroundColor(SbColor(1, 1, 1));
  projectionViewer->setTitle("GraspIt!");

  projectionViewer->setSceneGraph(VisTop);
  projectionViewer->show();
}
Beispiel #2
0
//HandViewWindow:
//Set the HandViewWindow which contains he views themselves
HandViewWindow::HandViewWindow(QWidget * parent, Hand * h, const QRect & geom, SoNode * IVRoot, QWidget * stageFrame):currentPreviewIndex(-1),
maxViewSize(3), cloneHand(new Hand(h->getWorld(), "newHand")), geom_(geom), grid(NULL), stageFrame_(stageFrame)
{


  handViewWindow = new QFrame(NULL);
  handViewWindow->setWindowFlags(Qt::WindowStaysOnTopHint);
  viewHolder = new QFrame(NULL);
  handViewWindow->setGeometry(geom);
  hbox = new QHBoxLayout(handViewWindow);

    handViewWindow->show();
    viewHolder->setGeometry(0,0,2*geom_.width()/3,2*geom_.height()/3);
  viewHolder->setMinimumSize(2*geom_.width()/3,2*geom_.height()/3);
  viewHolder->setMaximumSize(2*geom_.width()/3,2*geom_.height()/3);
  viewHolder->setFrameStyle(QFrame::Box | QFrame::Raised);
 viewHolder->setLineWidth(2);
  if(IVRoot)
    {
      SoQtRenderArea * render = new SoQtRenderArea(viewHolder, " ",true);

      vbox1 = new QVBoxLayout();
      hbox->addLayout(vbox1);
      vbox1->addWidget(viewHolder);
      vbox1->addWidget(stageFrame);
      //render->setSceneGraph(IVRoot);
      SoSeparator * testRoot = new SoSeparator;
      //SoCone * testCone = new SoCone;
      //SoCamera * testCamera = new SoPerspectiveCamera;

      SoMaterial * testMaterial = new SoMaterial;

      testMaterial->diffuseColor.setValue(1,0,0);
      testRoot->addChild(graspItGUI->getIVmgr()->getViewer()->getCamera());
      SoTransformSeparator *lightSep = new SoTransformSeparator;
      SoRotation *lightDir = new SoRotation;
      lightDir->rotation.connectFrom(&graspItGUI->getIVmgr()->getViewer()->getCamera()->orientation);
      lightSep->addChild(lightDir);
      lightSep->addChild(graspItGUI->getIVmgr()->getViewer()->getHeadlight());
      SoLightModel * model = new SoLightModel;
      model->model=SoLightModel::PHONG;
      testRoot->addChild(lightSep);
      testRoot->addChild(model);
      testRoot->addChild(IVRoot);
      render->setSceneGraph(testRoot);
      render->setBackgroundColor(SbColor(1,1,1));
      render->scheduleRedraw();
      render->render();
      render->show();
    }
    vbox2 = new QVBoxLayout();
  vbox2->setGeometry(QRect(0,0,geom_.width()/3,geom_.height()));
  vbox2->setSizeConstraint(QLayout::SetMinimumSize);
  hbox->addLayout(vbox2);

 // vbox2->addWidget(new QWidget());
  //handViewWindow->setWindowFlags(Qt::WindowStaysOnTopHint);
  //handViewWindow->resize(QSize(900,100));
   //handViewFrame->setGeometry(geom_);
   handViewWindow->setFrameStyle(QFrame::Box | QFrame::Raised);
   handViewWindow->setLineWidth(4);


  cloneHand->cloneFrom(h);
  cloneHand->setTransparency(0.0);
  cloneHand->setRenderGeometry(false);
  cloneHand->showVirtualContacts(false);
  cloneHand->getWorld()->toggleCollisions(false, cloneHand);
}