diff --git a/src/App/Document.cpp b/src/App/Document.cpp index f916e05fc1..10d639de1c 100644 --- a/src/App/Document.cpp +++ b/src/App/Document.cpp @@ -1832,7 +1832,8 @@ void Document::writeObjects(const std::vector& obj, if(!isExporting(0)) { for(auto o : obj) { - const auto &outList = o->getOutList(DocumentObject::OutListNoHidden); + const auto &outList = o->getOutList(DocumentObject::OutListNoHidden + | DocumentObject::OutListNoXLinked); writer.Stream() << writer.ind() << "<" FC_ELEMENT_OBJECT_DEPS " " FC_ATTR_DEP_OBJ_NAME "=\"" << o->getNameInDocument() << "\" " FC_ATTR_DEP_COUNT "=\"" << outList.size(); diff --git a/src/App/DocumentObject.cpp b/src/App/DocumentObject.cpp index 72b5b309cc..a3e88e9f35 100644 --- a/src/App/DocumentObject.cpp +++ b/src/App/DocumentObject.cpp @@ -284,14 +284,24 @@ void DocumentObject::getOutList(int options, std::vector &res) std::vector props; getPropertyList(props); bool noHidden = !!(options & OutListNoHidden); - bool noXLinked = !!(options & OutListNoXLinked); + std::size_t size = res.size(); for(auto prop : props) { auto link = dynamic_cast(prop); - if(link && (!noXLinked || !PropertyXLink::supportXLink(prop))) + if(link) link->getLinks(res,noHidden); } if(!(options & OutListNoExpression)) ExpressionEngine.getLinks(res); + + if(options & OutListNoXLinked) { + for(auto it=res.begin()+size;it!=res.end();) { + auto obj = *it; + if(obj && obj->getDocument()!=getDocument()) + it = res.erase(it); + else + ++it; + } + } } std::vector DocumentObject::getOutListOfProperty(App::Property* prop) const