osg.MixinVector是OpenSceneGraph的模板类,用于存储模板对象osg::Mixin。它提供了一些常见的向量操作函数,如添加、删除、查找和排序。
osg::MixinVector<T>
是一个模板类,T是osg::Mixin子类的类型。
osg::MixinVector<T>()
void push_back(T* mixin)
在向量尾部添加一个mixin。
void insert(T* mixin, int pos)
在向量的指定位置插入一个mixin。
bool remove(T* mixin)
从向量中删除一个mixin,如果成功删除则返回true。
void removeAll()
删除向量中的所有mixin对象。
int size()
返回向量中的mixin数目。
int getIndex(T* mixin) const
返回mixin在向量中的索引位置,如果向量中没有该mixin则返回-1。
T* at(int pos)
返回向量中指定位置的mixin对象。
T* operator[](int i)
返回向量中指定位置的mixin对象,等价于at(int pos)。
void sort()
按照Mixin的compareTo方法排序向量中的所有mixin对象。
#include <osg/MixinVector>
class MixinA : public osg::Mixin
{
public:
int compareTo(const osg::Mixin& other) const override
{
const MixinA* mixin = dynamic_cast<const MixinA*>(&other);
if (mixin)
{
return _value - mixin->_value;
}
return 0;
}
int getValue() const { return _value; }
void setValue(int value) { _value = value; }
protected:
int _value = 0;
};
int main()
{
// 创建MixinVector对象
osg::MixinVector<MixinA> mixins;
// 添加MixinA对象
MixinA* a1 = new MixinA;
a1->setValue(1);
mixins.push_back(a1);
MixinA* a2 = new MixinA;
a2->setValue(2);
mixins.push_back(a2);
// 按值排序
mixins.sort();
// 输出MixinA对象的值
for (int i = 0; i < mixins.size(); ++i)
{
MixinA* a = mixins[i];
std::cout << a->getValue() << std::endl;
}
// 删除MixinA对象
mixins.remove(a1);
mixins.remove(a2);
return 0;
}
输出:
1
2