//ModifyObject will do all the work in a full modifier //This includes casting objects to their correct form, doing modifications //changing their parameters, etc void ProjectionHolderUVW::ModifyObject(TimeValue t, ModContext &mc, ObjectState * os, INode *node) { ObjectWrapper object; object.Init(t,*os,false, ObjectWrapper::allEnable, ObjectWrapper::triObject); if( object.IsEmpty() ) return; // Check topology if( object.NumFaces() != mData.mFaces.Count() ) return; for( int i=0; i<object.NumFaces(); i++ ) { GenFace face = object.GetFace(i); if( face.numVerts != mData.mFaces[i].numVerts ) return; } if( mData.miMapChannel != VERTEX_CHANNEL_NUM ) { // Check Channel Support if( !object.GetChannelSupport(mData.miMapChannel) ) object.SetChannelSupport( mData.miMapChannel, true ); object.SetNumMapVerts( mData.miMapChannel, mData.mP3Data.Count() ); for( int i=0; i<mData.mP3Data.Count(); i++ ) object.SetMapVert( mData.miMapChannel, i, mData.mP3Data[i] ); for( int i=0; i<mData.mFaces.Count(); i++ ) { object.SetMapFace( mData.miMapChannel, i, mData.mFaces[i] ); // Material ID Support if( mData.mDoMaterialIDs ) object.SetMtlID(i, mData.mMatID[i] ); } os->obj->PointsWereChanged(); } else { object.SetNumVerts( mData.mP3Data.Count() ); for( int i=0; i<mData.mP3Data.Count(); i++ ) object.SetVert( i, mData.mP3Data[i] ); for( int i=0; i<mData.mFaces.Count(); i++ ) { object.SetFace( i, mData.mFaces[i] ); // Material ID Support if( mData.mDoMaterialIDs ) object.SetMtlID(i, mData.mMatID[i] ); } os->obj->PointsWereChanged(); if( object.Type() == ObjectWrapper::polyObject ) { MNMesh *poly = object.GetPolyMesh(); if( poly ) poly->FillInMesh(); } else if( object.Type() == ObjectWrapper::triObject ) { Mesh *mesh = object.GetTriMesh(); if( mesh ) mesh->InvalidateTopologyCache(); } } Interval iv; iv = FOREVER; iv &= mData.mSrcInterval; if( mData.miMapChannel > 0 ) iv &= os->obj->ChannelValidity (t, TEXMAP_CHAN_NUM); else if( mData.miMapChannel == VERTEX_CHANNEL_NUM ) { iv &= os->obj->ChannelValidity(t,GEOM_CHAN_NUM); iv &= os->obj->ChannelValidity(t,TOPO_CHAN_NUM); } else iv &= os->obj->ChannelValidity(t,VERT_COLOR_CHAN_NUM); if( mData.miMapChannel > 0 ) os->obj->UpdateValidity(TEXMAP_CHAN_NUM,iv); else if( mData.miMapChannel == VERTEX_CHANNEL_NUM ) { os->obj->UpdateValidity(GEOM_CHAN_NUM,iv); os->obj->UpdateValidity(TOPO_CHAN_NUM,iv); } else os->obj->UpdateValidity(VERT_COLOR_CHAN_NUM,iv); }