Reorganised the Group::removeChild and Geode::removeDrawable methods so

that removeChild(Node*), removeChild(uint) and equivilant Geode methods are
now inline methods, not designed to be overriden, and seperated out the
multiple remove method to be called removeChildren(uint, uint) which is
now the only virtual method.  There removeChildren is now the method to
override in subclasses.

This reorganisation requires some call code to be rename removeChild usage
to removeChildren.
This commit is contained in:
Robert Osfield
2006-05-02 09:45:31 +00:00
parent 34cdf22794
commit 43f0efd6d2
27 changed files with 160 additions and 175 deletions

View File

@@ -77,10 +77,10 @@ bool Geode::addDrawable( Drawable *drawable )
bool Geode::removeDrawable( Drawable *drawable )
{
return removeDrawable(getDrawableIndex(drawable));
return removeDrawables(getDrawableIndex(drawable),1);
}
bool Geode::removeDrawable(unsigned int pos,unsigned int numDrawablesToRemove)
bool Geode::removeDrawables(unsigned int pos,unsigned int numDrawablesToRemove)
{
if (pos<_drawables.size() && numDrawablesToRemove>0)
{

View File

@@ -144,12 +144,7 @@ bool Group::insertChild( unsigned int index, Node *child )
else return false;
}
bool Group::removeChild( Node *child )
{
return removeChild(getChildIndex(child));
}
bool Group::removeChild(unsigned int pos,unsigned int numChildrenToRemove)
bool Group::removeChildren(unsigned int pos,unsigned int numChildrenToRemove)
{
if (pos<_children.size() && numChildrenToRemove>0)
{

View File

@@ -113,16 +113,6 @@ bool LOD::addChild( Node *child )
return false;
}
void LOD::childRemoved(unsigned int /*pos*/, unsigned int /*numChildrenToRemove*/)
{
//std::cout<<"LOD::childRemoved("<<pos<<","<<numChildrenToRemove<<")"<<std::endl;
}
void LOD::childInserted(unsigned int /*pos*/)
{
//std::cout<<"LOD::childInserted("<<pos<<")"<<std::endl;
}
bool LOD::addChild(Node *child, float min, float max)
{
@@ -136,15 +126,11 @@ bool LOD::addChild(Node *child, float min, float max)
return false;
}
bool LOD::removeChild( Node *child )
bool LOD::removeChildren( unsigned int pos,unsigned int numChildrenToRemove)
{
// find the child's position.
unsigned int pos=getChildIndex(child);
if (pos==_children.size()) return false;
_rangeList.erase(_rangeList.begin()+pos);
return Group::removeChild(child);
if (pos<_rangeList.size()) _rangeList.erase(_rangeList.begin()+pos, osg::minimum(_rangeList.begin()+(pos+numChildrenToRemove), _rangeList.end()) );
return Group::removeChildren(pos,numChildrenToRemove);
}
void LOD::setRange(unsigned int childNo, float min,float max)

View File

@@ -208,27 +208,6 @@ void PagedLOD::traverse(NodeVisitor& nv)
}
void PagedLOD::childRemoved(unsigned int pos, unsigned int numChildrenToRemove)
{
LOD::childRemoved(pos, numChildrenToRemove);
}
void PagedLOD::childInserted(unsigned int pos)
{
LOD::childInserted(pos);
}
void PagedLOD::rangeRemoved(unsigned int pos, unsigned int numChildrenToRemove)
{
LOD::rangeRemoved(pos, numChildrenToRemove);
}
void PagedLOD::rangeInserted(unsigned int pos)
{
LOD::rangeInserted(pos);
expandPerRangeDataTo(pos);
}
void PagedLOD::expandPerRangeDataTo(unsigned int pos)
{
if (pos>=_perRangeDataList.size()) _perRangeDataList.resize(pos+1);
@@ -267,16 +246,12 @@ bool PagedLOD::addChild(Node *child, float min, float max,const std::string& fil
return false;
}
bool PagedLOD::removeChild( Node *child )
bool PagedLOD::removeChildren( unsigned int pos,unsigned int numChildrenToRemove)
{
// find the child's position.
unsigned int pos=getChildIndex(child);
if (pos==_children.size()) return false;
if (pos<_rangeList.size()) _rangeList.erase(_rangeList.begin()+pos);
if (pos<_perRangeDataList.size()) _perRangeDataList.erase(_perRangeDataList.begin()+pos);
return Group::removeChild(child);
if (pos<_rangeList.size()) _rangeList.erase(_rangeList.begin()+pos, osg::minimum(_rangeList.begin()+(pos+numChildrenToRemove), _rangeList.end()) );
if (pos<_perRangeDataList.size()) _perRangeDataList.erase(_perRangeDataList.begin()+pos, osg::minimum(_perRangeDataList.begin()+ (pos+numChildrenToRemove), _perRangeDataList.end()) );
return Group::removeChildren(pos,numChildrenToRemove);
}
bool PagedLOD::removeExpiredChildren(double expiryTime,NodeList& removedChildren)

View File

@@ -92,15 +92,11 @@ bool ProxyNode::addChild(Node *child, const std::string& filename)
return false;
}
bool ProxyNode::removeChild( Node *child )
bool ProxyNode::removeChildren(unsigned int pos,unsigned int numChildrenToRemove)
{
// find the child's position.
unsigned int pos=getChildIndex(child);
if (pos==_children.size()) return false;
if (pos<_filenameList.size()) _filenameList.erase(_filenameList.begin()+pos);
return Group::removeChild(child);
if (pos<_filenameList.size()) _filenameList.erase(_filenameList.begin()+pos, osg::minimum(_filenameList.begin()+(pos+numChildrenToRemove), _filenameList.end()) );
return Group::removeChildren(pos,numChildrenToRemove);
}
BoundingSphere ProxyNode::computeBound() const

View File

@@ -99,25 +99,11 @@ bool Switch::insertChild( unsigned int index, Node *child, bool value )
return false;
}
bool Switch::removeChild( Node *child )
bool Switch::removeChildren(unsigned int pos,unsigned int numChildrenToRemove)
{
return removeChild( getChildIndex(child) );
}
if (pos<_values.size()) _values.erase(_values.begin()+pos, osg::minimum(_values.begin()+(pos+numChildrenToRemove), _values.end()) );
bool Switch::removeChild(unsigned int pos,unsigned int numChildrenToRemove)
{
if (pos>=_values.size() || numChildrenToRemove==0) return false;
unsigned int endOfRemoveRange = pos+numChildrenToRemove;
if (endOfRemoveRange>_values.size())
{
notify(DEBUG_INFO)<<"Warning: Switch::removeChild(i,numChildrenToRemove) has been passed an excessive number"<<std::endl;
notify(DEBUG_INFO)<<" of chilren to remove, trimming just to end of value list."<<std::endl;
endOfRemoveRange=_values.size();
}
_values.erase(_values.begin()+pos,_values.begin()+endOfRemoveRange);
return Group::removeChild(pos, numChildrenToRemove);
return Group::removeChildren(pos,numChildrenToRemove);
}
void Switch::setValue(unsigned int pos,bool value)