解决方案 »
- 在多线程环境下用CFile操作文件失败
- 如何使非最大化的窗体只能在桌面可见区域内移动?
- 如果socket服务器端异常退出关闭,客户端如何检测到?
- 知道一个窗体的 HWND 如何将其隐藏?
- vc7.0和c#是同一个概念吗? 和vc6有什么区别?
- 如何屏蔽掉在关闭主窗口时弹出的对话框(提示保存改动)?
- 请问一个关于摄像头捕捉位图的问题
- 如何让轮廓提起的质量更好,并绘制矩形轮廓不会出现缺失现象。
- 其它进程怎么取到正在IE中显示的指定文本框或标签的内容?
- 急!急!急!设备描述表到是底个啥东东?
- 求助啊,WIN8触屏下,屏蔽OnVScroll事件的问题
- windows程序设计关于BITMAP的一些小疑问
void osgUserLine::createLine()
{
// Delete line object of geode.
int nChildern = getNumChildren();
for( int i = 0; i < nChildern; i ++ )
{
osg::ref_ptr<osg::Geode> geode = dynamic_cast<osg::Geode*>(getChild( i ));
if( geode.valid() )
{
removeChild( geode.get() );
//i --;
nChildern = getNumChildren();
}
} osg::ref_ptr<osg::Vec3Array> vec = new osg::Vec3Array(); int nC = getNumChildren();
for( int i = 0; i < nC; i ++ )
{
osg::ref_ptr<osgUserPoint> point = dynamic_cast<osgUserPoint*>( getChild( i ) );
if( point.valid() )
{
osg::Matrix pm = point->getMatrix();
vec->push_back( pm.getTrans() );
}
}
int nVec = vec->size();
if( nVec < 2 )
return; osg::ref_ptr<osg::Vec4Array> colors = new osg::Vec4Array();
colors->push_back( m_color ); // osg::Vec4 (1.0f, 1.0f, 1.0f, 1.0f) // Create a new line.
osg::ref_ptr<osg::Geode> geode = new osg::Geode(); // If m_nState == 1, create as bezier curve.
if( m_nState == 1 )
{
osg::ref_ptr<osg::Vec3Array> vecBezier = new osg::Vec3Array(); osg::ref_ptr<osg::Vec3Array> vecD = new osg::Vec3Array();
osgGMSMath::getBezieLineCtrlPointsFromPoints( vec.get(), vecD.get() );
nVec = vecD->size(); osg::ref_ptr<osg::Vec3Array> vecSeg = new osg::Vec3Array();
for( int i = 0; i < nVec - 3; i += 3 )
{
vecSeg->push_back( (*vecD)[i] );
vecSeg->push_back( (*vecD)[i+1] );
vecSeg->push_back( (*vecD)[i+2] );
vecSeg->push_back( (*vecD)[i+3] ); osgGMSMath::makeBezier4( vecSeg, 20 ); int nSeg = vecSeg->size();
for( int j = 0; j < nSeg - 1; j ++ )
{
vecBezier->push_back( (*vecSeg)[j] );
}
vecSeg->clear();
} vecBezier->push_back( (*vecD)[nVec - 1] );
vecD->clear();
vec->clear(); int nBezier = vecBezier->size();
osg::ref_ptr<osg::Geometry> geomy = new osg::Geometry();
geomy->setVertexArray( vecBezier.get() );
geode->addDrawable( geomy.get() ); geomy->setColorArray (colors.get()); geomy->setColorBinding (osg::Geometry::BIND_OVERALL);
geomy->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::LINE_STRIP, 0, nBezier));
}
else
{
osg::ref_ptr<osg::Geometry> geomy = new osg::Geometry();
geomy->setVertexArray( vec.get() );
geode->addDrawable( geomy.get() ); geomy->setColorArray (colors.get()); geomy->setColorBinding (osg::Geometry::BIND_OVERALL);
geomy->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::LINE_STRIP, 0, nVec));
} addChild( geode.get() );
}
不知道是什么原因,有时能通过,有时就异常,很想不明白。我并没有哪里使用const类型的数组啊!
能重现的BUG就是好BUG
osg::ref_ptr<osg::Vec3Array> vec = new osg::Vec3Array;
for( int i = 0; i < nD; i ++ )
{
osg::Vec3 v3(pD->m_arrArrayDoubleX[i], pD->m_arrArrayDoubleY[i], pD->m_arrArrayDoubleZ[i]);
vec->push_back( v3 );
}
如果注释掉就不会有这个问题,但什么也画不出来了。而且这种使用方式是非常正常的啊!