Esempio n. 1
0
void octreeSolid::constructTree(SurfaceObj *obj, float voxelSize)
{
	sufObj = obj;
	boxSize = voxelSize;

	Vec3f ld = sufObj->getBVH()->root()->LeftDown;
	Vec3f ru = sufObj->getBVH()->root()->RightUp;
	centerMesh = (ld + ru) / 2;
	Vec3f diag = ru - ld;

	float maxEdge = Util::max_(Util::max_(diag[0], diag[1]), diag[2]);
	int maxSizei = round(maxEdge / boxSize);
	int octreeSizei = 1;
	treeDepth = 0;
	while (octreeSizei < maxSizei)
	{
		treeDepth++;
		octreeSizei *= 2;
	}
	float octreeSizef = octreeSizei * boxSize;


	Vec3f newDiag(octreeSizef, octreeSizef, octreeSizef);

	m_root = new octreeSNode;
	m_root->leftDownf = centerMesh - newDiag / 2;
	m_root->rightUpf = centerMesh + newDiag / 2;
	m_root->nodeDepth = 0;

	constructTreeRecur(m_root, treeDepth);
}
//////////////////
// Autosplit line
void AudioKaraoke::AutoSplit() {
	// Get lengths
	int timelen = (diag->End.GetMS() - diag->Start.GetMS())/10;
	int letterlen = diag->Text.Length();
	int round = letterlen / 2;
	int curlen;
	int acumLen = 0;
	wxString newText;

	// Parse words
	wxStringTokenizer tkz(diag->Text,_T(" "),wxTOKEN_RET_DELIMS);
	while (tkz.HasMoreTokens()) {
		wxString token = tkz.GetNextToken();
		curlen = (token.Length() * timelen + round) / letterlen;
		acumLen += curlen;
		if (acumLen > timelen) {
			curlen -= acumLen - timelen;
			acumLen = timelen;
		}
		newText += wxString::Format(_T("{\\k%i}"),curlen) + token;
	}

	// Load
	must_rebuild = true;
	AssDialogue newDiag(diag->GetEntryData());
	newDiag.Text = newText;
	//newDiag.ParseASSTags();
	ParseDialogue(&newDiag);
}
Diagonal<T> Diagonal<T>::operator* (const T& rhs)
{
  if (MatrixBase<T>::size()==0)
    throw std::length_error("Can not perform operations on an empty Diagonal.");
  Diagonal newDiag(MatrixBase<T>::m_size);
  for(unsigned int i=0; i < MatrixBase<T>::size(); i++)
    newDiag[i] = m_matrix[i] * rhs;
  return newDiag;
}
Diagonal<T> Diagonal<T>::operator* (const Diagonal<T>& rhs)
{
  if(MatrixBase<T>::size() != rhs.MatrixBase<T>::size())
    throw std::length_error("Both Diagonals must be of the same size");
  Diagonal newDiag(MatrixBase<T>::m_size);
  for(unsigned int i=0; i < MatrixBase<T>::m_size; i++)
    newDiag[i] = m_matrix[i] * rhs.m_matrix[i];
  return newDiag;
}