Ejemplo n.º 1
0
void
BinarySeachTree::RenderBSPTree(BSPTreeNode* root, scene::ICameraSceneNodePtr camera)
{
 if(JudgeIntersection(camera, root)&&(root != NULL))
  {
	  if(root->treeheight == THeight+1) //9
		  {
			  std::cout<<"-----------------------render---------------------------"<<std::endl;
			  std::cout<<"treeheight:"<<root->treeheight<<std::endl;
			  std::cout<<"size:"<<(root->nodes.size())<<std::endl;
			  for(scene::SSceneNodeArray::iterator iter = root->nodes.begin(); iter != root->nodes.end(); ++iter)
			  {
				  (*iter)->setVisible(true);
			  }
			  std::cout<<"end"<<std::endl;
	      }
		  std::cout<<"--------------------------------------------------"<<std::endl;
		  std::cout<<"treeheight:"<<root->treeheight<<std::endl;
		  std::cout<<"Left"<<std::endl;
		  RenderBSPTree(root->lchild, camera);

		  std::cout<<"--------------------------------------------------"<<std::endl;
		  std::cout<<"treeheight:"<<root->treeheight<<std::endl;
		  std::cout<<"Right"<<std::endl;
		  RenderBSPTree(root->rchild, camera);
  }

 
 }
Ejemplo n.º 2
0
void Partition::FindPartitionFace(SFace* Fa, SFace* Fb)
{
	//比较两个面是否有相邻curve_edge, 如果有那么就判断两面是否是分割面 否则continue
	for(auto i = Fa->faceBounds_.begin(); i != Fa->faceBounds_.end(); i++)
	{
		for(auto ia = ((*i)->edgeLoop_).begin(); ia != ((*i)->edgeLoop_).end(); ia++)
		{
			size_t curveFaceAId = (*ia)->edgeCurveId_;
			for(auto j = Fb->faceBounds_.begin(); j != Fb->faceBounds_.end(); j++)
			{
				for(auto jb = ((*j)->edgeLoop_).begin(); jb != ((*j)->edgeLoop_).end(); jb++)
				{
					size_t curveFaceBId = (*jb)->edgeCurveId_;
					orientationFaceA oriA;
					oriA.advancedFaceOri = Fa->adFaceSameSense_;
					oriA.boundsOri = (*i)->boundsOri_;
					oriA.orientedEdgeOri = (*ia)->orientedEdgeOri_;
					oriA.edgeCurveOri = (*ia)->edgeCurvesameSense_;

					char* curveName = (*ia)->curveName_;
					EdgeCurveVertex curveA, curveB;
					curveA.cartesianStart = (*ia)->edgeStart_;
					curveA.cartesianEnd = (*ia)->edgeEnd_;
					curveA.cartesianStart = (*jb)->edgeStart_;
					curveA.cartesianEnd = (*jb)->edgeEnd_;
					CPoint3D pointA = ((CIRCLE*)(*ia))->position_.point;//圆心
					if(curveFaceBId == curveFaceAId)
					{
						//判断是否是分割面
						bool isPartitionFace = JudgeIntersection(Fa, Fb, curveName,
							oriA, curveA, curveB, pointA);
						if(isPartitionFace)
						{
							pair<size_t, SFace*> pa(Fa->entityID_, Fa);
							pair<size_t, SFace*> pb(Fb->entityID_, Fb);
							partitionFaceList_.insert(pa);
							partitionFaceList_.insert(pb);
						}
						else
							continue;
					}
				}
			}
		}
	}
}