[Paraview] Making vtkImageMathematics available in ParaView filters

Utkarsh Ayachit utkarsh.ayachit at kitware.com
Fri Apr 3 07:52:45 EDT 2009


You are on the right track. The difference between vtkImageAppend and
vtkImageMathematics is that the former supports "multiple input
connections on a single input port" while the latter supports "one
input connection each on two input ports". This former is supported in
the XML by using the multiple_input attribute, while for the latter,
you need to have two separate input properties as follows:

<InputProperty name="Input1" command="SetInputConnection" ... />  <!--
port_index="0" is by default -->
<InputProperty name="Input2" port_index="1" command="SetInputConnection" ... />

The key here is the "port_index" attribute.

Utkarsh

On Fri, Apr 3, 2009 at 2:53 AM, Jérôme <jerome.velut at gmail.com> wrote:
> Ok !
> No, it doesn't work, but I made my mind:
>
> * vtkImageMathematics has two input ports, the second one being optional.
> That's why the XML works with one filter.
>
> * Function SetInput1 and SetInput2 are wrappers around SetInputConnection
> for old-style programming compatibility. SetInputX is in fact
> SetInputConnection(X-1, input_port1 )
>
> When using AddInputConnection like vtkImageAppend does, it is based on the
> 'one port' fashion of the filter, then multiple inputs means multiple
> connections on one port... That is not the case for vtkImageMathematics !!
>
> So, I would like to use kind of number_of_elements statement and
> element_types statement to handle something like :
> <InputProperty
>                        name="Input1"
>                        command="SetInputConnection"
>                        number_of_elements="2"
>                        element_types="0 3"   <!-- Yes I know, type '3' does
> not exist: I want this to be vtkAlgorithmOutput -->
>                        default_values="0 Input1"> <!-- Yes I know, but you
> see what I means ?? -->
>             <ProxyGroupDomain name="groups">
>                   <Group name="sources"/>
>                   <Group name="filters"/>
>             </ProxyGroupDomain>
>             <DataTypeDomain name="input_type">
>                  <DataType value="vtkImageData"/>
>             </DataTypeDomain>
>             <Documentation>
>                   Set the input to the vtkImageMathematics filter.
>             </Documentation>
>   </InputProperty>
>
> And then the same with Input2, where default_values would be "1 Input2".
> I know one solution is to create an inherited class from
> vtkImageMathematics, with accessors on input port 0 and port 1. I already
> did that for vtkImageStencil, what works fine. My problem here is to make
> vtkImageMathematic available without building any plugins: c++-allergics
> have rights to use image addition and substraction inside ParaView !! one
> XML to load, that's all !
>
> I hope -for these allergics- that there is a solution...
>
> Best regards
>
> Jerome
>
> 2009/4/2 Jérôme <jerome.velut at gmail.com>
>>
>> Hi,
>>
>> Many thanks for your quick answer. The problem I described was observed on
>> Paraview 3.4 release, debug build. I have a 3.5 CVS (not updated, so bad...)
>> on which I tried my XML just right now: "Image Math" is no more gray!! I am
>> able to apply the filter on a single image, with "Add constant", "Multiply
>> by constant", etc.
>>
>> The new problem is when I want to add two image. I selected two mandelbrot
>> sources, then I plugged the "Image Math" filter. The output window claims:
>> "Input port 0 of algorithm vtkImageMathematics(0x7f081c4bcb70) has 2
>> connections but is not repeatable".
>>
>> I tried the repeat_command="1" statement, without optimism and not much
>> success... It seems that vtkImageMathematics input is old-fashionned, but
>> the VTK doc says that SetInput1 and SetInput2 is like involking
>> AddInputConnection. Where do I miss something ???
>>
>> Thanks for all,
>>
>> Jerome
>>
>> 2009/4/2 Utkarsh Ayachit <utkarsh.ayachit at kitware.com>
>>>
>>> I justed loaded your XML as a plugin in CVS ParaView is seems to being
>>> enabled fine. I was able to apply the filter to Mandlebrot source.
>>> What version of ParaView are you using?
>>>
>>> Utkarsh
>>>
>>> 2009/4/2 Jérôme <jerome.velut at gmail.com>:
>>> > Dear all,
>>> >
>>> > I am unsuccessfully fighting with XML description of the VTK
>>> > vtkImageMathematics filter. I want it to be available in the ParaView
>>> > filters. At the end of this mail is the XML I wrote, widely inspired
>>> > from
>>> > "Append Geometry".
>>> >
>>> > Note that it is part of a larger file making available
>>> > ImageGaussianSmooth,
>>> > ImageSobel3D, ImageFilp, SplineFilter, some different sources...
>>> > Everything
>>> > works well, except Image Mathematics and Image Reslice (I told about
>>> > Reslice
>>> > in another thread).
>>> >
>>> > The symptom is the following : the "Image Math" appears in the filters
>>> > list,
>>> > but is always unavailable, even if I select one proxy or two in the
>>> > pipeline. What is the diagnostic, doctors ? Is there a therapy ?
>>> >
>>> > Thanks all !
>>> >
>>> > Best regards,
>>> > Jerome
>>> >
>>> > <ServerManagerConfiguration>
>>> >    <ProxyGroup name="filters">
>>> >       <!--
>>> > ================================================================== -->
>>> >       <SourceProxy name="ImageMathematics" class="vtkImageMathematics"
>>> > label="Image Math">
>>> >          <Documentation
>>> >                        long_help="Provides some image operations, one
>>> > or two
>>> > inputs."
>>> >                        short_help="vtkImageMathematics filter.">
>>> >          </Documentation>
>>> >       <InputProperty
>>> >          name="Input"
>>> >          command="AddInputConnection"
>>> >          clean_command="RemoveAllInputs"
>>> >          multiple_input="1">
>>> >            <ProxyGroupDomain name="groups">
>>> >              <Group name="sources"/>
>>> >              <Group name="filters"/>
>>> >            </ProxyGroupDomain>
>>> >            <DataTypeDomain name="input_type">
>>> >              <DataType value="vtkImageData"/>
>>> >            </DataTypeDomain>
>>> >            <Documentation>
>>> >              Set the input to the Append Geometry filter.
>>> >            </Documentation>
>>> >       </InputProperty>
>>> >
>>> >          <IntVectorProperty
>>> >                            name="Operation"
>>> >                            command="SetOperation"
>>> >                            number_of_elements="1"
>>> >                            default_values="0">
>>> >
>>> >             <EnumerationDomain name="enum">
>>> >                <Entry value="0" text="Add"/>
>>> >                <Entry value="1" text="Substract"/>
>>> >                <Entry value="2" text="Multiply"/>
>>> >                <Entry value="3" text="Divide"/>
>>> >                <Entry value="4" text="Invert"/>
>>> >                <Entry value="5" text="Sin"/>
>>> >                <Entry value="6" text="Cos"/>
>>> >                <Entry value="7" text="Exp"/>
>>> >                <Entry value="8" text="Log"/>
>>> >                <Entry value="9" text="Abs"/>
>>> >                <Entry value="10" text="Sqr"/>
>>> >                <Entry value="11" text="Sqrt"/>
>>> >                <Entry value="12" text="Min"/>
>>> >                <Entry value="13" text="Max"/>
>>> >                <Entry value="14" text="Atan"/>
>>> >                <Entry value="15" text="Atan2"/>
>>> >                <Entry value="16" text="Multiply by k"/>
>>> >                <Entry value="17" text="Add c"/>
>>> >                <Entry value="18" text="Conjugate"/>
>>> >                <Entry value="19" text="Complex multiply"/>
>>> >                <Entry value="20" text="Replace by k"/>
>>> >             </EnumerationDomain>
>>> >          </IntVectorProperty>
>>> >
>>> >          <DoubleVectorProperty
>>> >                               name="ConstantK"
>>> >                               command="SetConstantK"
>>> >                               number_of_elements="1"
>>> >                               default_values="1">
>>> >          </DoubleVectorProperty>
>>> >
>>> >          <DoubleVectorProperty
>>> >                               name="ConstantC"
>>> >                               command="SetConstantC"
>>> >                               number_of_elements="1"
>>> >                               default_values="0">
>>> >          </DoubleVectorProperty>
>>> >
>>> >          <IntVectorProperty
>>> >                            name="DivideByZeroToC"
>>> >                            command="SetDivideByZeroToC"
>>> >                            number_of_elements="1"
>>> >                            default_values="1">
>>> >             <BooleanDomain name="boolean"/>
>>> >          </IntVectorProperty>
>>> >
>>> >       </SourceProxy>
>>> >       <!-- End ImageMathematics -->
>>> >    </ProxyGroup>
>>> >    <!-- End Filters Group -->
>>> > </ServerManagerConfiguration>
>>> >
>>> >
>>> >
>>> > _______________________________________________
>>> > 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
>>> >
>>> >
>>
>
>


More information about the ParaView mailing list