<div dir="ltr"><div><div><div><div><div>Thank you for your kind reply, Utkarsh.<br></div>The C++ example clarifies many of the details that I couldn't find explained anywhere.<br><br></div>I will try to wrap the missing parts in python, because we can't afford to migrate the rest of our application to C++.<br></div>Just asking, before I waste my time with a bunch of problems that you know in advance that cannot be solved: Is there any reason why the steps you showed cannot be wrapped in python, or has it "just not been done, yet"?<br><br></div>Thanks<br></div>Mario<br><br></div><div class="gmail_extra"><br><div class="gmail_quote">2016-12-13 18:54 GMT+01:00 Utkarsh Ayachit <span dir="ltr"><<a href="mailto:utkarsh.ayachit@kitware.com" target="_blank">utkarsh.ayachit@kitware.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Mario,<br>
<br>
Firstly, there's no way from Python to do what you want to do except<br>
using the property mechanism, since well, the goal with ParaView was<br>
not to provide a general purpose RPC framework. In C++, you can do<br>
that you want as follows:<br>
<br>
vtkSMProxy* proxy = ...<br>
std::string arg = ...;<br>
vtkClientServerStream stream;<br>
stream << vtkClientServerStream::Invoke<br>
            << VTKOBJECT(proxy)<br>
            << "doSomething" << arg.c_str()<br>
            << vtkClientServerStream::End;<br>
<br>
vtkSMSession* session = proxy->GetSession();<br>
session->ExecuteStream(<br>
   /*location*/ proxy->GetLocation(),<br>
  /* ignore_errores*/ false);<br>
<br>
vtkClientServerStream result = session->GetLastResult(proxy-><wbr>GetLocation());<br>
if (result.GetNumberOfMessages() == 1 && result.GetNumberOfArguments(0) == 1)<br>
{<br>
   std:string aresult;<br>
  result.GetArgument(0, 0, &aresult);<br>
}<br>
<br>
Utkarsh<br>
<div><div class="h5"><br>
<br>
<br>
On Sun, Dec 11, 2016 at 12:01 PM, Mario Schreiber<br>
<<a href="mailto:schreibermario40@gmail.com">schreibermario40@gmail.com</a>> wrote:<br>
> Why is it so complicated to call a procedure and receive a return value on<br>
> the client?<br>
><br>
> I am attaching my attempt (CMakeLists.txt, vtkSquareFun.cxx, vtkSquareFun.h<br>
> and TestPlugin.xml, each less than 20 lines of code), which basically<br>
> calculates the square of an argument in vtkSquareFun::eval(double x).<br>
><br>
> When I load this plugin in Paraview and open the Python Shell, I can<br>
> evaluate vtkSquareFun::eval() using a detour by first setting the argument<br>
> and then getting the result, which is linked to the argument property in<br>
> TestPlugin.xml:<br>
><br>
> fun=servermanager.CreateProxy(<wbr>"test","SquareFun")<br>
> fun.GetProperty("Arg").<wbr>SetElement(0,999)<br>
> fun.UpdateVTKObjects()<br>
> fun.UpdatePropertyInformation(<wbr>)<br>
> fun.GetProperty("Result").<wbr>GetElement(0)<br>
> ... showing the correct result 998001.<br>
><br>
> Why can't I simply run the following?<br>
> fun=servermanager.CreateProxy(<wbr>"test","SquareFun")<br>
> result=fun.InvokeCommand("<wbr>eval",[999.0])<br>
><br>
> Does Paraview really not provide any means of calling a function with<br>
> arguments and return value within a single client-server communication? All<br>
> these individual message transfers are a bottleneck in our application. Does<br>
> the Paraview architecture exclude more universal remote procedure calls, or<br>
> do you think that one could just augment the available procedures with<br>
> another procedure that can deliver a set of custom return values?<br>
><br>
> Thanks<br>
> Mario<br>
><br>
><br>
> 2016-12-07 7:34 GMT+01:00 Mario Schreiber <<a href="mailto:schreibermario40@gmail.com">schreibermario40@gmail.com</a>>:<br>
>><br>
>> Hello,<br>
>> I have a use case, where a vtkObject on the server implements a method<br>
>> like<br>
>><br>
>> std::string doSomething(std::string arg);<br>
>><br>
>> Now, with a proxy prx on the client for  that class, I would like to call<br>
>> the remote procedure similar to<br>
>><br>
>> result=prx.InvokeCommand("<wbr>doSomething",[arg])<br>
>><br>
>> Is something like this possible?<br>
>> I found a very complicated workaround by first defining the arguments as<br>
>> properties, defining the result as information_only property linked to on of<br>
>> the args, then calling "UpdateVTKObjects" to push the arguments and finally<br>
>> "UpdateInformationProperties" to pull the result. Is there an easier<br>
>> solution, possible with a short example?<br>
>><br>
>> Thank you<br>
>> Mario<br>
><br>
><br>
><br>
</div></div>> ______________________________<wbr>_________________<br>
> Powered by <a href="http://www.kitware.com" rel="noreferrer" target="_blank">www.kitware.com</a><br>
><br>
> Visit other Kitware open-source projects at<br>
> <a href="http://www.kitware.com/opensource/opensource.html" rel="noreferrer" target="_blank">http://www.kitware.com/<wbr>opensource/opensource.html</a><br>
><br>
> Please keep messages on-topic and check the ParaView Wiki at:<br>
> <a href="http://paraview.org/Wiki/ParaView" rel="noreferrer" target="_blank">http://paraview.org/Wiki/<wbr>ParaView</a><br>
><br>
> Search the list archives at: <a href="http://markmail.org/search/?q=ParaView" rel="noreferrer" target="_blank">http://markmail.org/search/?q=<wbr>ParaView</a><br>
><br>
> Follow this link to subscribe/unsubscribe:<br>
> <a href="http://public.kitware.com/mailman/listinfo/paraview" rel="noreferrer" target="_blank">http://public.kitware.com/<wbr>mailman/listinfo/paraview</a><br>
><br>
</blockquote></div><br></div>