Sketcher: Renaming old get Coincident functions and introducing a extended one
============================================================================== What is this? method getCoincidentPoints actually only included (as indicated in the documentation comment) those points coincident by a single constraint. That is not "all the coincident points". However some methods currently using it are expecting exactly that (coincident points linked by a single constraint). A new method is introduced: const std::map<int, Sketcher::PointPos> getAllCoincidentPoints(int GeoId, PointPos PosId); that provides all the points coincident with the given one, directly (via a single constraint) or indirectly (via multiple coincident constraints). The old method is renamed to: getDirectlyCoincidentPoints So as to have a more meaningful name to differentiate between both methods.
This commit is contained in:
parent
82e41125da
commit
53320b260e
|
@ -535,7 +535,7 @@ int SketchObject::delGeometry(int GeoId)
|
||||||
std::vector<int> GeoIdList;
|
std::vector<int> GeoIdList;
|
||||||
std::vector<PointPos> PosIdList;
|
std::vector<PointPos> PosIdList;
|
||||||
for (PointPos PosId = start; PosId != mid; ) {
|
for (PointPos PosId = start; PosId != mid; ) {
|
||||||
getCoincidentPoints(GeoId, PosId, GeoIdList, PosIdList);
|
getDirectlyCoincidentPoints(GeoId, PosId, GeoIdList, PosIdList);
|
||||||
if (GeoIdList.size() > 1) {
|
if (GeoIdList.size() > 1) {
|
||||||
delConstraintOnPoint(GeoId, PosId, true /* only coincidence */);
|
delConstraintOnPoint(GeoId, PosId, true /* only coincidence */);
|
||||||
transferConstraints(GeoIdList[0], PosIdList[0], GeoIdList[1], PosIdList[1]);
|
transferConstraints(GeoIdList[0], PosIdList[0], GeoIdList[1], PosIdList[1]);
|
||||||
|
@ -820,7 +820,7 @@ int SketchObject::fillet(int GeoId, PointPos PosId, double radius, bool trim)
|
||||||
// Find the other geometry Id associated with the coincident point
|
// Find the other geometry Id associated with the coincident point
|
||||||
std::vector<int> GeoIdList;
|
std::vector<int> GeoIdList;
|
||||||
std::vector<PointPos> PosIdList;
|
std::vector<PointPos> PosIdList;
|
||||||
getCoincidentPoints(GeoId, PosId, GeoIdList, PosIdList);
|
getDirectlyCoincidentPoints(GeoId, PosId, GeoIdList, PosIdList);
|
||||||
|
|
||||||
// only coincident points between two (non-external) edges can be filleted
|
// only coincident points between two (non-external) edges can be filleted
|
||||||
if (GeoIdList.size() == 2 && GeoIdList[0] >= 0 && GeoIdList[1] >= 0) {
|
if (GeoIdList.size() == 2 && GeoIdList[0] >= 0 && GeoIdList[1] >= 0) {
|
||||||
|
@ -3163,7 +3163,31 @@ void SketchObject::isCoincidentWithExternalGeometry(int GeoId, bool &start_exter
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SketchObject::getCoincidentPoints(int GeoId, PointPos PosId, std::vector<int> &GeoIdList,
|
const std::map<int, Sketcher::PointPos> SketchObject::getAllCoincidentPoints(int GeoId, PointPos PosId) {
|
||||||
|
|
||||||
|
const std::vector< std::map<int, Sketcher::PointPos> > coincidenttree = getCoincidenceGroups();
|
||||||
|
|
||||||
|
for(std::vector< std::map<int, Sketcher::PointPos> >::const_iterator it = coincidenttree.begin(); it != coincidenttree.end(); ++it) {
|
||||||
|
|
||||||
|
std::map<int, Sketcher::PointPos>::const_iterator geoId1iterator;
|
||||||
|
|
||||||
|
geoId1iterator = (*it).find(GeoId);
|
||||||
|
|
||||||
|
if( geoId1iterator != (*it).end()) {
|
||||||
|
// If GeoId is in this set
|
||||||
|
|
||||||
|
if ((*geoId1iterator).second == PosId) // and posId matches
|
||||||
|
return (*it);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::map<int, Sketcher::PointPos> empty;
|
||||||
|
|
||||||
|
return empty;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void SketchObject::getDirectlyCoincidentPoints(int GeoId, PointPos PosId, std::vector<int> &GeoIdList,
|
||||||
std::vector<PointPos> &PosIdList)
|
std::vector<PointPos> &PosIdList)
|
||||||
{
|
{
|
||||||
const std::vector<Constraint *> &constraints = this->Constraints.getValues();
|
const std::vector<Constraint *> &constraints = this->Constraints.getValues();
|
||||||
|
@ -3191,13 +3215,13 @@ void SketchObject::getCoincidentPoints(int GeoId, PointPos PosId, std::vector<in
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SketchObject::getCoincidentPoints(int VertexId, std::vector<int> &GeoIdList,
|
void SketchObject::getDirectlyCoincidentPoints(int VertexId, std::vector<int> &GeoIdList,
|
||||||
std::vector<PointPos> &PosIdList)
|
std::vector<PointPos> &PosIdList)
|
||||||
{
|
{
|
||||||
int GeoId;
|
int GeoId;
|
||||||
PointPos PosId;
|
PointPos PosId;
|
||||||
getGeoVertexIndex(VertexId, GeoId, PosId);
|
getGeoVertexIndex(VertexId, GeoId, PosId);
|
||||||
getCoincidentPoints(GeoId, PosId, GeoIdList, PosIdList);
|
getDirectlyCoincidentPoints(GeoId, PosId, GeoIdList, PosIdList);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SketchObject::arePointsCoincident(int GeoId1, PointPos PosId1,
|
bool SketchObject::arePointsCoincident(int GeoId1, PointPos PosId1,
|
||||||
|
|
|
@ -181,11 +181,14 @@ public:
|
||||||
const std::vector< std::map<int, Sketcher::PointPos> > getCoincidenceGroups();
|
const std::vector< std::map<int, Sketcher::PointPos> > getCoincidenceGroups();
|
||||||
// returns if the given geoId is fixed (coincident) with external geometry on any of the possible relevant points
|
// returns if the given geoId is fixed (coincident) with external geometry on any of the possible relevant points
|
||||||
void isCoincidentWithExternalGeometry(int GeoId, bool &start_external, bool &mid_external, bool &end_external);
|
void isCoincidentWithExternalGeometry(int GeoId, bool &start_external, bool &mid_external, bool &end_external);
|
||||||
|
// returns a map containing all the GeoIds that are coincident with the given point as keys, and the PosIds as values associated
|
||||||
|
// with the keys.
|
||||||
|
const std::map<int, Sketcher::PointPos> getAllCoincidentPoints(int GeoId, PointPos PosId);
|
||||||
|
|
||||||
/// retrieves for a Vertex number a list with all coincident points (sharing a single coincidence constraint)
|
/// retrieves for a Vertex number a list with all coincident points (sharing a single coincidence constraint)
|
||||||
void getCoincidentPoints(int GeoId, PointPos PosId, std::vector<int> &GeoIdList,
|
void getDirectlyCoincidentPoints(int GeoId, PointPos PosId, std::vector<int> &GeoIdList,
|
||||||
std::vector<PointPos> &PosIdList);
|
std::vector<PointPos> &PosIdList);
|
||||||
void getCoincidentPoints(int VertexId, std::vector<int> &GeoIdList, std::vector<PointPos> &PosIdList);
|
void getDirectlyCoincidentPoints(int VertexId, std::vector<int> &GeoIdList, std::vector<PointPos> &PosIdList);
|
||||||
bool arePointsCoincident(int GeoId1, PointPos PosId1, int GeoId2, PointPos PosId2);
|
bool arePointsCoincident(int GeoId1, PointPos PosId1, int GeoId2, PointPos PosId2);
|
||||||
|
|
||||||
/// generates a warning message about constraint conflicts and appends it to the given message
|
/// generates a warning message about constraint conflicts and appends it to the given message
|
||||||
|
|
|
@ -3981,7 +3981,7 @@ namespace SketcherGui {
|
||||||
Sketcher::SketchObject *Sketch = static_cast<Sketcher::SketchObject*>(object);
|
Sketcher::SketchObject *Sketch = static_cast<Sketcher::SketchObject*>(object);
|
||||||
std::vector<int> GeoIdList;
|
std::vector<int> GeoIdList;
|
||||||
std::vector<Sketcher::PointPos> PosIdList;
|
std::vector<Sketcher::PointPos> PosIdList;
|
||||||
Sketch->getCoincidentPoints(VtId, GeoIdList, PosIdList);
|
Sketch->getDirectlyCoincidentPoints(VtId, GeoIdList, PosIdList);
|
||||||
if (GeoIdList.size() == 2 && GeoIdList[0] >= 0 && GeoIdList[1] >= 0) {
|
if (GeoIdList.size() == 2 && GeoIdList[0] >= 0 && GeoIdList[1] >= 0) {
|
||||||
const Part::Geometry *geom1 = Sketch->getGeometry(GeoIdList[0]);
|
const Part::Geometry *geom1 = Sketch->getGeometry(GeoIdList[0]);
|
||||||
const Part::Geometry *geom2 = Sketch->getGeometry(GeoIdList[1]);
|
const Part::Geometry *geom2 = Sketch->getGeometry(GeoIdList[1]);
|
||||||
|
@ -4080,7 +4080,7 @@ public:
|
||||||
double radius=-1;
|
double radius=-1;
|
||||||
std::vector<int> GeoIdList;
|
std::vector<int> GeoIdList;
|
||||||
std::vector<Sketcher::PointPos> PosIdList;
|
std::vector<Sketcher::PointPos> PosIdList;
|
||||||
sketchgui->getSketchObject()->getCoincidentPoints(GeoId, PosId, GeoIdList, PosIdList);
|
sketchgui->getSketchObject()->getDirectlyCoincidentPoints(GeoId, PosId, GeoIdList, PosIdList);
|
||||||
if (GeoIdList.size() == 2 && GeoIdList[0] >= 0 && GeoIdList[1] >= 0) {
|
if (GeoIdList.size() == 2 && GeoIdList[0] >= 0 && GeoIdList[1] >= 0) {
|
||||||
const Part::Geometry *geom1 = sketchgui->getSketchObject()->getGeometry(GeoIdList[0]);
|
const Part::Geometry *geom1 = sketchgui->getSketchObject()->getGeometry(GeoIdList[0]);
|
||||||
const Part::Geometry *geom2 = sketchgui->getSketchObject()->getGeometry(GeoIdList[1]);
|
const Part::Geometry *geom2 = sketchgui->getSketchObject()->getGeometry(GeoIdList[1]);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user