Misc Quantities
Surface Graph Quantity
The surface graph quantity is a collection of nodes and straight-line edges between them. Each node is given as a position in 3D space—this quantity does not really have any relationship to the underlying surface, execpt that it is managed as a surface quantity.
Nodes will be drawn as spheres, and the connecting edges drawn as cylinders. This quantity can be useful for visualizing paths on the surface, or wireframes.
Example: drawing mesh’s dual with geometry-central.
#include "polyscope/surface_mesh.h"
// geometry-central things
geom->requireFaceIndices();
std::vector<Vector3> positions;
std::vector<std::array<size_t, 2>> edgeInds;
// Build the node positions
for (Face f : mesh->faces()) {
// Compute center for face
Vector3 c = Vector3::zero();
for (Vertex v : f.adjacentVertices()) {
c += geom->inputVertexPositions[v];
}
c /= f.degree();
positions.push_back(c);
}
// Build the edge indices
for (Edge e : mesh->edges()) {
// Connect the nodes from the two faces adjacent to each edge
size_t fa = geom->faceIndices[e.halfedge().face()];
size_t fb = geom->faceIndices[e.halfedge().twin().face()];
edgeInds.push_back({fa, fb});
}
polyscope::getSurfaceMesh("my mesh")->
addSurfaceGraphQuantity("dual graph", positions, edgeInds);
SurfaceMesh::addSurfaceGraphQuantity(std::string name, const P& nodes, const E& edges)
Add a new surface graph quantity to the structure.
nodes
is the list of 3D positions for the graph nodes. The type should be adaptable to a list offloat
-valued 3-vectors.edges
is the list of edges for the graph, where each entry is two 0-based indices in to thenodes
array. The type should be adaptable to a list ofsize_t
-valued 2-vectors (aka pairs of indices).
The resulting class has color
and radius
fields which can be set to adjust the appearance of the resulting graph.
Options
Parameter | Meaning | Getter | Setter | Persistent? |
---|---|---|---|---|
enabled | is the quantity enabled? | bool isEnabled() |
setEnabled(bool newVal) |
yes |
radius | the radius the graph is drawn with | double getRadius() |
setRadius(double val, bool isRelative=true) |
yes |
color | the color to draw the graph with | glm::vec3 getVectorColor() |
setVectorColor(glm::vec3 val) |
yes |
(all setters return this
to support chaining. setEnabled() returns generic quantity, so chain it last)