[Paraview] Incorporating ImplicitPlane widget into ServerManagerXML
Alex Rattner
Alex.Rattner at gatech.edu
Thu Aug 2 16:20:53 EDT 2012
Hi Burlen,
Thank you for sharing the code. I will check it out soon.
-Alex
On 08/02/2012 10:16 AM, Burlen Loring wrote:
>> 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
>
More information about the ParaView
mailing list