<ServerManagerConfiguration>
  <!-- ==================================================================== -->
  <ProxyGroup name="representations">
    <!-- ================================================================== -->
    <RepresentationProxy class="vtkUnstructuredGridVolumeRepresentation"
                         name="UnstructuredGridVolumeRepresentation"
                         processes="client|renderserver|dataserver"
                         si_class="vtkSIUnstructuredGridVolumeRepresentationProxy">
      <Documentation>Representation for rendering a vtkImageData as
      volume.</Documentation>
      <InputProperty command="SetInputConnection"
                     name="Input">
        <DataTypeDomain composite_data_supported="1"
                        name="input_type">
          <DataType value="vtkUnstructuredGridBase" />
        </DataTypeDomain>
        <InputArrayDomain name="input_array_any">
        </InputArrayDomain>
        <Documentation>Set the input to the representation.</Documentation>
      </InputProperty>
      <IntVectorProperty command="SetVisibility"
                         default_values="1"
                         name="Visibility"
                         number_of_elements="1">
        <BooleanDomain name="bool" />
        <Documentation>Set the visibility for this
        representation.</Documentation>
      </IntVectorProperty>
      <IntVectorProperty command="SetForceUseCache"
                         default_values="0"
                         is_internal="1"
                         name="ForceUseCache"
                         number_of_elements="1">
        <BooleanDomain name="bool" />
        <Documentation>Typically UseCache and CacheKey are updated by the View
        and representations cache based on what the view tells it. However in
        some cases we may want to force a representation to cache irrespective
        of the view (e.g. comparative views). In which case these ivars can up
        set. If ForcedCacheKey is true, it overrides UseCache and CacheKey.
        Instead, ForcedCacheKey is used.</Documentation>
      </IntVectorProperty>
      <DoubleVectorProperty command="SetForcedCacheKey"
                            default_values="none"
                            is_internal="1"
                            name="ForcedCacheKey"
                            number_of_elements="1">
        <DoubleRangeDomain name="range" />
        <Documentation>Typically UseCache and CacheKey are updated by the View
        and representations cache based on what the view tells it. However in
        some cases we may want to force a representation to cache irrespective
        of the view (e.g. comparative views). In which case these ivars can up
        set. If ForcedCacheKey is true, it overrides UseCache and CacheKey.
        Instead, ForcedCacheKey is used.</Documentation>
      </DoubleVectorProperty>
      <StringVectorProperty command="SetInputArrayToProcess"
                            element_types="0 0 0 0 2"
                            name="ColorArrayName"
                            no_custom_default="1"
                            number_of_elements="5" >
        <Documentation>
          Set the array to color with. One must specify the field association and
          the array name of the array. If the array is missing, scalar coloring will
          automatically be disabled.
        </Documentation>
        <RepresentedArrayListDomain name="array_list"
                         input_domain_name="input_array_any">
          <RequiredProperties>
            <Property function="Input" name="Input" />
          </RequiredProperties>
        </RepresentedArrayListDomain>
        <FieldDataDomain name="field_list"
                         disable_update_domain_entries="1"
                         force_point_cell_data="1">
          <RequiredProperties>
            <Property function="Input" name="Input" />
          </RequiredProperties>
        </FieldDataDomain>
      </StringVectorProperty>
      <IntVectorProperty command="SetExtractedBlockIndex"
                         default_values="0"
                         name="ExtractedBlockIndex"
                         number_of_elements="1">
        <Documentation>In case of multiblock datasets, choose the flat index of
        the dataset to volume render. The flat index must point to an
        unstructured grid dataset. If the input is not a multiblock dataset
        then this index is ignored.</Documentation>
        <CompositeTreeDomain mode="leaves"
                             name="tree">
          <RequiredProperties>
            <Property function="Input"
                      name="Input" />
          </RequiredProperties>
        </CompositeTreeDomain>
      </IntVectorProperty>
      <DoubleVectorProperty command="SetPosition"
                            default_values="0 0 0"
                            name="Position"
                            number_of_elements="3">
        <DoubleRangeDomain name="range" />
      </DoubleVectorProperty>
      <DoubleVectorProperty command="SetScale"
                            default_values="1 1 1"
                            name="Scale"
                            number_of_elements="3">
        <DoubleRangeDomain name="range" />
      </DoubleVectorProperty>
      <DoubleVectorProperty command="SetOrientation"
                            default_values="0 0 0"
                            name="Orientation"
                            number_of_elements="3">
        <DoubleRangeDomain name="range" />
      </DoubleVectorProperty>
      <DoubleVectorProperty command="SetOrigin"
                            default_values="0 0 0"
                            name="Origin"
                            number_of_elements="3">
        <DoubleRangeDomain name="range" />
      </DoubleVectorProperty>
      <IntVectorProperty command="SetPickable"
                         default_values="1"
                         name="Pickable"
                         number_of_elements="1">
        <Hints>
          <NoDefault />
        </Hints>
        <BooleanDomain name="bool" />
      </IntVectorProperty>
      <IntVectorProperty command="SetInterpolationType"
                         default_values="1"
                         name="InterpolationType"
                         number_of_elements="1">
        <EnumerationDomain name="enum">
          <Entry text="Nearest"
                 value="0" />
          <Entry text="Linear"
                 value="1" />
        </EnumerationDomain>
      </IntVectorProperty>
      <ProxyProperty command="SetColor"
                     name="LookupTable" >
        <ProxyGroupDomain name="groups">
          <Group name="transfer_functions" />
        </ProxyGroupDomain>
      </ProxyProperty>
      <ProxyProperty command="SetScalarOpacity"
                     name="ScalarOpacityFunction" >
        <ProxyGroupDomain name="groups">
          <Group name="piecewise_functions" />
        </ProxyGroupDomain>
      </ProxyProperty>
      <StringVectorProperty command="SetActiveVolumeMapper"
                            default_values="Projected tetra"
                            name="SelectMapper"
                            number_of_elements="1">
        <Documentation>Select the volume mapper to use for Volume
        rendering.</Documentation>
        <StringListDomain name="list">
          <String value="Projected tetra" />
          <String value="Z sweep" />
          <String value="Bunyk ray cast" />
        </StringListDomain>
      </StringVectorProperty>
      <DoubleVectorProperty command="SetScalarOpacityUnitDistance"
                            default_values="1"
                            name="ScalarOpacityUnitDistance"
                            number_of_elements="1">
        <BoundsDomain mode="approximate_cell_length"
                      name="bounds" >
          <RequiredProperties>
            <Property function="Input"
                      name="Input" />
          </RequiredProperties>
        </BoundsDomain>
      </DoubleVectorProperty>
      <SubProxy>
        <Proxy name="VolumeDummyMapper"
               proxygroup="mappers"
               proxyname="DummyVolumeMapper"></Proxy>
        <ExposedProperties>
          <Property name="RayCastFunction" />
        </ExposedProperties>
      </SubProxy>
      <SubProxy>
        <Proxy name="VolumeBunykMapper"
               proxygroup="mappers"
               proxyname="UnstructuredGridVolumeRayCastMapper"></Proxy>
        <ShareProperties subproxy="VolumeDummyMapper"></ShareProperties>
      </SubProxy>
      <SubProxy>
        <Proxy name="VolumeZSweepMapper"
               proxygroup="mappers"
               proxyname="UnstructuredGridVolumeZSweepMapper"></Proxy>
        <ShareProperties subproxy="VolumeDummyMapper"></ShareProperties>
      </SubProxy>
      <SubProxy>
        <Proxy name="VolumePTMapper"
               proxygroup="mappers"
               proxyname="ProjectedTetrahedraMapper"></Proxy>
        <ShareProperties subproxy="VolumeDummyMapper"></ShareProperties>
      </SubProxy>
      <!-- end of UnstructuredGridVolumeRepresentation -->
    </RepresentationProxy>

    <!-- ================================================================== -->
    <RepresentationProxy base_proxyname="PVRepresentationBase"
                         name="PointGaussianRepresentation"
                         class="vtkPointGaussianRepresentation"
                         processes="client|renderserver|dataserver">
      <Documentation>
      </Documentation>
      <InputProperty command="SetInputConnection"
                     name="Input">
        <DataTypeDomain composite_data_supported="0"
                        name="input_type">
          <DataType value="vtkDataSet"/>
        </DataTypeDomain>
        <InputArrayDomain attribute_type="point"
                          name="input_point_array"
                          number_of_components="1"
                          optional="1">
        </InputArrayDomain>
      </InputProperty>
      <StringVectorProperty command="SetInputArrayToProcess"
                            element_types="0 0 0 0 2"
                            name="ColorArrayName"
                            number_of_elements="5">
        <Documentation>
          Set the array to color with. One must specify the field association and
          the array name of the array. If the array is missing, scalar coloring will
          automatically be disabled.
        </Documentation>
        <RepresentedArrayListDomain name="array_list"
                         input_domain_name="input_array_any">
          <RequiredProperties>
            <Property function="Input" name="Input" />
          </RequiredProperties>
        </RepresentedArrayListDomain>
        <FieldDataDomain name="field_list"
                         disable_update_domain_entries="1"
                         force_point_cell_data="1">
          <RequiredProperties>
            <Property function="Input" name="Input" />
          </RequiredProperties>
        </FieldDataDomain>
      </StringVectorProperty>
      <StringVectorProperty name="SetScaleArray"
                            command="SelectScaleArray"
                            number_of_elements="5"
                            element_types="0 0 0 0 2"
                            label="Gaussian Scale Array"
                            panel_visibility="advanced">
        <ArrayListDomain name="array_list"
          input_domain_name="input_point_array">
          <RequiredProperties>
            <Property name="Input" function="Input"/>
          </RequiredProperties>
        </ArrayListDomain>
        <Documentation>
          This property specifies the name of the input array to scale the splats by.
        </Documentation>
      </StringVectorProperty>
      <IntVectorProperty command="SetMapScalars"
                         default_values="1"
                         name="MapScalars"
                         number_of_elements="1">
        <BooleanDomain name="bool" />
        <Documentation>When set to True, LookupTable will always be
        used for scalar mapping. Otherwise, when up to 4 component
        scalars are present, the components are clamped to a valid
        color interval (0-255 for an integral type and 0.0-1.0 for a
        floating point type) and then directly used as
        color.</Documentation>
      </IntVectorProperty>
      <ProxyProperty command="SetLookupTable"
                     name="LookupTable"
                     skip_dependency="1">
        <Documentation>Set the lookup-table to use to map data array to colors.
        Lookuptable is only used with MapScalars to ON.</Documentation>
        <ProxyGroupDomain name="groups">
          <Group name="lookup_tables" />
        </ProxyGroupDomain>
      </ProxyProperty>
      <ProxyProperty command="SetScaleTransferFunction"
                     name="ScaleTransferFunction"
                     panel_visibility="advanced"
                     panel_widget="transfer_function_editor">
        <Documentation>Set the piecewise function used to map data array to sprite size.
        ScaleTransferFunction is only used if ScaleByArray is set.</Documentation>
        <ProxyGroupDomain name="groups">
          <Group name="piecewise_functions" />
        </ProxyGroupDomain>
        <ProxyListDomain name="proxy_list">
          <Proxy group="piecewise_functions"
                 name="PiecewiseFunction" />
        </ProxyListDomain>
      </ProxyProperty>
      <IntVectorProperty command="SetScaleByArray"
                         default_values="0"
                         name="ScaleByArray"
                         number_of_elements="1"
                         label="Use Scale Array"
                         panel_visibility="advanced">
        <BooleanDomain name="bool"/>
        <Documentation>
          If this property is on, the Scale Array will be used to determine that radii
          of the gaussians.  Otherwise the Default Radius will be used.
        </Documentation>
      </IntVectorProperty>
      <ProxyProperty command="SetOpacityTransferFunction"
                     name="OpacityTransferFunction"
                     panel_visibility="advanced"
                     panel_widget="transfer_function_editor">
        <Documentation>Set the piecewise function used to map data array to sprite opacity.
        OpacityTransferFunction is only used if ScaleByArray is set and OpacityArray is
        also given.</Documentation>
        <ProxyGroupDomain name="groups">
          <Group name="piecewise_functions" />
        </ProxyGroupDomain>
        <ProxyListDomain name="proxy_list">
          <Proxy group="piecewise_functions"
                 name="PiecewiseFunction" />
        </ProxyListDomain>
      </ProxyProperty>
      <IntVectorProperty command="SetOpacityByArray"
                         default_values="0"
                         name="OpacityByArray"
                         number_of_elements="1"
                         label="Use Opacity Array"
                         panel_visibility="advanced">
        <BooleanDomain name="bool"/>
        <Documentation>
          If this property is on, the Opacity Array will be used to determine the
          point gaussian sprites.
        </Documentation>
      </IntVectorProperty>
      <StringVectorProperty name="OpacityArray"
                            command="SelectOpacityArray"
                            number_of_elements="5"
                            element_types="0 0 0 0 2"
                            label="Gaussian Opacity Array"
                            panel_visibility="advanced">
        <ArrayListDomain name="array_list"
          input_domain_name="input_point_array">
          <RequiredProperties>
            <Property name="Input" function="Input"/>
          </RequiredProperties>
        </ArrayListDomain>
        <Documentation>
          This property specifies the name of the input array to map to point opacity.
        </Documentation>
      </StringVectorProperty>
      <DoubleVectorProperty command="SetOpacity"
                            default_values="1.0"
                            name="Opacity"
                            number_of_elements="1">
        <DoubleRangeDomain max="1" min="0" name="range" />
        <Documentation>
          The opacity to use when rendering the model.
        </Documentation>
      </DoubleVectorProperty>
      <DoubleVectorProperty command="SetSplatSize"
                            default_values="0.0"
                            name="GaussianRadius"
                            label="Gaussian Radius"
                            number_of_elements="1">
        <BoundsDomain name="range" mode="scaled_extent" scale_factor="0.05">
          <RequiredProperties>
            <Property function="Input" name="Input" />
          </RequiredProperties>
        </BoundsDomain>
        <Documentation>
          The radius of the gaussian blur for each point.
        </Documentation>
      </DoubleVectorProperty>
      <IntVectorProperty command="SetEmissive"
                         default_values="0"
                         name="Emissive"
                         number_of_elements="1"
                         panel_visibility="advanced">
        <BooleanDomain name="bool" />
        <Documentation>
          Should the splat be emissive lke a light source or not. For cosmology emissive should be on. For scanned point clouds typically it woudl be off.
        </Documentation>
      </IntVectorProperty>
      <DoubleVectorProperty command="SetColor"
                            default_values="1.0 1.0 1.0"
                            name="Color"
                            number_of_elements="3"
                            panel_visibility="never">
        <DoubleRangeDomain max="1 1 1"
                           min="0 0 0"
                           name="range" />
        <Hints>
          <GlobalPropertyLink type="ColorPalette" property="ForegroundColor" />
        </Hints>
      </DoubleVectorProperty>
      <DoubleVectorProperty command="SetEdgeColor"
                            default_values="0 0 0.5"
                            name="EdgeColor"
                            number_of_elements="3">
        <Documentation>Set the edge color. This color is used to draw the edge
        for the polygonal data when EdgeVisibility is on.</Documentation>
        <DoubleRangeDomain max="1 1 1"
                           min="0 0 0"
                           name="range" />
        <Hints>
          <GlobalPropertyLink type="ColorPalette" property="EdgeColor" />
        </Hints>
      </DoubleVectorProperty>
      <DoubleVectorProperty command="SetAmbientColor"
                            default_values="1.0 1.0 1.0"
                            name="AmbientColor"
                            number_of_elements="3">
        <DoubleRangeDomain max="1 1 1"
                           min="0 0 0"
                           name="range" />
        <Hints>
          <GlobalPropertyLink type="ColorPalette" property="ForegroundColor" />
        </Hints>
      </DoubleVectorProperty>
      <DoubleVectorProperty command="SetDiffuseColor"
                            default_values="1.0 1.0 1.0"
                            name="DiffuseColor"
                            number_of_elements="3">
        <DoubleRangeDomain max="1 1 1"
                           min="0 0 0"
                           name="range" />
        <Hints>
          <GlobalPropertyLink type="ColorPalette" property="SurfaceColor" />
        </Hints>
        <Documentation>
          The diffuse color of the model
        </Documentation>
      </DoubleVectorProperty>
      <DoubleVectorProperty command="SetSpecularColor"
                            default_values="1.0 1.0 1.0"
                            name="SpecularColor"
                            number_of_elements="3">
        <DoubleRangeDomain max="1 1 1"
                           min="0 0 0"
                           name="range" />
        <Documentation>
          The specular color of the model
        </Documentation>
      </DoubleVectorProperty>
      <DoubleVectorProperty command="SetPointSize"
                            default_values="2.0"
                            name="PointSize"
                            number_of_elements="1">
        <DoubleRangeDomain min="0"
                           name="range" />
      </DoubleVectorProperty>
      <DoubleVectorProperty command="SetPosition"
                            default_values="0 0 0"
                            label="Translation"
                            name="Position"
                            number_of_elements="3">
        <DoubleRangeDomain name="range" />
      </DoubleVectorProperty>
      <DoubleVectorProperty command="SetScale"
                            default_values="1 1 1"
                            name="Scale"
                            number_of_elements="3">
        <DoubleRangeDomain name="range" />
      </DoubleVectorProperty>
      <DoubleVectorProperty command="SetOrientation"
                            default_values="0 0 0"
                            name="Orientation"
                            number_of_elements="3">
        <DoubleRangeDomain name="range" />
      </DoubleVectorProperty>
      <DoubleVectorProperty command="SetOrigin"
                            default_values="0 0 0"
                            name="Origin"
                            number_of_elements="3">
        <DoubleRangeDomain name="range" />
      </DoubleVectorProperty>
      <IntVectorProperty command="SetPickable"
                         default_values="1"
                         name="Pickable"
                         number_of_elements="1">
        <Hints>
          <NoDefault />
        </Hints>
        <BooleanDomain name="bool" />
      </IntVectorProperty>
      <StringVectorProperty command="SetCustomShader"
                            defaults="
