void EditPatchMod::SetSelDlgEnables() { if (!hSelectPanel) return; ICustButton *but = GetICustButton(GetDlgItem(hSelectPanel, IDC_NS_PASTE)); but->Disable(); switch (GetSubobjectLevel()) { case PO_VERTEX: if (GetPatchNamedSelClip(CLIP_P_VERT)) but->Enable(); break; case PO_EDGE: if (GetPatchNamedSelClip(CLIP_P_EDGE)) but->Enable(); break; case PO_PATCH: if (GetPatchNamedSelClip(CLIP_P_PATCH)) but->Enable(); break; case PO_TILE: break; } ReleaseICustButton(but); }
void EditPatchMod::DoDeleteSelected() { switch (GetSubobjectLevel()) { case EP_VERTEX: DoVertDelete(); break; case EP_EDGE: DoEdgeDelete(); break; case EP_PATCH: DoPatchDelete(); break; } }
void EditPatchMod::ButtonOp(patchButtonOp opcode) { switch (opcode) { case PopUnbind: if (hOpsPanel != NULL) PostMessage(hOpsPanel, WM_COMMAND, IDC_UNBIND, 0); break; case PopHide: if (hOpsPanel != NULL) PostMessage(hOpsPanel, WM_COMMAND, IDC_HIDE, 0); break; case PopUnhideAll: if (hOpsPanel != NULL) PostMessage(hOpsPanel, WM_COMMAND, IDC_UNHIDE, 0); break; case PopWeld: if (hOpsPanel != NULL && GetSubobjectLevel() == PO_VERTEX) PostMessage(hOpsPanel, WM_COMMAND, IDC_WELD, 0); break; case PopDelete: if (hOpsPanel != NULL && GetSubobjectLevel() >= PO_VERTEX) PostMessage(hOpsPanel, WM_COMMAND, IDC_PATCH_DELETE, 0); break; case PopSubdivide: if (hOpsPanel != NULL && GetSubobjectLevel() >= PO_EDGE && GetSubobjectLevel() != PO_TILE) PostMessage(hOpsPanel, WM_COMMAND, IDC_SUBDIVIDE, 0); break; case PopAddTri: if (hOpsPanel != NULL && GetSubobjectLevel() == PO_EDGE) PostMessage(hOpsPanel, WM_COMMAND, IDC_ADDTRI, 0); break; case PopAddQuad: if (hOpsPanel != NULL && GetSubobjectLevel() == PO_EDGE) PostMessage(hOpsPanel, WM_COMMAND, IDC_ADDQUAD, 0); break; case PopDetach: if (hOpsPanel != NULL && GetSubobjectLevel() == PO_PATCH) PostMessage(hOpsPanel, WM_COMMAND, IDC_DETACH, 0); break; } }
void EditPatchMod::UpdateSelectDisplay() { TSTR buf; int num, j; if (!hSelectPanel) return; ModContextList mcList; INodeTab nodes; if (!ip) return; ip->GetModContexts(mcList, nodes); switch (GetSubobjectLevel()) { case EP_OBJECT: buf.printf(GetString(IDS_TH_OBJECT_SEL)); break; case EP_VERTEX: { num = 0; PatchMesh *thePatch = NULL; for (int i = 0; i < mcList.Count(); i++) { EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; if (!patchData) continue; if (patchData->tempData && patchData->TempData(this)->PatchCached(ip->GetTime())) { RPatchMesh *rpatch; PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); if (!patch) continue; int thisNum = patch->vertSel.NumberSet(); if (thisNum) { num += thisNum; thePatch = patch; } } } if (num == 1) { for (j = 0; j < thePatch->vertSel.GetSize(); j++) if (thePatch->vertSel[j]) break; buf.printf(GetString(IDS_TH_NUMVERTSEL), j + 1); } else buf.printf(GetString(IDS_TH_NUMVERTSELP), num); } break; case EP_PATCH: { num = 0; PatchMesh *thePatch = NULL; for (int i = 0; i < mcList.Count(); i++) { EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; if (!patchData) continue; if (patchData->tempData && patchData->TempData(this)->PatchCached(ip->GetTime())) { RPatchMesh *rpatch; PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); if (!patch) continue; int thisNum = patch->patchSel.NumberSet(); if (thisNum) { num += thisNum; thePatch = patch; } } } if (num == 1) { for (j = 0; j < thePatch->patchSel.GetSize(); j++) if (thePatch->patchSel[j]) break; buf.printf(GetString(IDS_TH_NUMPATCHSEL), j + 1); } else buf.printf(GetString(IDS_TH_NUMPATCHSELP), num); } break; case EP_EDGE: { num = 0; PatchMesh *thePatch = NULL; for (int i = 0; i < mcList.Count(); i++) { EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; if (!patchData) continue; if (patchData->tempData && patchData->TempData(this)->PatchCached(ip->GetTime())) { RPatchMesh *rpatch; PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); if (!patch) continue; int thisNum = patch->edgeSel.NumberSet(); if (thisNum) { num += thisNum; thePatch = patch; } } } if (num == 1) { for (j = 0; j < thePatch->edgeSel.GetSize(); j++) if (thePatch->edgeSel[j]) break; buf.printf(GetString(IDS_TH_NUMEDGESEL), j + 1); } else buf.printf(GetString(IDS_TH_NUMEDGESELP), num); } break; case EP_TILE: { num = 0; RPatchMesh *thePatch = NULL; for (int i = 0; i < mcList.Count(); i++) { EditPatchData *patchData =(EditPatchData*)mcList[i]->localData; if (!patchData) continue; if (patchData->tempData && patchData->TempData(this)->PatchCached(ip->GetTime())) { RPatchMesh *rpatch; PatchMesh *patch = patchData->TempData(this)->GetPatch(ip->GetTime(), rpatch); if (!patch) continue; int thisNum = rpatch->tileSel.NumberSet(); if (thisNum) { num += thisNum; thePatch = rpatch; } } } if (num == 1) { for (j = 0; j < thePatch->tileSel.GetSize(); j++) if (thePatch->tileSel[j]) break; buf.printf("Tile %d Selected", j + 1); } else buf.printf("%d Tiles Selected", num); } break; } nodes.DisposeTemporary(); SetDlgItemText(hSelectPanel, IDC_NUMSEL_LABEL, buf); }
void EditPatchMod::RefreshSelType() { if (!hSelectPanel) return; if (hOpsPanel) { // Set up or remove the surface properties rollup if needed if (hSurfPanel) { rsSurf = IsRollupPanelOpen(hSurfPanel); ip->DeleteRollupPage(hSurfPanel); hSurfPanel = NULL; } if (hTilePanel) { rsTile = IsRollupPanelOpen(hTilePanel); ip->DeleteRollupPage(hTilePanel); hTilePanel = NULL; } if (hEdgePanel) { rsEdge = IsRollupPanelOpen(hEdgePanel); ip->DeleteRollupPage(hEdgePanel); hEdgePanel = NULL; } /* watje 3 - 18 - 99 if (selLevel == EP_OBJECT) { hSurfPanel = ip->AddRollupPage(hInstance, MAKEINTRESOURCE(IDD_EDPATCH_SURF_OBJ), PatchObjSurfDlgProc, GetString(IDS_TH_SURFACEPROPERTIES), (LPARAM) this, rsSurf ? 0 : APPENDROLL_CLOSED); } else */ if (selLevel == EP_PATCH) { hSurfPanel = ip->AddRollupPage(hInstance, MAKEINTRESOURCE(IDD_EDPATCH_SURF), PatchSurfDlgProc, GetString(IDS_TH_SURFACEPROPERTIES), (LPARAM) this, rsSurf ? 0 : APPENDROLL_CLOSED); } if (selLevel == EP_TILE) { hTilePanel = ip->AddRollupPage(hInstance, MAKEINTRESOURCE(IDD_EDPATCH_TILE), PatchTileDlgProc, "Tile Properties", (LPARAM) this, rsTile ? 0 : APPENDROLL_CLOSED); } if (selLevel == EP_EDGE) { hEdgePanel = ip->AddRollupPage(hInstance, MAKEINTRESOURCE(IDD_EDPATCH_EDGE), PatchEdgeDlgProc, "Edge Properties", (LPARAM) this, rsEdge ? 0 : APPENDROLL_CLOSED); } SetSurfDlgEnables(); SetTileDlgEnables(); SetEdgeDlgEnables(); } ICustToolbar *iToolbar = GetICustToolbar(GetDlgItem(hSelectPanel, IDC_SELTYPE)); ICustButton *but; for (int i = 1; i < 5; i++) { but = iToolbar->GetICustButton(butIDs[i]); but->SetCheck(GetSubobjectLevel() == i); ReleaseICustButton(but); } ReleaseICustToolbar(iToolbar); SetSelDlgEnables(); SetOpsDlgEnables(); UpdateSelectDisplay(); PatchSelChanged(); }
DWORD EditPatchMod::GetSelLevel() { return GetSubobjectLevel(); }