Exemple #1
0
BOOL CImage::SetupMaskEditMode()
{
CMD_PARMS parms;
LPOBJECT lpOldBase;
COLORINFO Color;
static COLORINFO SaveActive, SaveAlternate;

if ( !(lpOldBase = (LPOBJECT)AltObjList.lpHead) )
    { // turn on mask editing mode
    GetActiveColor(&SaveActive);
    GetAlternateColor(&SaveAlternate);
    Color.gray = 255;
    SetActiveColor(&Color, CS_GRAY, NO);
    Color.gray = 0;
    SetAlternateColor(&Color, CS_GRAY, NO);
    }
else
    { // turn off mask editing mode
    SetActiveColor(&SaveActive, SaveActive.ColorSpace, NO);
    SetAlternateColor(&SaveAlternate, SaveAlternate.ColorSpace, NO);
    }
ProcessCommand(lpCmdList, IDS_CMD_ALPHAEDIT, &parms);
return(TRUE);
}
// *****************************************************************
void	VertexPaint::fillSelectionColor()
{
	int		mci;

	// Put Data in Undo/Redo List.
	if(!theHold.Holding())
		theHold.Begin();
	
	ModContextList	modContexts;
	INodeTab		nodeTab;
	
	GetCOREInterface()->GetModContexts(modContexts, nodeTab);
	
	for (mci=0; mci<modContexts.Count(); mci++) 
	{
		ModContext *mc = modContexts[mci];
		if(mc && mc->localData)
			theHold.Put(new VertexPaintRestore((VertexPaintData*)mc->localData, this));
	}

	theHold.Accept(GetString(IDS_RESTORE_FILL));


	// Which Component to change??
	VertexPaintData::TComponent	whichComponent;
	switch(getEditionType())
	{
	case 0: whichComponent= VertexPaintData::Red; break;
	case 1: whichComponent= VertexPaintData::Green; break;
	case 2: whichComponent= VertexPaintData::Blue; break;
	}


	// Modify all meshes.
	for (mci=0; mci<modContexts.Count(); mci++) 
	{
		ModContext *mc = modContexts[mci];
		if(mc && mc->localData)
		{
			VertexPaintData* d = (VertexPaintData*)mc->localData;
			Mesh*		mesh = 	d->GetMesh();
			if (mesh && mesh->vertCol) 
			{
				// For all faces of the mesh
				for(int fi=0; fi<mesh->getNumFaces(); fi++)
				{
					Face* f = &mesh->faces[fi];

					for (int i=0; i<3; i++) 
					{
						// Skip painting because not selected??
						if(mesh->selLevel == MESH_VERTEX && !mesh->VertSel()[f->v[i]] )
							continue;
						if(mesh->selLevel == MESH_FACE && !mesh->FaceSel()[fi])
							continue;
						// Also skip if face is hidden.
						if(f->Hidden())
							continue;

						// Apply painting
						d->SetColor(f->v[i],  1, GetActiveColor(), whichComponent);
					}
				}
			}
		}
	}

	// refresh
	NotifyDependents(FOREVER, PART_VERTCOLOR, REFMSG_CHANGE);
	ip->RedrawViews(ip->GetTime());
}