In particular, I want a way to get the Camera Normal.
You could get the camera normal inside a custom panel on the client side and communicate it to your filter on the server side via the usual sm mechanisms. I have written a custom panel for an improved plane source in which I wanted to set the camera to look down the normal of a plane. Toward the end of that function is some code that sets the camera up based on the plane normal. Hope this will give you some ideas.

//-----------------------------------------------------------------------------
void pqSQPlaneSource::SnapViewToNormal()
{
  #if defined pqSQPlaneSourceDEBUG
  cerr << ":::::pqSQPlaneSource::SnapViewToNormal" << endl;
  #endif

  double o[3];
  this->GetOrigin(o);

  double p1[3];
  this->GetPoint1(p1);

  double p2[3];
  this->GetPoint2(p2);

  // compute the plane's center, this will become the camera focal point.
  double a[3];
  a[0]=o[0]+0.5*(p1[0]-o[0]);
  a[1]=o[1]+0.5*(p1[1]-o[1]);
  a[2]=o[2]+0.5*(p1[2]-o[2]);

  double b[3];
  b[0]=o[0]+0.5*(p2[0]-o[0]);
  b[1]=o[1]+0.5*(p2[1]-o[1]);
  b[2]=o[2]+0.5*(p2[2]-o[2]);

  double cen[3];
  cen[0]=a[0]+b[0]-o[0];
  cen[1]=a[1]+b[1]-o[1];
  cen[2]=a[2]+b[2]-o[2];

  // compute the camera center, 2 plane diagonals along its normal from
  // its center.
  double diag
    = sqrt(this->Dims[0]*this->Dims[0]+this->Dims[1]*this->Dims[1]);

  double l_pos[3];
  l_pos[0]=cen[0]+this->N[0]*2.0*diag;
  l_pos[1]=cen[1]+this->N[1]*2.0*diag;
  l_pos[2]=cen[2]+this->N[2]*2.0*diag;

  // compute the camera up from one of the planes axis.
  double up[3];
  if (this->Form->viewUp1->isChecked())
    {
    up[0]=p1[0]-o[0];
    up[1]=p1[1]-o[1];
    up[2]=p1[2]-o[2];
    }
  else
    {
    up[0]=p2[0]-o[0];
    up[1]=p2[1]-o[1];
    up[2]=p2[2]-o[2];
    }
  double mup=sqrt(up[0]*up[0]+up[1]*up[1]+up[2]*up[2]);
  up[0]/=mup;
  up[1]/=mup;
  up[2]/=mup;


  pqRenderView *l_view=dynamic_cast<pqRenderView*>(this->view());
  if (!l_view)
    {
    sqErrorMacro(qDebug(),"Failed to get the current view.");
    return;
    }

  vtkSMRenderViewProxy *l_proxy=l_view->getRenderViewProxy();

  vtkSMDoubleVectorProperty *prop;

prop=dynamic_cast<vtkSMDoubleVectorProperty*>(l_proxy->GetProperty("CameraPosition"));
  prop->SetElements(l_pos);

prop=dynamic_cast<vtkSMDoubleVectorProperty*>(l_proxy->GetProperty("CameraFocalPoint"));
  prop->SetElements(cen);

prop=dynamic_cast<vtkSMDoubleVectorProperty*>(l_proxy->GetProperty("CameraViewUp"));
  prop->SetElements(up);

prop=dynamic_cast<vtkSMDoubleVectorProperty*>(l_proxy->GetProperty("CenterOfRotation"));
  prop->SetElements(cen);

  l_proxy->UpdateVTKObjects();

  l_view->render();
}

On 08/01/2012 11:40 AM, Alex Rattner wrote:
Hello,

I am trying to develop a compiled paraview filter that takes an input plane/direction vector (like the clip or slice filters). Does anyone know of example code that shows how to incorporate the ImplicitPlane widget into the server manager xml. In particular, I want a way to get the Camera Normal. Is this possible?

Thanks,
Alex
_______________________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the ParaView Wiki at: http://paraview.org/Wiki/ParaView

Follow this link to subscribe/unsubscribe:
http://www.paraview.org/mailman/listinfo/paraview

_______________________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the ParaView Wiki at: 
http://paraview.org/Wiki/ParaView

Follow this link to subscribe/unsubscribe:
http://www.paraview.org/mailman/listinfo/paraview

Reply via email to