Salome HOME
projects
/
modules
/
shaper.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Copyright update 2022
[modules/shaper.git]
/
src
/
BuildPlugin
/
BuildPlugin_Wire.cpp
diff --git
a/src/BuildPlugin/BuildPlugin_Wire.cpp
b/src/BuildPlugin/BuildPlugin_Wire.cpp
index 7f10590d93fbf3e2c22b4b221281ed2e8a2a1253..ff29af48add642e820dce8272b15d9ae3b516c50 100644
(file)
--- a/
src/BuildPlugin/BuildPlugin_Wire.cpp
+++ b/
src/BuildPlugin/BuildPlugin_Wire.cpp
@@
-1,4
+1,4
@@
-// Copyright (C) 2014-202
0
CEA/DEN, EDF R&D
+// Copyright (C) 2014-202
2
CEA/DEN, EDF R&D
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
@@
-122,7
+122,10
@@
void BuildPlugin_Wire::execute()
for (ListOfShape::const_iterator anIt = anEdges.cbegin(); anIt != anEdges.cend(); ++anIt) {
std::shared_ptr<GeomAPI_Edge> anEdgeInList(new GeomAPI_Edge(*anIt));
if (anEdgeInList->isEqual(anEdgeInResult)) {
for (ListOfShape::const_iterator anIt = anEdges.cbegin(); anIt != anEdges.cend(); ++anIt) {
std::shared_ptr<GeomAPI_Edge> anEdgeInList(new GeomAPI_Edge(*anIt));
if (anEdgeInList->isEqual(anEdgeInResult)) {
- aResultBody->modified(anEdgeInList, anEdgeInResult);
+ if (anEdgeInList->isSame(anEdgeInResult))
+ aResultBody->generated(anEdgeInResult, "Edge");
+ else
+ aResultBody->modified(anEdgeInList, anEdgeInResult);
break;
}
}
break;
}
}
@@
-144,9
+147,9
@@
void BuildPlugin_Wire::execute()
for (ListOfShape::iterator aWIt = aWires.begin(); aWIt != aWires.end(); ++aWIt) {
ResultBodyPtr aResultBody = document()->createBody(data(), aResultIndex);
for (ListOfShape::iterator aWIt = aWires.begin(); aWIt != aWires.end(); ++aWIt) {
ResultBodyPtr aResultBody = document()->createBody(data(), aResultIndex);
- ListOfShape aSketch
es
;
- aSketch
es
.push_back(anIt->second);
- aResultBody->storeModified(aSketch
es
, *aWIt, aMakeShapeList);
+ ListOfShape aSketch;
+ aSketch.push_back(anIt->second);
+ aResultBody->storeModified(aSketch, *aWIt, aMakeShapeList);
aResultBody->loadModifiedShapes(aMakeShapeList, anIt->second, GeomAPI_Shape::EDGE);
setResult(aResultBody, aResultIndex);
++aResultIndex;
aResultBody->loadModifiedShapes(aMakeShapeList, anIt->second, GeomAPI_Shape::EDGE);
setResult(aResultBody, aResultIndex);
++aResultIndex;
@@
-317,11
+320,16
@@
bool buildSketchWires(FeaturePtr theSketchFeature, GeomShapePtr theSketchShape,
const ListOfShape& aFaces = aSketchBuilder->faces();
for (ListOfShape::const_iterator anIt = aFaces.begin(); anIt != aFaces.end(); ++anIt) {
for (GeomAPI_ShapeExplorer aWExp(*anIt, GeomAPI_Shape::WIRE); aWExp.more(); aWExp.next()) {
const ListOfShape& aFaces = aSketchBuilder->faces();
for (ListOfShape::const_iterator anIt = aFaces.begin(); anIt != aFaces.end(); ++anIt) {
for (GeomAPI_ShapeExplorer aWExp(*anIt, GeomAPI_Shape::WIRE); aWExp.more(); aWExp.next()) {
+ // skip the wire if at least one its edge was already processed
GeomAPI_ShapeExplorer aEExp(aWExp.current(), GeomAPI_Shape::EDGE);
GeomAPI_ShapeExplorer aEExp(aWExp.current(), GeomAPI_Shape::EDGE);
- if (aProcessedEdges.find(aEExp.current()) != aProcessedEdges.end())
- continue; // wire is already processed
+ for (; aEExp.more(); aEExp.next()) {
+ if (aProcessedEdges.find(aEExp.current()) != aProcessedEdges.end())
+ break; // wire is already processed
+ }
+ if (aEExp.more())
+ continue;
// mark edges as processed
// mark edges as processed
- for (; aEExp.more(); aEExp.next())
+ for (
aEExp.init(aWExp.current(), GeomAPI_Shape::EDGE)
; aEExp.more(); aEExp.next())
aProcessedEdges.insert(aEExp.current());
// store the wire
theWires.push_back(aWExp.current());
aProcessedEdges.insert(aEExp.current());
// store the wire
theWires.push_back(aWExp.current());
@@
-388,7
+396,9
@@
bool buildSketchWires(FeaturePtr theSketchFeature, GeomShapePtr theSketchShape,
else {
// both vertices are found
aFoundStart->second->push_back(anEdge);
else {
// both vertices are found
aFoundStart->second->push_back(anEdge);
- if (aFoundStart->second != aFoundEnd->second) {
+ if (aFoundStart->second == aFoundEnd->second)
+ aMapVW.erase(aFoundStart);
+ else {
// different wires => merge segments
aFoundStart->second->insert(aFoundStart->second->end(),
aFoundEnd->second->begin(), aFoundEnd->second->end());
// different wires => merge segments
aFoundStart->second->insert(aFoundStart->second->end(),
aFoundEnd->second->begin(), aFoundEnd->second->end());
@@
-399,9
+409,9
@@
bool buildSketchWires(FeaturePtr theSketchFeature, GeomShapePtr theSketchShape,
break;
}
aNewWires.erase(aFoundEnd->second);
break;
}
aNewWires.erase(aFoundEnd->second);
+ aMapVW.erase(aFoundStart);
+ aMapVW.erase(aFoundEnd);
}
}
- aMapVW.erase(aFoundStart);
- aMapVW.erase(aFoundEnd);
continue;
}
}
continue;
}
}