Merge pull request #503 from borglab/fix/nfg-check

General check for null pointer in saveGraph
release/4.3a0
Varun Agrawal 2020-08-31 21:55:17 -04:00 committed by GitHub
commit 199ac63ca5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 29 additions and 22 deletions

View File

@ -205,31 +205,38 @@ void NonlinearFactorGraph::saveGraph(std::ostream &stm, const Values& values,
// Create factors and variable connections // Create factors and variable connections
for(size_t i = 0; i < size(); ++i) { for(size_t i = 0; i < size(); ++i) {
const NonlinearFactor::shared_ptr& factor = at(i); const NonlinearFactor::shared_ptr& factor = at(i);
// If null pointer, move on to the next
if (!factor) {
continue;
}
if (formatting.plotFactorPoints) { if (formatting.plotFactorPoints) {
const KeyVector& keys = factor->keys(); const KeyVector& keys = factor->keys();
if (formatting.binaryEdges && keys.size() == 2) { if (formatting.binaryEdges && keys.size() == 2) {
stm << " var" << keys[0] << "--" << "var" << keys[1] << ";\n"; stm << " var" << keys[0] << "--"
<< "var" << keys[1] << ";\n";
} else { } else {
// Make each factor a dot // Make each factor a dot
stm << " factor" << i << "[label=\"\", shape=point"; stm << " factor" << i << "[label=\"\", shape=point";
{ {
map<size_t, Point2>::const_iterator pos = formatting.factorPositions.find(i); map<size_t, Point2>::const_iterator pos =
formatting.factorPositions.find(i);
if (pos != formatting.factorPositions.end()) if (pos != formatting.factorPositions.end())
stm << ", pos=\"" << formatting.scale*(pos->second.x() - minX) << "," stm << ", pos=\"" << formatting.scale * (pos->second.x() - minX)
<< formatting.scale*(pos->second.y() - minY) << "!\""; << "," << formatting.scale * (pos->second.y() - minY)
<< "!\"";
} }
stm << "];\n"; stm << "];\n";
// Make factor-variable connections // Make factor-variable connections
if (formatting.connectKeysToFactor && factor) { if (formatting.connectKeysToFactor && factor) {
for (Key key : *factor) { for (Key key : *factor) {
stm << " var" << key << "--" << "factor" << i << ";\n"; stm << " var" << key << "--"
<< "factor" << i << ";\n";
} }
} }
} }
} } else {
else {
if(factor) {
Key k; Key k;
bool firstTime = true; bool firstTime = true;
for (Key key : *this->at(i)) { for (Key key : *this->at(i)) {
@ -238,13 +245,13 @@ void NonlinearFactorGraph::saveGraph(std::ostream &stm, const Values& values,
firstTime = false; firstTime = false;
continue; continue;
} }
stm << " var" << key << "--" << "var" << k << ";\n"; stm << " var" << key << "--"
<< "var" << k << ";\n";
k = key; k = key;
} }
} }
} }
} }
}
stm << "}\n"; stm << "}\n";
} }