From b97f93c5a806814d3f24ab95be500121d72fa765 Mon Sep 17 00:00:00 2001 From: wmayer Date: Thu, 15 Dec 2016 22:16:19 +0100 Subject: [PATCH] issue #0002802: Set a name to coin rootnodes of objects --- src/Gui/SceneInspector.cpp | 5 ++++- src/Gui/ViewProvider.cpp | 9 +++++---- src/Gui/ViewProviderDocumentObject.cpp | 14 ++++++++++++++ src/Gui/ViewProviderDocumentObject.h | 1 + src/Gui/ViewProviderGeometryObject.cpp | 3 +++ 5 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/Gui/SceneInspector.cpp b/src/Gui/SceneInspector.cpp index efa0f3e7a..5bc6e3804 100644 --- a/src/Gui/SceneInspector.cpp +++ b/src/Gui/SceneInspector.cpp @@ -97,7 +97,10 @@ void SceneModel::setNode(QModelIndex index, SoNode* node) for (int i=0; igetNumChildren();i++) { SoNode* child = group->getChild(i); setNode(this->index(i, 0, index), child); - this->setData(this->index(i, 1, index), QVariant(QString::fromLatin1(child->getName()))); + // See ViewProviderDocumentObject::updateData + QByteArray name(child->getName()); + name = QByteArray::fromPercentEncoding(name); + this->setData(this->index(i, 1, index), QVariant(QString::fromUtf8(name))); } } // insert icon diff --git a/src/Gui/ViewProvider.cpp b/src/Gui/ViewProvider.cpp index 6de48915f..7aeaacabd 100644 --- a/src/Gui/ViewProvider.cpp +++ b/src/Gui/ViewProvider.cpp @@ -263,13 +263,14 @@ SbMatrix ViewProvider::convert(const Base::Matrix4D &rcMatrix) const dMtrx[12],dMtrx[13],dMtrx[14], dMtrx[15]); } -void ViewProvider::addDisplayMaskMode( SoNode *node, const char* type ) +void ViewProvider::addDisplayMaskMode(SoNode *node, const char* type) { - _sDisplayMaskModes[ type ] = pcModeSwitch->getNumChildren(); - pcModeSwitch->addChild( node ); + node->setName(type); + _sDisplayMaskModes[type] = pcModeSwitch->getNumChildren(); + pcModeSwitch->addChild(node); } -void ViewProvider::setDisplayMaskMode( const char* type ) +void ViewProvider::setDisplayMaskMode(const char* type) { std::map::const_iterator it = _sDisplayMaskModes.find( type ); if (it != _sDisplayMaskModes.end()) diff --git a/src/Gui/ViewProviderDocumentObject.cpp b/src/Gui/ViewProviderDocumentObject.cpp index d001f96ec..bbaca4ca4 100644 --- a/src/Gui/ViewProviderDocumentObject.cpp +++ b/src/Gui/ViewProviderDocumentObject.cpp @@ -24,6 +24,7 @@ #include "PreCompiled.h" #ifndef _PreComp_ +# include # include # include # include @@ -187,6 +188,19 @@ void ViewProviderDocumentObject::attach(App::DocumentObject *pcObj) ext->extensionAttach(pcObj); } +void ViewProviderDocumentObject::updateData(const App::Property* prop) +{ + if (pcObject && prop == &pcObject->Label) { + // SoBase::setName() replaces characters that according to the + // VRML standard are invalid. To avoid the replacement we use + // the percent encoding. + QByteArray ba(pcObject->Label.getValue()); + QByteArray name = ba.toPercentEncoding(); + pcRoot->setName(name.constData()); + } + ViewProvider::updateData(prop); +} + Gui::Document* ViewProviderDocumentObject::getDocument() const { App::Document* pAppDoc = pcObject->getDocument(); diff --git a/src/Gui/ViewProviderDocumentObject.h b/src/Gui/ViewProviderDocumentObject.h index ebe24ccf0..c6d79d1a6 100644 --- a/src/Gui/ViewProviderDocumentObject.h +++ b/src/Gui/ViewProviderDocumentObject.h @@ -62,6 +62,7 @@ public: App::PropertyBool Visibility; virtual void attach(App::DocumentObject *pcObject); + virtual void updateData(const App::Property*); /// Set the active mode, i.e. the first item of the 'Display' property. void setActiveMode(); /// Hide the object in the view diff --git a/src/Gui/ViewProviderGeometryObject.cpp b/src/Gui/ViewProviderGeometryObject.cpp index 5eb17793a..67445b26e 100644 --- a/src/Gui/ViewProviderGeometryObject.cpp +++ b/src/Gui/ViewProviderGeometryObject.cpp @@ -180,6 +180,9 @@ void ViewProviderGeometryObject::updateData(const App::Property* prop) Base::Placement p = static_cast(prop)->getValue(); updateTransform(p, pcTransform); } + else { + ViewProviderDocumentObject::updateData(prop); + } } bool ViewProviderGeometryObject::doubleClicked(void)