fixes #0003350: Draft Snapping does not recognize App::Part container
This commit is contained in:
@@ -611,15 +611,15 @@ bool Document::isModified() const
|
||||
|
||||
ViewProvider* Document::getViewProviderByPathFromTail(SoPath * path) const
|
||||
{
|
||||
// Make sure I'm the lowest LocHL in the pick path!
|
||||
// Get the lowest root node in the pick path!
|
||||
for (int i = 0; i < path->getLength(); i++) {
|
||||
SoNode *node = path->getNodeFromTail(i);
|
||||
if (node->isOfType(SoSeparator::getClassTypeId())) {
|
||||
std::map<const App::DocumentObject*,ViewProviderDocumentObject*>::const_iterator it = d->_ViewProviderMap.begin();
|
||||
for(;it!= d->_ViewProviderMap.end();++it)
|
||||
std::map<const App::DocumentObject*,ViewProviderDocumentObject*>::const_iterator it;
|
||||
for(it = d->_ViewProviderMap.begin();it!= d->_ViewProviderMap.end();++it) {
|
||||
if (node == it->second->getRoot())
|
||||
return it->second;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1153,33 +1153,32 @@ Py::Object View3DInventorPy::getObjectInfo(const Py::Tuple& args)
|
||||
dict.setItem("y", Py::Float(pt[1]));
|
||||
dict.setItem("z", Py::Float(pt[2]));
|
||||
|
||||
ViewProvider *vp = _view->getViewer()->getViewProviderByPath(Point->getPath());
|
||||
if (vp && vp->useNewSelectionModel() && vp->isDerivedFrom(ViewProviderDocumentObject::getClassTypeId())) {
|
||||
Gui::Document* doc = _view->getViewer()->getDocument();
|
||||
ViewProvider *vp = doc ? doc->getViewProviderByPathFromTail(Point->getPath())
|
||||
: _view->getViewer()->getViewProviderByPathFromTail(Point->getPath());
|
||||
if (vp && vp->isDerivedFrom(ViewProviderDocumentObject::getClassTypeId())) {
|
||||
ViewProviderDocumentObject* vpd = static_cast<ViewProviderDocumentObject*>(vp);
|
||||
dict.setItem("Document",
|
||||
Py::String(vpd->getObject()->getDocument()->getName()));
|
||||
dict.setItem("Object",
|
||||
Py::String(vpd->getObject()->getNameInDocument()));
|
||||
dict.setItem("Component",
|
||||
Py::String(vpd->getElement(Point->getDetail())));
|
||||
if (vp->useNewSelectionModel()) {
|
||||
dict.setItem("Component",
|
||||
Py::String(vpd->getElement(Point->getDetail())));
|
||||
}
|
||||
else {
|
||||
// search for a SoFCSelection node
|
||||
SoFCDocumentObjectAction objaction;
|
||||
objaction.apply(Point->getPath());
|
||||
if (objaction.isHandled()) {
|
||||
dict.setItem("Component",
|
||||
Py::String(objaction.componentName.getString()));
|
||||
}
|
||||
}
|
||||
|
||||
// ok, found the node of interest
|
||||
ret = dict;
|
||||
}
|
||||
else {
|
||||
// search for a SoFCSelection node
|
||||
SoFCDocumentObjectAction objaction;
|
||||
objaction.apply(Point->getPath());
|
||||
if (objaction.isHandled()) {
|
||||
dict.setItem("Document",
|
||||
Py::String(objaction.documentName.getString()));
|
||||
dict.setItem("Object",
|
||||
Py::String(objaction.objectName.getString()));
|
||||
dict.setItem("Component",
|
||||
Py::String(objaction.componentName.getString()));
|
||||
// ok, found the node of interest
|
||||
ret = dict;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
@@ -1217,6 +1216,7 @@ Py::Object View3DInventorPy::getObjectsInfo(const Py::Tuple& args)
|
||||
action.apply(_view->getViewer()->getSoRenderManager()->getSceneGraph());
|
||||
const SoPickedPointList& pp = action.getPickedPointList();
|
||||
|
||||
Gui::Document* doc = _view->getViewer()->getDocument();
|
||||
Py::Object ret = Py::None();
|
||||
if (pp.getLength() > 0) {
|
||||
Py::List list;
|
||||
@@ -1228,33 +1228,30 @@ Py::Object View3DInventorPy::getObjectsInfo(const Py::Tuple& args)
|
||||
dict.setItem("y", Py::Float(pt[1]));
|
||||
dict.setItem("z", Py::Float(pt[2]));
|
||||
|
||||
ViewProvider *vp = _view->getViewer()->getViewProviderByPath(point->getPath());
|
||||
if (vp && vp->useNewSelectionModel() && vp->isDerivedFrom(ViewProviderDocumentObject::getClassTypeId())) {
|
||||
ViewProvider *vp = doc ? doc->getViewProviderByPathFromTail(point->getPath())
|
||||
: _view->getViewer()->getViewProviderByPathFromTail(point->getPath());
|
||||
if (vp && vp->isDerivedFrom(ViewProviderDocumentObject::getClassTypeId())) {
|
||||
ViewProviderDocumentObject* vpd = static_cast<ViewProviderDocumentObject*>(vp);
|
||||
dict.setItem("Document",
|
||||
Py::String(vpd->getObject()->getDocument()->getName()));
|
||||
dict.setItem("Object",
|
||||
Py::String(vpd->getObject()->getNameInDocument()));
|
||||
dict.setItem("Component",
|
||||
Py::String(vpd->getElement(point->getDetail())));
|
||||
if (vp->useNewSelectionModel()) {
|
||||
dict.setItem("Component",
|
||||
Py::String(vpd->getElement(point->getDetail())));
|
||||
}
|
||||
else {
|
||||
// search for a SoFCSelection node
|
||||
SoFCDocumentObjectAction objaction;
|
||||
objaction.apply(point->getPath());
|
||||
if (objaction.isHandled()) {
|
||||
dict.setItem("Component",
|
||||
Py::String(objaction.componentName.getString()));
|
||||
}
|
||||
}
|
||||
// ok, found the node of interest
|
||||
list.append(dict);
|
||||
}
|
||||
else {
|
||||
// search for a SoFCSelection node
|
||||
SoFCDocumentObjectAction objaction;
|
||||
objaction.apply(point->getPath());
|
||||
if (objaction.isHandled()) {
|
||||
dict.setItem("Document",
|
||||
Py::String(objaction.documentName.getString()));
|
||||
dict.setItem("Object",
|
||||
Py::String(objaction.objectName.getString()));
|
||||
dict.setItem("Component",
|
||||
Py::String(objaction.componentName.getString()));
|
||||
// ok, found the node of interest
|
||||
list.append(dict);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ret = list;
|
||||
|
||||
Reference in New Issue
Block a user