本文整理汇总了C++中PatchMesh::getNumMaps方法的典型用法代码示例。如果您正苦于以下问题:C++ PatchMesh::getNumMaps方法的具体用法?C++ PatchMesh::getNumMaps怎么用?C++ PatchMesh::getNumMaps使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类PatchMesh
的用法示例。
在下文中一共展示了PatchMesh::getNumMaps方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: DoAttach
//.........这里部分代码省略.........
ct2 = ct - 1;
attPatch->patches[i].vec[j] = v[ct2];
}
// Re-order enteriors
if (attPatch->patches[i].type == PATCH_QUAD)
{
ct = 4;
for (j = 0; j < ct; j++)
{
v[j] = attPatch->patches[i].interior[j];
}
for (j = 0; j < ct; j++)
{
attPatch->patches[i].interior[j] = v[ct - j - 1];
}
}
// Re-order aux
if (attPatch->patches[i].type == PATCH_TRI)
{
ct = 9;
for (j = 0; j < ct; j++)
{
p[j] = attPatch->patches[i].aux[j];
}
for (j = 0; j < ct; j++)
{
attPatch->patches[i].aux[j] = p[ct - j - 1];
}
}
// Re-order TV faces if present
for (int chan = 0; chan < patch->getNumMaps(); ++chan)
{
if (attPatch->tvPatches[chan])
{
ct = 4;
for (j = 0; j < ct; j++)
{
v[j] = attPatch->tvPatches[chan][i].tv[j];
}
for (j = 0; j < ct; j++)
{
attPatch->tvPatches[chan][i].tv[j] = v[ct - j - 1];
}
}
}
}
}
int i;
for (i = 0; i < attPatch->numVerts; ++i)
attPatch->verts[i].p = attPatch->verts[i].p * attMat;
for (i = 0; i < attPatch->numVecs; ++i)
attPatch->vecs[i].p = attPatch->vecs[i].p * attMat;
attPatch->computeInteriors();
theHold.Begin();
// Combine the materials of the two nodes.
int mat2Offset = 0;
Mtl *m1 = nodes[0]->GetMtl();
Mtl *m2 = node->GetMtl();
bool condenseMe = FALSE;
if (m1 && m2 &&(m1 != m2))
示例2: ModifyObject
void PasteSkinWeights::ModifyObject(TimeValue t, ModContext &mc, ObjectState * os, INode *node)
{
//TODO: Add the code for actually modifying the object
Mesh *mesh = NULL;
MNMesh *mnmesh = NULL;
PatchMesh *pmesh = NULL;
TriObject *collapsedtobj = NULL;
if (os->obj->IsSubClassOf(triObjectClassID))
{
TriObject *tobj = (TriObject*)os->obj;
mesh = &tobj->GetMesh();
}
else if (os->obj->IsSubClassOf(polyObjectClassID))
{
PolyObject *pobj = (PolyObject*)os->obj;
mnmesh = &pobj->GetMesh();
}
else if (os->obj->IsSubClassOf(patchObjectClassID))
{
PatchObject *pobj = (PatchObject*)os->obj;
pmesh = &pobj->patch;
}
if (mnmesh)
{
int numMaps = mnmesh->numm;
mnmesh->SetMapNum(numMaps+1);
int numGFaces = mnmesh->numf;
int numGVerts = mnmesh->numv;
numMaps = boneList.Count()/3+1;
mnmesh->SetMapNum(numMaps);
for (int i = 0; i < boneList.Count(); i++)
{
int mapID = i/3;
int subID = i%3;
if (subID==0) //create our face data
{
mnmesh->InitMap(mapID);
mnmesh->M(mapID)->setNumVerts(numGVerts);
// mnmesh->setNumMapVerts(mapID,numGVerts);
}
// TVFace *tvFace = mnmesh->mapFaces(mapID);
MNMapFace *uvwFace = mnmesh->M(mapID)->f;
UVVert *tvVerts = mnmesh->M(mapID)->v;//mnmesh->mapVerts(mapID);
if (subID==0) //create our face data
{
//copy our original
//copy our geo faces to the texture faces
for (int j = 0; j < numGFaces; j++)
{
int deg = mnmesh->f[j].deg;
uvwFace[j].MakePoly(deg,mnmesh->f[j].vtx);
}
for (int j = 0; j < numGVerts; j++)
{
tvVerts[j] = Point3(0.0f,0.0f,0.0f);
}
}
for (int j = 0; j < boneList[i]->weights.Count(); j++)
{
int vertIndex = boneList[i]->weights[j].vertIndex;
float vertWeight = boneList[i]->weights[j].vertWeight;
tvVerts[vertIndex][subID] = vertWeight;
}
}
}
else if (mesh)
{
int numMaps = mesh->getNumMaps();
int numGFaces = mesh->numFaces;
int numGVerts = mesh->numVerts;
numMaps = boneList.Count()/3+1;
mesh->setNumMaps(numMaps, FALSE);
for (int i = 0; i < boneList.Count(); i++)
{
int mapID = i/3;
int subID = i%3;
if (subID==0) //create our face data
{
mesh->setMapSupport(mapID);
//.........这里部分代码省略.........
示例3: ModifyObject
void MapChannelAdd::ModifyObject(TimeValue t, ModContext &mc, ObjectState * os, INode *node)
{
//TODO: Add the code for actually modifying the object
Mesh *mesh = NULL;
MNMesh *mnmesh = NULL;
PatchMesh *pmesh = NULL;
TriObject *collapsedtobj = NULL;
if (os->obj->IsSubClassOf(triObjectClassID))
{
TriObject *tobj = (TriObject*)os->obj;
mesh = &tobj->GetMesh();
}
else if (os->obj->IsSubClassOf(polyObjectClassID))
{
PolyObject *pobj = (PolyObject*)os->obj;
mnmesh = &pobj->GetMesh();
}
else if (os->obj->IsSubClassOf(patchObjectClassID))
{
PatchObject *pobj = (PatchObject*)os->obj;
pmesh = &pobj->patch;
}
//TriObject *tobj = (TriObject*)os->obj;
//Mesh &mesh = tobj->GetMesh();
if (mnmesh)
{
int numMaps = mnmesh->numm;
mnmesh->SetMapNum(numMaps+1);
mnmesh->InitMap(numMaps);
}
else if (mesh)
{
int numMaps = mesh->getNumMaps();
mesh->setNumMaps(numMaps+1, TRUE);
}
else if (pmesh)
{
int numMaps = pmesh->getNumMaps();
pmesh->setNumMaps(numMaps+1, TRUE);
// pmesh->setNumMapPatches(numMaps,0);
// pmesh->setNumMapVerts(numMaps,0);
}
Interval iv;
iv = FOREVER;
os->obj->PointsWereChanged();
iv &= os->obj->ChannelValidity (t, VERT_COLOR_CHAN_NUM);
iv &= os->obj->ChannelValidity (t, TEXMAP_CHAN_NUM);
iv = iv & os->obj->ChannelValidity(t,GEOM_CHAN_NUM);
iv = iv & os->obj->ChannelValidity(t,TOPO_CHAN_NUM);
os->obj->UpdateValidity(GEOM_CHAN_NUM,iv);
os->obj->UpdateValidity (VERT_COLOR_CHAN_NUM, iv);
os->obj->UpdateValidity(TEXMAP_CHAN_NUM,iv);
}
示例4: ModifyObject
void MapChannelDelete::ModifyObject(TimeValue t, ModContext &mc, ObjectState * os, INode *node)
{
//TODO: Add the code for actually modifying the object
//get th map id
int mapID;
pblock->GetValue(pb_mapid,0,mapID,FOREVER);
Mesh *mesh = NULL;
MNMesh *mnmesh = NULL;
PatchMesh *pmesh = NULL;
TriObject *collapsedtobj = NULL;
if (os->obj->IsSubClassOf(triObjectClassID))
{
TriObject *tobj = (TriObject*)os->obj;
mesh = &tobj->GetMesh();
}
else if (os->obj->IsSubClassOf(polyObjectClassID))
{
PolyObject *pobj = (PolyObject*)os->obj;
mnmesh = &pobj->GetMesh();
}
else if (os->obj->IsSubClassOf(patchObjectClassID))
{
PatchObject *pobj = (PatchObject*)os->obj;
pmesh = &pobj->patch;
}
if (mnmesh)
{
int numMaps = mnmesh->numm;
if (mapID < numMaps)
{
mnmesh->M(mapID)->Clear();
mnmesh->ClearMap(mapID);
}
//if last channel reduce the number of channels
if ((numMaps-1) == mapID)
{
if (mapID >= 0)
mnmesh->SetMapNum(mapID);
}
}
else if (mesh)
{
int numMaps = mesh->getNumMaps();
if (mesh->mapSupport(mapID))
{
mesh->setNumMapVerts(mapID, 0);
mesh->setMapSupport(mapID, FALSE);
}
//if last channel reduce the number of channels
if ((numMaps-1) == mapID)
{
mesh->setNumMaps((numMaps-1), TRUE);
}
}
else if (pmesh)
{
int numMaps = pmesh->getNumMaps();
if (pmesh->getMapSupport(mapID))
{
// pmesh->setNumMapVerts(mapID, 0);
// pmesh->setNumMapPatches(mapID, 0);
pmesh->setMapSupport(mapID, FALSE);
}
//if last channel reduce the number of channels
if ((numMaps-1) == mapID)
{
if ((numMaps-1) >= 1)
pmesh->setNumMaps((numMaps-1), TRUE);
}
}
Interval iv;
iv = FOREVER;
os->obj->PointsWereChanged();
//.........这里部分代码省略.........
示例5: ModifyObject
void MapChannelPaste::ModifyObject(TimeValue t, ModContext &mc, ObjectState * os, INode *node)
{
//TODO: Add the code for actually modifying the object
//get th map id
int mapID;
pblock->GetValue(pb_mapid,0,mapID,FOREVER);
mapID = buffer.pasteToChannel;
BOOL useMap;
pblock->GetValue(pb_usemap,0,useMap,FOREVER);
//get the mesh
Mesh *mesh = NULL;
MNMesh *mnmesh = NULL;
PatchMesh *pmesh = NULL;
TriObject *collapsedtobj = NULL;
if (os->obj->IsSubClassOf(triObjectClassID))
{
TriObject *tobj = (TriObject*)os->obj;
mesh = &tobj->GetMesh();
}
else if (os->obj->IsSubClassOf(polyObjectClassID))
{
PolyObject *pobj = (PolyObject*)os->obj;
mnmesh = &pobj->GetMesh();
}
#ifndef NO_PATCHES
else if (os->obj->IsSubClassOf(patchObjectClassID))
{
PatchObject *pobj = (PatchObject*)os->obj;
pmesh = &pobj->patch;
}
#endif // NO_PATCHES
// TriObject *tobj = (TriObject*)os->obj;
// Mesh &mesh = tobj->GetMesh();
if (pmesh)
{
if ( (buffer.numRealFaces == pmesh->numPatches) && (buffer.patchDeg.Count() == pmesh->numPatches) &&
((buffer.pasteToChannelType == PATCHMAPCHANNEL) || (buffer.pasteToChannelType == CHANNEL_MAP)))
{
BOOL gvalid = TRUE;
for (int i = 0; i < pmesh->numPatches; i++)
{
int sDeg, tDeg;
sDeg = buffer.patchDeg[i];
tDeg = 3;
if (pmesh->patches[i].type == PATCH_QUAD)
tDeg = 4;
if (tDeg != sDeg)
gvalid = FALSE;
}
if (gvalid)
{
if ((buffer.pasteToChannelType == PATCHMAPCHANNEL) || (buffer.pasteToChannelType == CHANNEL_MAP))
{
int numMaps = pmesh->getNumMaps();
BOOL clear = FALSE;
if (!pmesh->getMapSupport(mapID))
{
pmesh->setMapSupport(mapID, TRUE);
clear = TRUE;
}
//if last channel reduce the number of channels
if (buffer.pasteToSubID == -50)
pmesh->setNumMapVerts(mapID, buffer.verts.Count());
else pmesh->setNumMapVerts(mapID, buffer.w.Count());
PatchTVert *uvw = pmesh->mapVerts(mapID);
TVPatch *uvwFace = pmesh->tvPatches[mapID];//mesh->mapFaces(mapID);
int ct = buffer.verts.Count();
if (buffer.pasteToSubID != -50)
ct = buffer.w.Count();
for (int i = 0; i < ct; i++)
{
if (buffer.pasteToSubID == -50)
uvw[i] = buffer.verts[i];
else
{
if (clear)
uvw[i].p = Point3(0.0f,0.0f,0.0f);
uvw[i].p[buffer.pasteToSubID] = buffer.w[i];
}
}
for (int i = 0; i < buffer.numFaces; i++)
{
uvwFace[i] = buffer.uvwPatchFaces[i];
//.........这里部分代码省略.........