PropertyExpressionEngine: convert to link type property
PropertyExpressionEngine is changed to derived from a new class PropertyExpressionContainer, which is in turn derives from PropertyXLinkContainer. This makes PropertyExpressionEngine a link type property that is capable of external linking. It now uses the unified link property APIs for dependency management and tracking of object life time, re-labeling, etc. ObjectIdentifier is modified to support sub-object reference, but is not exposed to end-user, because expression syntax is kept mostly unchanged, which will be submitted in future PR. There is, however, one small change in expression syntax (ExpressionParser.y) to introduce local property reference to avoid ambiguity mentioned in FreeCAD/FreeCAD#1619 Modified Expression/ExpressionModifier interface to support various link property API for link modification.
This commit is contained in:
@@ -372,7 +372,7 @@ void Document::exportGraphviz(std::ostream& out) const
|
||||
|
||||
void addExpressionSubgraphIfNeeded(DocumentObject * obj, bool CSsubgraphs) {
|
||||
|
||||
boost::unordered_map<const App::ObjectIdentifier, const PropertyExpressionEngine::ExpressionInfo> expressions = obj->ExpressionEngine.getExpressions();
|
||||
auto expressions = obj->ExpressionEngine.getExpressions();
|
||||
|
||||
if (!expressions.empty()) {
|
||||
|
||||
@@ -394,11 +394,11 @@ void Document::exportGraphviz(std::ostream& out) const
|
||||
}
|
||||
|
||||
// Create subgraphs for all documentobjects that it depends on; it will depend on some property there
|
||||
boost::unordered_map<const App::ObjectIdentifier, const PropertyExpressionEngine::ExpressionInfo>::const_iterator i = expressions.begin();
|
||||
auto i = expressions.begin();
|
||||
while (i != expressions.end()) {
|
||||
std::set<ObjectIdentifier> deps;
|
||||
|
||||
i->second.expression->getDeps(deps);
|
||||
i->second->getIdentifiers(deps);
|
||||
|
||||
std::set<ObjectIdentifier>::const_iterator j = deps.begin();
|
||||
while (j != deps.end()) {
|
||||
@@ -486,8 +486,8 @@ void Document::exportGraphviz(std::ostream& out) const
|
||||
}
|
||||
|
||||
// Add expressions and its dependencies
|
||||
boost::unordered_map<const App::ObjectIdentifier, const PropertyExpressionEngine::ExpressionInfo> expressions = docObj->ExpressionEngine.getExpressions();
|
||||
boost::unordered_map<const App::ObjectIdentifier, const PropertyExpressionEngine::ExpressionInfo>::const_iterator i = expressions.begin();
|
||||
auto expressions = docObj->ExpressionEngine.getExpressions();
|
||||
auto i = expressions.begin();
|
||||
|
||||
// Add nodes for each property that has an expression attached to it
|
||||
while (i != expressions.end()) {
|
||||
@@ -507,7 +507,7 @@ void Document::exportGraphviz(std::ostream& out) const
|
||||
|
||||
// Get dependencies
|
||||
std::set<ObjectIdentifier> deps;
|
||||
i->second.expression->getDeps(deps);
|
||||
i->second->getIdentifiers(deps);
|
||||
|
||||
// Create subgraphs for all documentobjects that it depends on; it will depend on some property there
|
||||
std::set<ObjectIdentifier>::const_iterator j = deps.begin();
|
||||
@@ -648,12 +648,12 @@ void Document::exportGraphviz(std::ostream& out) const
|
||||
const DocumentObject * docObj = *j;
|
||||
|
||||
// Add expressions and its dependencies
|
||||
boost::unordered_map<const App::ObjectIdentifier, const PropertyExpressionEngine::ExpressionInfo> expressions = docObj->ExpressionEngine.getExpressions();
|
||||
boost::unordered_map<const App::ObjectIdentifier, const PropertyExpressionEngine::ExpressionInfo>::const_iterator i = expressions.begin();
|
||||
auto expressions = docObj->ExpressionEngine.getExpressions();
|
||||
auto i = expressions.begin();
|
||||
|
||||
while (i != expressions.end()) {
|
||||
std::set<ObjectIdentifier> deps;
|
||||
i->second.expression->getDeps(deps);
|
||||
i->second->getIdentifiers(deps);
|
||||
|
||||
// Create subgraphs for all documentobjects that it depends on; it will depend on some property there
|
||||
std::set<ObjectIdentifier>::const_iterator k = deps.begin();
|
||||
|
||||
Reference in New Issue
Block a user