⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 处理网格数据点的KDTREE数据结构程序
💻 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 + -