Beispiel #1
0
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);
	}
Beispiel #2
0
void EditPatchMod::DoDeleteSelected() 
{
	switch (GetSubobjectLevel())
	{
	case EP_VERTEX:
		DoVertDelete();
		break;
	case EP_EDGE:
		DoEdgeDelete();
		break;
	case EP_PATCH:
		DoPatchDelete();
		break;
	}
}
Beispiel #3
0
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;
    }
}
Beispiel #4
0
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);
}
Beispiel #5
0
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();
}
Beispiel #6
0
DWORD EditPatchMod::GetSelLevel()
{
	return GetSubobjectLevel();
}