コード例 #1
0
  int ConfigFile::processLink(boost::shared_ptr<const urdf::Link> link,Vehicle &vehicle,int nlink,int njoint,int nmat, std::vector<Material> &materials){
    vehicle.links[nlink].name=link->name;
    vehicle.links[nlink].geom.reset( new Geometry);
    if(link->visual)
      nmat= processVisual(link->visual,vehicle.links[nlink],nmat, materials);
    else{
      vehicle.links[nlink].geom->type=4;
      vehicle.links[nlink].material=-1;
      memset(vehicle.links[nlink].position,0,3*sizeof(double));
      memset(vehicle.links[nlink].rpy,0,3*sizeof(double));
      memset(vehicle.links[nlink].quat,0,4*sizeof(double));
      vehicle.links[nlink].quat[3]=1;
    }

    if(link->collision){
	vehicle.links[nlink].cs.reset( new Geometry);
	processGeometry(link->collision->geometry.get(),vehicle.links[nlink].cs.get());
    }
    else
	vehicle.links[nlink].cs.reset();

    int linkNumber=nlink;
    for(uint i=0;i<link->child_joints.size();i++){
       processJoint(link->child_joints[i],vehicle.joints[linkNumber],nlink,linkNumber+1);
       linkNumber=processLink(link->child_links[i],vehicle,linkNumber+1,linkNumber+1,nmat,materials);
    }
    return linkNumber;
  }
コード例 #2
0
void ScaenaAnimationFileWriter::processJoint(MeshSkeletonJoint* skeleton, vector<float>* bufferMetadata){

	// Guardo las transaformaciones de este joint en el vector de metadata para luego pasarlo a un buffer y serializar
	addTransformationsToMetadata(bufferMetadata, skeleton);

	// Recorro todos los hijos y proceso cada uno
	vector<MeshSkeletonJoint*>::iterator it = skeleton->getChilds()->begin();
	while(it != skeleton->getChilds()->end()){
		processJoint(*it, bufferMetadata);
		++it;
	}	
}
コード例 #3
0
void ScaenaAnimationWriter::processSkeleton(XmlTreeNode* parentNode, SkeletonDataTransfer* skeletonDataTransfer){
	// Creo un nuevo nodo para el mesh
	XmlTreeNode* skeletonNode = new XmlTreeNode("Skeleton", parentNode);
	parentNode->addChild(skeletonNode);
	skeletonNode->addAttribute(new XmlNodeAttribute("Name", skeletonDataTransfer->jointName));	
	
	// Recorro todos los hijos y proceso cada uno
	list<SkeletonDataTransfer*>::iterator it = skeletonDataTransfer->getChilds()->begin();
	while(it != skeletonDataTransfer->getChilds()->end()){
		processJoint(skeletonNode, *it);
		++it;
	}	
}
コード例 #4
0
void ScaenaAnimationFileWriter::processSkeleton(XmlTreeNode* parentNode, MeshSkeleton* skeleton){
	vector<float> bufferMetadata;
	// Recorro todos los joints hijos y proceso cada uno
	vector<MeshSkeletonJoint*>::iterator it = skeleton->getChilds()->begin();
	while(it != skeleton->getChilds()->end()){
		processJoint(*it, &bufferMetadata);
		++it;
	}
	// Creamos el buffer final a grabar a partir de la metadata
	float* buffer = createBufferFromMetadata(&bufferMetadata);

	// Mandamos a serializar en binario y agregar al nodo
	XmlUtils::parseBufferInBinaryToNode("Data", buffer, bufferMetadata.size(), parentNode);  
	delete buffer;
}
コード例 #5
0
void ScaenaAnimationWriter::processJoint(XmlTreeNode* parentNode, SkeletonDataTransfer* skeletonDataTransfer){
	// Creo un nuevo nodo para el mesh
	XmlTreeNode* jointNode = new XmlTreeNode("Joint", parentNode);
	parentNode->addChild(jointNode);
	jointNode->addAttribute(new XmlNodeAttribute("Name", skeletonDataTransfer->jointName));
	jointNode->addAttribute(new XmlNodeAttribute("Index", StringUtils::toString(skeletonDataTransfer->jointIndex - 2)));  // -2 es porque no se cuenta ni el dt root ni el skeleton root
	
	// Me guardo las transformaciones (globales) del joint a la hora de cuando fue bindeado con el mesh
	serializeTransformationsToNode(jointNode, skeletonDataTransfer);

	// Recorro todos los hijos y proceso cada uno
	list<SkeletonDataTransfer*>::iterator it = skeletonDataTransfer->getChilds()->begin();
	while(it != skeletonDataTransfer->getChilds()->end()){
		processJoint(jointNode, *it);
		++it;
	}	
}