MCPcopy Create free account
hub / github.com/OpenOrienteering/mapper / executePerSymbol

Method executePerSymbol

src/core/objects/boolean_tool.cpp:283–343  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

281}
282
283bool BooleanTool::executePerSymbol()
284{
285 PathObjects backlog;
286 backlog.reserve(map->getNumSelectedObjects());
287
288 // Filter area objects into initial backlog
289 for (Object* object : map->selectedObjects())
290 {
291 if (object->getSymbol()->getContainedTypes() & Symbol::Area)
292 backlog.push_back(object->asPath());
293 }
294
295 QScopedPointer<CombinedUndoStep> undo_step(new CombinedUndoStep(map));
296 PathObjects new_backlog;
297 new_backlog.reserve(backlog.size()/2);
298 PathObjects in_objects;
299 in_objects.reserve(backlog.size()/2);
300 PathObjects out_objects;
301 while (!backlog.empty())
302 {
303 PathObject* const primary_object = backlog.front();
304 const Symbol* const symbol = primary_object->getSymbol();
305
306 // Filter objects by symbol into in_objects or new_backlog, respectively
307 new_backlog.clear();
308 in_objects.clear();
309 for (PathObject* object : backlog)
310 {
311 if (object->getSymbol() == symbol)
312 {
313 if (op != MergeHoles || (object->getSymbol()->getContainedTypes() & Symbol::Area && object->parts().size() > 1 ))
314 {
315 in_objects.push_back(object);
316 }
317 }
318 else
319 {
320 new_backlog.push_back(object);
321 }
322 }
323 backlog.swap(new_backlog);
324
325 // Short cut for single object of given symbol
326 if (in_objects.size() == 1)
327 continue;
328
329 // Perform the core operation
330 out_objects.clear();
331 executeForObjects(primary_object, in_objects, out_objects, *undo_step);
332 }
333
334 bool const have_changes = undo_step->getNumSubSteps() > 0;
335 if (have_changes)
336 {
337 map->push(undo_step.take());
338 map->setObjectsDirty();
339 map->emitSelectionChanged();
340 map->emitSelectionEdited();

Callers 1

booleanUnionClickedMethod · 0.80

Calls 12

getNumSelectedObjectsMethod · 0.80
asPathMethod · 0.80
getNumSubStepsMethod · 0.80
setObjectsDirtyMethod · 0.80
emitSelectionChangedMethod · 0.80
emitSelectionEditedMethod · 0.80
getContainedTypesMethod · 0.45
getSymbolMethod · 0.45
sizeMethod · 0.45
emptyMethod · 0.45
clearMethod · 0.45
pushMethod · 0.45

Tested by

no test coverage detected