Esempio n. 1
0
    bool slerp_face(T t, face_ptr fi, face_ptr fj){
      coordinate_type Ni = fi->normal();
      coordinate_type Nj = fj->normal();
      coordinate_type ceni = fi->calculate_center();
      coordinate_type cenj = fj->calculate_center();			
      face_vertex_ptr itb = fi->fbegin(), ite = fi->fend();
      face_vertex_ptr jtb = fj->fbegin(), jte = fj->fend();
      bool at_head = false;
      while (!at_head) {
	at_head = itb == ite;
				
	coordinate_type ci = itb->coordinate()-ceni;
	coordinate_type cip = itb->next()->coordinate()-ceni;				
	coordinate_type cj = rotate_to_plane(Ni,Nj,cenj,jtb->coordinate());
	//mOrient.push_back(ci + ceni);
	//mOrient.push_back(cj + ceni);
	coordinate_type cij = blend(t,ci,Ni,cj);				
	itb->coordinate() = cij + ceni;
				
	//				coordinate_type ci = rotate_to_xy(Ni,ceni,itb->coordinate()); 
	//				coordinate_type cip = rotate_to_xy(Ni,ceni,itb->next()->coordinate()); 				
	//				coordinate_type cj = rotate_to_xy(Nj,cenj,jtb->coordinate()); 
	//				coordinate_type cjp = rotate_to_xy(Nj,cenj,jtb->next()->coordinate()); 								
	//
	//				mOrient.push_back(ci + ceni);
	//				mOrient.push_back(cj + ceni);
	//				
	//				coordinate_type cij = blend(t,ci,Eigen::Matrix<T,4,1>(0,0,1),cj);				
	//				itb->coordinate() = rotate_from_xy(Ni,ceni,cij);
				
				
	itb = itb->next();
	jtb = jtb->prev();				
      }
      fi->update_normal();
      fi->update_center();
      cout << endl;
      cout << "---------" << endl;
      return true;
			
    }