<ServerManagerConfiguration>

  <!-- ==================================================================== -->
  <ProxyGroup name="filters">

   <!-- ==================================================================== -->
   <SourceProxy name="SendToPiston" class="vtkPVDataSetToPiston"
      label="SendToPiston">
      <Documentation
          long_help="Move a data set to the GPU for piston processing."
          short_help="Move data to GPU.">
Copies a CPU resident data set into a PISTON compatible representation that exists on the GPU.
      </Documentation>

      <InputProperty
        name="Input"
        command="SetInputConnection">
         <ProxyGroupDomain name="groups">
            <Group name="sources"/>
            <Group name="filters"/>
         </ProxyGroupDomain>
         <DataTypeDomain name="input_type">
           <DataType value="vtkImageData"/>
           <DataType value="vtkPolyData"/>
         </DataTypeDomain>
         <Documentation>
           Property that connects an input to this filter.
         </Documentation>
      </InputProperty>

      <Hints>
        <!-- TODO: Make it possible to register new reps in
             vtkSMRenderViewProxy::CreateDefaultRepresentation()
             so that this isn't necessary for every piston producing
             filter -->
        <DefaultRepresentations>
          <myrep representation="PistonRepresentation"/>
        </DefaultRepresentations>
      </Hints>

   <!-- End SendToPiston -->
   </SourceProxy>

   <!-- ==================================================================== -->
   <SourceProxy name="GetFromPiston" class="vtkPistonToDataSet"
      label="GetFromPiston">
      <Documentation
          long_help="Move a polygonal result from the GPU to the CPU."
          short_help="Retrieve data from GPU.">
Copies a GPU resident dataset produced by PISTON back to the CPU.
      </Documentation>

      <InputProperty
        name="Input"
        command="SetInputConnection">
         <ProxyGroupDomain name="groups">
            <Group name="sources"/>
            <Group name="filters"/>
         </ProxyGroupDomain>
         <DataTypeDomain name="input_type">
           <DataType value="vtkPistonDataObject"/>
         </DataTypeDomain>
         <Documentation>
           Property that connects an input to this filter.
         </Documentation>
      </InputProperty>

      <IntVectorProperty
        name="OutputDataSetType"
        command="SetOutputDataSetType"
        number_of_elements="1"
        default_values="0">
        <EnumerationDomain name="enum">
             <!-- Values come from vtkType.h-->
             <Entry value="0" text="vtkPolyData"/>
             <!-- <Entry value="1" text="vtkStructuredPoints"/> -->
             <!-- <Entry value="2" text="vtkStructuredGrid"/> -->
             <!-- <Entry value="3" text="vtkRectilinearGrid"/> -->
             <!-- <Entry value="4" text="vtkUnstructuredGrid"/> -->
             <!-- <Entry value="5" text="vtkPiecewiseFunction"/> -->
             <Entry value="6" text="vtkImageData"/>
             <!-- <Entry value="7" text="vtkDataObject"/> -->
             <!-- <Entry value="9" text="vtkPointSet"/> -->
             <!-- <Entry value="10" text="vtkUniformGrid"/> -->
             <!-- <Entry value="11" text="vtkCompositeDataSet"/> -->
             <!-- <Entry value="13" text="vtkMultiblockDataSet"/> -->
             <!-- <Entry value="15" text="vtkHierarchicalBoxDataSet"/> -->
             <!-- <Entry value="16" text="vtkGenericDataSet"/> -->
             <!-- <Entry value="17" text="vtkHyperOctree"/> -->
             <!-- <Entry value="18" text="vtkTemporalDataSet"/> -->
             <!-- <Entry value="19" text="vtkTable"/> -->
             <!-- <Entry value="20" text="vtkGraph"/> -->
             <!-- <Entry value="21" text="vtkTree"/> -->
        </EnumerationDomain>
        <Documentation>
          Piston filters either produce polydata or image data. Set this to the correct choice for the upstream filter in question.
        </Documentation>
     </IntVectorProperty>

   <!-- End GetFromPiston -->
   </SourceProxy>

   <!-- ==================================================================== -->
   <SourceProxy name="PistonContour" class="vtkPistonContour"
      label="PistonContour">
      <Documentation
          long_help="Apply contour filter on GPU."
          short_help="Contour on GPU.">
Uses PISTON to iso-contour on GPU.
      </Documentation>

      <InputProperty
        name="Input"
        command="SetInputConnection">
         <ProxyGroupDomain name="groups">
            <Group name="sources"/>
            <Group name="filters"/>
         </ProxyGroupDomain>
         <DataTypeDomain name="input_type">
           <DataType value="vtkPistonDataObject"/>
         </DataTypeDomain>
         <Documentation>
           Property that connects an input to this filter.
         </Documentation>
      </InputProperty>

      <DoubleVectorProperty
        name="IsoValue"
        command="SetIsoValue"
        number_of_elements="1"
        default_values="0.0">
       <Documentation>
         This property specifies the value at which to compute the isosurface.
       </Documentation>
       <DoubleRangeDomain name="range" />
     </DoubleVectorProperty>

      <Hints>
        <DefaultRepresentations>
          <myrep representation="PistonRepresentation"/>
        </DefaultRepresentations>
      </Hints>

   <!-- End PistonContour -->
   </SourceProxy>

   <!-- ==================================================================== -->
   <SourceProxy name="PistonThreshold" class="vtkPistonThreshold"
      label="PistonThreshold">
     <Documentation
         long_help="Apply threshold filter on GPU."
         short_help="Threshold on GPU.">
