void Z3DGeometryFilter::setPickingManager(Z3DPickingManager *pm) { if (m_pickingManager != pm) { deregisterPickingObjects(m_pickingManager); m_pickingManager = pm; registerPickingObjects(m_pickingManager); } }
void Z3DPunctaFilter::prepareData() { if (!m_dataIsInvalid) return; deregisterPickingObjects(getPickingManager()); // convert puncta to format that glsl can use m_specularAndShininess.clear(); m_pointAndRadius.clear(); //m_sourceColorMapper.clear(); int xMin = std::numeric_limits<int>::max(); int xMax = std::numeric_limits<int>::min(); int yMin = std::numeric_limits<int>::max(); int yMax = std::numeric_limits<int>::min(); int zMin = std::numeric_limits<int>::max(); int zMax = std::numeric_limits<int>::min(); for (size_t i=0; i<m_punctaList.size(); i++) { if (m_useSameSizeForAllPuncta.get()) m_pointAndRadius.push_back(glm::vec4(m_punctaList[i]->x(), m_punctaList[i]->y(), m_punctaList[i]->z(), 2.f)); else m_pointAndRadius.push_back(glm::vec4(m_punctaList[i]->x(), m_punctaList[i]->y(), m_punctaList[i]->z(), m_punctaList[i]->radius())); if (m_punctaList[i]->x() > xMax) xMax = static_cast<int>(std::ceil(m_punctaList[i]->x())); if (m_punctaList[i]->x() < xMin) xMin = static_cast<int>(std::floor(m_punctaList[i]->x())); if (m_punctaList[i]->y() > yMax) yMax = static_cast<int>(std::ceil(m_punctaList[i]->y())); if (m_punctaList[i]->y() < yMin) yMin = static_cast<int>(std::floor(m_punctaList[i]->y())); if (m_punctaList[i]->z() > zMax) zMax = static_cast<int>(std::ceil(m_punctaList[i]->z())); if (m_punctaList[i]->z() < zMin) zMin = static_cast<int>(std::floor(m_punctaList[i]->z())); m_specularAndShininess.push_back(glm::vec4(m_punctaList[i]->maxIntensity()/255.f, m_punctaList[i]->maxIntensity()/255.f, m_punctaList[i]->maxIntensity()/255.f, m_punctaList[i]->maxIntensity()/2.f)); } //for (size_t i=0; i<m_origPunctaList.size(); ++i) //m_sourceColorMapper.insert(std::pair<QString, size_t>(m_origPunctaList[i]->source(), 0)); m_xCut.setRange(xMin, xMax); m_xCut.set(glm::ivec2(xMin, xMax)); m_yCut.setRange(yMin, yMax); m_yCut.set(glm::ivec2(yMin, yMax)); m_zCut.setRange(zMin, zMax); m_zCut.set(glm::ivec2(zMin, zMax)); // std::map<QString,size_t>::iterator it; // size_t index = 0; // size_t numOfPrevColor = m_colorsForDifferentSource.size(); // for (it = m_sourceColorMapper.begin(); it != m_sourceColorMapper.end(); it++) { // m_sourceColorMapper[it->first] = index++; // if (index > numOfPrevColor) { // QString guiname = QString("Source %1 Color").arg(index); // m_colorsForDifferentSource.push_back(new ZVec4Parameter(guiname, glm::vec4( // ZRandomInstance.randReal<float>(), // ZRandomInstance.randReal<float>(), // ZRandomInstance.randReal<float>(), // 1.f))); // m_colorsForDifferentSource[index-1]->setStyle("COLOR"); // connect(m_colorsForDifferentSource[index-1], SIGNAL(valueChanged()), this, SLOT(prepareColor())); // } // } // if (m_widgetsGroup) { // for (size_t i=0; i<m_colorsForDifferentSourceWidgetsGroup.size(); i++) { // delete m_colorsForDifferentSourceWidgetsGroup[i]; // } // m_colorsForDifferentSourceWidgetsGroup.clear(); // } // if (numOfPrevColor < index) { // for (size_t i=numOfPrevColor; i<m_colorsForDifferentSource.size(); i++) { // addParameter(m_colorsForDifferentSource[i]); // } // } else if (numOfPrevColor > index) { // for (size_t i=index; i<m_colorsForDifferentSource.size(); i++) { // removeParameter(m_colorsForDifferentSource[i]); // delete m_colorsForDifferentSource[i]; // } // m_colorsForDifferentSource.resize(index); // } bool needUpdateWidget = false; QList<QString> allSources; for (size_t i=0; i<m_origPunctaList.size(); ++i) { int idx = allSources.indexOf(m_origPunctaList[i]->source()); if (idx == -1) { allSources.push_back(m_origPunctaList[i]->source()); idx = allSources.size() - 1; } QString guiname = QString("Source %1 Color").arg(idx + 1); if (m_sourceColorMapper.find(m_origPunctaList[i]->source()) == m_sourceColorMapper.end()) { m_sourceColorMapper[m_origPunctaList[i]->source()] = new ZVec4Parameter(guiname, glm::vec4(ZRandomInstance.randReal<float>(), ZRandomInstance.randReal<float>(), ZRandomInstance.randReal<float>(), 1.f)); m_sourceColorMapper[m_origPunctaList[i]->source()]->setStyle("COLOR"); connect(m_sourceColorMapper[m_origPunctaList[i]->source()], SIGNAL(valueChanged()), this, SLOT(prepareColor())); addParameter(m_sourceColorMapper[m_origPunctaList[i]->source()]); needUpdateWidget = true; } else { m_sourceColorMapper[m_origPunctaList[i]->source()]->setName(guiname); } } // remove colors for not exist puncta source std::map<QString, ZVec4Parameter*>::iterator it = m_sourceColorMapper.begin(); while (it != m_sourceColorMapper.end()) { if (!allSources.contains(it->first)) { std::map<QString, ZVec4Parameter*>::iterator itCopy = it; ++it; removeParameter(itCopy->second); delete itCopy->second; m_sourceColorMapper.erase(itCopy); needUpdateWidget = true; } else ++it; } if (needUpdateWidget) updateWidgetsGroup(); m_sphereRenderer->setData(&m_pointAndRadius, &m_specularAndShininess); prepareColor(); adjustWidgets(); //if (numOfPrevColor != index) // number of puncta source changed //updateWidgetsGroup(); m_dataIsInvalid = false; }