<div dir="ltr">I think you meant<span style="font-size:13px;font-family:arial,sans-serif"><br>double ActiveN</span><span style="font-size:13px;font-family:arial,sans-serif">odeCoord[3];<br></span><span style="font-size:13px;font-family:arial,sans-serif"><br>
instead of <br>
</span><div><span style="font-size:13px;font-family:arial,sans-serif">double ActiveN</span><span style="font-size:13px;font-family:arial,sans-serif">odeCoord[2];</span><span style="font-size:13px;font-family:arial,sans-serif"><br>

</span><div><span style="font-size:13px;font-family:arial,sans-serif"><br></span></div></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, May 8, 2013 at 10:33 AM, Sebastien Jourdain <span dir="ltr">&lt;<a href="mailto:sebastien.jourdain@kitware.com" target="_blank">sebastien.jourdain@kitware.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi Matthias,<div><br></div><div>you should use the following set of macro inside your vtkObject</div><div>
<br></div><div>public:</div><div>vtkSetVector3Macro(<span style="font-size:13px;font-family:arial,sans-serif">ActiveN</span><span style="font-size:13px;font-family:arial,sans-serif">odeCoord, double);</span></div>
vtkGetVector3Macro(<span style="font-size:13px;font-family:arial,sans-serif">ActiveN</span><span style="font-size:13px;font-family:arial,sans-serif">odeCoord, double);</span><div><span style="font-size:13px;font-family:arial,sans-serif"><br>

</span></div><div><span style="font-size:13px;font-family:arial,sans-serif">protected:</span></div><div><span style="font-size:13px;font-family:arial,sans-serif">double ActiveN</span><span style="font-size:13px;font-family:arial,sans-serif">odeCoord[2];</span><span style="font-size:13px;font-family:arial,sans-serif"><br>

</span></div><div><span style="font-size:13px;font-family:arial,sans-serif"><br></span></div><div><span style="font-size:13px;font-family:arial,sans-serif">This should solve your wrapping issue.</span></div></div><div class="gmail_extra">

<br><br><div class="gmail_quote">On Wed, May 8, 2013 at 9:39 AM, Matthias Schneider <span dir="ltr">&lt;<a href="mailto:schneider@vision.ee.ethz.ch" target="_blank">schneider@vision.ee.ethz.ch</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

Hi,<br>
<br>
Thanks for the useful hints. I have implemented the vtk class to interact with the vtk data object on the server side and use a proxy to interact with it from the client side as suggested by Sebastien - thanks! However, I&#39;m still struggling with the proper xml definition for the proxy. Also there seems to be an issue with the Client/Server wrapper (see below).<br>


<br>
The pure vtk class has the interface:<br>
<br>
class vtkMyDataHandler: public vtkObject {<br>
public:<br>
        [...]<br>
        void SetInput(vtkAlgorithm* src);<br>
        void SetActiveNode(vtkIdType id);<br>
<br>
        double* GetActiveNodeCoord();<br>
        void GetActiveNodeCoord(double coord[3]);<br>
        [...]<br>
private:<br>
        [...]<br>
        vtkPolyData* m_data;<br>
        vtkIdType m_nodeId;<br>
};<br>
<br>
The Set* methods are used to define a vtkAlgorithm with a vtkPolyData output and a particular node/vertex id within the vtkPolyData. Eventually, the handler is supposed to return the node coordinates (x,y,z) of the selected vertex within the data set.<br>


<br>
The xml descriptor for the class looks like this:<br>
<br>
&lt;ServerManagerConfiguration&gt;<br>
  &lt;ProxyGroup name=&quot;utility&quot;&gt;<br>
   &lt;Proxy name=&quot;MyProxy&quot; class=&quot;vtkMyDataHandler&quot; label=&quot;Data Handler&quot;&gt;<br>
     &lt;ProxyProperty name=&quot;Input&quot;<br>
                    command=&quot;SetInput&quot; /&gt;<br>
<br>
     &lt;IdTypeVectorProperty name=&quot;ActiveNode&quot;<br>
                        command=&quot;SetActiveNode&quot;<br>
                        default_values=&quot;-1&quot;<br>
                        number_of_elements=&quot;1&quot; /&gt;<br>
<br>
      &lt;DoubleVectorProperty command=&quot;GetActiveNodeCoord&quot;<div><br>
                          default_values=&quot;0.0 0.0 0.0&quot;<br>
                          information_only=&quot;1&quot;<br></div>
                          name=&quot;ActiveNodeCoord&quot;<br>
                          number_of_elements=&quot;3&quot; /&gt;<br>
   &lt;/Proxy&gt;<br>
 &lt;/ProxyGroup&gt;<br>
