Merge branch 'master' into heat-diffusion

# By Johan Andruejol (82) and Julien Finet (14)
# Via Julien Finet (13) and Johan Andruejol (6)
* master: (96 commits)
  Rebase Slicer on Slicer 4.2
  Begin post-0.1.0 development
  Bender 0.1.0
  Reduce Bone XML properties
  Prevent double click bug
  Write and ReadXML for bones
  Check if already enabled/disabled
  Clean Up bone node - Display node first
  Clean Up bone node - Delete GetDistance()
  Always select newly added armature.
  WriteXML and ReadXML for armature node
  Prevent bone parent selection on head
  Highlight all modified bones
  Add Transforms cell data array to armature polydata
  Seal memory leaks
  Clean armatures tests
  Factorize vtkSpy
  Tweak interaction
  Add basic test for vtkBoneWidget
  Add dashboard setup scripts
  ...
Revert "Always select newly added armature."

This reverts commit a80c5c7ee7303715e53f0481d5782e343f4b69eb.

Conflicts:

	Modules/Loadable/Armatures/qSlicerArmaturesModuleWidget.cxx
Merge branch '13668-LoadScene-JA' into armatures
Add vtkCapsuleSource

vtkCapsuleSource is polydata algorithm that generates a polygonal capsule.

See Issue #13680
Add Envelope representation

Very simple early stage, just adding and envelope representation to
all the bone representation.

See Issue #13680
Make envelopes available in Slicer

It was decided for this property to be part of the bone display node.
It is updated on the armature and then updated on each display node from
the armature node.
Note that only the armature node should be needed once 1779 is implemented.

See Issue #13680
Rename EnvelopeVisible to ShowEnvelope

This will make the naming more consistent.

See Issue #13680
Add envelope radius slider

Adding a slider to control the envelope radius. Also adding the forgotten
tooltips at the same time. Much like the show envelope checkbox, this
could be simplified with issue 13779.

Note: The maximum radius was set to 100 but it is very much arbitrary.

See Issue #13680
Add radius field data to the armature polydata

See Issue #13680
Listen to armature's bone representation change and propagate

We now listens to the change in the representation that the armature keeps
and propagate any change to all the representation of the armature's bones.
This led to re-implement the DeepCopy. We only want to copy across the
purely representation properties and not the other properties like head or
tail positions.

See Issue #13779
Apply change to Slicer

Note that the envelope radius is not affected since it's not a property of
the armature's bone representation, it is not automatically propagated.

See Issue #13779
Enable selection for the cylinder and the cones

This will make the translation possible when clicking on the cones or the
cylinder without being on the centerline.

See Issue #13709
Envelope radius ratio for each bone.

Instead of having a envelope radius, we have an envelope ratio that defines
a the radius proportionaly is to the bone's length.
Consequently deleting the ratio in the armature dialog so its is not
confused by the user. The envelope visibility has been moved in the bone
section as well. Even though it is an armature property, it would probably
be confusing for the user to have the envelope properties in two different
places.

See Issue #13680
Merge branch '13680-EnvelopesForEveryBone-JA' into armatures

* 13680-EnvelopesForEveryBone-JA:
  Envelope radius ratio for each bone.
Pass correct testing executable path

See Issue #13852
Merge branch '13852-DashboardTests-JA' into armatures

* 13852-DashboardTests-JA:
  Pass correct testing executable path
Add /bin to testing path

See Issue #13852
Merge branch '13852-DashboardTests-JA' into armatures

* 13852-DashboardTests-JA:
  Add /bin to testing path
Extract the generic heat diffusion algorithm to its own classes and add tests

The heat diffusion problem: The input is an image with bounded domain
partitioned to two sets: a boundary set, B, and an interior set, I.
The values at B are known, and I are unknown. We wish to find the
unkonwn values x at I according to the Laplacian equation
 x = (x_1 + x_2 + x_3 + x_4)/4.0, where x_* are the neighbors of x.

Two algorithms are implemented in SolveHeatDiffusionProblem.  Solve()
finds the solution exactly using Eigen. SolveIteratively() implements
the so called standard iteration, which, if run only a few iterations,
won't give a solution that is close to the original but is nonethless
smooth.

The included tests verify the so called "linear reproduction"
property, i.e. if the boundary values are sampled from a linear
function, the results evaluate to the linear function exactly.

Issue #13856
Factorize and cleanup ArmatureWeight module

More work can be done:
 - make it fully templated over the input type
 - use iterators instead of GetIndex/GetPixel/SetPixel()
 - Process each ArmatureEdge weight computation in a separate thread

Issue #13856