diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2019-10-02 13:37:44 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2019-10-03 13:36:01 +0300 |
commit | 0cc45eaac4b9a285e1d1eea12adb355c661f2da7 (patch) | |
tree | ef42ad72d9396b9f4d33b2964addd90528e7dc07 /intern/opensubdiv | |
parent | f6a90f018cfa0ab90e8d38e37d16a3906227481a (diff) |
OpenSubdiv: Add accessor to vertex edges via refiner C-API
Diffstat (limited to 'intern/opensubdiv')
-rw-r--r-- | intern/opensubdiv/internal/opensubdiv_topology_refiner.cc | 17 | ||||
-rw-r--r-- | intern/opensubdiv/opensubdiv_topology_refiner_capi.h | 8 |
2 files changed, 25 insertions, 0 deletions
diff --git a/intern/opensubdiv/internal/opensubdiv_topology_refiner.cc b/intern/opensubdiv/internal/opensubdiv_topology_refiner.cc index 30013966961..ac27cbdefdc 100644 --- a/intern/opensubdiv/internal/opensubdiv_topology_refiner.cc +++ b/intern/opensubdiv/internal/opensubdiv_topology_refiner.cc @@ -123,6 +123,21 @@ void getEdgeVertices(const OpenSubdiv_TopologyRefiner *topology_refiner, edge_vertices_indices[1] = array[1]; } +int getNumVertexEdges(const OpenSubdiv_TopologyRefiner *topology_refiner, const int vertex_index) +{ + const OpenSubdiv::Far::TopologyLevel *base_level = getOSDTopologyBaseLevel(topology_refiner); + return base_level->GetVertexEdges(vertex_index).size(); +} + +void getVertexEdges(const OpenSubdiv_TopologyRefiner *topology_refiner, + const int vertex_index, + int *vertex_edges_indices) +{ + const OpenSubdiv::Far::TopologyLevel *base_level = getOSDTopologyBaseLevel(topology_refiner); + OpenSubdiv::Far::ConstIndexArray array = base_level->GetVertexEdges(vertex_index); + convertArrayToRaw(array, vertex_edges_indices); +} + int getNumFacePtexFaces(const OpenSubdiv_TopologyRefiner *topology_refiner, const int face_index) { const int num_face_vertices = topology_refiner->getNumFaceVertices(topology_refiner, face_index); @@ -201,6 +216,8 @@ void assignFunctionPointers(OpenSubdiv_TopologyRefiner *topology_refiner) topology_refiner->getNumFaceEdges = getNumFaceEdges; topology_refiner->getFaceEdges = getFaceEdges; topology_refiner->getEdgeVertices = getEdgeVertices; + topology_refiner->getNumVertexEdges = getNumVertexEdges; + topology_refiner->getVertexEdges = getVertexEdges; // PTex face geometry. topology_refiner->getNumFacePtexFaces = getNumFacePtexFaces; topology_refiner->getNumPtexFaces = getNumPtexFaces; diff --git a/intern/opensubdiv/opensubdiv_topology_refiner_capi.h b/intern/opensubdiv/opensubdiv_topology_refiner_capi.h index cf7f59adf2f..38d722ab572 100644 --- a/intern/opensubdiv/opensubdiv_topology_refiner_capi.h +++ b/intern/opensubdiv/opensubdiv_topology_refiner_capi.h @@ -58,11 +58,13 @@ typedef struct OpenSubdiv_TopologyRefiner { int (*getNumVertices)(const struct OpenSubdiv_TopologyRefiner *topology_refiner); int (*getNumEdges)(const struct OpenSubdiv_TopologyRefiner *topology_refiner); int (*getNumFaces)(const struct OpenSubdiv_TopologyRefiner *topology_refiner); + int (*getNumFaceVertices)(const struct OpenSubdiv_TopologyRefiner *topology_refiner, const int face_index); void (*getFaceVertices)(const struct OpenSubdiv_TopologyRefiner *topology_refiner, const int face_index, int *face_vertices_indices); + int (*getNumFaceEdges)(const struct OpenSubdiv_TopologyRefiner *topology_refiner, const int face_index); void (*getFaceEdges)(const struct OpenSubdiv_TopologyRefiner *topology_refiner, @@ -72,6 +74,12 @@ typedef struct OpenSubdiv_TopologyRefiner { const int edge_index, int edge_vertices_indices[2]); + int (*getNumVertexEdges)(const struct OpenSubdiv_TopologyRefiner *topology_refiner, + const int vertex_index); + void (*getVertexEdges)(const struct OpenSubdiv_TopologyRefiner *topology_refiner, + const int vertex_index, + int *vertex_edges_indices); + ////////////////////////////////////////////////////////////////////////////// // PTex face geometry queries. |