&lt;/ServerManagerConfiguration&gt;<br>
<br>
On the client side I do the following:<br>
<br>
// set up proxy on the client side<div><br>
vtkSMProxyManager *pxm = vtkSMProxyManager::<u></u>GetProxyManager();<br></div>
vtkSMProxy *proxy = pxm-&gt;NewProxy(&quot;utility&quot;, &quot;MyProxy&quot;);<br>
<br>
// set internal state of proxy<br>
vtkSMPropertyHelper(proxy,&quot;<u></u>Input&quot;).Set(properInputProxy);<br>
vtkSMPropertyHelper(proxy,&quot;<u></u>ActiveNode&quot;).Set(1);<br>
proxy-&gt;UpdateVTKObjects();<br>
<br>
// obtain information from proxy<br>
proxy-&gt;UpdateProperty(&quot;<u></u>ActiveNodeCoord&quot;)<br>
double tmp[3] = { -1.0, -1.0, -1.0 };<br>
vtkSMPropertyHelper(proxy, &quot;ActiveNodeCoord&quot;).Get(tmp, 3);<br>
<br>
<br>
Setting up the proxy and its initial state works perfectly fine. However, I am not able to update the desired property and invoke the call of vtkMyDataHandler::<u></u>GetActiveNodeCoord.<br>
<br>
There are two issues that I came accross here.<br>
<br>
1) There seems to be a problem (?) with the Client/Server wrapper.<br>
For some reason the method without any argument<br>
<br>
double* GetActiveNodeCoord();<br>
<br>
does not get wrapped in vtkMyDataHandlerClientServer.<u></u>cxx<br>
This leads to an error if I change the update command to:<br>
<br>
proxy-&gt;<u></u>UpdatePropertyInformation(<u></u>proxy-&gt;GetProperty(&quot;<u></u>ActiveNodeCoord&quot;));<br>
<br>
ERROR: In[...]/ParaView-3.98.1-<u></u>source/ParaViewCore/<u></u>ServerImplementation/Core/<u></u>vtkPVSessionCore.cxx, line 389<br>
vtkPVSessionCore (0x2aa9de0): Object type: vtkMyDataHandler, could not find requested method: &quot;GetActiveNodeCoord&quot;<br>
or the method was called with incorrect arguments.<br>
<br>
while processing<br>
Message 0 = Invoke<br>
  Argument 0 = vtk_object_pointer {vtkMyDataHandler (0x29cc970)}<br>
  Argument 1 = string_value {GetActiveNodeCoord}<br>
<br>
2) With the update command used in the code snippet, the property values are set to the default values but the data handler function (GetActiveNodeCoord) doesn&#39;t get called as information only properties cannot be updated according to vtkSMProxy::UpdateProperty.<br>


<br>
So maybe I have a wrong understanding of information only properties?! I had a look at some of the xml examples in utilities.xml<br>
(ParaView-3.98.1-source/<u></u>ParaViewCore/ServerManager/<u></u>SMApplication/Resources/<u></u>utilities.xml) and it seemed to me like this is the way to go?!<br>
<br>
Removing the information_only tag from the xml property descriptor, the property obviously gets updated in proxy-&gt;UpdateVTKObjects(), which for obvious reasons results in an error as there is no method to *set* the node coordinates.<br>


<br>
So what am I missing here? I would be really happy about any kind of comments or hints how to do this.<br>
<br>
Best,<br>
Matthias<div><br>
<br>
<br>
On 04/05/2013 03:25 PM, Sebastien Jourdain wrote:<br>
</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi Matthias,<br>
<br><div><div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
However, getting access to the vtkPolyData object on the server will not be possible that easily I guess.<br>
</blockquote>
<br>
 From the client side, not really unless you know that you will only run<br>
