[Paraview-developers] establish client connection to pvserver from C++

Utkarsh Ayachit utkarsh.ayachit at kitware.com
Thu Apr 21 10:49:10 EDT 2016


Peter,

Here's an example:

https://gitlab.kitware.com/paraview/paraview/merge_requests/747/diffs

Utkarsh

On Thu, Apr 21, 2016 at 9:57 AM, Peter Vogt <vogtpeter5 at gmail.com> wrote:
> Thank you, Utkarsh,
> the time for writing our last posts has overlapped. I had fixed the missing
> UpdateVTKObjects() call in between, and I think the only missing step is to
> add the sphere's representation to the view proxy.
> But how do I add it to the Representations "property"? Neither
> vtkSMViewProxy nor vtkSMRenderViewProxy have a method like
> GetRepresentations() or InsertRepresentation(). Getting this final step
> right will certainly help me understand the programming principle.
>
> If the vtkSMParaViewPipleineControllerWithRendering is the recommended way
> of remotely rendering objects, I'll definitely appreciate an example using
> this class, if it doesn't cost you too much time.
>
> Thanks
> Peter
>
>
> On Thu, Apr 21, 2016 at 3:42 PM, Utkarsh Ayachit
> <utkarsh.ayachit at kitware.com> wrote:
>>
>> Peter,
>>
>> After a proxy is created or after any of its properties are changed,
>> one must call "vtkSMProxy::UpdateVTKObject()" to push the changes made
>> locally to the server or the underlying VTK objects. Try putting a
>> call to this method the NewProxy(...) calls. You're also missing
>> adding the Sphere source's representation to the View proxy's
>> "Representations" property. Other option is to use the
>> vtkSMParaViewPipleineControllerWithRendering.
>>
>> Give me a few hours, and I can put together an example that uses the
>> controller to create a view and show something in it to get you
>> started.
>>
>> Utkarsh
>>
>>
>>
>> On Thu, Apr 21, 2016 at 8:49 AM, Peter Vogt <vogtpeter5 at gmail.com> wrote:
>> > Hello again,
>> > thanks to your help, I was able to establish a connection to a pvserver
>> > and
>> > create a SphereSource proxy. Now I cannot figure out how to view the
>> > rendered scene on the client.
>> >
>> > My attempt, "TestConnection.cxx", is attached below. I have tried three
>> > alternatives, which I have marked in the code:
>> > Alternative 1 calls "view->StillRender()", which shows the greyish
>> > background, maybe because the sphere is outside the viewport?
>> > Alternative 2 calls "view->ResetCamera()" before the StillRender(), but
>> > ResetCamera crashes with the following output:
>> >>ERROR: In
>> >>
>> >> /opt/ParaView-v5.0.1-source/ParaViewCore/ServerImplementation/Core/vtkPVSessionCoreInterpreterHelper.cxx,
>> >> line 63
>> >>vtkPVSessionCoreInterpreterHelper (0x976950): No vtkSIProxy for id : 257
>> >>
>> >>ERROR: In
>> >>
>> >> /opt/ParaView-v5.0.1-source/ParaViewCore/ServerImplementation/Core/vtkPVSessionCore.cxx,
>> >> line 390
>> >>vtkPVSessionCore (0x8ca480): Wrapper function not found for class "(vtk
>> >> object is NULL)".
>> >>while processing
>> >>Message 0 = Invoke
>> >>  Argument 0 = stream_value {
>> >>    Message 0 = Invoke
>> >>      Argument 0 = id_value {1}
>> >>      Argument 1 = string_value {GetVTKObject}
>> >>      Argument 2 = uint32_value {257}
>> >>    }
>> >>  Argument 1 = string_value {ResetCamera}
>> >>
>> >>
>> >>ERROR: In
>> >>
>> >> /opt/ParaView-v5.0.1-source/ParaViewCore/ServerImplementation/Core/vtkPVSessionCore.cxx,
>> >> line 391
>> >>vtkPVSessionCore (0x8ca480): Aborting execution for debugging purposes.
>> >>
>> >>############ ABORT #############
>> >>Wrong tag but don't know how to handle it... 188971
>> >>Aborted (core dumped)
>> > Alternative 3 tries to show an interactive RenderWindow, but crashes,
>> > because view->GetInteractor() returns NULL.
>> >
>> > Apparently I am missing some important step. Can somebody point out how
>> > to
>> > modify the example (below) in order to render the sphere source visible?
>> >
>> > Thank you
>> > Peter
>> >
>> > TestConnection.cxx:
>> >
>> > #include "vtkInitializationHelper.h"
>> > #include "vtkProcessModule.h"
>> > #include "vtkPVOptions.h"
>> > #include "vtkSMProxyManager.h"
>> > #include "vtkSMSession.h"
>> > #include "vtkSMSessionClient.h"
>> > #include "vtkSMSessionProxyManager.h"
>> > #include "vtkSMSourceProxy.h"
>> > #include "vtkSMProperty.h"
>> > #include "vtkSMRenderViewProxy.h"
>> >
>> > #include "vtkRenderWindow.h"
>> > #include "vtkRenderWindowInteractor.h"
>> >
>> > int main(int argc, char* argv[])
>> > {
>> >   // Initialization
>> >   vtkPVOptions* options = vtkPVOptions::New();
>> >   vtkInitializationHelper::Initialize(argc, argv,
>> >                                       vtkProcessModule::PROCESS_CLIENT,
>> >                                       options);
>> >
>> >   vtkSMSessionClient* session = vtkSMSessionClient::New();
>> >   vtkProcessModule::GetProcessModule()->RegisterSession(session);
>> >   session->Connect(options->GetServerURL());
>> >   cout<<"Connected to: "<<options->GetServerURL()<<endl;
>> >
>> >   vtkSMSessionProxyManager *pxm = session->GetSessionProxyManager();
>> >   vtkSMProxy *sphere = pxm->NewProxy("sources", "SphereSource");
>> >   cout<<"SphereSource created."<<endl;
>> >   vtkSMRenderViewProxy*
>> > view=(vtkSMRenderViewProxy*)pxm->NewProxy("views",
>> > "RenderView");
>> >   cout<<"RenderView created."<<endl;
>> >   vtkSMRepresentationProxy*
>> > repr=view->CreateDefaultRepresentation(sphere,0);
>> >   cout<<"DefaultRepresentation created."<<endl;
>> >
>> > //Alternative 1:
>> >   view->StillRender(); while(1); //no crash, but only background
>> > visible.
>> >
>> > //Alternative 2:
>> > /*
>> >   view->ResetCamera(); //crash here
>> >   view->StillRender(); while(1);
>> > */
>> >
>> > //Alternative 3:
>> > /*
>> >   view->InteractiveRender();
>> >   view->GetInteractor()->Initialize(); //crash here, because
>> > view->GetInteractor()==NULL
>> >   view->GetInteractor()->Start();
>> > */
>> >   //TODO: clean up stuff
>> > }
>> >
>> > On Wed, Apr 20, 2016 at 5:26 PM, Utkarsh Ayachit
>> > <utkarsh.ayachit at kitware.com> wrote:
>> >>
>> >> > Thank you, but we need a pure C++ solution. There is plenty of
>> >> > information
>> >> > how this is done with python scripting, but I can't find anything for
>> >> > C++.
>> >> > I really need nothing more than a minimal example.
>> >>
>> >> Peter, look at TestComparativeAnimationCueProxy.cxx[1] file in the
>> >> ParaView source. It demonstrates how the initialization needs to
>> >> happen. If you have further questions on how to use anything specific
>> >> in this application, feel free to holler :).
>> >>
>> >> [1]
>> >>
>> >> https://gitlab.kitware.com/paraview/paraview/blob/master/ParaViewCore/ServerManager/Default/Testing/Cxx/TestComparativeAnimationCueProxy.cxx
>> >>
>> >> Utkarsh
>> >
>> >
>
>


More information about the Paraview-developers mailing list