예제 #1
0
	Skeleton* AssimpAssetLoader::createSkeleton(const aiNode &node)
	{
		Skeleton *skel = NULL;

		mBones.clear();
		aggregateBones(node);
		if(mBones.size() !=  0)
		{
			aiNode *skeletonRootNode = findSkeletonRoot(node);
			skel = new Skeleton(AssimpHelpers::aiNodeToBone(skeletonRootNode));

			buildSkeletonFromSubTree(skel->getRoot(), skeletonRootNode);
			std::cout << "found " << mBones.size() << " bones" << std::endl; 
			std::cout << "Skeleton Root Node: " << skeletonRootNode->mName.C_Str()  << std::endl;

			skel->getRoot()->debugPrintTree();
		}

		return skel;
	}
예제 #2
0
파일: mainwindow_m.cpp 프로젝트: lvpei/v9
void MainWindow_M::importFile(const char* folder,int* file,double* color,int size,bool bkg)
{
	// if CSAEncodeImages object not exist, create it
	if(m_pSAEncodeImg == NULL)
	{
		qDebug()<<"loading the encoded file";

		QString fileName = folder;
		//fileName += "\\"+fileName.section('\\',-1) + ".sa";
		fileName += "\\"+fileName.section('\\',-1) + ".data";

		m_pSAEncodeImg = new CSAEncodeVectorImages();
		m_pSAEncodeImg->loadFromFile(fileName.toAscii());

		qDebug()<<"encoded file loaded";
	}

	// clear the graphics scene
	m_graphicsScene.clear();

	// draw the shadow
	QImage resultImage,tmp;
	resultImage = QImage(480,480,QImage::Format_ARGB32);
	resultImage.fill(qRgba(255,255,255,0));
	tmp = QImage(120,120,QImage::Format_ARGB32);

	int displaynum = min(m_iDisplayNearestNum,size);
	
	if(renderarea->m_pSkeleton)
	{
		Skeleton* pSkeleton = renderarea->m_pSkeleton;

		// Nearest neighbor in graphics view
		for(int i = 0; i < displaynum /*&& i < 20*/; i++)
		{
			tmp.fill(qRgba(255,255,255,0));
			int ix = (displaynum - i) * (colormap.size() - 1) / displaynum;

			// use the colormap to describe the probability
			QColor color2(colormap[ix][0] * 255,colormap[ix][1] * 255,colormap[ix][2] * 255);
			//QColor color2(colormap[colormap.size()-1-i*3][0] * 255,colormap[colormap.size()-1-i*3][1] * 255,colormap[colormap.size()-1-i*3][2] * 255);
			
			QPainter painter(&tmp);

			painter.setPen(color2);
			
			for(int j = 1; j < m_pSAEncodeImg->m_sJointName.size(); j++)
			{
				string child_name = m_pSAEncodeImg->m_sJointName[j];
				Bone* pBone = NULL;
				pBone = pSkeleton->findBoneByName(pSkeleton->getRoot(),child_name.c_str());
				string parent_name = pBone->parent_name;

				int k = 0;
				for(; k < m_pSAEncodeImg->m_sJointName.size(); k++)
				{
					if(parent_name == m_pSAEncodeImg->m_sJointName[k])
						break;
				}

				painter.drawLine(m_pSAEncodeImg->m_iJointPosition[file[i]][k*2]/4,m_pSAEncodeImg->m_iJointPosition[file[i]][k*2+1]/4,m_pSAEncodeImg->m_iJointPosition[file[i]][j*2]/4,m_pSAEncodeImg->m_iJointPosition[file[i]][j*2+1]/4);
			}
			painter.end();
			
			QPixmap pixmap;
			pixmap.convertFromImage(tmp);
			CSACustomGraphicsPixmapItem* graphicspixmapitem = new CSACustomGraphicsPixmapItem(&m_graphicsScene);
			graphicspixmapitem->setPixmap(pixmap);
			graphicspixmapitem->setPos(4 + i%2*124,4 + i/2*124);
			graphicspixmapitem->setImageIndex(file[i]);
		}
	}

	// background images
	//for(int i = 0; i < displaynum; i++)
	//{
	//	QColor color(250-i*100.0/(displaynum-1),250-i*100.0/(displaynum-1),250-i*100.0/(displaynum-1));
	//	for(int j = 0; j < m_pSAEncodeImg->m_sJointName.size(); j += 2)
	//	{
	//		int m = m_pSAEncodeImg->m_iJointPosition[file[displaynum-1-i]][j]; 
	//		int n = m_pSAEncodeImg->m_iJointPosition[file[displaynum-1-i]][j+1];

	//		resultImage.setPixel(m,n,color.rgb());
	//	}
	//}
	//*/
	if(bkg)
		renderarea->setCurrentCanvas(resultImage);
}