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; }