ZED: Added self calibration option (default false)

This commit is contained in:
matlabbe
2016-10-25 16:06:55 -04:00
parent 063e019653
commit d102c43f9a
4 changed files with 142 additions and 43 deletions

View File

@@ -120,7 +120,8 @@ public:
int confidenceThr = 100, int confidenceThr = 100,
bool computeOdometry = false, bool computeOdometry = false,
float imageRate=0.0f, float imageRate=0.0f,
const Transform & localTransform = Transform::getIdentity()); const Transform & localTransform = Transform::getIdentity(),
bool selfCalibration = false);
CameraStereoZed( CameraStereoZed(
const std::string & svoFilePath, const std::string & svoFilePath,
int quality = 1, // 0=NONE, 1=PERFORMANCE, 2=QUALITY int quality = 1, // 0=NONE, 1=PERFORMANCE, 2=QUALITY
@@ -128,7 +129,8 @@ public:
int confidenceThr = 100, int confidenceThr = 100,
bool computeOdometry = false, bool computeOdometry = false,
float imageRate=0.0f, float imageRate=0.0f,
const Transform & localTransform = Transform::getIdentity()); const Transform & localTransform = Transform::getIdentity(),
bool selfCalibration = false);
virtual ~CameraStereoZed(); virtual ~CameraStereoZed();
virtual bool init(const std::string & calibrationFolder = ".", const std::string & cameraName = ""); virtual bool init(const std::string & calibrationFolder = ".", const std::string & cameraName = "");
@@ -147,6 +149,7 @@ private:
std::string svoFilePath_; std::string svoFilePath_;
int resolution_; int resolution_;
int quality_; int quality_;
bool selfCalibration_;
int sensingMode_; int sensingMode_;
int confidenceThr_; int confidenceThr_;
bool computeOdometry_; bool computeOdometry_;

View File