// compute the eye position and unit direction
//VTK::Color::Impl
  float dist2 = dot(offsetVCVSOutput.xy,offsetVCVSOutput.xy);
  if (dist2 > 9.0) { discard; }
  float gaussian = exp(-0.5*dist2);
  opacity = opacity*gaussian;
"
                            label="Custom Shader Code"
                            name="CustomShader"
                            number_of_elements="1"
                            panel_visibility="never">
        <Hints>
          <Widget type="multi_line" />
        </Hints>
      </StringVectorProperty>
      <IntVectorProperty command="SelectShaderPreset"
                         default_values="1"
                         name="ShaderPreset"
                         number_of_elements="1">
        <EnumerationDomain name="enum">
          <Entry text="Gaussian Blur (Default)"
                 value="0" />
          <Entry text="Sphere"
                 value="1" />
          <Entry text="Black-edged circle"
                 value="2" />
          <Entry text="Plain circle"
                 value="3" />
          <Entry text="Triangle"
                 value="4" />
          <Entry text="Square Outline"
                 value="5" />
        </EnumerationDomain>
      </IntVectorProperty>
      <!-- End of PointGaussianRepresentation -->
    </RepresentationProxy>

    <Extension name="GeometryRepresentation">
      <Documentation>
          Extends standard GeometryRepresentation by adding
          PointGaussianRepresentation as a new type of representation.
      </Documentation>
      <!-- this adds to what is already defined in PVRepresentationBase -->
      <RepresentationType subproxy="PointGaussianRepresentation"
                          text="Point Gaussian" />
      <SubProxy>
        <Proxy name="PointGaussianRepresentation"
               proxygroup="representations" proxyname="PointGaussianRepresentation">
        </Proxy>
        <ShareProperties subproxy="SurfaceRepresentation">
          <Exception name="Input" />
          <Exception name="Visibility" />
        </ShareProperties>
        <ExposedProperties>
          <PropertyGroup label="Point Gaussian">
            <Property name="GaussianRadius" />
            <Property name="ShaderPreset" />
            <Property name="Emissive" />
            <Property name="Color" />
            <Property name="ScaleByArray" />
            <Property name="SetScaleArray" />
            <Property name="ScaleTransferFunction" />
            <Property name="OpacityByArray" />
            <Property name="OpacityArray" />
            <Property name="OpacityTransferFunction" />
            <Property name="CustomShader" />
          </PropertyGroup>
        </ExposedProperties>
      </SubProxy>
    </Extension>

    <Extension name="UnstructuredGridRepresentation">
      <Documentation>
          Extends standard UnstructuredGridRepresentation by adding
          PointGaussianRepresentation as a new type of representation.
      </Documentation>
      <!-- this adds to what is already defined in PVRepresentationBase -->
      <RepresentationType subproxy="PointGaussianRepresentation"
                          text="Point Gaussian" />
      <SubProxy>
        <Proxy name="PointGaussianRepresentation"
               proxygroup="representations" proxyname="PointGaussianRepresentation">
        </Proxy>
        <ShareProperties subproxy="SurfaceRepresentation">
          <Exception name="Input" />
          <Exception name="Visibility" />
        </ShareProperties>
        <ExposedProperties>
          <PropertyGroup label="Point Gaussian">
            <Property name="GaussianRadius" />
            <Property name="ShaderPreset" />
            <Property name="Emissive" />
            <Property name="Color" />
            <Property name="ScaleByArray" />
            <Property name="SetScaleArray" />
            <Property name="ScaleTransferFunction" />
            <Property name="OpacityByArray" />
            <Property name="OpacityArray" />
            <Property name="OpacityTransferFunction" />
            <Property name="CustomShader" />
          </PropertyGroup>
        </ExposedProperties>
      </SubProxy>
    </Extension>


  </ProxyGroup>
</ServerManagerConfiguration>
