TEST(VertexInfoTest, BadSizeCreation)
{
    set_tester_err_callback();
    EXPECT_THROW( VertexInfo(-10, 1, 1, 1), CoreTesterException );
    EXPECT_THROW( VertexInfo(-10, 1, 1, true, 1, 1), CoreTesterException );
    unset_tester_err_callback();
}
void Polyhedron::preprocessAdjacency()
{
	DEBUG_START;
	int i;
	DEBUG_PRINT("Cleaning facets");
	for (i = 0; i < numFacets; ++i)
	{
		if (facets[i].numVertices < 1)
			continue;
		facets[i].preprocess_free();
	}

	DEBUG_PRINT("Facets preprocessing");
	for (i = 0; i < numFacets; ++i)
	{
		if (facets[i].numVertices < 1)
			continue;
		facets[i].preprocess();
	}

	DEBUG_PRINT("VertexInfos preprocessing");
	if (vertexInfos != NULL)
	{
		delete[] vertexInfos;
	}
	vertexInfos = new VertexInfo[numVertices];
	for (i = 0; i < numVertices; ++i)
	{
		vertexInfos[i] = VertexInfo(i, vertices[i], get_ptr());
		vertexInfos[i].preprocess();
	}
	DEBUG_END;
}
TEST(VertexInfoTest, BadOffsetsCreation)
{
    set_tester_err_callback();
    EXPECT_THROW( VertexInfo(28, -1, 20, 16), CoreTesterException );
    EXPECT_THROW( VertexInfo(28, 27, 20, 16), CoreTesterException ); // no room for point
    EXPECT_THROW( VertexInfo(28, 20, 27, 16), CoreTesterException ); // no room for cluster indices
    EXPECT_THROW( VertexInfo(28, 20, 16, 27), CoreTesterException ); // no room for clusters number
    EXPECT_THROW( VertexInfo(28, 0, -1, true, 20, 16), CoreTesterException );
    EXPECT_THROW( VertexInfo(28, 0, 27, true, 20, 16), CoreTesterException ); // no room for vector
    EXPECT_THROW( VertexInfo(28, 0, 20, true, 27, 16), CoreTesterException ); // no room for cluster indices
    EXPECT_THROW( VertexInfo(28, 0, 20, true, 16, 27), CoreTesterException ); // no room for clusters number
    unset_tester_err_callback();
}
	std::pair<bool, VertexInfo>
	get_vertex(const size_type L_vertex_id) const {
		if(L_vertex_id < this->M_vertex_size)
			return std::make_pair(true, this->M_vertex[L_vertex_id]);
		return std::make_pair(false, VertexInfo());
	}//get_vertex(vertex_id)
Beispiel #5
0
void Z3DNetworkEvaluator::buildNetwork()
{
  std::set<Z3DProcessor*> prevProcessors(
        m_renderingOrder.begin(), m_renderingOrder.end());

  m_renderingOrder.clear();
  m_processorToVertexMapper.clear();
  m_processorGraph.clear();
  m_reverseSortedRenderProcessors.clear();

  // nothing more to do, if no network sink is present
  if (!m_canvasRenderer)
    return;

  std::set<Z3DProcessor*> processed;
  std::queue<Z3DProcessor*> processQueue;

  processQueue.push(m_canvasRenderer);
  Vertex v = boost::add_vertex(VertexInfo(m_canvasRenderer), m_processorGraph);
  m_processorToVertexMapper[m_canvasRenderer] = v;

  // build graph of all connected processors
  while (!processQueue.empty()) {
    Z3DProcessor *processor = processQueue.front();
    const std::vector<Z3DInputPortBase*> inports = processor->getInputPorts();
    for (size_t i = 0; i < inports.size(); ++i) {
      const std::vector<Z3DOutputPortBase*> connected = inports[i]->getConnected();
      for (size_t j = 0; j < connected.size(); ++j) {
        Z3DProcessor *outProcessor = connected[j]->getProcessor();
        if (m_processorToVertexMapper.find(outProcessor) ==
            m_processorToVertexMapper.end()) {
          processQueue.push(outProcessor);
          Vertex v = boost::add_vertex(VertexInfo(outProcessor), m_processorGraph);
          m_processorToVertexMapper[outProcessor] = v;
        }
        boost::add_edge(m_processorToVertexMapper[outProcessor],
                        m_processorToVertexMapper[processor],
                        EdgeInfo(connected[j], inports[i]),
                        m_processorGraph);
      }
    }

    processed.insert(processor);
    processQueue.pop();
  }

  // sort to get rendering order
  std::vector<Vertex> sorted;
  boost::topological_sort(m_processorGraph, std::back_inserter(sorted));
  for (std::vector<Vertex>::reverse_iterator rit = sorted.rbegin();
       rit != sorted.rend(); rit++) {
    m_renderingOrder.push_back(m_processorGraph[*rit].processor);
  }

#ifdef _DEBUG_
  LINFO() << "Rendering Order: ";
  for (size_t i=0; i<m_renderingOrder.size(); i++) {
    LINFO() << "  " << i << ": " << m_renderingOrder[i]->getClassName();
  }
  LINFO() << "";
#endif

  // compare processors in network before and after updating, deinitialize removed processors
  std::set<Z3DProcessor*> currProcessors(m_renderingOrder.begin(), m_renderingOrder.end());
  std::set<Z3DProcessor*> removedProcessors;
  std::set_difference(prevProcessors.begin(), prevProcessors.end(),
                      currProcessors.begin(), currProcessors.end(),
                      std::inserter(removedProcessors, removedProcessors.end()));

  if (!removedProcessors.empty()) {
#ifdef _DEBUG_
    LINFO() << "Deinitialized processors after updating: ";
#endif
    for (std::set<Z3DProcessor*>::iterator it=removedProcessors.begin();
         it != removedProcessors.end(); ++it) {
#ifdef _DEBUG_
      LINFO() << "  " << " : " << (*it)->getClassName();
#endif
      try {
        getGLFocus();
        (*it)->deinitialize();
        (*it)->m_initialized = false;
        CHECK_GL_ERROR;
      }
      catch (const Exception& e) {
        LERROR() << "Failed to deinitialize processor" << (*it)->getClassName() << e.what();
      }
    }
#ifdef _DEBUG_
    LINFO() << "";
#endif
  }

  // update reverse sorted renderprocessors
  for (std::vector<Z3DProcessor*>::reverse_iterator rit = m_renderingOrder.rbegin();
       rit != m_renderingOrder.rend(); rit++) {
    if (qobject_cast<Z3DRenderProcessor*>(*rit) == 0)
      continue;
    m_reverseSortedRenderProcessors.push_back(qobject_cast<Z3DRenderProcessor*>(*rit));
  }
}