📄 main.cpp
字号:
#include "KDTree.h"
#include "VertexExtractor.h"
#include "Interpolate.h"
#include <osgViewer/ViewerEventHandlers>
#include <osgGA/StateSetManipulator>
#include <osgUtil/SmoothingVisitor>
#include <osgUtil/Optimizer>
#include <osgUtil/DelaunayTriangulator>
void main()
{
VertexExtractor ex_vert_1;
VertexExtractor ex_vert_2;
osg::ref_ptr<osg::Node> first_node = osgDB::readNodeFile("WeiBianHuaNei-.osg") ;
osg::ref_ptr<osg::Node> second_node = osgDB::readNodeFile("BianHuaNei1-.osg") ;
first_node->accept(ex_vert_1);
second_node->accept(ex_vert_2);
std::cout<<ex_vert_1.extracted_verts->size()<<std::endl;
std::cout<<ex_vert_2.extracted_verts->size()<<std::endl;
std::cout<<ex_vert_1.extracted_normal->size()<<std::endl;
std::cout<<ex_vert_2.extracted_normal->size()<<std::endl;
KDTree t_1;
KDTree t_2;
kdt sroot_1;
kdt sroot_2;
kdt p;
sroot_1=t_1.CreateSubTree(ex_vert_1.extracted_verts,0,ex_vert_1.extracted_verts->size()-1,0);
sroot_2=t_2.CreateSubTree(ex_vert_2.extracted_verts,0,ex_vert_2.extracted_verts->size()-1,0);
osg::Vec3Array* temp_1;
osg::Vec3Array* temp_2;
temp_1=t_1.PreOrderTraverse(sroot_1);
temp_2=t_2.PreOrderTraverse(sroot_2);
std::cout<<temp_1->size()<<std::endl;
std::cout<<temp_2->size()<<std::endl;
osg::Vec3Array* vec=new osg::Vec3Array;
osg::Vec3Array* vec1=new osg::Vec3Array;
Interpolate inter;
Interpolate inter1;
inter.inter(ex_vert_1.extracted_verts,ex_vert_1.extracted_normal,temp_2,sroot_1);
inter1.inter(ex_vert_2.extracted_verts,ex_vert_2.extracted_normal,temp_1,sroot_2);
KDTree t_3;
KDTree t_4;
kdt sroot_3;
kdt sroot_4;
osg::Vec3Array* lastVerts_1=new osg::Vec3Array;
osg::Vec3Array* lastVerts_2=new osg::Vec3Array;
lastVerts_1->insert(lastVerts_1->end(),ex_vert_1.extracted_verts->begin(),ex_vert_1.extracted_verts->end());
lastVerts_2->insert(lastVerts_2->end(),ex_vert_2.extracted_verts->begin(),ex_vert_2.extracted_verts->end());
sroot_4=t_4.CreateSubTree(lastVerts_2,0,lastVerts_2->size()-1,0);
int k=0;
for(int i=0;i<lastVerts_1->size();i++)
if(t_4.SearchKDT(sroot_4,lastVerts_1->at(i)._v[0],lastVerts_1->at(i)._v[1],0,NULL,&p))
{
lastVerts_1->at(i)._v[2]=(*p).p._v[2];
k++;
}
else
std::cout<<lastVerts_1->at(i)._v[0]<<","<<lastVerts_1->at(i)._v[1]<<std::endl;
std::cout<<k<<std::endl;
//std::cout<<lastVerts_2->size()<<std::endl;
std::cout<<lastVerts_1->size()<<std::endl;
osg::ref_ptr<osg::Group> grp=new osg::Group;
osg::ref_ptr<osg::Geode> geo=new osg::Geode;
osg::ref_ptr<osg::Geometry> geom=new osg::Geometry;
geom->setVertexArray(lastVerts_1);
osg::Vec4Array* colors = new osg::Vec4Array;
colors->push_back(osg::Vec4(0.0f,1.0f,0.0f,1.0f));
geom->setColorArray(colors);
geom->setColorBinding(osg::Geometry::BIND_OVERALL);
geom->setNormalArray(ex_vert_1.extracted_normal);
geom->setNormalBinding(osg::Geometry::BIND_PER_VERTEX);
geom->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::TRIANGLES,0,lastVerts_1->size()));
osgUtil::SmoothingVisitor *smooth;
smooth->smooth(*(geom.get()));
geo->addDrawable(geom.get());
osg::ref_ptr<osg::Geode> geode=new osg::Geode;
osg::ref_ptr<osg::Geometry> gm=new osg::Geometry;
gm->setVertexArray(ex_vert_2.extracted_verts);
osg::Vec4Array* colors1 = new osg::Vec4Array;
colors1->push_back(osg::Vec4(1.0f,0.0f,0.0f,1.0f));
gm->setColorArray(colors1);
gm->setColorBinding(osg::Geometry::BIND_OVERALL);
gm->setNormalArray(ex_vert_2.extracted_normal);
gm->setNormalBinding(osg::Geometry::BIND_PER_VERTEX);
gm->addPrimitiveSet(new osg::DrawArrays(osg::PrimitiveSet::TRIANGLES,0,ex_vert_2.extracted_verts->size()));
osgUtil::SmoothingVisitor *smooth1;
smooth1->smooth(*(gm.get()));
geode->addDrawable(gm.get());
grp->addChild(geo.get());
grp->addChild(geode.get());
osgDB::writeNodeFile(*(geo.get()),"4.osg");
osgDB::writeNodeFile(*(geode.get()),"5.osg");
osgViewer::Viewer viewer;
osgUtil::Optimizer optimizer;
optimizer.optimize(grp.get());
viewer.addEventHandler( new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()) );
viewer.addEventHandler(new osgViewer::StatsHandler);
viewer.addEventHandler(new osgViewer::WindowSizeHandler);
viewer.setSceneData(grp.get());
viewer.realize();
viewer.run();
///*osgUtil::SmoothingVisitor *smooth;
//smooth->smooth(*(gm.get()));*/
/*osgViewer::Viewer viewer;
osgUtil::Optimizer optimizer;
optimizer.optimize(grp.get());
viewer.addEventHandler( new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()) );
viewer.addEventHandler(new osgViewer::StatsHandler);
viewer.addEventHandler(new osgViewer::WindowSizeHandler);
viewer.setSceneData(grp.get());
viewer.realize();
viewer.run();*/
// std::cin>>i;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -