Commit d6f87764 authored by Nicolas Vuaille's avatar Nicolas Vuaille Committed by Kitware Robot

Merge topic 'ImproveMoleculeRepresentation'

7a41ac28 Add property group widget for molecule representation
7311a0b5 Add propertylink for doubleSlider in propertyGroup
Acked-by: Kitware Robot's avatarKitware Robot <kwrobot@kitware.com>
Merge-request: !2833
parents c4dc1f83 7a41ac28
Pipeline #125518 failed with stage
in 0 seconds
......@@ -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">