void ccContourExtractorDlg::zoomOn(const ccBBox& box) { if (!m_glWindow) return; float pixSize = std::max(box.getDiagVec().x / std::max(20,m_glWindow->width()-20), box.getDiagVec().y / std::max(20,m_glWindow->height()-20)); m_glWindow->setPixelSize(pixSize); m_glWindow->setCameraPos(CCVector3d::fromArray(box.getCenter().u)); }
//Helper void MakeSquare(ccBBox& box, int pivotType, int defaultDim = -1) { assert(defaultDim<3); assert(pivotType>=0 && pivotType<3); CCVector3 W = box.getDiagVec(); if (W.x != W.y || W.x != W.z) { if (defaultDim < 0) { //we take the largest one! defaultDim = 0; if (W.u[1] > W.u[defaultDim]) defaultDim = 1; if (W.u[2] > W.u[defaultDim]) defaultDim = 2; } CCVector3 newW(W.u[defaultDim], W.u[defaultDim], W.u[defaultDim]); switch(pivotType) { case 0: //min corner { CCVector3 A = box.minCorner(); box = ccBBox(A, A + newW); } break; case 1: //center { CCVector3 C = box.getCenter(); box = ccBBox(C - newW / 2.0, C + newW / 2.0); } break; case 2: //max corner { CCVector3 B = box.maxCorner(); box = ccBBox(B-newW,B); } break; } } }