@@ -755,7 +755,8 @@ CameraStereoZed::CameraStereoZed(
int confidenceThr, int confidenceThr,
bool computeOdometry, bool computeOdometry,
float imageRate, float imageRate,
const Transform & localTransform) : const Transform & localTransform,
bool selfCalibration) :
Camera(imageRate, localTransform), Camera(imageRate, localTransform),
zed_(0), zed_(0),
src_(CameraVideo::kUsbDevice), src_(CameraVideo::kUsbDevice),
@@ -763,11 +764,13 @@ CameraStereoZed::CameraStereoZed(
svoFilePath_(""), svoFilePath_(""),
resolution_(resolution), resolution_(resolution),
quality_(quality), quality_(quality),
selfCalibration_(selfCalibration),
sensingMode_(sensingMode), sensingMode_(sensingMode),
confidenceThr_(confidenceThr), confidenceThr_(confidenceThr),
computeOdometry_(computeOdometry), computeOdometry_(computeOdometry),
lost_(true) lost_(true)
{ {
UDEBUG("");
#ifdef RTABMAP_ZED #ifdef RTABMAP_ZED
UASSERT(resolution_ >= sl::zed::HD2K && resolution_ <sl::zed::LAST_RESOLUTION); UASSERT(resolution_ >= sl::zed::HD2K && resolution_ <sl::zed::LAST_RESOLUTION);
UASSERT(quality_ >= sl::zed::NONE && quality_ <sl::zed::LAST_MODE); UASSERT(quality_ >= sl::zed::NONE && quality_ <sl::zed::LAST_MODE);
@@ -783,7 +786,8 @@ CameraStereoZed::CameraStereoZed(
int confidenceThr, int confidenceThr,
bool computeOdometry, bool computeOdometry,
float imageRate, float imageRate,
const Transform & localTransform) : const Transform & localTransform,
bool selfCalibration) :
Camera(imageRate, localTransform), Camera(imageRate, localTransform),
zed_(0), zed_(0),
src_(CameraVideo::kVideoFile), src_(CameraVideo::kVideoFile),
@@ -791,11 +795,13 @@ CameraStereoZed::CameraStereoZed(
svoFilePath_(filePath), svoFilePath_(filePath),
resolution_(2), resolution_(2),
quality_(quality), quality_(quality),
selfCalibration_(selfCalibration),
sensingMode_(sensingMode), sensingMode_(sensingMode),
confidenceThr_(confidenceThr), confidenceThr_(confidenceThr),
computeOdometry_(computeOdometry), computeOdometry_(computeOdometry),
lost_(true) lost_(true)
{ {
UDEBUG("");
#ifdef RTABMAP_ZED #ifdef RTABMAP_ZED
UASSERT(resolution_ >= sl::zed::HD2K && resolution_ <sl::zed::LAST_RESOLUTION); UASSERT(resolution_ >= sl::zed::HD2K && resolution_ <sl::zed::LAST_RESOLUTION);
UASSERT(quality_ >= sl::zed::NONE && quality_ <sl::zed::LAST_MODE); UASSERT(quality_ >= sl::zed::NONE && quality_ <sl::zed::LAST_MODE);
@@ -816,6 +822,7 @@ CameraStereoZed::~CameraStereoZed()
bool CameraStereoZed::init(const std::string & calibrationFolder, const std::string & cameraName) bool CameraStereoZed::init(const std::string & calibrationFolder, const std::string & cameraName)
{ {
UDEBUG("");
#ifdef RTABMAP_ZED #ifdef RTABMAP_ZED
if(zed_) if(zed_)
{ {
@@ -826,32 +833,29 @@ bool CameraStereoZed::init(const std::string & calibrationFolder, const std::str
lost_ = true; lost_ = true;
if(src_ == CameraVideo::kVideoFile) if(src_ == CameraVideo::kVideoFile)
{ {
UINFO("svo file = %s", svoFilePath_.c_str());
zed_ = new sl::zed::Camera(svoFilePath_); // Use in SVO playback mode zed_ = new sl::zed::Camera(svoFilePath_); // Use in SVO playback mode
} }
else else
{ {
if(zed_->isZEDconnected()) UINFO("Resolution=%d imagerate=%f device=%d", resolution_, getImageRate(), usbDevice_);
{
zed_ = new sl::zed::Camera((sl::zed::ZEDResolution_mode)resolution_, getImageRate(), usbDevice_); // Use in Live Mode zed_ = new sl::zed::Camera((sl::zed::ZEDResolution_mode)resolution_, getImageRate(), usbDevice_); // Use in Live Mode
} }
else
{
UERROR("ZED camera initialization failed: ZED is not connected!");
return false;
}
}
//init WITH self-calibration
sl::zed::InitParams parameters( sl::zed::InitParams parameters(
(sl::zed::MODE)quality_, //MODE (sl::zed::MODE)quality_, //MODE
sl::zed::METER, //UNIT (sl::zed::UNIT)sl::zed::METER, //UNIT
sl::zed::IMAGE, //COORDINATE_SYSTEM (sl::zed::COORDINATE_SYSTEM)sl::zed::IMAGE, //COORDINATE_SYSTEM
false, // verbose false, // verbose
-1, //device -1, //device (GPU)
-1., //minDist -1., //minDist
false, //disableSelfCalib !selfCalibration_, //disableSelfCalib: false = self calibrated
false); //vflip false); //vflip
UINFO("Init ZED: Mode=%d Unit=%d CoordinateSystem=%d Verbose=false device=-1 minDist=-1 self-calibration=%s vflip=false",
quality_, sl::zed::METER, sl::zed::IMAGE, selfCalibration_?"true":"false");
sl::zed::ERRCODE err = zed_->init(parameters); sl::zed::ERRCODE err = zed_->init(parameters);
UDEBUG("");
// Quit if an error occurred // Quit if an error occurred
if (err != sl::zed::SUCCESS) if (err != sl::zed::SUCCESS)

View File

@@ -497,6 +497,7 @@ PreferencesDialog::PreferencesDialog(QWidget * parent) :
connect(_ui->comboBox_stereoZed_resolution, SIGNAL(currentIndexChanged(int)), this, SLOT(makeObsoleteSourcePanel())); connect(_ui->comboBox_stereoZed_resolution, SIGNAL(currentIndexChanged(int)), this, SLOT(makeObsoleteSourcePanel()));
connect(_ui->comboBox_stereoZed_quality, SIGNAL(currentIndexChanged(int)), this, SLOT(makeObsoleteSourcePanel())); connect(_ui->comboBox_stereoZed_quality, SIGNAL(currentIndexChanged(int)), this, SLOT(makeObsoleteSourcePanel()));
connect(_ui->comboBox_stereoZed_quality, SIGNAL(currentIndexChanged(int)), this, SLOT(updateStereoDisparityVisibility())); connect(_ui->comboBox_stereoZed_quality, SIGNAL(currentIndexChanged(int)), this, SLOT(updateStereoDisparityVisibility()));
connect(_ui->checkbox_stereoZed_selfCalibration, SIGNAL(stateChanged(int)), this, SLOT(makeObsoleteSourcePanel()));
connect(_ui->comboBox_cameraStereo, SIGNAL(currentIndexChanged(int)), this, SLOT(updateStereoDisparityVisibility())); connect(_ui->comboBox_cameraStereo, SIGNAL(currentIndexChanged(int)), this, SLOT(updateStereoDisparityVisibility()));
connect(_ui->comboBox_stereoZed_sensingMode, SIGNAL(currentIndexChanged(int)), this, SLOT(makeObsoleteSourcePanel())); connect(_ui->comboBox_stereoZed_sensingMode, SIGNAL(currentIndexChanged(int)), this, SLOT(makeObsoleteSourcePanel()));
connect(_ui->spinBox_stereoZed_confidenceThr, SIGNAL(valueChanged(int)), this, SLOT(makeObsoleteSourcePanel())); connect(_ui->spinBox_stereoZed_confidenceThr, SIGNAL(valueChanged(int)), this, SLOT(makeObsoleteSourcePanel()));
@@ -1358,6 +1359,7 @@ void PreferencesDialog::resetSettings(QGroupBox * groupBox)
_ui->checkBox_stereoVideo_rectify->setChecked(false); _ui->checkBox_stereoVideo_rectify->setChecked(false);
_ui->comboBox_stereoZed_resolution->setCurrentIndex(2); _ui->comboBox_stereoZed_resolution->setCurrentIndex(2);
_ui->comboBox_stereoZed_quality->setCurrentIndex(1); _ui->comboBox_stereoZed_quality->setCurrentIndex(1);
_ui->checkbox_stereoZed_selfCalibration->setChecked(false);
_ui->comboBox_stereoZed_sensingMode->setCurrentIndex(1); _ui->comboBox_stereoZed_sensingMode->setCurrentIndex(1);
_ui->spinBox_stereoZed_confidenceThr->setValue(100); _ui->spinBox_stereoZed_confidenceThr->setValue(100);
_ui->checkbox_stereoZed_odom->setChecked(false); _ui->checkbox_stereoZed_odom->setChecked(false);
@@ -1714,6 +1716,7 @@ void PreferencesDialog::readCameraSettings(const QString & filePath)
settings.beginGroup("StereoZed"); settings.beginGroup("StereoZed");
_ui->comboBox_stereoZed_resolution->setCurrentIndex(settings.value("resolution", _ui->comboBox_stereoZed_resolution->currentIndex()).toInt()); _ui->comboBox_stereoZed_resolution->setCurrentIndex(settings.value("resolution", _ui->comboBox_stereoZed_resolution->currentIndex()).toInt());
_ui->comboBox_stereoZed_quality->setCurrentIndex(settings.value("quality", _ui->comboBox_stereoZed_quality->currentIndex()).toInt()); _ui->comboBox_stereoZed_quality->setCurrentIndex(settings.value("quality", _ui->comboBox_stereoZed_quality->currentIndex()).toInt());
_ui->checkbox_stereoZed_selfCalibration->setChecked(settings.value("self_calibration", _ui->checkbox_stereoZed_selfCalibration->isChecked()).toBool());
_ui->comboBox_stereoZed_sensingMode->setCurrentIndex(settings.value("sensing_mode", _ui->comboBox_stereoZed_sensingMode->currentIndex()).toInt()); _ui->comboBox_stereoZed_sensingMode->setCurrentIndex(settings.value("sensing_mode", _ui->comboBox_stereoZed_sensingMode->currentIndex()).toInt());
_ui->spinBox_stereoZed_confidenceThr->setValue(settings.value("confidence_thr", _ui->spinBox_stereoZed_confidenceThr->value()).toInt()); _ui->spinBox_stereoZed_confidenceThr->setValue(settings.value("confidence_thr", _ui->spinBox_stereoZed_confidenceThr->value()).toInt());
_ui->checkbox_stereoZed_odom->setChecked(settings.value("odom", _ui->checkbox_stereoZed_odom->isChecked()).toBool()); _ui->checkbox_stereoZed_odom->setChecked(settings.value("odom", _ui->checkbox_stereoZed_odom->isChecked()).toBool());
@@ -2147,6 +2150,7 @@ void PreferencesDialog::writeCameraSettings(const QString & filePath) const
settings.beginGroup("StereoZed"); settings.beginGroup("StereoZed");
settings.setValue("resolution", _ui->comboBox_stereoZed_resolution->currentIndex()); settings.setValue("resolution", _ui->comboBox_stereoZed_resolution->currentIndex());
settings.setValue("quality", _ui->comboBox_stereoZed_quality->currentIndex()); settings.setValue("quality", _ui->comboBox_stereoZed_quality->currentIndex());
settings.setValue("self_calibration", _ui->checkbox_stereoZed_selfCalibration->isChecked());
settings.setValue("sensing_mode", _ui->comboBox_stereoZed_sensingMode->currentIndex()); settings.setValue("sensing_mode", _ui->comboBox_stereoZed_sensingMode->currentIndex());
settings.setValue("confidence_thr", _ui->spinBox_stereoZed_confidenceThr->value()); settings.setValue("confidence_thr", _ui->spinBox_stereoZed_confidenceThr->value());
settings.setValue("odom", _ui->checkbox_stereoZed_odom->isChecked()); settings.setValue("odom", _ui->checkbox_stereoZed_odom->isChecked());
@@ -4359,6 +4363,7 @@ Camera * PreferencesDialog::createCamera(bool useRawImages, bool useColor)
} }
else if (driver == kSrcStereoZed) else if (driver == kSrcStereoZed)
{ {
UDEBUG("ZED");
if(!_ui->lineEdit_zedSvoPath->text().isEmpty()) if(!_ui->lineEdit_zedSvoPath->text().isEmpty())
{ {
camera = new CameraStereoZed( camera = new CameraStereoZed(
@@ -4368,7 +4373,8 @@ Camera * PreferencesDialog::createCamera(bool useRawImages, bool useColor)
_ui->spinBox_stereoZed_confidenceThr->value(), _ui->spinBox_stereoZed_confidenceThr->value(),
_ui->checkbox_stereoZed_odom->isChecked(), _ui->checkbox_stereoZed_odom->isChecked(),
this->getGeneralInputRate(), this->getGeneralInputRate(),
this->getSourceLocalTransform()); this->getSourceLocalTransform(),
_ui->checkbox_stereoZed_selfCalibration->isChecked());
} }
else else
{ {
@@ -4380,7 +4386,8 @@ Camera * PreferencesDialog::createCamera(bool useRawImages, bool useColor)
_ui->spinBox_stereoZed_confidenceThr->value(), _ui->spinBox_stereoZed_confidenceThr->value(),
_ui->checkbox_stereoZed_odom->isChecked(), _ui->checkbox_stereoZed_odom->isChecked(),
this->getGeneralInputRate(), this->getGeneralInputRate(),
this->getSourceLocalTransform()); this->getSourceLocalTransform(),
_ui->checkbox_stereoZed_selfCalibration->isChecked());
} }
} }
else if(driver == kSrcUsbDevice) else if(driver == kSrcUsbDevice)
@@ -4447,6 +4454,7 @@ Camera * PreferencesDialog::createCamera(bool useRawImages, bool useColor)
if(camera) if(camera)
{ {
UDEBUG("Init");
QString dir = this->getCameraInfoDir(); QString dir = this->getCameraInfoDir();
QString calibrationFile = _ui->lineEdit_calibrationFile->text(); QString calibrationFile = _ui->lineEdit_calibrationFile->text();
if(!(driver >= kSrcRGB && driver <= kSrcVideo)) if(!(driver >= kSrcRGB && driver <= kSrcVideo))
@@ -4491,6 +4499,7 @@ Camera * PreferencesDialog::createCamera(bool useRawImages, bool useColor)
} }
} }
UDEBUG("");
return camera; return camera;
} }

View File

@@ -63,7 +63,7 @@
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>-577</y>
<width>678</width> <width>678</width>
<height>2417</height> <height>2417</height>
</rect> </rect>
@@ -72,7 +72,16 @@
<property name="spacing"> <property name="spacing">
<number>0</number> <number>0</number>
</property> </property>
<property name="margin"> <property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number> <number>0</number>
</property> </property>
<item> <item>
@@ -86,7 +95,7 @@
<enum>QFrame::Raised</enum> <enum>QFrame::Raised</enum>
</property> </property>
<property name="currentIndex"> <property name="currentIndex">
<number>3</number> <number>5</number>
</property> </property>
<widget class="QWidget" name="page_22"> <widget class="QWidget" name="page_22">
<layout class="QVBoxLayout" name="verticalLayout_29" stretch="0,1"> <layout class="QVBoxLayout" name="verticalLayout_29" stretch="0,1">
@@ -3353,7 +3362,7 @@ when using the file type, logs are saved in LogRtabmap.txt (located in the worki
<item> <item>
<widget class="QStackedWidget" name="stackedWidget_stereo"> <widget class="QStackedWidget" name="stackedWidget_stereo">
<property name="currentIndex"> <property name="currentIndex">
<number>3</number> <number>4</number>
</property> </property>
<widget class="QWidget" name="page_49"> <widget class="QWidget" name="page_49">
<layout class="QVBoxLayout" name="verticalLayout_91"> <layout class="QVBoxLayout" name="verticalLayout_91">
@@ -3615,7 +3624,7 @@ when using the file type, logs are saved in LogRtabmap.txt (located in the worki
<string>Zed sdk</string> <string>Zed sdk</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_37" columnstretch="0,1"> <layout class="QGridLayout" name="gridLayout_37" columnstretch="0,1">
<item row="6" column="0"> <item row="7" column="0">
<spacer name="verticalSpacer_54"> <spacer name="verticalSpacer_54">
<property name="orientation"> <property name="orientation">
<enum>Qt::Vertical</enum> <enum>Qt::Vertical</enum>
@@ -3628,7 +3637,7 @@ when using the file type, logs are saved in LogRtabmap.txt (located in the worki
</property> </property>
</spacer> </spacer>
</item> </item>
<item row="5" column="1"> <item row="6" column="1">
<widget class="QLabel" name="label_305"> <widget class="QLabel" name="label_305">
<property name="text"> <property name="text">
<string>Path to a *.SVO file.</string> <string>Path to a *.SVO file.</string>
@@ -3665,7 +3674,7 @@ when using the file type, logs are saved in LogRtabmap.txt (located in the worki
</item> </item>
</widget> </widget>
</item> </item>
<item row="2" column="1"> <item row="3" column="1">
<widget class="QLabel" name="label_291"> <widget class="QLabel" name="label_291">
<property name="text"> <property name="text">
<string>Sensing mode.</string> <string>Sensing mode.</string>
@@ -3678,7 +3687,7 @@ when using the file type, logs are saved in LogRtabmap.txt (located in the worki
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="0"> <item row="3" column="0">
<widget class="QComboBox" name="comboBox_stereoZed_sensingMode"> <widget class="QComboBox" name="comboBox_stereoZed_sensingMode">
<item> <item>
<property name="text"> <property name="text">
@@ -3716,7 +3725,7 @@ when using the file type, logs are saved in LogRtabmap.txt (located in the worki
</item> </item>
</widget> </widget>
</item> </item>
<item row="3" column="1"> <item row="4" column="1">
<widget class="QLabel" name="label_306"> <widget class="QLabel" name="label_306">
<property name="text"> <property name="text">
<string>Filtering value for the disparity map (and by extension the depth map). A lower value means more confidence and precision (but less density), an upper value reduces the filtering (more density, less certainty).</string> <string>Filtering value for the disparity map (and by extension the depth map). A lower value means more confidence and precision (but less density), an upper value reduces the filtering (more density, less certainty).</string>
@@ -3729,6 +3738,13 @@ when using the file type, logs are saved in LogRtabmap.txt (located in the worki
</property> </property>
</widget> </widget>
</item> </item>
<item row="4" column="0">
<widget class="QSpinBox" name="spinBox_stereoZed_confidenceThr">
<property name="maximum">
<number>100</number>
</property>
</widget>
</item>
<item row="0" column="1"> <item row="0" column="1">
<widget class="QLabel" name="label_274"> <widget class="QLabel" name="label_274">
<property name="text"> <property name="text">
@@ -3742,7 +3758,7 @@ when using the file type, logs are saved in LogRtabmap.txt (located in the worki
</property> </property>
</widget> </widget>
</item> </item>
<item row="5" column="0"> <item row="6" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_8"> <layout class="QHBoxLayout" name="horizontalLayout_8">
<item> <item>
<widget class="QToolButton" name="toolButton_zedSvoPath"> <widget class="QToolButton" name="toolButton_zedSvoPath">
@@ -3773,14 +3789,14 @@ when using the file type, logs are saved in LogRtabmap.txt (located in the worki
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="0"> <item row="5" column="0">
<widget class="QSpinBox" name="spinBox_stereoZed_confidenceThr"> <widget class="QCheckBox" name="checkbox_stereoZed_odom">
<property name="maximum"> <property name="text">
<number>100</number> <string/>
</property> </property>
</widget> </widget>
</item> </item>
<item row="4" column="1"> <item row="5" column="1">
<widget class="QLabel" name="label_316"> <widget class="QLabel" name="label_316">
<property name="text"> <property name="text">
<string>Use ZED visual odometry.</string> <string>Use ZED visual odometry.</string>
@@ -3793,8 +3809,21 @@ when using the file type, logs are saved in LogRtabmap.txt (located in the worki
</property> </property>
</widget> </widget>
</item> </item>
<item row="4" column="0"> <item row="2" column="1">
<widget class="QCheckBox" name="checkbox_stereoZed_odom"> <widget class="QLabel" name="label_343">
<property name="text">
<string>Self-Calibration.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
<property name="textInteractionFlags">
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QCheckBox" name="checkbox_stereoZed_selfCalibration">
<property name="text"> <property name="text">
<string/> <string/>
</property> </property>
@@ -4261,7 +4290,16 @@ when using the file type, logs are saved in LogRtabmap.txt (located in the worki
<string>Directory of images (optional settings)</string> <string>Directory of images (optional settings)</string>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout_93"> <layout class="QVBoxLayout" name="verticalLayout_93">
<property name="margin"> <property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number> <number>0</number>
</property> </property>
<item> <item>
@@ -10338,7 +10376,16 @@ If set to false, classic RTAB-Map loop closure detection is done using only imag
</property> </property>
<widget class="QWidget" name="page_54"> <widget class="QWidget" name="page_54">
<layout class="QVBoxLayout" name="verticalLayout_85"> <layout class="QVBoxLayout" name="verticalLayout_85">
<property name="margin"> <property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number> <number>0</number>
</property> </property>
<item> <item>
@@ -10478,7 +10525,16 @@ Lower the ratio -&gt; higher the precision. 0 means disabled, matching the neare
</widget> </widget>
<widget class="QWidget" name="page_55"> <widget class="QWidget" name="page_55">
<layout class="QVBoxLayout" name="verticalLayout_86"> <layout class="QVBoxLayout" name="verticalLayout_86">
<property name="margin"> <property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number> <number>0</number>
</property> </property>
<item> <item>
@@ -10636,7 +10692,16 @@ Lower the ratio -&gt; higher the precision. 0 means disabled, matching the neare
<property name="spacing"> <property name="spacing">
<number>0</number> <number>0</number>
</property> </property>
<property name="margin"> <property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number> <number>0</number>
</property> </property>
<item> <item>
@@ -10716,7 +10781,16 @@ Lower the ratio -&gt; higher the precision. 0 means disabled, matching the neare
<property name="spacing"> <property name="spacing">
<number>0</number> <number>0</number>
</property> </property>
<property name="margin"> <property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number> <number>0</number>
</property> </property>
<item> <item>
@@ -10828,7 +10902,16 @@ Lower the ratio -&gt; higher the precision. 0 means disabled, matching the neare
<property name="spacing"> <property name="spacing">
<number>0</number> <number>0</number>
</property> </property>
<property name="margin"> <property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number> <number>0</number>
</property> </property>
<item> <item>