Exemplo n.º 1
0
BOOL UnwrapMod::WtIsEnabled(int id)
{
	BOOL iret = TRUE;


	if (fnGetTVSubMode() == TVOBJECTMODE)
	{
		switch (id)
		{
			case ID_TV_VERTMODE :
			case ID_TV_EDGEMODE :
			case ID_TV_FACEMODE :
			case ID_EDIT :
			case ID_RESET :
			case ID_PAN:
			case ID_ZOOMTOOL:
			case ID_ZOOMREGION:
			case ID_UPDATEMAP:
			case ID_UVW:
			case ID_SHOWMAP:
			case ID_PROPERTIES:
			case ID_TEXTURE_COMBO:
			case ID_ZOOMEXTENT:
			case ID_SNAP:
				iret = TRUE;
				break;
			default:
				iret = FALSE;
				break;
		}
		return iret;
	}
	switch (id)
	{
	case ID_PELT_EDITSEAMS:
	case ID_PELT_POINTTOPOINTSEAMS:
		if  (ip && (ip->GetSubObjectLevel() == 0) )
			iret = FALSE;
		else iret = TRUE;
		break;
	case ID_UNFOLD_EDGE:
	case ID_POINT_TO_POINT_SEL:
		if  (ip && (ip->GetSubObjectLevel() == 2) )
			iret = TRUE;
		else iret = FALSE;
		break;

	case ID_STRAIGHTEN:
	case ID_ZOOMTOGIZMO:
	case ID_QMAP:
	case ID_FLATTEN_BYMATID:
	case ID_FLATTEN_BYSMOOTHINGGROUP:
	case ID_FLATTENBUTTONS:
	case ID_GROUPSETDENSITY_EDIT:
	case ID_GROUPSETDENSITY_SPINNER:
	case ID_GROUP:
	case ID_UNGROUP:
	case ID_GROUPSELECT:

		{
			if  (ip && (ip->GetSubObjectLevel() == 3) )
				iret = TRUE;
			else iret = FALSE;
			break;
		}
	case ID_TOOL_SPACE_VERTICAL:
	case ID_TOOL_SPACE_HORIZONTAL:
		{
			if  (ip && (ip->GetSubObjectLevel() == 3) )
				iret = FALSE;
			else iret = TRUE;
			break;
		}

	case ID_DISPLAYHIDDENEDGES:
	case ID_SHOWHIDDENEDGES:
		{
			if (fnIsMesh())
				iret = TRUE;
			else iret = FALSE;
			break;
		}
	case ID_SAVE:
	case ID_LOAD:
	case ID_RESET:
		{
			if (fnGetMapMode() == PELTMAP)
				iret = FALSE;
			else iret = TRUE;
			break;
		}
		/*
		case ID_PELT_MAP:
		if (fnGetTVSubMode() != TVFACEMODE)
		iret = FALSE;
		break;
		*/
	case ID_EDGERINGSELECTION:
	case ID_EDGELOOPSELECTION:
		if  (ip && (ip->GetSubObjectLevel() == 2) )
			iret = TRUE;
		else iret = FALSE;

		break;

	case ID_MAPPING_ALIGNX:
	case ID_MAPPING_ALIGNY:
	case ID_MAPPING_ALIGNZ:
	case ID_MAPPING_NORMALALIGN:
	case ID_MAPPING_FIT:
	case ID_MAPPING_CENTER:
	case ID_MAPPING_ALIGNTOVIEW:
	case ID_MAPPING_RESET:
		if (fnGetMapMode() == NOMAP)
			iret = FALSE;
		break;
	case ID_PELTDIALOG:
		if (peltData.GetPeltMapMode())
			iret = TRUE;
		else iret = FALSE;
		break;
		//		case ID_PELT_POINTTOPOINTSEAMS:	
	case ID_PW_SELTOSEAM:	
	case ID_PW_SELTOSEAM2:	
	case ID_PW_SEAMTOSEL:	
	case ID_PW_SEAMTOSEL2:		
	case ID_TOOL_ALIGN_ELEMENT:

		if (fnGetTVSubMode() == TVEDGEMODE)
			return TRUE;
		else
			iret = FALSE;
		break;
	case ID_PELT_EXPANDSELTOSEAM:	
		if (fnGetTVSubMode() == TVFACEMODE)
			return TRUE;
		else iret = FALSE;
		break;

	case ID_PELTDIALOG_RESETRIG:	
	case ID_PELTDIALOG_SELECTRIG:	
	case ID_PELTDIALOG_SELECTPELT:	
	case ID_PELTDIALOG_SNAPRIG:	
	case ID_PELTDIALOG_STRAIGHTENSEAMS:
	case ID_PELTDIALOG_MIRRORRIG:
	case ID_PELTDIALOG_RUN:
	case ID_PELTDIALOG_RELAX1:
	case ID_PELTDIALOG_RELAX2:
		if (peltData.GetPeltMapMode() && peltData.peltDialog.hWnd)
			iret = TRUE;
		else iret = FALSE;
		break;


	case ID_SELECT_OVERLAP:
		{
			if (fnGetTVSubMode() == TVFACEMODE)
				iret = TRUE;
			else iret = FALSE;			
			break;
		}
		break;

	case ID_PASTE:
		iret = copyPasteBuffer.CanPaste();
		break;
	case ID_PASTEINSTANCE:
		iret = copyPasteBuffer.CanPasteInstance(this);
		break;
	case ID_UVEDGEMODE:
		{
			if (fnGetTVSubMode() == TVEDGEMODE)
				iret = TRUE;
			else iret = FALSE;			
			break;
		}
	case ID_OPENEDGEMODE:
		{
			if (fnGetTVSubMode() == TVEDGEMODE)
				iret = TRUE;
			else iret = FALSE;			
			break;
		}
	case ID_UVEDGESELECT:
		{
			if (fnGetTVSubMode() == TVEDGEMODE)
				iret = TRUE;
			else iret = FALSE;			
			break;
		}
	case ID_OPENEDGESELECT:
		{
			if (fnGetTVSubMode() == TVEDGEMODE)
				iret = TRUE;
			else iret = FALSE;			
			break;
		}

	case ID_SNAPCENTER:
	case ID_SNAPLOWERLEFT:
	case ID_SNAPLOWERCENTER:
	case ID_SNAPLOWERRIGHT:
	case ID_SNAPUPPERLEFT:
	case ID_SNAPUPPERCENTER:
	case ID_SNAPUPPERRIGHT:
	case ID_SNAPRIGHTCENTER:
	case ID_SNAPLEFTCENTER:
	case ID_FREEFORMSNAP:
		{
			iret = TRUE;
			break;
		}
	case ID_SKETCH:
	case ID_SKETCHDIALOG:
		{
			if (fnGetTVSubMode() == TVVERTMODE) 
				iret = TRUE;
			else iret = FALSE;
			break;
		}
	case ID_SKETCHREVERSE:
		{
			if ((sketchSelMode == SKETCH_SELCURRENT) && (mode == ID_SKETCHMODE))
				iret = TRUE;
			else iret = FALSE;
			break;
		}
	case ID_POLYGONMODE:
	case ID_POLYGONSELECT:

		{
			if (fnGetTVSubMode() == TVFACEMODE)
				iret = TRUE;
			else iret = FALSE;			
			break;
		}
	case ID_TV_PAINTSELECTINC:
		{
			if (fnGetPaintMode() )
				iret = TRUE;
			else iret = FALSE;
			break;
		}
	case ID_TV_PAINTSELECTDEC:
		{
			if (fnGetPaintMode() && (fnGetPaintSize() > 1))
				iret = TRUE;
			else iret = FALSE;
			break;
		}
	case ID_FLATTENMAP:
	case ID_FLATTENMAPDIALOG:
		{
			if (fnGetPreventFlattening())
				iret = FALSE;
			else
			{
				if (fnGetTVSubMode() == TVFACEMODE) 
					iret = TRUE; 
				else iret = FALSE;
			}
			break;
		}


	case ID_NORMALMAP:
	case ID_NORMALMAPDIALOG:
	case ID_UNFOLDMAP:
	case ID_UNFOLDMAPDIALOG:
		if (fnGetTVSubMode() == TVFACEMODE) 
			iret = TRUE; 
		else iret = FALSE;
		break;

	case ID_WELD:
		if ( (fnGetTVSubMode() == TVFACEMODE) ||
			 (fnGetTVSubMode() == TVOBJECTMODE) )
			iret = FALSE; 
		else iret = TRUE; 
		break;

	case ID_SELECTBY_MATID:
	case ID_SELECTBY_SMGRP:
	case ID_SELECTINVERTEDFACES:
	case ID_PACK:
	case ID_PLANAR_MAP:
	case ID_CYLINDRICAL_MAP:
	case ID_SPHERICAL_MAP:
	case ID_BOX_MAP:
	case ID_SPLINE_MAP:
	case ID_UNFOLD_MAP:

		{
			if (fnGetTVSubMode() == TVFACEMODE)
				iret = TRUE;
			else iret = FALSE;			
			break;
		}



	}
	return iret;
}
Exemplo n.º 2
0
void  UnwrapMod::fnFlattenMapByMatID(float angleThreshold, float spacing, BOOL normalize, int layoutType, BOOL rotateClusters, BOOL fillHoles)
{

	int holdSubMode = fnGetTVSubMode();
	fnSetTVSubMode(TVVERTMODE);

//	vsel.SetAll();

	Tab<Point3*> normList;
	normList.SetCount(6);

	normList[0] = new Point3(1.0f,0.0f,0.0f);
	normList[1] = new Point3(-1.0f,0.0f,0.0f);
	normList[2] = new Point3(0.0f,1.0f,0.0f);
	normList[3] = new Point3(0.0f,-1.0f,0.0f);
	normList[4] = new Point3(0.0f,0.0f,1.0f);
	normList[5] = new Point3(0.0f,0.0f,-1.0f);



	int largestID = -1;
	for (int ldID = 0; ldID < mMeshTopoData.Count(); ldID++)
	{
		MeshTopoData *ld = mMeshTopoData[ldID];

		for (int i = 0; i < ld->GetNumberFaces(); i++)//TVMaps.f.Count(); i++)
		{
			int matID = ld->GetFaceMatID(i);
			if (matID > largestID)
				largestID = matID;
		}
	}
	BitArray usedMats;
	usedMats.SetSize(largestID+1);
	usedMats.ClearAll();
	for (int ldID = 0; ldID < mMeshTopoData.Count(); ldID++)
	{
		MeshTopoData *ld = mMeshTopoData[ldID];
		for (int i = 0; i < ld->GetNumberFaces(); i++)//TVMaps.f.Count(); i++)
		{
			int matID = ld->GetFaceMatID(i);
			usedMats.Set(matID,TRUE);
		}
	}


	Tab<int> matIDs;
	matIDs.SetCount(usedMats.NumberSet());
	int ct = 0;
	for (int i = 0; i < usedMats.GetSize(); i++)
	{
		if (usedMats[i])
		{
			matIDs[ct] = i;
			ct++;
		}

	}

	//loop through our mat ID
	Tab<ClusterClass*> matIDClusters;


	for (int ldID = 0; ldID < mMeshTopoData.Count(); ldID++)
	{
		MeshTopoData *ld = mMeshTopoData[ldID];
		for (int i = 0; i < matIDs.Count(); i++)
		{

				int matID = matIDs[i];
				FreeClusterList();
				for (int ldIDSel = 0; ldIDSel < mMeshTopoData.Count(); ldIDSel++)
				{
					mMeshTopoData[ldIDSel]->ClearFaceSelection();
				}
				ld->SelectByMatID(matID);
				if (ld->GetFaceSelection().NumberSet())
				{

					ClusterClass *mcluster = new ClusterClass();

					mcluster->ld = ld;
					for (int j = 0; j < ld->GetNumberFaces(); j++)//TVMaps.f.Count(); j++)
					{
						if (ld->GetFaceSelected(j))//(TVMaps.f[j]->MatID == matIDs[i])
						{
							mcluster->faces.Append(1,&j,100);
						}
					}

					matIDClusters.Append(1,&mcluster,5);

					fnFlattenMap(flattenAngleThreshold, &normList, flattenSpacing, FALSE, 2, flattenRotate, flattenCollapse);
				}
			
		}
	}


	FreeClusterList();

	clusterList.SetCount(matIDClusters.Count());
	for (int i = 0; i < matIDClusters.Count(); i++)
	{
		clusterList[i] = new ClusterClass();
		clusterList[i]->ld = matIDClusters[i]->ld;
		clusterList[i]->faces.SetCount(matIDClusters[i]->faces.Count());
		for (int j = 0; j < matIDClusters[i]->faces.Count(); j++)
			clusterList[i]->faces[j] = matIDClusters[i]->faces[j];

	}

	for (int ldID = 0; ldID < mMeshTopoData.Count(); ldID++)
		mMeshTopoData[ldID]->UpdateClusterVertices(clusterList);

	Pack(0, spacing, normalize, rotateClusters, fillHoles,FALSE,FALSE);


	FreeClusterList();

	TimeValue t = GetCOREInterface()->GetTime();
	if (normalize)
	{
		float per = 1.0f-(spacing*2.0f);
		float add = spacing;
		for (int ldID = 0; ldID < mMeshTopoData.Count(); ldID++)
		{
			MeshTopoData *ld = mMeshTopoData[ldID];
			for (int i = 0; i < ld->GetNumberTVVerts(); i++)//TVMaps.v.Count(); i++)
			{
				Point3 p = ld->GetTVVert(i);

				p *= per;
				p.x += add;
				p.y += add;

				ld->SetTVVert(t,i,p,this);

//				if (TVMaps.cont[i]) 
//					TVMaps.cont[i]->SetValue(0,&TVMaps.v[i].p,CTRL_ABSOLUTE);

			}
		}
	}

	for (int i = 0; i < matIDs.Count(); i++)
	{
		if (matIDClusters[i])
			delete matIDClusters[i];
	}
	for (int i = 0; i < 6; i++)
		delete normList[i];

	fnSetTVSubMode(holdSubMode);

}
Exemplo n.º 3
0
void	UnwrapMod::fnPaste(BOOL rotate)
	{
	//check for type

	TimeValue t = GetCOREInterface()->GetTime();
	theHold.Begin();
	HoldPointsAndFaces();

	for (int ldID = 0; ldID < mMeshTopoData.Count(); ldID++)
	{
		MeshTopoData *ld = mMeshTopoData[ldID];


//check faces if just one selected normal paste with rotates
//or if all faces where selected
//or if first paste

//hold the points and faces


		BitArray holdFaceSel(ld->GetFaceSelection());

		BitArray subFaceSel;
		if ( ip && (ip->GetSubObjectLevel() == 0) )
			{
//convert our current selection into faces			
			if (fnGetTVSubMode() == TVVERTMODE)
				ld->GetFaceSelFromVert(subFaceSel,FALSE);
			else if (fnGetTVSubMode() == TVEDGEMODE)
				{
				BitArray tempVSel;
				ld->GetVertSelFromEdge(tempVSel);
				BitArray vsel = ld->GetTVVertSelection();
				BitArray holdVSel(vsel);
				ld->SetTVVertSelection(tempVSel);//vsel = tempVSel;
				ld->GetFaceSelFromVert(subFaceSel,FALSE);
				ld->SetTVVertSelection(holdVSel);//vsel = holdVSel;

				}
			else if (fnGetTVSubMode() == TVFACEMODE)
				{
				subFaceSel = ld->GetFaceSelection();//.SetSize(fsel.GetSize());
				//subFaceSel = fsel;
				}
			}
		else
			{
			if (fnGetTVSubMode() == TVFACEMODE)
				{
				subFaceSel = ld->GetFaceSelection();//.SetSize(fsel.GetSize());
				//subFaceSel = fsel;
				}

			}

		if ( (copyPasteBuffer.copyType == 0) || (copyPasteBuffer.copyType == 1) || (copyPasteBuffer.iRotate==0))
			{
			int copyIndex = 0;
			Tab<int> vertexLookUpList;

			vertexLookUpList.SetCount(copyPasteBuffer.tVertData.Count());

			BitArray faceSel = ld->GetFaceSelection();

			for (int i =0; i < vertexLookUpList.Count(); i++)
				vertexLookUpList[i] = -1;
			if (copyPasteBuffer.copyType == 1)
				copyPasteBuffer.iRotate = 0;
			else 
				{
				if (copyPasteBuffer.lastSel.GetSize() == faceSel.GetSize())
					{
					if (copyPasteBuffer.lastSel == faceSel) 
						{

						if (rotate)
							{
							copyPasteBuffer.iRotate++;
							}
						else copyPasteBuffer.iRotate = 0;

						
						}
					}
				}
			if (copyPasteBuffer.copyType == 2) copyPasteBuffer.iRotate = 0;
			copyPasteBuffer.lastSel = faceSel;

//loop through selected faces
			for (int i =0; i < faceSel.GetSize(); i++)
				{
				if (faceSel[i])
					{
//make sure selected faces count = buffer face
					if (( i < ld->GetNumberFaces()/*TVMaps.f.Count()*/) && (copyIndex < copyPasteBuffer.faceData.Count()))
						{
						int degree = ld->GetFaceDegree(i);
						if (/*TVMaps.f[i]->count*/ degree == copyPasteBuffer.faceData[copyIndex]->count)
							{
//if so	set the face data indices as the same
							for (int j = 0; j < degree/*TVMaps.f[i]->count*/; j++)
								{
							//index into the texture vertlist
							
								int vid = (j + copyPasteBuffer.iRotate)%degree;//TVMaps.f[i]->count;
								int vertexIndex = copyPasteBuffer.faceData[copyIndex]->t[vid];

								if (vertexLookUpList[vertexIndex] == -1)
									{
									Point3 p = copyPasteBuffer.tVertData[vertexIndex];
									ld->AddTVVert(t, p, i, j, this,FALSE);//ld->AddPoint(p, i, j,FALSE);
									vertexLookUpList[vertexIndex] = ld->GetFaceTVVert(i,j);//TVMaps.f[i]->t[j];
									}
								else 
									 ld->SetFaceTVVert(i,j,vertexLookUpList[vertexIndex]);//TVMaps.f[i]->t[j] = vertexLookUpList[vertexIndex];

								if ((ld->GetFaceHasVectors(i)/*TVMaps.f[i]->vecs*/) && (copyPasteBuffer.faceData[copyIndex]->vecs) && (j < 4))
									{
									int hid = (j*2 + (copyPasteBuffer.iRotate*2))%(/*TVMaps.f[i]->count*/degree*2);
									int handleIndex = copyPasteBuffer.faceData[copyIndex]->vecs->handles[hid];
									if ((handleIndex >= 0) && (vertexLookUpList[handleIndex] == -1))
										{
										Point3 p = copyPasteBuffer.tVertData[handleIndex];
										ld->AddTVHandle(t,p, i, j*2,this,FALSE);
										vertexLookUpList[handleIndex] = ld->GetFaceTVHandle(i,j*2);// TVMaps.f[i]->vecs->handles[j*2];
										}
									else 
										ld->SetFaceTVHandle(i,j*2,vertexLookUpList[handleIndex]);//TVMaps.f[i]->vecs->handles[j*2] = vertexLookUpList[handleIndex];
	
									hid = (j*2 + (copyPasteBuffer.iRotate*2))%(degree/*TVMaps.f[i]->count*/*2)+1;
									handleIndex = copyPasteBuffer.faceData[copyIndex]->vecs->handles[hid];
									if ((handleIndex >= 0) && (vertexLookUpList[handleIndex] == -1))
										{
										Point3 p = copyPasteBuffer.tVertData[handleIndex];
										ld->AddTVHandle(t,p, i, j*2+1,this,FALSE);
										vertexLookUpList[handleIndex] = ld->GetFaceTVHandle(i,j*2+1);//TVMaps.f[i]->vecs->handles[j*2+1];
										}
									else 
										ld->SetFaceTVHandle(i,j*2+1,vertexLookUpList[handleIndex]);//TVMaps.f[i]->vecs->handles[j*2+1] = vertexLookUpList[handleIndex];
	
									int iid = (j + (copyPasteBuffer.iRotate))%degree;//(TVMaps.f[i]->count);
									int interiorIndex = copyPasteBuffer.faceData[copyIndex]->vecs->interiors[iid];
									if ((interiorIndex >= 0) && (vertexLookUpList[interiorIndex] == -1))
										{
										Point3 p = copyPasteBuffer.tVertData[interiorIndex];
										ld->AddTVInterior(t,p, i, j,this,FALSE);
										vertexLookUpList[interiorIndex] = ld->GetFaceTVInterior(i,j);//TVMaps.f[i]->vecs->handles[j];
										}
									else 
										ld->SetFaceTVInterior(i,j,vertexLookUpList[interiorIndex]);//TVMaps.f[i]->vecs->interiors[j] = vertexLookUpList[interiorIndex];
									}
								}
							copyIndex++;
							if (copyIndex >= copyPasteBuffer.faceData.Count()) copyIndex = 0;
							}
						}	
					}

				}

			}
		
		ld->SetTVEdgeInvalid();//RebuildEdges();

		if ( ip && (ip->GetSubObjectLevel() == 0) )
			{
			if (fnGetTVSubMode() == TVVERTMODE)
				{
				BitArray fsel = ld->GetFaceSelection();
				BitArray vsel = ld->GetTVVertSelection();
				BitArray holdFSel(fsel);
				fsel = subFaceSel;
				ld->GetVertSelFromFace(vsel);
				ld->SetTVVertSelection(vsel);
				ld->SetFaceSelection(holdFSel);//fsel = holdFSel;
				}
			else if (fnGetTVSubMode() == TVEDGEMODE)
				{
				BitArray fsel = ld->GetFaceSelection();
				BitArray esel = ld->GetTVEdgeSelection();
				BitArray holdFSel(fsel);
				fsel = subFaceSel;
				ld->GetVertSelFromFace(fsel);
				ld->SetFaceSelection(fsel);//
				ld->GetEdgeSelFromVert(esel,FALSE);
				ld->SetTVEdgeSelection(esel);
				ld->SetFaceSelection(holdFSel);//fsel = holdFSel;
				}
			else if (fnGetTVSubMode() == TVFACEMODE)
				{				
				ld->SetFaceSelection(subFaceSel);//fsel = subFaceSel;
				}

			}
		else
			{
//			md->faceSel = holdFaceSel;
			ld->SetFaceSelection(subFaceSel);
/*
			if (fnGetTVSubMode() == TVFACEMODE)
				{
				ld->SetFaceSelection(subFaceSel);//fsel = subFaceSel;
				}
*/
			}

		}
		CleanUpDeadVertices();
		theHold.Accept(GetString(IDS_PW_PASTE));

		NotifyDependents(FOREVER,PART_ALL,REFMSG_CHANGE);
		InvalidateView();
		GetCOREInterface()->RedrawViews(GetCOREInterface()->GetTime());		

	}
