The expiration time for new job artifacts in CI/CD pipelines is now 30 days (GitLab default). Previously generated artifacts in already completed jobs will not be affected by the change. The latest artifacts for all jobs in the latest successful pipelines will be kept. More information: https://gitlab.lrz.de/help/user/admin_area/settings/continuous_integration.html#default-artifacts-expiration

Commit 662ce762 authored by Christian Schulte zu Berge's avatar Christian Schulte zu Berge
Browse files

Merge branch 'development' into 'master'

Development



See merge request !2
parents 9abcb3e4 cbd8ddaa
...@@ -299,7 +299,7 @@ namespace campvis { ...@@ -299,7 +299,7 @@ namespace campvis {
cgt::svec3 lookupTexel(lookupTexelFloat.x, imageSize.y - lookupTexelFloat.y, 0); cgt::svec3 lookupTexel(lookupTexelFloat.x, imageSize.y - lookupTexelFloat.y, 0);
if (lookupTexel.x >= 0 && lookupTexel.y >= 0 && lookupTexel.x < imageSize.x && lookupTexel.y < imageSize.y) { if (lookupTexel.x >= 0 && lookupTexel.y >= 0 && lookupTexel.x < imageSize.x && lookupTexel.y < imageSize.y) {
if (tex->isDepthTexture()) { if (tex->isDepthTexture()) {
emit s_depthChanged(localRep->getElementNormalized(lookupTexel, 0)); emit s_depthChanged(lookupTexel, localRep->getElementNormalized(lookupTexel, 0));
} }
else { else {
if (tex->getDimensions().z != 1) { if (tex->getDimensions().z != 1) {
...@@ -309,7 +309,7 @@ namespace campvis { ...@@ -309,7 +309,7 @@ namespace campvis {
for (size_t i = 0; i < id->getNumChannels(); ++i) { for (size_t i = 0; i < id->getNumChannels(); ++i) {
texel[i] = localRep->getElementNormalized(lookupTexel, i); texel[i] = localRep->getElementNormalized(lookupTexel, i);
} }
emit s_colorChanged(texel); emit s_colorChanged(lookupTexel, texel);
} }
} }
else if (tex->getDimensions().y != 1) { else if (tex->getDimensions().y != 1) {
...@@ -317,7 +317,7 @@ namespace campvis { ...@@ -317,7 +317,7 @@ namespace campvis {
for (size_t i = 0; i < id->getNumChannels(); ++i) { for (size_t i = 0; i < id->getNumChannels(); ++i) {
texel[i] = localRep->getElementNormalized(lookupTexel, i); texel[i] = localRep->getElementNormalized(lookupTexel, i);
} }
emit s_colorChanged(texel); emit s_colorChanged(lookupTexel, texel);
} }
} }
} }
......
...@@ -129,8 +129,8 @@ namespace campvis { ...@@ -129,8 +129,8 @@ namespace campvis {
MetaProperty p_geometryRendererProperties; ///< MetaProperty for the GeometryRenderer MetaProperty p_geometryRendererProperties; ///< MetaProperty for the GeometryRenderer
signals: signals:
void s_colorChanged(const cgt::vec4&); void s_colorChanged(const cgt::svec3& texel, const cgt::vec4&);
void s_depthChanged(float depth); void s_depthChanged(const cgt::svec3& texel, float depth);
private slots: private slots:
/** /**
......
...@@ -227,11 +227,11 @@ namespace campvis { ...@@ -227,11 +227,11 @@ namespace campvis {
this, SIGNAL(dataContainerChanged(const QString&, QtDataHandle)), this, SIGNAL(dataContainerChanged(const QString&, QtDataHandle)),
_canvas, SLOT(onDataContainerChanged(const QString&, QtDataHandle))); _canvas, SLOT(onDataContainerChanged(const QString&, QtDataHandle)));
connect( connect(
_canvas, SIGNAL(s_colorChanged(const cgt::vec4&)), _canvas, SIGNAL(s_colorChanged(const cgt::svec3&, const cgt::vec4&)),
this, SLOT(onColorChanged(const cgt::vec4&))); this, SLOT(onColorChanged(const cgt::svec3&, const cgt::vec4&)));
connect( connect(
_canvas, SIGNAL(s_depthChanged(float)), _canvas, SIGNAL(s_depthChanged(const cgt::svec3&, float)),
this, SLOT(onDepthChanged(float))); this, SLOT(onDepthChanged(const cgt::svec3&, float)));
connect( connect(
this, SIGNAL(dataContainerChanged(const QString&, QtDataHandle)), this, SIGNAL(dataContainerChanged(const QString&, QtDataHandle)),
_dctWidget->getTreeModel(), SLOT(onDataContainerChanged(const QString&, QtDataHandle))); _dctWidget->getTreeModel(), SLOT(onDataContainerChanged(const QString&, QtDataHandle)));
...@@ -540,16 +540,18 @@ namespace campvis { ...@@ -540,16 +540,18 @@ namespace campvis {
} }
void DataContainerInspectorWidget::onColorChanged(const cgt::vec4& color) { void DataContainerInspectorWidget::onColorChanged(const cgt::svec3& texel, const cgt::vec4& color) {
_lblColorVal->setText(QString("Color: [%1, %2, %3, %4]").arg(QString::number(color.r), QString::number(color.g), QString::number(color.b), QString::number(color.a))); _lblColorVal->setText(QString("Color @ [%1, %2, %3]: [%4, %5, %6, %7]")
.arg(QString::number(texel.x), QString::number(texel.y), QString::number(texel.z), QString::number(color.r), QString::number(color.g), QString::number(color.b), QString::number(color.a)));
cgt::ivec4 clamped(cgt::clamp(color * 255.f, 0.f, 255.f)); cgt::ivec4 clamped(cgt::clamp(color * 255.f, 0.f, 255.f));
_colorValWidgetPalette.setColor(QPalette::Background, QColor(clamped.r, clamped.g, clamped.b, clamped.a)); _colorValWidgetPalette.setColor(QPalette::Background, QColor(clamped.r, clamped.g, clamped.b, clamped.a));
_colorValWidget->setPalette(_colorValWidgetPalette); _colorValWidget->setPalette(_colorValWidgetPalette);
} }
void DataContainerInspectorWidget::onDepthChanged(float depth) { void DataContainerInspectorWidget::onDepthChanged(const cgt::svec3& texel, float depth) {
_lblColorVal->setText(QString("Depth: %1").arg(QString::number(depth))); _lblColorVal->setText(QString("Depth @ [%1, %2, %3]: %4")
.arg(QString::number(texel.x), QString::number(texel.y), QString::number(texel.z), QString::number(depth)));
cgt::ivec4 clamped(cgt::clamp(depth * 255.f, 0.f, 255.f)); cgt::ivec4 clamped(cgt::clamp(depth * 255.f, 0.f, 255.f));
_colorValWidgetPalette.setColor(QPalette::Background, QColor(clamped.r, clamped.g, clamped.b, clamped.a)); _colorValWidgetPalette.setColor(QPalette::Background, QColor(clamped.r, clamped.g, clamped.b, clamped.a));
......
...@@ -130,9 +130,9 @@ namespace campvis { ...@@ -130,9 +130,9 @@ namespace campvis {
void onBtnLoadFileClicked(); void onBtnLoadFileClicked();
/// Slot being called when the color under the mouse has changed /// Slot being called when the color under the mouse has changed
void onColorChanged(const cgt::vec4& color); void onColorChanged(const cgt::svec3& texel, const cgt::vec4& color);
/// Slot being called when the depth under the mouse has changed /// Slot being called when the depth under the mouse has changed
void onDepthChanged(float depth); void onDepthChanged(const cgt::svec3& texel, float depth);
protected: protected:
/** /**
......
...@@ -27,7 +27,6 @@ ...@@ -27,7 +27,6 @@
#include "application/applicationapi.h" #include "application/applicationapi.h"
#include "application/gui/properties/abstractpropertywidget.h" #include "application/gui/properties/abstractpropertywidget.h"
#include "application/gui/properties/propertywidgetfactory.h"
#include "core/properties/genericproperty.h" #include "core/properties/genericproperty.h"
class QCheckBox; class QCheckBox;
...@@ -66,8 +65,6 @@ namespace campvis { ...@@ -66,8 +65,6 @@ namespace campvis {
}; };
// explicitly instantiate template, so that it gets registered also over DLL boundaries.
template class PropertyWidgetRegistrar<BoolPropertyWidget, BoolProperty>;
} }
#endif // BOOLPROPERTYWIDGET_H__ #endif // BOOLPROPERTYWIDGET_H__
...@@ -27,7 +27,6 @@ ...@@ -27,7 +27,6 @@
#include "application/applicationapi.h" #include "application/applicationapi.h"
#include "application/gui/properties/abstractpropertywidget.h" #include "application/gui/properties/abstractpropertywidget.h"
#include "application/gui/properties/propertywidgetfactory.h"
#include "core/properties/buttonproperty.h" #include "core/properties/buttonproperty.h"
class QPushButton; class QPushButton;
...@@ -67,8 +66,6 @@ namespace campvis { ...@@ -67,8 +66,6 @@ namespace campvis {
}; };
// explicitly instantiate template, so that it gets registered also over DLL boundaries.
template class PropertyWidgetRegistrar<ButtonPropertyWidget, ButtonProperty>;
} }
#endif // BUTTONPROPERTYWIDGET_H__ #endif // BUTTONPROPERTYWIDGET_H__
...@@ -28,7 +28,6 @@ ...@@ -28,7 +28,6 @@
#include "application/applicationapi.h" #include "application/applicationapi.h"
#include "application/gui/adjusterwidgets/doubleadjusterwidget.h" #include "application/gui/adjusterwidgets/doubleadjusterwidget.h"
#include "application/gui/properties/abstractpropertywidget.h" #include "application/gui/properties/abstractpropertywidget.h"
#include "application/gui/properties/propertywidgetfactory.h"
#include "application/gui/qtcolortools.h" #include "application/gui/qtcolortools.h"
#include "core/properties/floatingpointproperty.h" #include "core/properties/floatingpointproperty.h"
...@@ -76,11 +75,6 @@ namespace campvis { ...@@ -76,11 +75,6 @@ namespace campvis {
}; };
// ================================================================================================
// explicitly instantiate template, so that it gets registered also over DLL boundaries.
template class PropertyWidgetRegistrar<ColorPropertyWidget, ColorProperty>;
} }
#endif // COLORPROPERTYWIDGET_H__ #endif // COLORPROPERTYWIDGET_H__
...@@ -29,7 +29,6 @@ ...@@ -29,7 +29,6 @@
#include "core/properties/datanameproperty.h" #include "core/properties/datanameproperty.h"
#include "application/gui/qtdatahandle.h" #include "application/gui/qtdatahandle.h"
#include "application/gui/properties/abstractpropertywidget.h" #include "application/gui/properties/abstractpropertywidget.h"
#include "application/gui/properties/propertywidgetfactory.h"
class QComboBox; class QComboBox;
class QLineEdit; class QLineEdit;
...@@ -90,8 +89,6 @@ namespace campvis { ...@@ -90,8 +89,6 @@ namespace campvis {
}; };
// explicitly instantiate template, so that it gets registered also over DLL boundaries.
template class PropertyWidgetRegistrar<DataNamePropertyWidget, DataNameProperty, 10>;
} }
#endif // DATANAMEPROPERTYWIDGET_H__ #endif // DATANAMEPROPERTYWIDGET_H__
...@@ -89,4 +89,23 @@ namespace campvis { ...@@ -89,4 +89,23 @@ namespace campvis {
if (_ignorePropertyUpdates == 0) if (_ignorePropertyUpdates == 0)
emit s_propertyChanged(property); emit s_propertyChanged(property);
} }
Vec2PropertyWidget::Vec2PropertyWidget(PropertyType* property, DataContainer* dataContainer /*= nullptr*/, QWidget* parent /*= 0*/) : VecPropertyWidget<2>(property, dataContainer, parent) {
for (size_t i = 0; i < size; ++i) {
connect(_adjusters[i], SIGNAL(valueChanged(double)), this, SLOT(onValueChanged(double)));
}
}
Vec3PropertyWidget::Vec3PropertyWidget(PropertyType* property, DataContainer* dataContainer /*= nullptr*/, QWidget* parent /*= 0*/) : VecPropertyWidget<3>(property, dataContainer, parent) {
for (size_t i = 0; i < size; ++i) {
connect(_adjusters[i], SIGNAL(valueChanged(double)), this, SLOT(onValueChanged(double)));
}
}
Vec4PropertyWidget::Vec4PropertyWidget(PropertyType* property, DataContainer* dataContainer /*= nullptr*/, QWidget* parent /*= 0*/) : VecPropertyWidget<4>(property, dataContainer, parent) {
for (size_t i = 0; i < size; ++i) {
connect(_adjusters[i], SIGNAL(valueChanged(double)), this, SLOT(onValueChanged(double)));
}
}
} }
...@@ -27,7 +27,6 @@ ...@@ -27,7 +27,6 @@
#include "application/gui/adjusterwidgets/doubleadjusterwidget.h" #include "application/gui/adjusterwidgets/doubleadjusterwidget.h"
#include "application/gui/properties/abstractpropertywidget.h" #include "application/gui/properties/abstractpropertywidget.h"
#include "application/gui/properties/propertywidgetfactory.h"
#include "core/properties/floatingpointproperty.h" #include "core/properties/floatingpointproperty.h"
namespace campvis { namespace campvis {
...@@ -78,9 +77,6 @@ namespace campvis { ...@@ -78,9 +77,6 @@ namespace campvis {
}; };
// explicitly instantiate template, so that it gets registered also over DLL boundaries.
template class PropertyWidgetRegistrar<FloatPropertyWidget, FloatProperty>;
// ================================================================================================ // ================================================================================================
namespace { namespace {
...@@ -238,16 +234,10 @@ namespace campvis { ...@@ -238,16 +234,10 @@ namespace campvis {
// ================================================================================================ // ================================================================================================
class Vec2PropertyWidget : public VecPropertyWidget<2> { class CAMPVIS_APPLICATION_API Vec2PropertyWidget : public VecPropertyWidget<2> {
Q_OBJECT Q_OBJECT
public: public:
Vec2PropertyWidget(PropertyType* property, DataContainer* dataContainer = nullptr, QWidget* parent = 0) Vec2PropertyWidget(PropertyType* property, DataContainer* dataContainer = nullptr, QWidget* parent = 0);
: VecPropertyWidget<2>(property, dataContainer, parent)
{
for (size_t i = 0; i < size; ++i) {
connect(_adjusters[i], SIGNAL(valueChanged(double)), this, SLOT(onValueChanged(double)));
}
}
private slots: private slots:
void onValueChanged(double value) { onValueChangedImpl(); }; void onValueChanged(double value) { onValueChangedImpl(); };
...@@ -255,16 +245,10 @@ namespace campvis { ...@@ -255,16 +245,10 @@ namespace campvis {
// ================================================================================================ // ================================================================================================
class Vec3PropertyWidget : public VecPropertyWidget<3> { class CAMPVIS_APPLICATION_API Vec3PropertyWidget : public VecPropertyWidget<3> {
Q_OBJECT Q_OBJECT
public: public:
Vec3PropertyWidget(PropertyType* property, DataContainer* dataContainer = nullptr, QWidget* parent = 0) Vec3PropertyWidget(PropertyType* property, DataContainer* dataContainer = nullptr, QWidget* parent = 0);
: VecPropertyWidget<3>(property, dataContainer, parent)
{
for (size_t i = 0; i < size; ++i) {
connect(_adjusters[i], SIGNAL(valueChanged(double)), this, SLOT(onValueChanged(double)));
}
}
private slots: private slots:
void onValueChanged(double value) { onValueChangedImpl(); }; void onValueChanged(double value) { onValueChangedImpl(); };
...@@ -272,28 +256,15 @@ namespace campvis { ...@@ -272,28 +256,15 @@ namespace campvis {
// ================================================================================================ // ================================================================================================
class Vec4PropertyWidget : public VecPropertyWidget<4> { class CAMPVIS_APPLICATION_API Vec4PropertyWidget : public VecPropertyWidget<4> {
Q_OBJECT Q_OBJECT
public: public:
Vec4PropertyWidget(PropertyType* property, DataContainer* dataContainer = nullptr, QWidget* parent = 0) Vec4PropertyWidget(PropertyType* property, DataContainer* dataContainer = nullptr, QWidget* parent = 0);
: VecPropertyWidget<4>(property, dataContainer, parent)
{
for (size_t i = 0; i < size; ++i) {
connect(_adjusters[i], SIGNAL(valueChanged(double)), this, SLOT(onValueChanged(double)));
}
}
private slots: private slots:
void onValueChanged(double value) { onValueChangedImpl(); }; void onValueChanged(double value) { onValueChangedImpl(); };
}; };
// ================================================================================================
// explicitly instantiate template, so that it gets registered also over DLL boundaries.
template class PropertyWidgetRegistrar<Vec2PropertyWidget, typename VecPropertyWidgetTraits<2>::PropertyType, 5>;
template class PropertyWidgetRegistrar<Vec3PropertyWidget, typename VecPropertyWidgetTraits<3>::PropertyType, 5>;
template class PropertyWidgetRegistrar<Vec4PropertyWidget, typename VecPropertyWidgetTraits<4>::PropertyType, 5>;
} }
#endif // FLOATPROPERTYWIDGET_H__ #endif // FLOATPROPERTYWIDGET_H__
...@@ -143,4 +143,22 @@ namespace campvis { ...@@ -143,4 +143,22 @@ namespace campvis {
_btnShowHideTimer->setText(_sbInterval->isVisible() ? tr("H") : tr("S")); _btnShowHideTimer->setText(_sbInterval->isVisible() ? tr("H") : tr("S"));
} }
IVec2PropertyWidget::IVec2PropertyWidget(PropertyType* property, DataContainer* dataContainer /*= nullptr*/, QWidget* parent /*= 0*/) : IVecPropertyWidget<2>(property, dataContainer, parent) {
for (size_t i = 0; i < size; ++i) {
connect(_adjusters[i], SIGNAL(valueChanged(int)), this, SLOT(onValueChanged(int)));
}
}
IVec3PropertyWidget::IVec3PropertyWidget(PropertyType* property, DataContainer* dataContainer /*= nullptr*/, QWidget* parent /*= 0*/) : IVecPropertyWidget<3>(property, dataContainer, parent) {
for (size_t i = 0; i < size; ++i) {
connect(_adjusters[i], SIGNAL(valueChanged(int)), this, SLOT(onValueChanged(int)));
}
}
IVec4PropertyWidget::IVec4PropertyWidget(PropertyType* property, DataContainer* dataContainer /*= nullptr*/, QWidget* parent /*= 0*/) : IVecPropertyWidget<4>(property, dataContainer, parent) {
for (size_t i = 0; i < size; ++i) {
connect(_adjusters[i], SIGNAL(valueChanged(int)), this, SLOT(onValueChanged(int)));
}
}
} }
\ No newline at end of file
...@@ -27,7 +27,6 @@ ...@@ -27,7 +27,6 @@
#include "application/gui/adjusterwidgets/intadjusterwidget.h" #include "application/gui/adjusterwidgets/intadjusterwidget.h"
#include "application/gui/properties/abstractpropertywidget.h" #include "application/gui/properties/abstractpropertywidget.h"
#include "application/gui/properties/propertywidgetfactory.h"
#include "core/properties/numericproperty.h" #include "core/properties/numericproperty.h"
class QCheckBox; class QCheckBox;
...@@ -84,9 +83,6 @@ namespace campvis { ...@@ -84,9 +83,6 @@ namespace campvis {
}; };
// explicitly instantiate template, so that it gets registered also over DLL boundaries.
template class PropertyWidgetRegistrar<IntPropertyWidget, IntProperty>;
// ================================================================================================ // ================================================================================================
namespace { namespace {
...@@ -226,13 +222,7 @@ namespace campvis { ...@@ -226,13 +222,7 @@ namespace campvis {
class IVec2PropertyWidget : public IVecPropertyWidget<2> { class IVec2PropertyWidget : public IVecPropertyWidget<2> {
Q_OBJECT Q_OBJECT
public: public:
IVec2PropertyWidget(PropertyType* property, DataContainer* dataContainer = nullptr, QWidget* parent = 0) IVec2PropertyWidget(PropertyType* property, DataContainer* dataContainer = nullptr, QWidget* parent = 0);
: IVecPropertyWidget<2>(property, dataContainer, parent)
{
for (size_t i = 0; i < size; ++i) {
connect(_adjusters[i], SIGNAL(valueChanged(int)), this, SLOT(onValueChanged(int)));
}
}
private slots: private slots:
void onValueChanged(int value) { onValueChangedImpl(); }; void onValueChanged(int value) { onValueChangedImpl(); };
...@@ -243,13 +233,7 @@ namespace campvis { ...@@ -243,13 +233,7 @@ namespace campvis {
class IVec3PropertyWidget : public IVecPropertyWidget<3> { class IVec3PropertyWidget : public IVecPropertyWidget<3> {
Q_OBJECT Q_OBJECT
public: public:
IVec3PropertyWidget(PropertyType* property, DataContainer* dataContainer = nullptr, QWidget* parent = 0) IVec3PropertyWidget(PropertyType* property, DataContainer* dataContainer = nullptr, QWidget* parent = 0);
: IVecPropertyWidget<3>(property, dataContainer, parent)
{
for (size_t i = 0; i < size; ++i) {
connect(_adjusters[i], SIGNAL(valueChanged(int)), this, SLOT(onValueChanged(int)));
}
}
private slots: private slots:
void onValueChanged(int value) { onValueChangedImpl(); }; void onValueChanged(int value) { onValueChangedImpl(); };
...@@ -260,24 +244,11 @@ namespace campvis { ...@@ -260,24 +244,11 @@ namespace campvis {
class IVec4PropertyWidget : public IVecPropertyWidget<4> { class IVec4PropertyWidget : public IVecPropertyWidget<4> {
Q_OBJECT Q_OBJECT
public: public:
IVec4PropertyWidget(PropertyType* property, DataContainer* dataContainer = nullptr, QWidget* parent = 0) IVec4PropertyWidget(PropertyType* property, DataContainer* dataContainer = nullptr, QWidget* parent = 0);
: IVecPropertyWidget<4>(property, dataContainer, parent)
{
for (size_t i = 0; i < size; ++i) {
connect(_adjusters[i], SIGNAL(valueChanged(int)), this, SLOT(onValueChanged(int)));
}
}
private slots: private slots:
void onValueChanged(int value) { onValueChangedImpl(); }; void onValueChanged(int value) { onValueChangedImpl(); };
}; };
// ================================================================================================
// explicitly instantiate template, so that it gets registered also over DLL boundaries.
template class PropertyWidgetRegistrar<IVec2PropertyWidget, typename IVecPropertyWidgetTraits<2>::PropertyType, 5>;
template class PropertyWidgetRegistrar<IVec3PropertyWidget, typename IVecPropertyWidgetTraits<3>::PropertyType, 5>;
template class PropertyWidgetRegistrar<IVec4PropertyWidget, typename IVecPropertyWidgetTraits<4>::PropertyType, 5>;
} }
#endif // INTPROPERTYWIDGET_H__ #endif // INTPROPERTYWIDGET_H__
...@@ -31,7 +31,6 @@ ...@@ -31,7 +31,6 @@
#include "application/applicationapi.h" #include "application/applicationapi.h"
#include "application/gui/properties/abstractpropertywidget.h" #include "application/gui/properties/abstractpropertywidget.h"
#include "application/gui/properties/propertycollectionwidget.h" #include "application/gui/properties/propertycollectionwidget.h"
#include "application/gui/properties/propertywidgetfactory.h"
namespace campvis { namespace campvis {
class DataContainer; class DataContainer;
...@@ -68,9 +67,6 @@ namespace campvis { ...@@ -68,9 +67,6 @@ namespace campvis {
PropertyCollectionWidget* _pcw; PropertyCollectionWidget* _pcw;
}; };
// explicitly instantiate template, so that it gets registered also over DLL boundaries.
template class PropertyWidgetRegistrar<MetaPropertyWidget, MetaProperty>;
} }
#endif // METAPROPERTYWIDGET_H__ #endif // METAPROPERTYWIDGET_H__
...@@ -27,7 +27,6 @@ ...@@ -27,7 +27,6 @@
#include "application/applicationapi.h" #include "application/applicationapi.h"
#include "application/gui/properties/abstractpropertywidget.h" #include "application/gui/properties/abstractpropertywidget.h"
#include "application/gui/properties/propertywidgetfactory.h"
#include "core/properties/optionproperty.h" #include "core/properties/optionproperty.h"
...@@ -69,8 +68,5 @@ namespace campvis { ...@@ -69,8 +68,5 @@ namespace campvis {
QComboBox* _comboBox; QComboBox* _comboBox;
}; };
// explicitly instantiate template, so that it gets registered also over DLL boundaries.
template class PropertyWidgetRegistrar<OptionPropertyWidget, AbstractOptionProperty, 10>;
} }
#endif // OPTIONPROPERTYWIDGET_H__ #endif // OPTIONPROPERTYWIDGET_H__
// ================================================================================================
//
// This file is part of the CAMPVis Software Framework.
//
// If not explicitly stated otherwise: Copyright (C) 2012-2015, all rights reserved,
// Christian Schulte zu Berge <christian.szb@in.tum.de>
// Chair for Computer Aided Medical Procedures
// Technische Universitaet Muenchen
// Boltzmannstr. 3, 85748 Garching b. Muenchen, Germany
//
// For a full list of authors and contributors, please refer to the file "AUTHORS.txt".
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
// except in compliance with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the
// License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
// either express or implied. See the License for the specific language governing permissions
// and limitations under the License.