C ++ / CLI osg: создать элемент массива osg :: ref_ptr <osg :: Vec3Array> - PullRequest
0 голосов
/ 14 июля 2011

Теперь я делаю osg :: Vec3 type Строка:

public  osg::ref_ptr<osg::Vec3Array> _pointArray;

loadVec3();

CreateLine(_pointArray);

void loadVec3()
{
    //read cordinate from csv file par 1 line`

    while ((line = streamReader->ReadLine()) != nullptr)
    {
        //divide
        array<String^>^ values = line->Split(',');

        //cordinate value x,y,z
        double x = (values->Length > 0) ? double::Parse(values[0]) : 0.0;
        double y = (values->Length > 1) ? double::Parse(values[1]) : 0.0;
        double z = (values->Length > 2) ? double::Parse(values[2]) : 0.0;
        osg::Vec3 pos(x, y, z);

        _pointArray->push_back(pos);
        count++;
    }
}

void CreateLine(osg::ref_ptr<osg::Vec3Array>& v2)
{
    // Create an object to store geometry in.
    osg::ref_ptr<osg::Geometry> geom = new osg::Geometry;

    // Create an array of four vertices.
    osg::ref_ptr<osg::Vec3Array> v = v2;
    geom->setVertexArray( v.get() );

    osg::ref_ptr<osg::Geode> geode = new osg::Geode;

    geode->addDrawable( geom.get() );
}

На этот раз я должен нарисовать 2 линии из одного и того же файла.
Значение, записанное в файле, является невидимой центральной линией,
Y координата видимой линии - это то же расстояние (+/- 190,0) от центральной линии.

Я изменил код на следующий, но получаю ошибку:

ОШИБКА C2440

Как я могу решить эту ошибку?

public  osg::ref_ptr<osg::Vec3Array> _pointArrayL;
public  osg::ref_ptr<osg::Vec3Array> _pointArrayR;
public  std::list< osg::ref_ptr<osg::Vec3Array>> _pointArrayList;

void loadVec3()
{
    //read cordinate from csv file par 1 line

    while ((line = streamReader->ReadLine()) != nullptr)
    {
        //divide
        array<String^>^ values = line->Split(',');

        //cordinate value x,y,z
        double x1 = (values->Length > 0) ? double::Parse(values[0]) : 0.0;
        double y1 = (values->Length > 1) ? double::Parse(values[1] + 190.0) : 0.0;
        double z1 = (values->Length > 2) ? double::Parse(values[2]) : 0.0;
        osg::Vec3 posL(x1, y1, z1);

        double x2 = (values->Length > 0) ? double::Parse(values[0]) : 0.0;
        double y2 = (values->Length > 1) ? double::Parse(values[1]) -190.0 = : 0.0;
        double z2 = (values->Length > 2) ? double::Parse(values[2]) : 0.0;
        osg::Vec3 posR(x2, y2, z2);

        count++;
    }

    _pointList.push_back(
    _pointList.push_back(posR);
}

void CreateLine(std::list<osg::ref_ptr<osg::Vec3Array>> v2)
{
    // Create an object to store geometry in.
    osg::ref_ptr<osg::Geometry> geom = new osg::Geometry;

    // Create an array of four vertices.
    std::list<osg::ref_ptr<osg::Vec3Array>>::iterator it = v2.begin();
    while( it != v2.end() )  // stil end of list
    {
        osg::ref_ptr<osg::Vec3Array> v = *v2;<<<<<<<<<<<<<<<<<<<<<<<<<**ERROR**
        geom->setVertexArray( v.get() );
        osg::ref_ptr<osg::Geode> geode = new osg::Geode;

        geode->addDrawable( geom.get() );
        ++it;
    }
}

1 Ответ

0 голосов
/ 15 июля 2011

Мне не кажется, что * v2 будет действительным;v2 является объектом std :: list, поэтому брать его адрес не имеет смысла.Возможно, вы имели в виду:

osg::ref_ptr<osg::Vec3Array>* v = &v2;

Хотя, глядя на ваш код, я не уверен, какой смысл иметь v.

...