Exemplo n.º 4
0
BOOL UnwrapMod::WtIsChecked(int id)
{

	BOOL iret = FALSE;
	switch (id)
	{
		//These are our dialog command modes
	case ID_FREEFORMMODE:
		if (mode ==ID_FREEFORMMODE)
		{
			iret = TRUE; 
		}
		break;
	case ID_MOVE:
		if (mode ==  ID_MOVE)
		{
			iret = TRUE; 
		}
		break;
	case ID_ROTATE:
		if ( (mode ==  ID_ROTATE))
		{
			iret = TRUE; 
		}
		break;
	case ID_SCALE:
		if ((mode ==  ID_SCALE))
		{
			iret = TRUE; 
		}
		break;
	case ID_WELD:
		if ((mode ==  ID_WELD))
		{
			iret = TRUE; 
		}
		break;
	case ID_PAN:
		if ((mode ==  ID_PAN))
		{
			iret = TRUE; 
		}
		break;
	case ID_ZOOMTOOL:
		if ((mode ==  ID_ZOOMTOOL))
		{
			iret = TRUE; 
		}
		break;
	case ID_ZOOMREGION:
		if ((mode ==  ID_ZOOMREGION)) 
		{
			iret = TRUE; 
		}
		break;
	case ID_TOOL_PELTSTRAIGHTEN:	
		if (mode ==ID_TOOL_PELTSTRAIGHTEN)
		{
			iret = TRUE; 
		}
		break;

	case ID_SNAPGRID:
		{
			BOOL snap; 
			pblock->GetValue(unwrap_gridsnap,0,snap,FOREVER);
			iret = snap;
			break;
		}
	case ID_SNAPVERTEX:
		{
			BOOL snap; 
			pblock->GetValue(unwrap_vertexsnap,0,snap,FOREVER);
			iret = snap;
			break;
		}

	case ID_SNAPEDGE:
		{
			BOOL snap; 
			pblock->GetValue(unwrap_edgesnap,0,snap,FOREVER);
			iret = snap;
			break;
		}


	case ID_SHOWCOUNTER:
		iret = fnGetShowCounter();
		break;

	case ID_TWEAKUVW:
		iret = fnGetTweakMode();
		break;


	case ID_SHOWLOCALDISTORTION:
		{
			BOOL showLocalDistortion;
			TimeValue t = GetCOREInterface()->GetTime();
			pblock->GetValue(unwrap_localDistorion,t,showLocalDistortion,FOREVER);
			iret = showLocalDistortion;
		}
		break;

	case ID_PW_SHOWEDGEDISTORTION:
		iret = fnGetShowEdgeDistortion();
		break;

	case ID_PELT_ALWAYSSHOWSEAMS:
		iret = fnGetAlwayShowPeltSeams();
		break;

	case ID_PELT_MAP:
		if (fnGetMapMode()==PELTMAP)
			iret = TRUE;
		break;
	case ID_PLANAR_MAP:
		if (fnGetMapMode()==PLANARMAP)
			iret = TRUE;
		break;
	case ID_CYLINDRICAL_MAP:
		if (fnGetMapMode()==CYLINDRICALMAP)
			iret = TRUE;
		break;
	case ID_SPHERICAL_MAP:
		if (fnGetMapMode()==SPHERICALMAP)
			iret = TRUE;
		break;
	case ID_BOX_MAP:
		if (fnGetMapMode()==BOXMAP)
			iret = TRUE;
		break;
	case ID_SPLINE_MAP:
		if (fnGetMapMode()==SPLINEMAP)
			iret = TRUE;
		break;
	case ID_UNFOLD_MAP:
		if (fnGetMapMode()==UNFOLDMAP)
			iret = TRUE;
		break;
	case ID_LSCM_MAP:
	case ID_LSCM_INTERACTIVE:
		if (fnGetMapMode()==LSCMMAP)
			iret = TRUE;
		break;

	case ID_PELT_EDITSEAMS:
		if (fnGetPeltEditSeamsMode())
			iret = TRUE;
		break;
	case ID_PELT_POINTTOPOINTSEAMS:
		if (fnGetPeltPointToPointSeamsMode() && peltData.PointToPointSelSeams())
			iret = TRUE;
		break;
	case ID_POINT_TO_POINT_SEL:
		if (fnGetPeltPointToPointSeamsMode() && (peltData.PointToPointSelSeams()== FALSE))
			iret = TRUE;
		break;
	case ID_PELTDIALOG_STRAIGHTENSEAMS:
		if (fnGetPeltDialogStraightenSeamsMode())
			iret = TRUE;
		break;


	case ID_SHOWOPENEDGESINVIEWPORT:
		if (fnGetViewportOpenEdges())
			iret = TRUE;
		break;




	case ID_LOCK:
		iret = lockSelected;
		break;
	case ID_FILTERSELECTED:
		iret = filterSelectedFaces;
		break;

	case ID_SHOWMAP:
		iret = showMap;
		break;

	case ID_SNAP:
		if (mUIManager.GetFlyOut(ID_SNAP) == 1)
			iret = pixelSnap;
		else
			iret = gridSnap;
		break;
	case ID_LIMITSOFTSEL:
		iret = limitSoftSel;
		break;
	case ID_GEOMELEMMODE:
		iret = geomElemMode;
		break;
	case ID_PLANARMODE:
		{
			iret = fnGetGeomPlanarMode();
			break;
		}
	case ID_IGNOREBACKFACE:
		{
			iret = fnGetBackFaceCull();
			break;
		}
	case ID_ELEMENTMODE:
		{
			iret = fnGetTVElementMode();
			break;
		}
	case ID_SHOWVERTCONNECT:
		{
			iret = fnGetShowConnection();
			break;
		}
	case ID_TV_VERTMODE:
		{
			if (fnGetTVSubMode() == TVVERTMODE)
				iret = TRUE;
			else iret = FALSE;
			break;
		}
	case ID_TV_EDGEMODE:
		{
			if (fnGetTVSubMode() == TVEDGEMODE)
				iret = TRUE;
			else iret = FALSE;
			break;
		}
	case ID_TV_FACEMODE:
		{
			if (fnGetTVSubMode() == TVFACEMODE)
				iret = TRUE;
			else iret = FALSE;
			break;
		}
	case ID_UVEDGEMODE:
		{
			if (fnGetUVEdgeMode())
				iret = TRUE;
			else iret = FALSE;			
			break;
		}
	case ID_OPENEDGEMODE:
		{
			if (fnGetOpenEdgeMode())
				iret = TRUE;
			else iret = FALSE;			
			break;
		}
	case ID_DISPLAYHIDDENEDGES:
		{
			if (fnGetDisplayHiddenEdges())
				iret = TRUE;
			else iret = FALSE;			
			break;
		}
	case ID_RESETPIVOTONSEL:
		{
			if (fnGetResetPivotOnSel())
				iret = TRUE;
			else iret = FALSE;			
			break;
		}
	case ID_SKETCH:
		{
			if (mode == ID_SKETCHMODE)
				iret = TRUE;
			else iret = FALSE;			
			break;
		}
	case ID_SHOWHIDDENEDGES:
		{
			if (fnGetDisplayHiddenEdges())
				iret = TRUE;
			else iret = FALSE;			
			break;
		}
	case ID_POLYGONMODE:
		{
			if (fnGetPolyMode())
				iret = TRUE;
			else iret = FALSE;			
			break;
		}
	case ID_ALLOWSELECTIONINSIDEGIZMO:
		{
			if (fnGetAllowSelectionInsideGizmo())
				iret = TRUE;
			else iret = FALSE;			
			break;
		}
	case ID_SHOWSHARED:
		{
			if (fnGetShowShared())
				iret = TRUE;
			else iret = FALSE;			
			break;
		}
	case ID_ALWAYSEDIT:
		{
			if (fnGetAlwaysEdit())
				iret = TRUE;
			else iret = FALSE;			
			break;
		}
	case ID_SYNCSELMODE:
		{
			if (fnGetSyncSelectionMode())
				iret = TRUE;
			else iret = FALSE;			
			break;
		}
	case ID_SHOWOPENEDGES:
		{
			if (fnGetDisplayOpenEdges())
				iret = TRUE;
			else iret = FALSE;			
			break;
		}
	case ID_BRIGHTCENTERTILE:
		{
			if (fnGetBrightCenterTile())
				iret = TRUE;
			else iret = FALSE;			
			break;
		}
	case ID_BLENDTOBACK:
		{
			if (fnGetBlendToBack())
				iret = TRUE;
			else iret = FALSE;			
			break;
		}

	case ID_TV_PAINTSELECTMODE:
		{
			if (fnGetPaintMode())
				iret = TRUE;
			else iret = FALSE;			
			break;
		}


	case ID_GRIDSNAP:
		{
			if (fnGetGridSnap())
				iret = TRUE;
			else iret = FALSE;			
			break;
		}

	case ID_GRIDVISIBLE:
		{
			if (fnGetGridVisible())
				iret = TRUE;
			else iret = FALSE;			
			break;
		}
	case ID_PREVENTREFLATTENING:
		{
			if (fnGetPreventFlattening())
				iret = TRUE;
			else iret = FALSE;			
			break;
		}
	case ID_ABSOLUTETYPEIN:
		{
			iret = !absoluteTypeIn;
			break;
		}
	case ID_LOCKSELECTED:
		{
			iret = lockSelected;
			break;
		}

	case ID_FILTER_SELECTEDFACES:
		{

			iret = filterSelectedFaces;
			break;
		}
	case ID_SOFTSELECTION:
		{
			iret = fnGetEnableSoftSelection();
			break;
		}
	case ID_GEOM_ELEMENT:
		{
			iret = fnGetGeomElemMode();
			break;
		}
	case ID_QUICKMAP_DISPLAY:
		{
			iret = GetQMapPreview();
			break;
		}
	case ID_TOOL_AUTOPIN:
		{
			pblock->GetValue(unwrap_autopin,0,iret,FOREVER);
			break;
		}
	case ID_TOOL_FILTERPIN:
		{
			pblock->GetValue(unwrap_filterpin,0,iret,FOREVER);
			break;
		}
	case ID_PACK_RESCALE:
		{
			iret = mPackTempRescale;
			break;
		}
	case ID_PACK_ROTATE:
		{
			iret = mPackTempRotate;
			break;
		}
	case ID_PEEL_DETACH:
		{
			iret = mbPeelDetach;
			break;
		}
	}

	return iret;
}