[Paraview] ParaviewWeb two sessions, two views, two volume datasets
Sebastien Jourdain
sebastien.jourdain at kitware.com
Tue May 10 08:17:09 EDT 2011
Wonderful,
You definitely getting there. BTW, what do you mean by a "weird clipping
between refresh" ?
Thanks,
Seb
On Mon, May 9, 2011 at 7:39 PM, Rajvikram Singh <rajvikrams at yahoo.com>wrote:
> Great. Just tried creating two views with CreateRenderView() within the
> same session and was able to attach a different pipeline to both.
>
> For the view locking, I found a function called AddCameraLink(view1, view2,
> linkname) which allowed me to achieve what I wanted. The views are sync'd
> and apart from a weird clipping between refresh, it works flawlessly. So I
> don't think I'll need to write a server side plugin .. this time :)
>
> Thanks again Sebastien.
>
>
>
>
> --- On *Tue, 10/5/11, Sebastien Jourdain <sebastien.jourdain at kitware.com>*wrote:
>
>
> From: Sebastien Jourdain <sebastien.jourdain at kitware.com>
> Subject: Re: [Paraview] ParaviewWeb two sessions, two views, two volume
> datasets
> To: "Rajvikram Singh" <rajvikrams at yahoo.com>
> Cc: paraview at paraview.org
> Date: Tuesday, 10 May, 2011, 4:10 AM
>
>
> Hi Raj,
>
> first of all you only need one session. A session is basically a dedicated
> connection to a ParaView server. So by creating 2 session, you were creating
> 2 server where you could have created 2 views in the same session and setup
> a mechanism to keep both camera of the views in synch.
> Moreover, as you are using the same session, you can reuse your objects
> such as the LUT.
> To keep object in synch, you will have to write some piece of code on the
> server side that you could call from your javascript client.
> I don't have a simple example in mind but you could look at the pwsimple.py
> where I had some binding between the widget and the implicit functions that
> it represent. Of course the event type won't be the same but the idea is
> there.
>
> In fact inside a Python plugin you should define a method like that:
>
> def bindViews(view1, view2):
> # add some python code to bind the two camera together
> # or maybe set the active camera of view1 to be the active
> # camera of view 2.
>
> I know that it does not give you the full answer but at least it give you
> some hints.
>
> Seb
>
> On Mon, May 9, 2011 at 5:29 PM, Rajvikram Singh <rajvikrams at yahoo.com<http://mc/compose?to=rajvikrams@yahoo.com>
> > wrote:
>
> Hi everyone
> I would like to load two volume datasets (called FISH and SIMS in the
> code below) in ParaviewWeb and then render them side by side in two
> different views. The users should be able to 'lock' the camera amongst the
> two views so that moving the object in one window also affects the camera in
> the other.
>
> I tried the following piece of code but ran into a error which made me
> think maybe I don't understand the concept of sessions and Display
> properties well. Hoping somebody could help shed some light. There are two
> functions that I've copy pasted below. Most of the variables are global for
> now and shared between the functions.
>
>
> // The init function loads and displays the two datasets
> this.init = function() {
> // Set the web service base URL
> var i;
> var serverUrl =
> "<%=request.getScheme()%>://<%=request.getServerName()%>:<%=request.getServerPort()%>/PWService";
> //
> // Create paraview sessions .. one each for FISH and SIMS
> //
> pv_FISH = new Paraview(serverUrl);
> pv_FISH.createSession("CAVIAT-session-1", "FISH data",
> "default");
> view_FISH = pv_FISH.CreateIfNeededRenderView();
> pv_FISH.Render();
>
> pv_SIMS = new Paraview(serverUrl);
> pv_SIMS.createSession("CAVIAT-session-2", "SIMS data",
> "default");
> view_SIMS = pv_SIMS.CreateIfNeededRenderView();
> pv_SIMS.Render();
>
> // Load the data files from disk
> data_FISH = pv_FISH.OpenDataFile({filename : file_FISH});
> data_SIMS = pv_FISH.OpenDataFile({filename : file_SIMS});
>
> // For volume rendering set the display properties for each
> dataset loaded
>
> this.setupVolumeView(data_FISH, view_FISH, pv_FISH);
> this.setupVolumeView(data_SIMS, view_SIMS, pv_SIMS);
>
> pv_FISH.Show({proxy : data_FISH});
> pv_FISH.UpdatePipeline();
>
> pv_SIMS.Show({proxy : data_SIMS});
> pv_SIMS.UpdatePipeline();
>
>
> // set origin in the middle of dataset
> pv_FISH.ResetCamera();
> view_FISH.setCenterOfRotation(view_FISH.getCameraFocalPoint());
>
> pv_SIMS.ResetCamera();
> view_SIMS.setCenterOfRotation(view_SIMS.getCameraFocalPoint());
>
> // Create and bind renderers for both sessions
> var renderer_FISH = new JavaScriptRenderer("rendererName",
> serverUrl);
> renderer_FISH.init(pv_FISH.sessionId, view_FISH.__selfid__);
> renderer_FISH.setSize('720','720');
> renderer_FISH.bindToElementId("FISH-container");
> renderer_FISH.start();
>
> var renderer_SIMS = new JavaScriptRenderer("rendererName",
> serverUrl);
> renderer_SIMS.init(pv_SIMS.sessionId, view_SIMS.__selfid__);
> renderer_SIMS.setSize('720','720');
> renderer_SIMS.bindToElementId("SIMS-container");
> renderer_SIMS.start();
>
> }
>
>
> // setupVolumeView will prepare the LUT and Scalar Opacity function
> needed for volume rendering
> this.setupVolumeView = function (_data, _view, _pv) {
>
> // *** Check to see is scope of lut and sof is valid for a per
> volume operation ***
> var lut = _pv.GetLookupTableForArray({arrayname : "ImageFile",
> num_components : 1, HSVWrap : 0, NanColor : [0.0, 0.66666666666666663, 0.0],
> RGBPoints : [1.0, 0.0, 0.0, 0.0, 16564.27904630101, 1.0,
> 0.035950255588616767, 0.0, 19924.923666800998, 1.0, 0.035950255588616767,
> 0.0, 39728.909301543368, 0.0, 0.66666666666666663, 0.0, 65294.000000000007,
> 0.0, 0.0, 0.0], ColorSpace : 'HSV'});
>
> var sof = _pv.CreatePiecewiseFunction( {Points:[0.0, 0.0,
> 2762.37, 0.0588235, 2882.47, 0, 6965.97, 0.235294, 15373.2, 0.323529,
> 25221.6, 0, 26662.9, 0, 36751.5, 0, 44318, 0.0, 52124.7, 0.323529, 63054,
> 0.294118, 65336, 0.294118] });
>
>
> _pv.SetDisplayProperties( {
> proxy : _data,
> view : _view,
> SelectMapper : 'GPU',
> Representation : 'Volume',
> LookupTable : lut,
> ColorArrayName : 'ImageFile',
> ScalarOpacityFunction : sof
> } );
>
> } // end of setDisplayToVolume()
>
>
>
> The error occurs when the code calls the following line inside the init()
> function.
>
> this.setupVolumeView(data_SIMS, view_SIMS, pv_SIMS);
>
> Inside the setupVolumeView() function, while calling
> SetDisplayProperties(), the code complains "Uncaught exception: Volume is
> not a valid volume." This does not happen for the first data but for the
> second one only.
>
>
> Thanks
> Raj
>
>
>
>
>
> _______________________________________________
> 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
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.paraview.org/pipermail/paraview/attachments/20110510/03591b2b/attachment-0001.htm>
More information about the ParaView
mailing list