示例#1
0
int ConnectivityTester::computeConnectivity(NodeArray<NodeArray<int>> &Connectivity)
{
	node v = m_graph->firstNode();
	int result = m_graph->numberOfNodes();

	if(m_graphCopied) {
		v = ((GraphCopy*)m_graph)->original().firstNode();
	}

	for (; v != nullptr; v = v->succ()) {
		Connectivity[v][v] = 0;

		for (node u = v->succ(); u != nullptr; u = u->succ()) {
			Connectivity[v][u] = computeConnectivity(copyOf(v, true), copyOf(u));
			result = min(result, Connectivity[v][u]);

			if (m_directed) {
				Connectivity[u][v] = computeConnectivity(copyOf(u, true), copyOf(v));
				result = min(result, Connectivity[u][v]);
			} else {
				Connectivity[u][v] = Connectivity[v][u];
			}
		}
	}

	return result;
}
示例#2
0
void MeshWithConnectivity::fromMesh( const Mesh<VertexPNC>& m )
{
	positions.resize(m.numVertices());
	normals.resize(m.numVertices());
	colors.resize(m.numVertices());

	for (int i = 0; i < m.numVertices(); ++i) {
		positions[i] = m.vertex(i).p;
		normals[i] = m.vertex(i).n;
		colors[i] = m.vertex(i).c.getXYZ();
	}

	indices.reserve(m.numTriangles());

	// move indices
	for (int i = 0; i < m.numSubmeshes(); ++i)
		for (int t = 0; t < m.indices(i).getSize(); ++t)
			indices.push_back(m.indices(i)[t]);

	computeConnectivity();
}