Пример #1
0
void Z3DGeometryFilter::setPickingManager(Z3DPickingManager *pm)
{
  if (m_pickingManager != pm) {
    deregisterPickingObjects(m_pickingManager);
    m_pickingManager = pm;
    registerPickingObjects(m_pickingManager);
  }
}
Пример #2
0
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;
}