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,42 +205,49 @@ 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(formatting.plotFactorPoints) { // If null pointer, move on to the next
if (!factor) {
continue;
}
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 =
if(pos != formatting.factorPositions.end()) formatting.factorPositions.find(i);
stm << ", pos=\"" << formatting.scale*(pos->second.x() - minX) << "," if (pos != formatting.factorPositions.end())
<< formatting.scale*(pos->second.y() - minY) << "!\""; stm << ", pos=\"" << formatting.scale * (pos->second.x() - minX)
<< "," << 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 { Key k;
if(factor) { bool firstTime = true;
Key k; for (Key key : *this->at(i)) {
bool firstTime = true; if (firstTime) {
for(Key key: *this->at(i)) {
if(firstTime) {
k = key;
firstTime = false;
continue;
}
stm << " var" << key << "--" << "var" << k << ";\n";
k = key; k = key;
firstTime = false;
continue;
} }
stm << " var" << key << "--"
<< "var" << k << ";\n";
k = key;
} }
} }
} }