MCPcopy Create free account
hub / github.com/FreeCAD/FreeCAD / splitEdges

Method splitEdges

src/Mod/TechDraw/App/DrawProjectSplit.cpp:165–207  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

163
164
165std::vector<TopoDS_Edge> DrawProjectSplit::splitEdges(std::vector<TopoDS_Edge> edges, std::vector<splitPoint> splits)
166{
167 std::vector<TopoDS_Edge> result;
168 std::vector<TopoDS_Edge> newEdges;
169 std::vector<splitPoint> edgeSplits; //splits for current edge
170 int iEdge = 0; //current edge index
171 int iSplit = 0; //current splitindex
172 int ii = 0; //i value of current split
173 int endEdge = edges.size();
174 int endSplit = splits.size();
175 int imax = std::numeric_limits<int>::max();
176
177 while (iEdge < endEdge) {
178 if (iSplit < endSplit) {
179 ii = splits[iSplit].i;
180 } else {
181 ii = imax;
182 }
183 if (ii == iEdge) {
184 edgeSplits.push_back(splits[iSplit]);
185 iSplit++;
186 } else if (ii > iEdge) {
187 if (!edgeSplits.empty()) { //save *iedge's splits
188 newEdges = split1Edge(edges[iEdge], edgeSplits);
189 result.insert(result.end(), newEdges.begin(), newEdges.end());
190 edgeSplits.clear();
191 } else {
192 result.push_back(edges[iEdge]); //save *iedge
193 }
194 iEdge++; //next edge
195 } else if (iEdge > ii) {
196 iSplit++;
197 }
198 }
199
200 if (!edgeSplits.empty()) { //handle last batch
201 newEdges = split1Edge(edges[iEdge], edgeSplits);
202 result.insert(result.end(), newEdges.begin(), newEdges.end());
203 edgeSplits.clear();
204 }
205
206 return result;
207}
208
209
210std::vector<TopoDS_Edge> DrawProjectSplit::split1Edge(TopoDS_Edge e, std::vector<splitPoint> splits)

Callers

nothing calls this directly

Calls 8

maxFunction · 0.85
sizeMethod · 0.45
push_backMethod · 0.45
emptyMethod · 0.45
insertMethod · 0.45
endMethod · 0.45
beginMethod · 0.45
clearMethod · 0.45

Tested by

no test coverage detected