Hello Paraview team.
I am trying to write a python plugin which creates a filter to plot data in a customized way. To do that, I used the paraview.util.vtkAlgorithm after looking at PythonAlgorithmExamples.py and the plugins documentation.
I have already achieved a first version of this filter with some widgets using @smproperty and @smdomain decorators like checkboxes, dropdown lists etc … which works fine.
My goal is now to add more functionnalities and to create a better organization of my widgets like in PlotData (see picture at the bottom). To do so, I am trying to use what was presented in this topic : Controlling the order that widgets appear in the GUI for a Python algorithm plugin - ParaView Support - ParaView
I need to use “PropertyGroup” but I did not find documentation regarding its use in Python plugins. And when I try to do it by myself, it seems that I am using it wrong in my code below, which tries to reproduce the XML filter of the XYChartRepresentation :
@smproperty.intvector(name="Visibility", default_values=1, number_of_elements=1, panel_visibility="never")
@smdomain.xml("""<BooleanDomain name="bool" />""")
def SetVisibility(self, name):
self.Modified()
@smproperty.intvector(name="CompositeDataSetIndex", default_values=1, number_of_elements=1, number_of_elements_per_command=1, panel_visibility="default", repeat_command="1")
@smdomain.xml("""<CompositeTreeDomain mode="leaves" name="tree">
<RequiredProperties>
<Property function="Input" name="Input" />
</RequiredProperties>
</CompositeTreeDomain>""")
def AddCompositeDataSetIndex(self, name):
self.Modified()
@smproperty.intvector(name="AttributeType", default_values=0, number_of_elements=1)
@smdomain.xml("""<FieldDataDomain enable_field_data="1" name="enum">
<RequiredProperties>
<Property function="Input" name="Input" />
</RequiredProperties>
</FieldDataDomain>""")
def SetFieldAssociation(self, attr):
self.Modified()
@smproperty.stringvector(name="XArrayName", default_values=" ", number_of_elements=1)
@smdomain.xml("""
<ChartSeriesListDomain name="array_list" hide_partial_arrays="1">
<RequiredProperties>
<Property function="Input" name="Input" />
<Property function="FieldDataSelection" name="AttributeType" />
</RequiredProperties>
</ChartSeriesListDomain>""")
def SetDataForXAxisName(self, name):
self._dataForXAxisName = name
self.Modified()
@smproperty.stringvector(name="SeriesVisibility", element_types=[2, 0], number_of_elements_per_command=2, repeat_command="1")
@smdomain.xml("""<ChartSeriesSelectionDomain name="array_list" default_mode="visibility">
<RequiredProperties>
<Property function="Input" name="Input" />
<Property function="FieldDataSelection" name="AttributeType" />
<Property function="CompositeIndexSelection" name="CompositeDataSetIndex" />
</RequiredProperties>
</ChartSeriesSelectionDomain>""")
def SetSeriesVisibility(self, name):
self.Modified()
@smproperty.stringvector(name="SeriesLabel", element_types=[2, 2], number_of_elements_per_command=2, repeat_command="1")
@smdomain.xml("""<ChartSeriesSelectionDomain name="array_list" default_mode="label">
<RequiredProperties>
<Property function="Input" name="Input" />
<Property function="FieldDataSelection" name="AttributeType" />
<Property function="CompositeIndexSelection" name="CompositeDataSetIndex" />
</RequiredProperties>
</ChartSeriesSelectionDomain>""")
def SetLabel(self, name):
self.Modified()
@smproperty.stringvector(name="SeriesColor", element_types=[2, 1, 1, 1], number_of_elements_per_command=4, repeat_command="1")
@smdomain.xml("""<ChartSeriesSelectionDomain name="array_list" default_mode="color">
<RequiredProperties>
<Property function="Input" name="Input" />
<Property function="FieldDataSelection" name="AttributeType" />
<Property function="CompositeIndexSelection" name="CompositeDataSetIndex" />
</RequiredProperties>
</ChartSeriesSelectionDomain>""")
def SetColor(self, name):
self.Modified()
@smproperty.stringvector(name="SeriesPlotCorner", element_types=[2, 0], number_of_elements_per_command=2, repeat_command="1")
@smdomain.xml("""<ChartSeriesSelectionDomain name="array_list" default_mode="value" default_value="0">
<RequiredProperties>
<Property function="Input" name="Input" />
<Property function="FieldDataSelection" name="AttributeType" />
<Property function="CompositeIndexSelection" name="CompositeDataSetIndex" />
</RequiredProperties>
</ChartSeriesSelectionDomain>""")
def SetAxisCorner(self, name):
self.Modified()
@smproperty.stringvector(name="SeriesLineStyle", element_types=[2, 0], number_of_elements_per_command=2, repeat_command="1")
@smdomain.xml("""<ChartSeriesSelectionDomain name="array_list" default_mode="value" default_value="1">
<RequiredProperties>
<Property function="Input" name="Input" />
<Property function="FieldDataSelection" name="AttributeType" />
<Property function="CompositeIndexSelection" name="CompositeDataSetIndex" />
</RequiredProperties>
</ChartSeriesSelectionDomain>""")
def SetLineStyle(self,name):
self.Modified()
@smproperty.stringvector(name="SeriesLineThickness", element_types=[2, 0], number_of_elements_per_command=2, repeat_command="1")
@smdomain.xml("""<ChartSeriesSelectionDomain name="array_list" default_mode="value" default_value="2">
<RequiredProperties>
<Property function="Input" name="Input" />
<Property function="FieldDataSelection" name="AttributeType" />
<Property function="CompositeIndexSelection" name="CompositeDataSetIndex" />
</RequiredProperties>
</ChartSeriesSelectionDomain>""")
def SetLineThickness(self,name):
self.Modified()
@smproperty.stringvector(name="SeriesMarkerStyle", element_types=[2, 0], number_of_elements_per_command=2, repeat_command="1")
@smdomain.xml("""<ChartSeriesSelectionDomain name="array_list" default_mode="value" default_value="0">
<RequiredProperties>
<Property function="Input" name="Input" />
<Property function="FieldDataSelection" name="AttributeType" />
<Property function="CompositeIndexSelection" name="CompositeDataSetIndex" />
</RequiredProperties>
</ChartSeriesSelectionDomain>""")
def SetMarkerStyle(self, name):
self.Modified()
@smproperty.doublevector(name="Color", default_values=[1.0, 0.0, 1.0], number_of_elements=3, panel_visibility="never")
@smdomain.xml("""<DoubleRangeDomain max="1 1 1" min="0 0 0" name="range" />
<Hints>
<PropertyLink type="ColorPalette" property="SelectionColor" />
</Hints>""")
def SetSelectionColor(self, name, name2, name3):
self.Modified()
@smproperty.xml(xmlstr="""<PropertyGroup label="Series Parameters" panel_widget="SeriesEditor" panel_visibility="default">
<Property name="SeriesVisibility" function="Series_Visibility"/>
<Property name="SeriesColor" function="Series_Color"/>
<Property name="SeriesLineThickness" function="Series_LineThickness"/>
<Property name="SeriesLineStyle" function="Series_LineStyle"/>
<Property name="SeriesLabel" function="Series_Label"/>
<Property name="SeriesMarkerStyle" function="Series_MarkerStyle"/>
<Property name="SeriesPlotCorner" function="Series_PlotCorner"/>
</PropertyGroup>""")
def GroupSeriesParameters(self,name):
self.Modified()
But I unfortunately receive this warning for every property :
... vtkSMPropertyGroup (0x28f2070): Failed to locate property 'SeriesVisibility' for PropertyGroup. Skipping.
... vtkSMPropertyGroup (0x28f2070): Failed to locate property 'SeriesColor' for PropertyGroup. Skipping.
...
Could you help me with that please ?
Have a great day