khanat-opennel-code/code/nel/tools/3d/plugin_max/nel_patch_edit_adv/NP_PatchSelRestore.cpp
2010-05-06 02:08:41 +02:00

87 lines
2.5 KiB
C++

#include "stdafx.h"
#include "editpat.h"
// ------------------------------------------------------------------------------------------------------------------------------------------------------
#define DBGWELD_DUMPx
#define DBGWELD_ACTIONx
#define DBG_NAMEDSELSx
// ------------------------------------------------------------------------------------------------------------------------------------------------------
extern void Cancel2StepPatchModes(IObjParam *ip);
// ------------------------------------------------------------------------------------------------------------------------------------------------------
PatchSelRestore::PatchSelRestore(EditPatchData* pd, EditPatchMod* mod, PatchMesh *patch)
{
gotRedo = FALSE;
epd = pd;
this->mod = mod;
oldVSel = patch->vertSel;
oldESel = patch->edgeSel;
oldPSel = patch->patchSel;
t = mod->ip->GetTime();
}
void PatchSelRestore::Restore(int isUndo)
{
if (epd->tempData && epd->TempData(mod)->PatchCached(t))
{
RPatchMesh *rpatch;
PatchMesh *patch = epd->TempData(mod)->GetPatch(t, rpatch);
if (patch)
{
if (isUndo && !gotRedo)
{
newVSel = patch->vertSel;
newESel = patch->edgeSel;
newPSel = patch->patchSel;
gotRedo = TRUE;
}
}
patch->vertSel = oldVSel;
patch->edgeSel = oldESel;
patch->patchSel = oldPSel;
epd->TempData(mod)->Invalidate(PART_GEOM | PART_TOPO | PART_SELECT);
}
else
if (epd->tempData)
{
epd->TempData(mod)->Invalidate(PART_GEOM | PART_TOPO | PART_SELECT, FALSE);
}
if (mod->ip)
Cancel2StepPatchModes(mod->ip);
mod->InvalidateSurfaceUI();
// mod->PatchSelChanged();
// mod->UpdateSelectDisplay();
mod->NotifyDependents(FOREVER, PART_GEOM | PART_TOPO | PART_SELECT, REFMSG_CHANGE);
}
void PatchSelRestore::Redo()
{
if (epd->tempData && epd->TempData(mod)->PatchCached(t))
{
RPatchMesh *rpatch;
PatchMesh *patch = epd->TempData(mod)->GetPatch(t,rpatch);
if (patch)
{
patch->vertSel = newVSel;
patch->edgeSel = newESel;
patch->patchSel = newPSel;
}
epd->TempData(mod)->Invalidate(PART_GEOM | PART_TOPO | PART_SELECT);
}
else
if (epd->tempData)
{
epd->TempData(mod)->Invalidate(PART_GEOM | PART_TOPO | PART_SELECT, FALSE);
}
if (mod->ip)
Cancel2StepPatchModes(mod->ip);
mod->InvalidateSurfaceUI();
// mod->PatchSelChanged();
// mod->UpdateSelectDisplay();
mod->NotifyDependents(FOREVER, PART_GEOM | PART_TOPO | PART_SELECT, REFMSG_CHANGE);
}