本文整理汇总了C++中BitArray::Clear方法的典型用法代码示例。如果您正苦于以下问题:C++ BitArray::Clear方法的具体用法?C++ BitArray::Clear怎么用?C++ BitArray::Clear使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类BitArray
的用法示例。
在下文中一共展示了BitArray::Clear方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ShrinkSelection
void EditPolyData::ShrinkSelection (IMeshSelect *imod, int level) {
DbgAssert (mpMesh);
if( !mpMesh ) return;
BitArray newSel;
int mnSelLevel = meshSelLevel[level];
DbgAssert (mpMesh->GetFlag (MN_MESH_FILLED_IN));
if (!mpMesh->GetFlag (MN_MESH_FILLED_IN)) return;
SynchBitArrays();
switch (mnSelLevel) {
case MNM_SL_VERTEX:
// Find the edges between two selected vertices.
mpMesh->ClearEFlags (MN_USER);
mpMesh->PropegateComponentFlags (MNM_SL_EDGE, MN_USER, mnSelLevel, MN_SEL, true);
newSel = mVertSel;
// De-select all the vertices touching edges to unselected vertices:
for (int i=0; i<mpMesh->nume; i++) {
if (!mpMesh->e[i].GetFlag (MN_USER)) {
newSel.Clear (mpMesh->e[i].v1);
newSel.Clear (mpMesh->e[i].v2);
}
}
SetVertSel (newSel, imod, TimeValue(0));
break;
case MNM_SL_EDGE:
// Find all vertices used by only selected edges:
mpMesh->ClearVFlags (MN_USER);
mpMesh->PropegateComponentFlags (MNM_SL_VERTEX, MN_USER, mnSelLevel, MN_SEL, true);
newSel = mEdgeSel;
for (int i=0; i<mpMesh->nume; i++) {
// Deselect edges with at least one vertex touching a nonselected edge:
if (!mpMesh->v[mpMesh->e[i].v1].GetFlag (MN_USER) || !mpMesh->v[mpMesh->e[i].v2].GetFlag (MN_USER))
newSel.Clear (i);
}
SetEdgeSel (newSel, imod, TimeValue(0));
break;
case MNM_SL_FACE:
// Find all vertices used by only selected faces:
mpMesh->ClearVFlags (MN_USER);
mpMesh->PropegateComponentFlags (MNM_SL_VERTEX, MN_USER, mnSelLevel, MN_SEL, true);
newSel = mFaceSel;
for (int i=0; i<mpMesh->numf; i++) {
for (int j=0; j<mpMesh->f[i].deg; j++) {
if (!mpMesh->v[mpMesh->f[i].vtx[j]].GetFlag (MN_USER))
{
// Deselect faces with at least one vertex touching a nonselected face:
newSel.Clear (i);
break;
}
}
}
SetFaceSel (newSel, imod, TimeValue(0));
break;
}
}
示例2: GetDeformBBox
void TriObject::GetDeformBBox(TimeValue t, Box3& box, Matrix3 *tm, BOOL useSel )
{
if ( tm || useSel ) {
box.Init();
BitArray sel;
BitArray vhide;
float *vssel = NULL;
if ( useSel ) {
sel = mesh.VertexTempSel();
vssel = mesh.getVSelectionWeights ();
} else {
vhide = mesh.vertHide;
if (vhide.NumberSet ()) {
for (int i=0; i<mesh.getNumFaces(); i++) {
if (mesh.faces[i].Hidden ()) continue;
for (int j=0; j<3; j++) vhide.Clear (mesh.faces[i].v[j]);
}
}
}
for ( int i = 0; i < mesh.getNumVerts(); i++ ) {
if (!useSel && vhide[i]) continue;
if ( !useSel || sel[i] || (vssel&&vssel[i])) {
if ( tm ) {
box += *tm * mesh.getVert(i);
} else {
box += mesh.getVert(i);
}
}
}
} else {
box = mesh.getBoundingBox();
}
}
示例3: GetWorkingArea
void GetWorkingArea(BitArray & working_elements, BitArray & working_points,
const Mesh & mesh, const Array<ElementIndex> & bad_elements,
const int width)
{
working_elements.Clear();
working_points.Clear();
for(int i=0; i<bad_elements.Size(); i++)
{
working_elements.Set(bad_elements[i]);
const Element & el = mesh[bad_elements[i]];
for(int j=1; j<=el.GetNP(); j++)
working_points.Set(el.PNum(j));
}
for(int i=0; i<width; i++)
{
for(ElementIndex j=0; j<mesh.GetNE(); j++)
{
if(!working_elements.Test(j))
{
const Element & el = mesh[j];
bool set_active = false;
for(int k=1; !set_active && k<=el.GetNP(); k++)
set_active = working_points.Test(el.PNum(k));
if(set_active)
working_elements.Set(j);
}
}
for(ElementIndex j=0; j<mesh.GetNE(); j++)
{
if(working_elements.Test(j))
{
const Element & el = mesh[j];
for(int k=1; k<=el.GetNP(); k++)
working_points.Set(el.PNum(k));
}
}
}
}
示例4: pbBlurData
BlurMgr::BlurMgr() :
pbMaster(NULL), pbBlurData(NULL), pbSelData(NULL), mp_CCtl(NULL),
m_lastBMModifyID(0xFFFFFFFF), m_imageW(0), m_imageH(0), m_imageSz(0), m_compValid(false)
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
{
m_blurs[idBlurUnif] = new BlurUniform(this);
m_blurs[idBlurDir] = new BlurDirectional(this);
m_blurs[idBlurRadial] = new BlurRadial(this);
m_sels[idSelImage] = new SelImage(this);
m_sels[idSelIBack] = new SelIgnBack(this);
m_sels[idSelLum] = new SelLum(this);
m_sels[idSelMask] = new SelMaps(this);
m_sels[idSelObjIds] = new SelObjIds(this);
m_sels[idSelMatIds] = new SelMatIds(this);
// this added to allow extension of seltypes -- adding new param active ids breaks the original sequential enumeration
// i should have enumerated the param ids sparsely to allow for extensibility.
// if they are added sequentially, it changes the value of old param ids and will break loading of old versions
m_selActiveIds[idSelImage] = prmImageActive;
m_selActiveIds[idSelIBack] = prmIBackActive;
m_selActiveIds[idSelLum] = prmLumActive;
m_selActiveIds[idSelMask] = prmMaskActive;
m_selActiveIds[idSelObjIds] = prmObjIdsActive;
m_selActiveIds[idSelMatIds] = prmMatIdsActive;
// set default blur radial origin to coincide with current render settings
pbdBlurData.ParamOption(prmRadialXOrig, p_default, GetCOREInterface()->GetRendWidth()/2);
pbdBlurData.ParamOption(prmRadialYOrig, p_default, GetCOREInterface()->GetRendHeight()/2);
blurMgrCD.MakeAutoParamBlocks(this);
assert( pbMaster && pbBlurData && pbSelData);
// create a curve control and reference it
ICurveCtl *pICurveCtl = (ICurveCtl*)CreateInstance(REF_MAKER_CLASS_ID, CURVE_CONTROL_CLASS_ID);
assert (pICurveCtl);
ReplaceReference(idSelCurveCtrl, pICurveCtl);
pICurveCtl->RegisterResourceMaker(this);
pICurveCtl->SetCCFlags(CC_DRAWUTOOLBAR | CC_CONSTRAIN_Y | CC_SHOWRESET/*| CC_RCMENU_MOVE_XY | CC_RCMENU_MOVE_X | CC_RCMENU_MOVE_Y | CC_RCMENU_SCALE | CC_RCMENU_INSERT_CORNER | CC_RCMENU_INSERT_BEZIER | CC_RCMENU_DELETE*/);
pICurveCtl->SetXRange(0.0f,1.0f);
pICurveCtl->SetYRange(0.0f,1.0f);
BitArray ba;
ba.SetSize(32);
ba.Set(0);
ba.Clear(1);
pICurveCtl->SetDisplayMode(ba);
pICurveCtl->SetNumCurves(2);
pICurveCtl->SetScrollValues(2, -44);
pICurveCtl->SetZoomValues(133, 117);
}
示例5: ResolveTopoChanges
// Selection set, misc fixup utility function
// This depends on PatchMesh::RecordTopologyTags being called prior to the topo changes
void EditPatchMod::ResolveTopoChanges()
{
ModContextList mcList;
INodeTab nodes;
TimeValue t = ip->GetTime();
ip->GetModContexts(mcList, nodes);
ClearPatchDataFlag(mcList, EPD_BEENDONE);
for (int i = 0; i < mcList.Count(); i++)
{
EditPatchData *patchData =(EditPatchData*)mcList[i]->localData;
if (!patchData)
continue;
if (patchData->GetFlag(EPD_BEENDONE))
continue;
// If the mesh isn't yet cache, this will cause it to get cached.
RPatchMesh *rpatch;
PatchMesh *patch = patchData->TempData(this)->GetPatch(t, rpatch);
if (!patch)
continue;
// First, the vertex selections
int set;
for (set = 0; set < patchData->vselSet.Count(); ++set)
{
BitArray *oldVS = &patchData->vselSet[set];
BitArray newVS;
newVS.SetSize(patch->numVerts);
for (int vert = 0; vert < patch->numVerts; ++vert)
{
// Get the knot's previous location, then copy that selection into the new set
int tag = patch->verts[vert].aux1;
if (tag >= 0)
newVS.Set(vert, (*oldVS)[tag]);
else
newVS.Clear(vert);
}
if (theHold.Holding())
theHold.Put(new ChangeNamedSetRestore(&patchData->vselSet, set, oldVS));
patchData->vselSet[set] = newVS;
}
// Now the edge selections
for (set = 0; set < patchData->eselSet.Count(); ++set)
{
BitArray *oldES = &patchData->eselSet[set];
BitArray newES;
newES.SetSize(patch->numEdges);
for (int edge = 0; edge < patch->numEdges; ++edge)
{
// Get the knot's previous location, then copy that selection into the new set
int tag = patch->edges[edge].aux1;
if (tag >= 0)
newES.Set(edge, (*oldES)[tag]);
else
newES.Clear(edge);
}
if (theHold.Holding())
theHold.Put(new ChangeNamedSetRestore(&patchData->eselSet, set, oldES));
patchData->eselSet[set] = newES;
}
// Now the patch selections
for (set = 0; set < patchData->pselSet.Count(); ++set)
{
BitArray *oldPS = &patchData->pselSet[set];
BitArray newPS;
newPS.SetSize(patch->numPatches);
for (int p = 0; p < patch->numPatches; ++p)
{
// Get the knot's previous location, then copy that selection into the new set
int tag = patch->patches[p].aux1;
if (tag >= 0)
newPS.Set(p, (*oldPS)[tag]);
else
newPS.Clear(p);
}
if (theHold.Holding())
theHold.Put(new ChangeNamedSetRestore(&patchData->pselSet, set, oldPS));
patchData->pselSet[set] = newPS;
}
// watje 4-16-99
patch->HookFixTopology();
patchData->SetFlag(EPD_BEENDONE, TRUE);
}
nodes.DisposeTemporary();
ClearPatchDataFlag(mcList, EPD_BEENDONE);
}
示例6: ResetFace
void ResetFace (int faceID) { if ((faceID>=0)&&(faceID<mFacesAffected.GetSize())) mFacesAffected.Clear(faceID); }
示例7: GeometryCheck
IGeometryChecker::ReturnVal IsolatedVertexChecker::GeometryCheck(TimeValue t,INode *nodeToCheck, IGeometryChecker::OutputVal &val)
{
val.mIndex.ZeroCount();
if(IsSupported(nodeToCheck))
{
LARGE_INTEGER ups,startTime;
QueryPerformanceFrequency(&ups);
QueryPerformanceCounter(&startTime); //used to see if we need to pop up a dialog
bool compute = true;
bool checkTime = GetIGeometryCheckerManager()->GetAutoUpdate();//only check time for the dialog if auto update is active!
ObjectState os = nodeToCheck->EvalWorldState(t);
Object *obj = os.obj;
BitArray arrayOfVerts; //we fill this up with the verts, if not empty then we have isolated vets
if(os.obj->IsSubClassOf(triObjectClassID))
{
TriObject *tri = dynamic_cast<TriObject *>(os.obj);
if(tri)
{
Mesh &mesh = tri->GetMesh();
arrayOfVerts.SetSize(mesh.numVerts);
arrayOfVerts.SetAll ();
for (int i=0; i<mesh.numFaces; i++) {
for (int j=0; j<3; j++) arrayOfVerts.Clear(mesh.faces[i].v[j]);
if(checkTime==true)
{
DialogChecker::Check(checkTime,compute,mesh.numFaces,startTime,ups);
if(compute==false)
break;
}
}
}
else return IGeometryChecker::eFail;
}
else if(os.obj->IsSubClassOf(polyObjectClassID))
{
PolyObject *poly = dynamic_cast<PolyObject *>(os.obj);
if(poly)
{
MNMesh &mnMesh = poly->GetMesh();
arrayOfVerts.SetSize(mnMesh.numv);
arrayOfVerts.SetAll();
for(int i=0;i<mnMesh.numf;++i)
{
for(int j=0;j<mnMesh.f[i].deg;++j)
{
if(mnMesh.f[i].GetFlag(MN_DEAD)==0)
arrayOfVerts.Clear(mnMesh.f[i].vtx[j]);
}
if(checkTime==true)
{
DialogChecker::Check(checkTime,compute,mnMesh.numf,startTime,ups);
if(compute==false)
break;
}
}
}
else return IGeometryChecker::eFail;
}
if(arrayOfVerts.IsEmpty()==false) //we have an isolated vierts
{
int localsize= arrayOfVerts.GetSize();
for(int i=0;i<localsize;++i)
{
if(arrayOfVerts[i])
val.mIndex.Append(1,&i);
}
}
return TypeReturned();
}
return IGeometryChecker::eFail;
}
示例8: DetachFromGeoFaces
void MeshTopoData::DetachFromGeoFaces(BitArray faceSel, BitArray &vertSel, UnwrapMod *mod)
{
TimeValue t = GetCOREInterface()->GetTime();
//loop through the geo vertices and create our geo list of all verts in the
Tab<int> geoPoints;
BitArray usedGeoPoints;
usedGeoPoints.SetSize(TVMaps.geomPoints.Count());
usedGeoPoints.ClearAll();
BitArray isolatedPoints;
isolatedPoints.SetSize(TVMaps.v.Count());
isolatedPoints.SetAll();
for (int i = 0; i < TVMaps.f.Count(); i++)
{
if (!(TVMaps.f[i]->flags & FLAG_DEAD))
{
if (faceSel[i])
{
int degree = TVMaps.f[i]->count;
for (int j = 0; j < degree; j++)
{
int index = TVMaps.f[i]->v[j];
if (!usedGeoPoints[index])
{
usedGeoPoints.Set(index);
geoPoints.Append(1,&index,3000);
}
if (TVMaps.f[i]->vecs)
{
int index = TVMaps.f[i]->vecs->vhandles[j*2];
if (index != -1)
{
if (!usedGeoPoints[index])
{
usedGeoPoints.Set(index);
geoPoints.Append(1,&index,3000);
}
}
index = TVMaps.f[i]->vecs->vhandles[j*2+1];
if (index != -1)
{
if (!usedGeoPoints[index])
{
usedGeoPoints.Set(index);
geoPoints.Append(1,&index,3000);
}
}
index = TVMaps.f[i]->vecs->vinteriors[j];
if (index != -1)
{
if (!usedGeoPoints[index])
{
usedGeoPoints.Set(index);
geoPoints.Append(1,&index,3000);
}
}
}
}
}
else
{
int degree = TVMaps.f[i]->count;
for (int j = 0; j < degree; j++)
{
int index = TVMaps.f[i]->t[j];
isolatedPoints.Clear(index);
if (TVMaps.f[i]->vecs)
{
int index = TVMaps.f[i]->vecs->handles[j*2];
if (index != -1)
{
isolatedPoints.Clear(index);
}
index = TVMaps.f[i]->vecs->handles[j*2+1];
if (index != -1)
{
isolatedPoints.Clear(index);
}
index = TVMaps.f[i]->vecs->interiors[j];
if (index != -1)
{
isolatedPoints.Clear(index);
}
}
}
}
}
}
for (int i = 0; i < TVMaps.v.Count(); i++)
{
if (isolatedPoints[i])
SetTVVertDead(i,TRUE);
}
//.........这里部分代码省略.........