Sketcher: Remove errors in reporting view while deleting

=======================================================

fixes #2275

https://freecadweb.org/tracker/view.php?id=2275

Deletion of coincidents rely on selected vertex. The original code was trying to delete a coincident without checking whether one was there.

The implementation now relies on checking whether a coincident is present.
This commit is contained in:
Abdullah Tahiri
2018-01-02 15:50:09 +01:00
committed by wmayer
parent adaf9323f3
commit 40459e73cd

View File

@@ -5855,8 +5855,11 @@ bool ViewProviderSketch::onDelete(const std::vector<std::string> &subList)
delConstraints.insert(ConstrId);
}
}
// We stored the vertices, but is there really a coincident constraint? Check
const std::vector< Sketcher::Constraint * > &vals = getSketchObject()->Constraints.getValues();
std::set<int>::const_reverse_iterator rit;
std::set<int>::const_reverse_iterator rit;
for (rit = delConstraints.rbegin(); rit != delConstraints.rend(); ++rit) {
try {
Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.delConstraint(%i)"
@@ -5868,13 +5871,33 @@ bool ViewProviderSketch::onDelete(const std::vector<std::string> &subList)
}
for (rit = delCoincidents.rbegin(); rit != delCoincidents.rend(); ++rit) {
try {
Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.delConstraintOnPoint(%i)"
,getObject()->getNameInDocument(), *rit);
}
catch (const Base::Exception& e) {
Base::Console().Error("%s\n", e.what());
}
int GeoId;
PointPos PosId;
if (*rit == GeoEnum::RtPnt) { // RootPoint
GeoId = Sketcher::GeoEnum::RtPnt;
PosId = start;
} else {
getSketchObject()->getGeoVertexIndex(*rit, GeoId, PosId);
}
if(GeoId != Constraint::GeoUndef) {
for (std::vector< Sketcher::Constraint * >::const_iterator it= vals.begin(); it != vals.end(); ++it) {
if ( ((*it)->Type == Sketcher::Coincident) && (((*it)->First == GeoId && (*it)->FirstPos == PosId) ||
((*it)->Second == GeoId && (*it)->SecondPos == PosId)) ) {
try {
Gui::Command::doCommand(Gui::Command::Doc,"App.ActiveDocument.%s.delConstraintOnPoint(%i,%i)"
,getObject()->getNameInDocument(), GeoId, (int)PosId);
}
catch (const Base::Exception& e) {
Base::Console().Error("%s\n", e.what());
}
break;
}
}
}
}
for (rit = delInternalGeometries.rbegin(); rit != delInternalGeometries.rend(); ++rit) {