[Paraview] upgrading reader module/plugin

Utkarsh Ayachit utkarsh.ayachit at kitware.com
Tue Jan 10 15:05:40 EST 2017


Mark,

After you've changed a property, you need to call
vtkSMProxy::UpdateVTKObjects() (or vtkSMProxy::UpdateProperty()) to
push those values for them to have any effect. However, in a panel,
you'd rather not do that.

Utkarsh

On Mon, Jan 9, 2017 at 12:31 PM, Mark Olesen <Mark.Olesen at esi-group.com> wrote:
> The SetImmediateUpdate seems be needed for cases where I do bypass the addPropertyLink mechanism. Eg,
>
>         QCheckBox* b = new QCheckBox(this);
>         setButtonProperties(b, showPointNumbers_);  //<- text, tips etc...
>         form->addWidget(b, 0, 1, Qt::AlignLeft);
>
>         connect(b, SIGNAL(toggled(bool)), this, SLOT(showPointNumbers(bool)));
>         showPointNumbers_->SetImmediateUpdate(true);
>
> and then
>
> void pqFoamBlockMeshControls::showPointNumbers(bool checked)
> {
>     showPointNumbers_->SetElement(0, checked);
>
>     // Update the active view
>     if (this->view())
>     {
>         this->view()->render();
>     }
> }
>
> Without the SetImmediateUpdate, the toggle of the showPointNumbers property doesn't get propagated to the reader until sometime later. Maybe the key is to signal directly to the reader?
>
> ________________________________________
> From: Utkarsh Ayachit <utkarsh.ayachit at kitware.com>
> Sent: Monday, January 9, 2017 4:18 PM
> To: Mark Olesen
> Cc: paraview at paraview.org
> Subject: Re: [Paraview] upgrading reader module/plugin
>
> I don't think `SetImmediateUpdate` should be needed any more. Are you
> sure it's needed? If I remember correctly, it's one of the obselete
> ivars that should truly be deprecated and removed.
>
> On Mon, Jan 9, 2017 at 4:10 AM, Mark Olesen <Mark.Olesen at esi-group.com> wrote:
>> Hi Utkarsh,
>>
>> The addPropertyLink works exactly as desired and triggers the necessary update mechanism. For a few places I still have direct connect() to catch the signal and do something additional with it, but that was expected. I don't know why I still need an SetImmediateUpdate to get the changes propagated properly, but that can wait. The most important thing is that I can now load my reader module in paraview 5.2 and move forward.
>>
>> Thank you,
>> /mark
>>
>> ________________________________________
>> From: Utkarsh Ayachit <utkarsh.ayachit at kitware.com>
>> Sent: Thursday, January 5, 2017 4:52:32 AM
>> To: Mark Olesen
>> Cc: paraview at paraview.org
>> Subject: Re: [Paraview] upgrading reader module/plugin
>>
>> Mark,
>>
>> As you can expect, connecting Qt widgets to vtkSMProperty's on proxies
>> in a two-way-link is common in ParaView panels and hence ParaView
>> provides quite a few ways for doing that. For your use-case, where
>> you're connecting a QCheckBox to an IntVectorProperty on the proxy,
>> your pqPropertyWidget subclass can do something like the following:
>>
>> Assuming your XML for the group is as follows:
>>
>> QCheckBox *checkbox = ...
>> vtkSMProperty* smProperty = smgroup->GetProperty("InterpolateFields");
>> this->addPropertyLink(checkbox, "checked", SIGNAL(toggled(bool), smProperty);
>>
>> That should do it.
>>
>> Utkarsh
>>
>> On Wed, Jan 4, 2017 at 9:48 AM, Mark Olesen <Mark.Olesen at esi-group.com> wrote:
>>> I'm currently upgrading a reader module from using a pqAutoGeneratedObjectPanel to a using a property group widget (as per http://www.paraview.org/Wiki/Plugin_HowTo#Adding_Customizations_for_Properties_Panel).
>>>
>>> I have my bunch of properties in a PropertyGroup and have a panel_widget associated with them. Everything loads up, and using printf() I can verify that the property values are all being updated.
>>> However, not only does it seems rather clunky, I cannot get the "Apply" button on the property panel to notice when the property values have been updated.
>>>
>>> Here's a basic sketch of what I have:
>>>
>>> // Get the property from the group (with down-cast):
>>>     interpolateFields_ = group->GetProperty("interpolate");
>>>
>>> // Provide a checkbox as widget for it - two-column layout.
>>>   QCheckBox* b = new QCheckBox(prop->GetXMLLabel(), this);
>>>   form->addWidget(b, row, col, Qt::AlignLeft);
>>>
>>> // Connect to slot:
>>>     connect(b, SIGNAL(toggled(bool)), this, SLOT(interpolateFields(bool)));
>>>
>>> // This is ugly, but seems to be needed???
>>>     interpolateFields_->SetImmediateUpdate(true);
>>>
>>> // And the slot itself
>>> void interpolateFields(bool checked)
>>> {
>>>     interpolateFields_->SetElement(0, checked);
>>>     // this->setModified();
>>>     //^^^ used to work with pqAutoGeneratedObjectPanel
>>> }
>>>
>>> I used to rely on the setModified() method from the pqAutoGeneratedObjectPanel, but now can't seem to get from the SMproxy to the pqProxy or whatever.
>>>
>>> Or am I going about this entirely the wrong way?
>>> FWIW, here are the relevant sub-entries from the XML, in case there is something missing there:
>>>
>>>     <IntVectorProperty
>>>       name="InterpolateFields"
>>>       command="SetInterpolateVolFields"
>>>       number_of_elements="1"
>>>       default_values="1"
>>>       animateable="0">
>>>       <BooleanDomain name="bool"/>
>>>       <Documentation></Documentation>
>>>     </IntVectorProperty>
>>>
>>>   <PropertyGroup
>>>     label="General Controls"
>>>     panel_widget="my_reader_controls">
>>>     <Property name="InterpolateFields"/>
>>>     ...
>>>   </PropertyGroup>
>>>
>>> Unfortunately, the  Examples/Plugins/PropertyWidgets is a bit scanty here.
>>>
>>> Thanks for any advice,
>>>
>>> /mark
>>>
>>>
>>> _______________________________________________
>>> 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
>>>
>>> Search the list archives at: http://markmail.org/search/?q=ParaView
>>>
>>> Follow this link to subscribe/unsubscribe:
>>> http://public.kitware.com/mailman/listinfo/paraview


More information about the ParaView mailing list