in a built-in session.<br>
That&#39;s precisely why you need to create a pure VTK class that will be<br>
connected in some way to that object from the client side via proxy<br>
while the real connection will happen on the server side.<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I guess there is some kind of vtk algorithm required on the server side<br>
</blockquote>
to do the processing which is configured from the client via a proxy.<br>
<br>
Yes, although it doesn&#39;t need to be an algorithm if it is not a &#39;filter&#39;<br>
type of object.<br>
But for instance you can create a VTK class that will provide an API<br>
like that:<br>
<br>
SetMyVtkObjectToLookInto(<u></u>vtkObject* whatYouWant)<br>
SetActiveNodeId(int id)<br>
double* GetNewCenterOfRotation()<br>
<br>
And on the client side thanks to proxy (You will need to write a small<br>
XML file for your VTK class) you will have to write something like that.<br>
<br>
myProxy = pxm.NewProxy(&#39;utility&#39;,&#39;<u></u>mySuperProxy&#39;);<br>
vtkSMPropertyHelper(myProxy, &#39;ProxyPropName&#39;).Set(<br>
yourProxyThatYouSelectedFromTh<u></u>eUI );<br>
vtkSMPropertyHelper(myProxy, &#39;ActiveNode&#39;).Set( yourSelectedID );<br>
myProxy-&gt;UpdateVTKObjects(); // This will push the changes to the server<br>
<br>
// Now it&#39;s time to retreive the info from the server<br>
myProxy-&gt;<u></u>UpdateInformationProperty(&#39;<u></u>CenterOfRotation&#39;);<br>
vtkSMPropertyHelper(myProxy, &#39;CenterOfRotation&#39;).Get(<br>
localArrayToFillWithCenterOfRo<u></u>tation );<br>
<br>
Hope this give you a feeling on how the things works...<br>
<br>
Seb<br>
<br>
PS: I just wrote things from the top of my head, so names might not<br>
exactly match but the idea is there.<br>
<br>
<br>
<br>
On Fri, Apr 5, 2013 at 8:48 AM, Matthias Schneider<br></div></div><div>
&lt;<a href="mailto:schneider@vision.ee.ethz.ch" target="_blank">schneider@vision.ee.ethz.ch</a> &lt;mailto:<a href="mailto:schneider@vision.ee.ethz.ch" target="_blank">schneider@vision.ee.<u></u>ethz.ch</a>&gt;&gt; wrote:<br>


<br>
    Hi Sebastian!<br>
<br>
    Thank you very much for you quick answer!<br>
    I don&#39;t have any server side class yet.<br>
<br>
    I used the DockWidget example to setup a GUI (QDockWidget) along<br>
    with some simple elements:<br>
    pqOutputPortComboBox: define source<br>
    QSpinBox: define node id<br>
    QPushButton: trigger event<br>
<br>
    As I understand it the whole GUI processing takes place at the<br>
    client side and has access to the server data via proxies only.<br>
<br>
    To stick with my simple example, I&#39;d need a way to actually access<br>
    the server source, which is a vtkPolyData in my case (originating<br>
    from an exported graph, i.e., nodes connected by lines).<br>
<br>
    // Get source from pqOutputPortComboBox<br>
    [...]<br>
    vtkSMSourceProxy *source = ...<br>
<br>
    // obtain requested node id from GUI element<br>
    vtkIdType nodeId = [...]<br>
<br>
    // If we had access to the vtkPolyData itself, we could do sth like...<br>
    vtkPolyData *data = ...<br>
    double coord[3];<br></div>
    data-&gt;GetPoints()-&gt;GetPoint(__<u></u>nodeId, coord);<div><div><br>
<br>
    // Set rotation center of current view to coord and render view<br>
    [...]<br>
<br>
    However, getting access to the vtkPolyData object on the server will<br>
    not be possible that easily I guess. I guess there is some kind of<br>
    vtk algorithm required on the server side to do the processing which<br>
    is configured from the client via a proxy (set the desired source<br>
    and the node id). But as I said, I do not fully understand the<br>
    ServerManager concept here and couldn&#39;t find any similar examples.<br>
<br>
    Hope this helps to clarify my problem...<br>
<br>
    Thanks for your help,<br>
    Matthias<br>
<br>
<br>
<br>
    On 04/05/2013 01:47 PM, Sebastien Jourdain wrote:<br>
<br>
        Hi Matthias,<br>
<br>
        I guess, you already have your vtk class that will do the<br>
        processing on<br>
        the server side ?<br>
        If so what are the methods that you want to get called and with what<br>
        arguments ?<br>
<br>
        Then once, I know more about your special use case, I can dive<br>
        into the<br>
        server manager part properly...<br>
<br>
        Seb<br>
<br>
<br>
        On Fri, Apr 5, 2013 at 7:16 AM, Matthias Schneider<br>
        &lt;<a href="mailto:schneider@vision.ee.ethz.ch" target="_blank">schneider@vision.ee.ethz.ch</a><br>
        &lt;mailto:<a href="mailto:schneider@vision.ee.ethz.ch" target="_blank">schneider@vision.ee.<u></u>ethz.ch</a>&gt;<br></div></div>
        &lt;mailto:<a href="mailto:schneider@vision.ee." target="_blank">schneider@vision.ee.</a>__<a href="http://ethz.ch" target="_blank"><u></u>ethz.ch</a><div><div><br>
        &lt;mailto:<a href="mailto:schneider@vision.ee.ethz.ch" target="_blank">schneider@vision.ee.<u></u>ethz.ch</a>&gt;&gt;&gt; wrote:<br>
<br>
             Hi,<br>
<br>
             I&#39;m trying to implement an extension for Paraview but I&#39;m<br>
        somewhat<br>
             stuck with the client/server and ServerManager concepts used in<br>
             Paraview. Maybe someone could give a hint where to find<br>
        some more<br>
             information on that. I was looking at the plugin examples<br>
        but that<br>
             didn&#39;t help me too much.<br>
<br>
             What I do not understand is how to establish some kind of data<br>
             transfer between the server and the client. A very simple<br>
        example<br>
             that I was trying to implement is as follows: For a<br>
        vtkPolyDataSet<br>
             source define a point id via a GUI element and set the rotation<br>
             center of the active view to the coordinate of this point.<br>
<br>
             Based on the DockWidget example and the SelectionInspector<br>
        I was<br>
             able to create the GUI elements on the client side to select an<br>
             appropriate source on the server side and get access to the<br>
        active<br>
             view. What I do not understand is how to interact with the<br>
        actual<br>
             data of the source to read the spatial coordinates of the<br>
             user-defined vertex.<br>
<br>
             On the client side I use a pqOutputPortComboBox to select<br>
        the source<br>
             which gives access to the current<br>
        pqOutputPort/pqPipelineSource.<br>
              &gt;From this I get a<br></div></div>
        vtkSMSourceProxy/____<u></u>vtkPVDataInformation which<div><br>
<br>
             allows me to read basic information of the data as shown in<br>
             Paraview&#39;s statistics inspector (no. of cells/points,<br>
        memory size,<br>
             bounds, ...).<br>
<br>
             Can anybody give me a hint how to do this properly? Any help is<br>
             appreciated very much.<br>
<br>
             Thanks,<br>
             Matthias<br>
<br></div>
             ______________________________<u></u>_____________________<br>
             Paraview-developers mailing list<br>
             Paraview-developers@paraview._<u></u>___org<br>
             &lt;mailto:<a href="mailto:Paraview-developers@" target="_blank">Paraview-developers@</a>__<a href="http://paraview.org" target="_blank"><u></u>paraview.org</a><br>
        &lt;mailto:<a href="mailto:Paraview-developers@paraview.org" target="_blank">Paraview-developers@<u></u>paraview.org</a>&gt;&gt;<br>
        <a href="http://public.kitware.com/____mailman/listinfo/paraview-____developers" target="_blank">http://public.kitware.com/____<u></u>mailman/listinfo/paraview-____<u></u>developers</a><br>
        &lt;<a href="http://public.kitware.com/__mailman/listinfo/paraview-__developers" target="_blank">http://public.kitware.com/__<u></u>mailman/listinfo/paraview-__<u></u>developers</a>&gt;<div><br>
<br>
        &lt;<a href="http://public.kitware.com/__mailman/listinfo/paraview-__developers" target="_blank">http://public.kitware.com/__<u></u>mailman/listinfo/paraview-__<u></u>developers</a><br>
        &lt;<a href="http://public.kitware.com/mailman/listinfo/paraview-developers" target="_blank">http://public.kitware.com/<u></u>mailman/listinfo/paraview-<u></u>developers</a>&gt;&gt;<br>
<br>
<br>
<br>
    --<br>
    Matthias Schneider<br>
    Computer Vision Laboratory<br>
<br>
    ETH Zürich, ETF D114.1<br>
    Sternwartstrasse 7<br>
    8092 Zürich, Switzerland<br>
<br></div>
    fon: <a href="tel:%2B41%2044%2063%2020379" value="+41446320379" target="_blank">+41 44 63 20379</a> &lt;tel:%2B41%2044%2063%2020379&gt;<br>
    fax: <a href="tel:%2B41%2044%2063%2021199" value="+41446321199" target="_blank">+41 44 63 21199</a> &lt;tel:%2B41%2044%2063%2021199&gt;<br>
    <a href="http://www.vision.ee.ethz.ch/~__schneima/" target="_blank">www.vision.ee.ethz.ch/~__<u></u>schneima/</a><br>
    &lt;<a href="http://www.vision.ee.ethz.ch/~schneima/" target="_blank">http://www.vision.ee.ethz.ch/<u></u>~schneima/</a>&gt;<br>
</blockquote>
</blockquote></div><br></div>
<br>_______________________________________________<br>
Paraview-developers mailing list<br>
<a href="mailto:Paraview-developers@paraview.org">Paraview-developers@paraview.org</a><br>
<a href="http://public.kitware.com/mailman/listinfo/paraview-developers" target="_blank">http://public.kitware.com/mailman/listinfo/paraview-developers</a><br>
<br></blockquote></div><br></div>