MCPcopy Create free account
hub / github.com/codereader/DarkRadiant / weldPatches

Function weldPatches

radiantcore/patch/algorithm/General.cpp:340–377  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

338}
339
340void weldPatches(const PatchNodePtr& patchNode1, const PatchNodePtr& patchNode2)
341{
342 if (patchNode1->getParent() != patchNode2->getParent())
343 {
344 throw cmd::ExecutionFailure(_("Patches have different parent entities, cannot weld."));
345 }
346
347 auto mergedPatchNode = createdMergedPatch(patchNode1, patchNode2);
348
349 patchNode1->getParent()->addChildNode(mergedPatchNode);
350
351 mergedPatchNode->assignToLayers(patchNode1->getLayers());
352
353 auto patch1GroupSelectable = std::dynamic_pointer_cast<IGroupSelectable>(patchNode1);
354
355 if (patch1GroupSelectable)
356 {
357 selection::assignNodeToSelectionGroups(mergedPatchNode, patch1GroupSelectable->getGroupIds());
358 }
359
360 auto& mergedPatch = std::dynamic_pointer_cast<IPatchNode>(mergedPatchNode)->getPatch();
361
362 // Preserve the materials
363 mergedPatch.setShader(patchNode1->getPatch().getShader());
364
365 // Preserve fixed subdivision setting of the first patch
366 if (patchNode1->getPatch().subdivisionsFixed())
367 {
368 mergedPatch.setFixedSubdivisions(true, patchNode1->getPatch().getSubdivisions());
369 }
370
371 mergedPatch.scaleTextureNaturally();
372
373 Node_setSelected(mergedPatchNode, true);
374
375 scene::removeNodeFromParent(patchNode1);
376 scene::removeNodeFromParent(patchNode2);
377}
378
379void weldPatchPool()
380{

Callers 2

weldPatchPoolFunction · 0.85
weldSelectedPatchesFunction · 0.85

Calls 15

ExecutionFailureClass · 0.85
createdMergedPatchFunction · 0.85
Node_setSelectedFunction · 0.85
removeNodeFromParentFunction · 0.85
addChildNodeMethod · 0.80
assignToLayersMethod · 0.80
getPatchMethod · 0.80
getShaderMethod · 0.80
getSubdivisionsMethod · 0.80
scaleTextureNaturallyMethod · 0.80
_Function · 0.50

Tested by

no test coverage detected