Skip to content

Commit

Permalink
new: max_opacity for TF controls, see #26
Browse files Browse the repository at this point in the history
  • Loading branch information
maartenbreddels committed Aug 15, 2017
1 parent 7de29d1 commit 63d48d3
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 16 deletions.
9 changes: 5 additions & 4 deletions ipyvolume/pylab.py
Original file line number Diff line number Diff line change
Expand Up @@ -437,7 +437,7 @@ def gcc():
return current.container


def transfer_function(level=[0.1, 0.5, 0.9], opacity=[0.01, 0.05, 0.1], level_width=0.1, controls=True):
def transfer_function(level=[0.1, 0.5, 0.9], opacity=[0.01, 0.05, 0.1], level_width=0.1, controls=True, max_opacity=0.2):
"""Create a transfer function, see volshow"""
tf_kwargs = {}
# level, opacity and widths can be scalars
Expand Down Expand Up @@ -472,7 +472,7 @@ def transfer_function(level=[0.1, 0.5, 0.9], opacity=[0.01, 0.05, 0.1], level_wi
tf = ipv.TransferFunctionWidgetJs3(**tf_kwargs)
fig = gcf()
if controls:
current.container.children = (tf.control(),) + current.container.children
current.container.children = (tf.control(max_opacity=max_opacity),) + current.container.children
return tf

def plot_isosurface(data, level=None, color=default_color, wireframe=True, surface=True, controls=True):
Expand Down Expand Up @@ -509,7 +509,7 @@ def volshow(data, lighting=False, data_min=None, data_max=None, tf=None, stereo=
specular_coefficient=0.5, specular_exponent=5,
downscale=1,
level=[0.1, 0.5, 0.9], opacity=[0.01, 0.05, 0.1], level_width=0.1,
controls=True):
controls=True, max_opacity=0.2):
"""Visualize a 3d array using volume rendering.
Currently only 1 volume can be rendered.
Expand All @@ -530,11 +530,12 @@ def volshow(data, lighting=False, data_min=None, data_max=None, tf=None, stereo=
:param opacity: opacity(ies) for each level, scalar or sequence of max length 3
:param level_width: width of the (gaussian) bumps where the opacity peaks, scalar or sequence of max length 3
:param controls: add controls for lighting and transfer function or not
:param max_opacity: maximum opacity for transfer function controls
:return:
"""
vol = gcf()
if tf is None:
tf = vol.tf or transfer_function(level, opacity, level_width, controls=controls)
tf = vol.tf or transfer_function(level, opacity, level_width, controls=controls, max_opacity=max_opacity)
if data_min is None:
data_min = np.nanmin(data)
if data_max is None:
Expand Down
24 changes: 12 additions & 12 deletions ipyvolume/transferfunction.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,15 +45,15 @@ class TransferFunctionJsBumps(TransferFunction):
widths = traitlets.List(traitlets.CFloat, default_value=[0.1, 0.1, 0.1]).tag(sync=True)


def control(self):
def control(self, max_opacity=0.2):
import ipywidgets
return ipywidgets.VBox()
l1 = ipywidgets.FloatSlider(min=0, max=1, step=0.001, value=self.level1)
l2 = ipywidgets.FloatSlider(min=0, max=1, step=0.001, value=self.level2)
l3 = ipywidgets.FloatSlider(min=0, max=1, step=0.001, value=self.level3)
o1 = ipywidgets.FloatSlider(min=0, max=.2, step=0.001, value=self.opacity1)
o2 = ipywidgets.FloatSlider(min=0, max=.2, step=0.001, value=self.opacity2)
o3 = ipywidgets.FloatSlider(min=0, max=.2, step=0.001, value=self.opacity2)
o1 = ipywidgets.FloatSlider(min=0, max=max_opacity, step=0.001, value=self.opacity1)
o2 = ipywidgets.FloatSlider(min=0, max=max_opacity, step=0.001, value=self.opacity2)
o3 = ipywidgets.FloatSlider(min=0, max=max_opacity, step=0.001, value=self.opacity2)
ipywidgets.jslink((self, 'level1'), (l1, 'value'))
ipywidgets.jslink((self, 'level2'), (l2, 'value'))
ipywidgets.jslink((self, 'level3'), (l3, 'value'))
Expand All @@ -80,14 +80,14 @@ class TransferFunctionWidgetJs3(TransferFunction):
width3 = traitlets.Float(0.1).tag(sync=True)


def control(self):
def control(self, max_opacity=0.2):
import ipywidgets
l1 = ipywidgets.FloatSlider(min=0, max=1, step=0.001, value=self.level1)
l2 = ipywidgets.FloatSlider(min=0, max=1, step=0.001, value=self.level2)
l3 = ipywidgets.FloatSlider(min=0, max=1, step=0.001, value=self.level3)
o1 = ipywidgets.FloatSlider(min=0, max=.2, step=0.001, value=self.opacity1)
o2 = ipywidgets.FloatSlider(min=0, max=.2, step=0.001, value=self.opacity2)
o3 = ipywidgets.FloatSlider(min=0, max=.2, step=0.001, value=self.opacity2)
o1 = ipywidgets.FloatSlider(min=0, max=max_opacity, step=0.001, value=self.opacity1)
o2 = ipywidgets.FloatSlider(min=0, max=max_opacity, step=0.001, value=self.opacity2)
o3 = ipywidgets.FloatSlider(min=0, max=max_opacity, step=0.001, value=self.opacity2)
ipywidgets.jslink((self, 'level1'), (l1, 'value'))
ipywidgets.jslink((self, 'level2'), (l2, 'value'))
ipywidgets.jslink((self, 'level3'), (l3, 'value'))
Expand Down Expand Up @@ -144,14 +144,14 @@ def recompute_rgba(self, *_ignore):
self.rgba = rgba
#self._notify_trait("rgba", old_value, self.rgba)

def control(self):
def control(self, max_opacity=0.2):
import ipywidgets
l1 = ipywidgets.FloatSlider(min=0, max=1, value=self.level1)
l2 = ipywidgets.FloatSlider(min=0, max=1, value=self.level2)
l3 = ipywidgets.FloatSlider(min=0, max=1, value=self.level3)
o1 = ipywidgets.FloatSlider(min=0, max=0.2, step=0.001, value=self.opacity1)
o2 = ipywidgets.FloatSlider(min=0, max=0.2, step=0.001, value=self.opacity2)
o3 = ipywidgets.FloatSlider(min=0, max=0.2, step=0.001, value=self.opacity2)
o1 = ipywidgets.FloatSlider(min=0, max=max_opacity, step=0.001, value=self.opacity1)
o2 = ipywidgets.FloatSlider(min=0, max=max_opacity, step=0.001, value=self.opacity2)
o3 = ipywidgets.FloatSlider(min=0, max=max_opacity, step=0.001, value=self.opacity2)
ipywidgets.jslink((self, 'level1'), (l1, 'value'))
ipywidgets.jslink((self, 'level2'), (l2, 'value'))
ipywidgets.jslink((self, 'level3'), (l3, 'value'))
Expand Down

0 comments on commit 63d48d3

Please sign in to comment.