Uses PISTON to extract threshold on GPU.
      </Documentation>

      <InputProperty
        name="Input"
        command="SetInputConnection">
         <ProxyGroupDomain name="groups">
            <Group name="sources"/>
            <Group name="filters"/>
         </ProxyGroupDomain>
         <DataTypeDomain name="input_type">
           <DataType value="vtkPistonDataObject"/>
         </DataTypeDomain>
         <Documentation>
           Property that connects an input to this filter.
         </Documentation>
      </InputProperty>

      <DoubleVectorProperty
        name="MinValue"
        command="SetMinValue"
        number_of_elements="1"
        default_values="0.0">
       <Documentation>
         This property specifies the lower bound of the threshold operation.
       </Documentation>
       <DoubleRangeDomain name="range" />
     </DoubleVectorProperty>

     <DoubleVectorProperty
        name="MaxValue"
        command="SetMaxValue"
        number_of_elements="1"
        default_values="0.0">
       <Documentation>
         This property specifies the lower bound of the threshold operation.
       </Documentation>
       <DoubleRangeDomain name="range" />
     </DoubleVectorProperty>

      <Hints>
        <DefaultRepresentations>
          <myrep representation="PistonRepresentation"/>
        </DefaultRepresentations>
      </Hints>

   <!-- End PistonThreshold -->
   </SourceProxy>

   <!-- ==================================================================== -->
   <SourceProxy name="PistonSlice" class="vtkPistonSlice"
      label="PistonSlice">
      <Documentation
          long_help="Apply slice filter on GPU."
          short_help="Slice on GPU.">
Uses PISTON to slice on GPU.
      </Documentation>

      <InputProperty
        name="Input"
        command="SetInputConnection">
         <ProxyGroupDomain name="groups">
            <Group name="sources"/>
            <Group name="filters"/>
         </ProxyGroupDomain>
         <DataTypeDomain name="input_type">
           <DataType value="vtkPistonDataObject"/>
         </DataTypeDomain>
         <Documentation>
           Property that connects an input to this filter.
         </Documentation>
      </InputProperty>

      <ProxyProperty name="ClippingPlane" command="SetClippingPlane"
        label="Clipping Plane">
        <ProxyGroupDomain name="groups">
          <Group name="implicit_functions"/>
        </ProxyGroupDomain>
        <ProxyListDomain name="proxy_list">
          <Proxy group="implicit_functions" name="Plane" />
        </ProxyListDomain>
        <Documentation>
          This property specifies the parameters of the clipping plane used to clip the data.
        </Documentation>
      </ProxyProperty>

      <DoubleVectorProperty
         name="Offset"
         command="SetOffset"
         number_of_elements="1"
         animateable="1"
         default_values="0.0" >
        <BoundsDomain name="range" mode="oriented_magnitude" >
         <RequiredProperties>
            <Property name="Input" function="Input" />
         </RequiredProperties>
        </BoundsDomain>
      </DoubleVectorProperty>

      <Hints>
        <DefaultRepresentations>
          <myrep representation="PistonRepresentation"/>
        </DefaultRepresentations>
      </Hints>

      <!-- End PistonSlice -->
   </SourceProxy>

   <!-- ==================================================================== -->
   <SourceProxy name="PistonSort" class="vtkPistonSort"
      label="PistonSort">
      <Documentation
          long_help="Apply sort filter on GPU."
          short_help="Sort on GPU.">
Uses PISTON to sort on GPU.
      </Documentation>

      <InputProperty
        name="Input"
        command="SetInputConnection">
         <ProxyGroupDomain name="groups">
            <Group name="sources"/>
            <Group name="filters"/>
         </ProxyGroupDomain>
         <DataTypeDomain name="input_type">
           <DataType value="vtkPistonDataObject"/>
         </DataTypeDomain>
         <Documentation>
           Property that connects an input to this filter.
         </Documentation>
      </InputProperty>

      <Hints>
        <DefaultRepresentations>
          <myrep representation="PistonRepresentation"/>
        </DefaultRepresentations>
      </Hints>

   <!-- End PistonSort -->
   </SourceProxy>

  </ProxyGroup>

  <!-- ==================================================================== -->
  <ProxyGroup name="representations">

    <!-- ================================================================== -->
    <RepresentationProxy name="PistonRepresentation"
                          class="vtkPistonRepresentation"
                           processes="client|renderserver|dataserver">
      <Documentation>
        ParaView's default representation for showing any type of dataset in the
        render view.
      </Documentation>

      <InputProperty name="Input" command="SetInputConnection">
        <DataTypeDomain name="input_type" composite_data_supported="0">
          <DataType value="vtkPistonDataObject"/>
        </DataTypeDomain>
        <InputArrayDomain name="input_array_cell" attribute_type="cell"
          optional="1">
        </InputArrayDomain>
        <InputArrayDomain name="input_array_point" attribute_type="point"
          optional="1">
        </InputArrayDomain>
        <Documentation>
          Set the input to the representation.
        </Documentation>
      </InputProperty>

      <IntVectorProperty name="Visibility"
        command="SetVisibility"
        number_of_elements="1"
        default_values="1">
        <BooleanDomain name="bool" />
        <Documentation>
          Set the visibility for this representation.
        </Documentation>
      </IntVectorProperty>

      <!-- End of PistonRepresentation -->
    </RepresentationProxy>

  </ProxyGroup>

</ServerManagerConfiguration>
