Commit 7a41ac28 authored by Nicolas Vuaille's avatar Nicolas Vuaille

Add property group widget for molecule representation

expose some mapper parameters:
 - atoms/bonds visiblity,
 - radius values/scale/type

presets are also available from proxy
parent 7311a0b5
......@@ -8,7 +8,16 @@
<pqevent object="pqClientMainWindow/menubar/menuTools" command="activate" arguments="actionTesting_Window_Size" />
<pqevent object="pqClientMainWindow/cameraToolbar/actionResetCamera" command="activate" arguments="" />
<pqcompareview object="pqClientMainWindow/centralwidget/MultiViewWidget/CoreWidget/qt_tabwidget_stackedwidget/MultiViewWidget1/Frame.0/CentralWidgetFrame/Viewport" baseline="$PARAVIEW_DATA_ROOT/Baseline/Molecule-BallStick.png" width="300" height="300" />
<pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/scrollArea/qt_scrollarea_viewport/scrollAreaWidgetContents/DisplayFrame/ProxyPanel/MoleculeRenderMode/ComboBox" command="set_string" arguments="Space Filling" />
<pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/scrollArea/qt_scrollarea_viewport/scrollAreaWidgetContents/DisplayFrame/ProxyPanel/MoleculeRenderMode/ComboBox" command="set_string" arguments="Liquorice" />
<pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/scrollArea/qt_scrollarea_viewport/scrollAreaWidgetContents/DisplayFrame/ProxyPanel/MoleculeParameters/preset" command="activated" arguments="Liquorice" />
<pqcompareview object="pqClientMainWindow/centralwidget/MultiViewWidget/CoreWidget/qt_tabwidget_stackedwidget/MultiViewWidget1/Frame.0/CentralWidgetFrame/Viewport" baseline="$PARAVIEW_DATA_ROOT/Baseline/Molecule-Liquorice.png" width="300" height="300" />
<pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/scrollArea/qt_scrollarea_viewport/scrollAreaWidgetContents/DisplayFrame/ProxyPanel/MoleculeParameters/preset" command="activated" arguments="Ball and Stick" />
<pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/scrollArea/qt_scrollarea_viewport/scrollAreaWidgetContents/DisplayFrame/ProxyPanel/MoleculeParameters/showBonds" command="set_boolean" arguments="false" />
<pqcheck object="pqClientMainWindow/propertiesDock/propertiesPanel/scrollArea/qt_scrollarea_viewport/scrollAreaWidgetContents/DisplayFrame/ProxyPanel/MoleculeParameters/preset" property="currentText" arguments="(no preset)" />
<pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/scrollArea/qt_scrollarea_viewport/scrollAreaWidgetContents/DisplayFrame/ProxyPanel/MoleculeParameters/atomicRadiusFactor/Slider" command="set_int" arguments="75" />
<pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/SearchBox/AdvancedButton" command="set_boolean" arguments="true" />
<pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/scrollArea/qt_scrollarea_viewport/scrollAreaWidgetContents/DisplayFrame/ProxyPanel/MoleculeParameters/showBonds" command="set_boolean" arguments="true" />
<pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/scrollArea/qt_scrollarea_viewport/scrollAreaWidgetContents/DisplayFrame/ProxyPanel/MoleculeParameters/useMultiCylinders" command="set_boolean" arguments="false" />
<pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/scrollArea/qt_scrollarea_viewport/scrollAreaWidgetContents/DisplayFrame/ProxyPanel/MoleculeParameters/atomicRadiusType" command="activated" arguments="Unit" />
<pqevent object="pqClientMainWindow/propertiesDock/propertiesPanel/scrollArea/qt_scrollarea_viewport/scrollAreaWidgetContents/DisplayFrame/ProxyPanel/MoleculeParameters/atomicRadiusFactor/Slider" command="set_int" arguments="13" />
<pqcompareview object="pqClientMainWindow/centralwidget/MultiViewWidget/CoreWidget/qt_tabwidget_stackedwidget/MultiViewWidget1/Frame.0/CentralWidgetFrame/Viewport" baseline="$PARAVIEW_DATA_ROOT/Baseline/Molecule-Custom.png" width="300" height="300" />
</pqevents>
# improve-molecule-represenation
* Expose molecule mapper parameters, such as atom/bond size and color, on the molecule representation.
* Add predefined presets to control those parameters. Presets and parameters are available from the GUI
and from python.
......@@ -47,6 +47,9 @@ vtkStandardNewMacro(vtkMoleculeRepresentation)
// initialize cache:
this->CacheKeeper->SetInputData(this->DummyMolecule.Get());
static const char* defaultRadiiArrayName = "radii";
this->SetAtomicRadiusArray(defaultRadiiArrayName);
vtkMath::UninitializeBounds(this->DataBounds);
}
......@@ -242,6 +245,66 @@ void vtkMoleculeRepresentation::SyncMapper()
}
}
//------------------------------------------------------------------------------
void vtkMoleculeRepresentation::SetAtomicRadiusType(int type)
{
this->Mapper->SetAtomicRadiusType(type);
}
//------------------------------------------------------------------------------
void vtkMoleculeRepresentation::SetAtomicRadiusScaleFactor(double factor)
{
this->Mapper->SetAtomicRadiusScaleFactor(factor);
}
//------------------------------------------------------------------------------
void vtkMoleculeRepresentation::SetBondRadius(double radius)
{
this->Mapper->SetBondRadius(radius);
}
//------------------------------------------------------------------------------
void vtkMoleculeRepresentation::SetUseMultiCylindersForBonds(bool use)
{
this->Mapper->SetUseMultiCylindersForBonds(use);
}
//------------------------------------------------------------------------------
void vtkMoleculeRepresentation::SetRenderAtoms(bool render)
{
this->Mapper->SetRenderAtoms(render);
}
//------------------------------------------------------------------------------
void vtkMoleculeRepresentation::SetRenderBonds(bool render)
{
this->Mapper->SetRenderBonds(render);
}
//------------------------------------------------------------------------------
void vtkMoleculeRepresentation::SetAtomicRadiusArray(const char* name)
{
this->Mapper->SetAtomicRadiusArrayName(name);
}
//------------------------------------------------------------------------------
void vtkMoleculeRepresentation::SetBondColorMode(int mode)
{
this->Mapper->SetBondColorMode(mode);
}
//------------------------------------------------------------------------------
void vtkMoleculeRepresentation::SetBondColor(double r, double g, double b)
{
this->Mapper->SetBondColor(r * 255, g * 255, b * 255);
}
//------------------------------------------------------------------------------
void vtkMoleculeRepresentation::SetBondColor(double color[3])
{
this->SetBondColor(color[0], color[1], color[2]);
}
//------------------------------------------------------------------------------
void vtkMoleculeRepresentation::UpdateColoringParameters()
{
......
......@@ -61,6 +61,22 @@ public:
void MarkModified() VTK_OVERRIDE;
//@{
/**
* Forward custom atom/bonds rendering parameters to the mapper.
*/
void SetAtomicRadiusType(int type);
void SetAtomicRadiusScaleFactor(double factor);
void SetBondRadius(double factor);
void SetBondColorMode(int mode);
void SetBondColor(double color[3]);
void SetBondColor(double r, double g, double b);
void SetUseMultiCylindersForBonds(bool use);
void SetRenderAtoms(bool render);
void SetRenderBonds(bool render);
void SetAtomicRadiusArray(const char* name);
//@}
protected:
vtkMoleculeRepresentation();
~vtkMoleculeRepresentation() override;
......
......@@ -50,6 +50,7 @@ set (Module_SRCS
vtkSMLightProxy.cxx
vtkSMMaterialDomain.cxx
vtkSMMaterialLibraryProxy.cxx
vtkSMPVMoleculeRepresentationProxy.cxx
vtkSMMultiSliceViewProxy.cxx
vtkSMNewWidgetRepresentationProxy.cxx
vtkSMOrthographicSliceViewProxy.cxx
......
/*=========================================================================
Program: ParaView
Module: vtkSMPVMoleculeRepresentationProxy.cxx
Copyright (c) Kitware, Inc.
All rights reserved.
See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
#include "vtkSMPVMoleculeRepresentationProxy.h"
#include "vtkObjectFactory.h"
#include "vtkSMTrace.h"
#include "vtkSMUncheckedPropertyHelper.h"
#include <cstring>
vtkStandardNewMacro(vtkSMPVMoleculeRepresentationProxy);
bool MapperParametersPreset::IsSimilar(const MapperParametersPreset& p) const
{
return (p.RenderAtoms == this->RenderAtoms && p.RenderBonds == this->RenderBonds &&
p.AtomicRadiusType == this->AtomicRadiusType &&
p.AtomicRadiusFactor == this->AtomicRadiusFactor &&
p.UseMultiCylindersForBonds == this->UseMultiCylindersForBonds &&
p.BondRadius == this->BondRadius && p.UseAtomColorForBonds == this->UseAtomColorForBonds);
}
//----------------------------------------------------------------------------
vtkSMPVMoleculeRepresentationProxy::vtkSMPVMoleculeRepresentationProxy()
{
this->Presets[Preset::BallAndStick] = MapperParametersPreset{ true, true, 1, 0.3, true, 0.075,
true, "BallAndStick", "Ball and Stick" };
this->Presets[Preset::Liquorice] =
MapperParametersPreset{ true, true, 2, 0.15, false, 0.15, true, "Liquorice", "Liquorice" };
this->Presets[Preset::VanDerWaals] =
MapperParametersPreset{ true, false, 1, 1., true, 0.075, true, "VanDerWaals", "Van der Waals" };
this->Presets[Preset::Fast] =
MapperParametersPreset{ true, true, 2, 0.6, false, 0.075, false, "Fast", "Fast" };
}
//----------------------------------------------------------------------------
void vtkSMPVMoleculeRepresentationProxy::SetPreset(int preset)
{
if (this->Presets.count(preset) == 0 || preset == Preset::None)
{
return;
}
SM_SCOPED_TRACE(CallMethod)
.arg(this)
.arg("SetPreset")
.arg(this->GetPresetName(preset))
.arg("comment", "Set the preset");
const MapperParametersPreset& parameters = this->Presets[preset];
vtkSMPropertyHelper(this, "RenderAtoms").Set(parameters.RenderAtoms);
vtkSMPropertyHelper(this, "RenderBonds").Set(parameters.RenderBonds);
vtkSMPropertyHelper(this, "AtomicRadiusType").Set(parameters.AtomicRadiusType);
vtkSMPropertyHelper(this, "AtomicRadiusFactor").Set(parameters.AtomicRadiusFactor);
vtkSMPropertyHelper(this, "MultiCylindersForBonds").Set(parameters.UseMultiCylindersForBonds);
vtkSMPropertyHelper(this, "BondRadius").Set(parameters.BondRadius);
if (!parameters.UseAtomColorForBonds)
{
double color[3] = { 1., 1., 1. };
vtkSMPropertyHelper(this, "BondColor").Set(color, 3);
}
vtkSMPropertyHelper(this, "BondColorMode").Set(parameters.UseAtomColorForBonds ? 1 : 0);
this->UpdateVTKObjects();
}
//----------------------------------------------------------------------------
void vtkSMPVMoleculeRepresentationProxy::SetPreset(const char* name)
{
for (auto p : this->Presets)
{
if (std::strcmp(name, p.second.Name.c_str()) == 0)
{
this->SetPreset(p.first);
return;
}
}
}
//----------------------------------------------------------------------------
const char* vtkSMPVMoleculeRepresentationProxy::GetPresetName(int preset)
{
auto p = this->Presets.find(preset);
if (p != this->Presets.end())
{
return p->second.Name.c_str();
}
return "None";
}
//----------------------------------------------------------------------------
const char* vtkSMPVMoleculeRepresentationProxy::GetPresetDisplayName(int preset)
{
auto p = this->Presets.find(preset);
if (p != this->Presets.end())
{
return p->second.DisplayName.c_str();
}
return "(no preset)";
}
//----------------------------------------------------------------------------
int vtkSMPVMoleculeRepresentationProxy::GetCurrentPreset()
{
MapperParametersPreset p;
p.RenderAtoms = vtkSMUncheckedPropertyHelper(this, "RenderAtoms").GetAsInt();
p.RenderBonds = vtkSMUncheckedPropertyHelper(this, "RenderBonds").GetAsInt();
p.AtomicRadiusType = vtkSMUncheckedPropertyHelper(this, "AtomicRadiusType").GetAsDouble();
p.AtomicRadiusFactor = vtkSMUncheckedPropertyHelper(this, "AtomicRadiusFactor").GetAsDouble();
p.UseMultiCylindersForBonds =
vtkSMUncheckedPropertyHelper(this, "MultiCylindersForBonds").GetAsInt();
p.BondRadius = vtkSMUncheckedPropertyHelper(this, "BondRadius").GetAsDouble();
p.UseAtomColorForBonds = vtkSMUncheckedPropertyHelper(this, "BondColorMode").GetAsInt();
for (const auto& preset : this->Presets)
{
if (preset.second.IsSimilar(p))
{
return preset.first;
}
}
return Preset::None;
}
//----------------------------------------------------------------------------
void vtkSMPVMoleculeRepresentationProxy::PrintSelf(ostream& os, vtkIndent indent)
{
this->Superclass::PrintSelf(os, indent);
}
/*=========================================================================
Program: ParaView
Module: vtkSMPVMoleculeRepresentationProxy.h
Copyright (c) Kitware, Inc.
All rights reserved.
See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
/**
* @class vtkSMPVMoleculeRepresentationProxy
* @brief vtkSMPVMoleculeRepresentationProxy is a representation proxy used for molecules.
*
* This class exposes a method to apply a preset onto molecule properties.
*/
#ifndef vtkSMPVMoleculeRepresentationProxy_h
#define vtkSMPVMoleculeRepresentationProxy_h
#include "vtkPVServerManagerRenderingModule.h" //needed for exports
#include "vtkSMPVRepresentationProxy.h"
#include <map> // for std::map
struct MapperParametersPreset
{
bool RenderAtoms;
bool RenderBonds;
int AtomicRadiusType;
double AtomicRadiusFactor;
bool UseMultiCylindersForBonds;
double BondRadius;
bool UseAtomColorForBonds;
std::string Name;
std::string DisplayName;
bool IsSimilar(const MapperParametersPreset& p) const;
};
class VTKPVSERVERMANAGERRENDERING_EXPORT vtkSMPVMoleculeRepresentationProxy
: public vtkSMPVRepresentationProxy
{
public:
static vtkSMPVMoleculeRepresentationProxy* New();
vtkTypeMacro(vtkSMPVMoleculeRepresentationProxy, vtkSMPVRepresentationProxy);
void PrintSelf(ostream& os, vtkIndent indent) override;
enum Preset
{
None = 0,
BallAndStick,
Liquorice,
VanDerWaals,
Fast,
NbOfPresets
};
//@{
/**
* Set Preset onto properties. If preset is None or 0, does nothing.
*/
void SetPreset(int preset);
void SetPreset(const char* name);
//@}
/**
* Get the preset name. This name can be used with `SetPreset()` method.
*/
const char* GetPresetName(int preset);
/**
* Get a display name for the preset.
*/
const char* GetPresetDisplayName(int preset);
/**
* Get the current preset value.
*/
int GetCurrentPreset();
protected:
vtkSMPVMoleculeRepresentationProxy();
~vtkSMPVMoleculeRepresentationProxy() override = default;
private:
vtkSMPVMoleculeRepresentationProxy(const vtkSMPVMoleculeRepresentationProxy&) = delete;
void operator=(const vtkSMPVMoleculeRepresentationProxy&) = delete;
std::map<int, MapperParametersPreset> Presets;
};
#endif
......@@ -6520,6 +6520,9 @@
</DataTypeDomain>
<Documentation>Set the input molecule for the
representation.</Documentation>
<InputArrayDomain attribute_type="vertex"
name="input_array"
optional="1" />
</InputProperty>
<IntVectorProperty command="SetVisibility"
default_values="1"
......@@ -6539,21 +6542,89 @@
The opacity to use when rendering the model.
</Documentation>
</DoubleVectorProperty>
<IntVectorProperty command="SetMoleculeRenderMode"
default_values="0"
label="Render Mode"
name="MoleculeRenderMode"
<IntVectorProperty command="SetRenderAtoms"
default_values="1"
name="RenderAtoms"
number_of_elements="1">
<BooleanDomain name="bool" />
<Documentation>Set the visibility for the atoms.</Documentation>
</IntVectorProperty>
<DoubleVectorProperty command="SetAtomicRadiusScaleFactor"
default_values="0.3"
name="AtomicRadiusFactor"
number_of_elements="1">
<DoubleRangeDomain max="3" min="0" name="range" />
<Documentation>The scale factor to apply on atom radius. Radius is expected to be in Angstrom. </Documentation>
</DoubleVectorProperty>
<IntVectorProperty command="SetAtomicRadiusType"
default_values="1"
label="Atomic Radius Type"
name="AtomicRadiusType"
number_of_elements="1"
panel_visibility="default">
panel_visibility="advanced">
<EnumerationDomain name="enum">
<Entry text="Ball and Stick"
<Entry text="Covalent"
value="0" />
<Entry text="Space Filling"
<Entry text="Van Der Waals"
value="1" />
<Entry text="Liquorice"
<Entry text="Unit"
value="2" />
<Entry text="Input Array"
value="3" />
</EnumerationDomain>
<Documentation>The radius type to use.</Documentation>
</IntVectorProperty>
<StringVectorProperty name="AtomicRadiusArrayName"
command="SetAtomicRadiusArray"
number_of_elements="1"
label="Atomic Radii Array"
panel_visibility="advanced">
<ArrayListDomain input_domain_name="input_array"
attribute_type="Scalars"
name="array_list">
<RequiredProperties>
<Property name="Input" function="Input"/>
</RequiredProperties>
</ArrayListDomain>
<Documentation>This property specifies the name of the input array to use for atom radii. Values are expected to be in Angstrom.
</Documentation>
</StringVectorProperty>
<IntVectorProperty command="SetRenderBonds"
default_values="1"
name="RenderBonds"
number_of_elements="1">
<BooleanDomain name="bool" />
<Documentation>Set the visibility for the bonds.</Documentation>
</IntVectorProperty>
<DoubleVectorProperty command="SetBondRadius"
default_values="0.075"
name="BondRadius"
number_of_elements="1">
<DoubleRangeDomain max="0.5" min="0" name="range" />
<Documentation>The bond radius, in Angstrom. </Documentation>
</DoubleVectorProperty>
<IntVectorProperty command="SetUseMultiCylindersForBonds"
default_values="1"
name="MultiCylindersForBonds"
number_of_elements="1">
<BooleanDomain name="bool" />
<Documentation>Display multiple cylinders for high bond order.</Documentation>
</IntVectorProperty>
<IntVectorProperty command="SetBondColorMode"
default_values="1"
name="BondColorMode"
number_of_elements="1">
<BooleanDomain name="bool" />
<Documentation>Use atom color for bonds. If disabled, use the custom bond color.</Documentation>
</IntVectorProperty>
<DoubleVectorProperty command="SetBondColor"
default_values="1 1 1"
name="BondColor"
number_of_elements="3"
panel_widget="color_selector"
panel_visibility="default">
<Documentation>Sets the color for the bonds.</Documentation>
</DoubleVectorProperty>
<StringVectorProperty command="SetInputArrayToProcess"
element_types="0 0 0 0 2"
name="ColorArrayName"
......@@ -6581,18 +6652,9 @@
<Group name="lookup_tables" />
</ProxyGroupDomain>
</ProxyProperty>
<IntVectorProperty command="SetUseCustomRadii"
default_values="0"
name="UseCustomRadii"
label="Use 'radii' Array For Atomic Radii"
number_of_elements="1">
<BooleanDomain name="bool" />
<Documentation>If true, the 'radii' array in the input VertexData will
be used to determine the atomic radii.</Documentation>
</IntVectorProperty>
<!-- End of MoleculeRepresentation -->
</RepresentationProxy>
<PVRepresentationProxy class="vtkPVCompositeRepresentation"
<PVMoleculeRepresentationProxy class="vtkPVCompositeRepresentation"
name="PVMoleculeRepresentation"
processes="client|renderserver|dataserver">
<Documentation>PVRepresentationProxy for vtkMolecule.</Documentation>
......@@ -6670,21 +6732,38 @@
proxygroup="representations"
proxyname="MoleculeRepresentation" />
<ExposedProperties>
<PropertyGroup label="Molecule">
<PropertyGroup label="Coloring">
<Property name="Opacity"
panel_visibility="default" />
<Property name="MoleculeRenderMode"
panel_visibility="default" />
<Property name="UseCustomRadii"
panel_visibility="default" />
<Property name="ColorArrayName"
panel_visibility="never" />
panel_visibility="default" />
<Property name="LookupTable"
panel_visibility="never" />
</PropertyGroup>
<PropertyGroup label="Styling"
panel_widget="MoleculeParameters">
<Property name="RenderAtoms"
function="RenderAtoms" />
<Property name="AtomicRadiusFactor"
function="AtomicRadiusFactor" />
<Property name="AtomicRadiusType"
function="AtomicRadiusType"/>
<Proprety name="AtomicRadiusArrayName"
function="AtomicRadiusArrayName"/>
<Property name="RenderBonds"
function="RenderBonds" />
<Property name="BondRadius"
function="BondRadius" />
<Property name="MultiCylindersForBonds"
function="UseMultiCylindersForBonds"/>
<Property name="BondColorMode"
function="BondColorMode"/>
<Property name="BondColor"
function="BondColor"/>
</PropertyGroup>
</ExposedProperties>
</SubProxy>
</PVRepresentationProxy>
</PVMoleculeRepresentationProxy>
<!-- =================================================================== -->
<ChartRepresentationProxy base_proxygroup="representations"
......
......@@ -224,6 +224,8 @@ set (Module_SRCS
pqMasterOnlyReaction.h
pqModelTransformSupportBehavior.cxx
pqModelTransformSupportBehavior.h
pqMoleculePropertyWidget.cxx
pqMoleculePropertyWidget.h
pqMultiComponentsDecorator.cxx
pqMultiComponentsDecorator.h
pqObjectPickingBehavior.cxx
......@@ -459,6 +461,7 @@ set (Module_MOC_HDRS
pqManagePluginsReaction.h
pqMasterOnlyReaction.h
pqModelTransformSupportBehavior.h
pqMoleculePropertyWidget.h
pqMultiComponentsDecorator.h
pqObjectPickingBehavior.h
pqOpacityTableModel.h
......@@ -573,6 +576,7 @@ set (Module_UI_FILES
Resources/UI/pqImplicitPlanePropertyWidget.ui
Resources/UI/pqLinePropertyWidget.ui
Resources/UI/pqMainControlsToolbar.ui
Resources/UI/pqMoleculePropertyWidget.ui
Resources/UI/pqResetScalarRangeToDataOverTime.ui
Resources/UI/pqSavePresetOptions.ui
Resources/UI/pqSeriesEditorPropertyWidget.ui
......
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MoleculePropertyWidget</class>
<widget class="QWidget" name="MoleculePropertyWidget">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>301</width>
<height>251</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
<layout class="QGridLayout" name="wdgLayout" columnstretch="0,0">
<item row="1" column="0">
<widget class="QLabel" name="presetLabel">
<property name="text">
<string>Preset</string>
</property>
</widget>
</item>
<item row="1" column="1" colspan="3">
<widget class="QComboBox" name="preset"/>
</item>
<item row="2" column="0">
<widget class="QLabel" name="ShowAomsLabel">
<property name="text">
<string>Show Atoms </string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QCheckBox" name="showAtoms">
<property name="text">
<string/>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="atomicRadiusTypeLabel">
<property name="text">
<string>Atom Radius type</string>
</property>
</widget>
</item>
<item row="3" column="1" colspan="3">
<widget class="QComboBox" name="atomicRadiusType"/>
</item>
<item row="4" column="0">
<widget class="QLabel" name="atomicRadiusFactorLabel">
<property name="text">
<string>Atom Radius Factor</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="pqDoubleRangeWidget" name="atomicRadiusFactor" native="true"/>
</item>
<item row="4" column="2">
<widget class="pqScaleByButton" name="scaleAtomicRadiusFactor" native="true"/>
</item>
<item row="4" column="3">
<widget class="QToolButton" name="resetAtomicRadiusFactor" native="true"/>
</item>
<item row="5" column="0">
<widget class="QLabel" name="atomicRadiusArrayNameLabel">
<property name="text">
<string>Atomic Radius Array</string>
</property>
</widget>
</item>
<item row="5" column="1" colspan="3">
<widget class="QComboBox" name="atomicRadiusArrayName"/>
</item>
<item row="6" column="0" colspan="3">
<widget class="Line" name="line">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="7" column="0">
<widget class="QLabel" name="ShowBondsLabel">
<property name="text">
<string>Show Bonds</string>
</property>
</widget>
</item>
<item row="7" column="1">
<widget class="QCheckBox" name="showBonds">
<property name="text">
<string/>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="8" column="0">
<widget class="QLabel" name="bondRadiusLabel">
<property name="text">
<string>Bonds Radius</string>
</property>
</widget>
</item>