commit e70b1309a821c6ef260ecdbd724755006a4ef216
parent 0559c985183b74253979b287914be9084663fdb6
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date: Mon, 3 Feb 2020 16:01:19 +0100
Some API renames
add an include file to help writing code for 2D and 3D
Diffstat:
17 files changed, 571 insertions(+), 134 deletions(-)
diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt
@@ -26,9 +26,9 @@ cmake_dependent_option(HUGE_ADDITIONAL_TESTS
"Build additional tests that involve millions of triangles" OFF
"NOT NO_TEST" OFF)
-################################################################################
+###############################################################################
# Check dependencies
-################################################################################
+###############################################################################
find_package(RCMake 0.4 REQUIRED)
find_package(Star3D 0.6 REQUIRED)
find_package(RSys 0.8.1 REQUIRED)
@@ -64,9 +64,9 @@ else()
endif()
endif()
-################################################################################
+###############################################################################
# Configure and define targets
-################################################################################
+###############################################################################
set(VERSION_MAJOR 0)
set(VERSION_MINOR 4)
set(VERSION_PATCH 2)
@@ -81,7 +81,8 @@ set(SENC_FILES_SRC
set(SENC_FILES_INC_API
senc.h
- senc_s3d_helper.h)
+ senc_s3d_helper.h
+ sencX3.h)
set(SENC_FILES_INC
senc_device_c.h
@@ -124,9 +125,9 @@ endif()
rcmake_setup_devel(senc StarEnc ${VERSION} star/senc_version.h)
-################################################################################
+###############################################################################
# Add tests
-################################################################################
+###############################################################################
if(NOT NO_TEST)
function(build_test _name)
add_executable(${_name}
@@ -174,9 +175,9 @@ if(NOT NO_TEST)
endif()
endif()
-################################################################################
+###############################################################################
# Define output & install directories
-################################################################################
+###############################################################################
install(TARGETS senc
ARCHIVE DESTINATION bin
LIBRARY DESTINATION lib
diff --git a/src/senc.h b/src/senc.h
@@ -60,6 +60,11 @@ struct senc_device;
struct senc_scene;
struct senc_enclosure;
+/*******************************************************************************
+ * The dimension of the geometry used in the library.
+ ******************************************************************************/
+#define SENC_GEOMETRY_DIMENSION 3
+
/* A type to discriminate triangle sides */
enum senc_side {
SENC_FRONT,
@@ -70,7 +75,7 @@ enum senc_side {
struct senc_enclosure_header {
/* The ID of the enclosure; 0, 1, ... */
unsigned enclosure_id;
- /* Number of triangles; a triangle can be accounted for twice, once by side */
+ /* Number of triangles; a triangle can be accounted for twice, once by side*/
unsigned primitives_count;
/* Number of unique triangles; a triangle cannot be accounted for twice */
unsigned unique_primitives_count;
@@ -98,7 +103,8 @@ struct senc_enclosure_header {
* (for a closed enclosure Ng points toward the inside or toward the outside)
* by using the flags :
* SENC_CONVENTION_NORMAL_INSIDE => Ng points toward the enclosure,
- * SENC_CONVENTION_NORMAL_OUTSIDE => Ng points to the opposite of the enclosure.
+ * SENC_CONVENTION_NORMAL_OUTSIDE => Ng points toward the opposite of the
+ * enclosure.
*
* Note that normals in output data can be opposite to normals in input data
* (vertices are then given in reverse order).
@@ -129,12 +135,12 @@ enum senc_convention {
BEGIN_DECLS
-/*******************************************************************************
+/******************************************************************************
* StarEnclosures device. It is an handle toward the StarEnc library.
* It manages the lib resources.
* If provided, the allocator has to be suitable for parallel high frequency
* allocations. As a consequence, a rsys proxy allocator should be avoided.
- ******************************************************************************/
+ *****************************************************************************/
SENC_API res_T
senc_device_create
(struct logger* logger, /* May be NULL <=> use default logger */
@@ -151,10 +157,10 @@ SENC_API res_T
senc_device_ref_put
(struct senc_device* device);
-/*******************************************************************************
+/******************************************************************************
* StarEnclosures scene. A scene is a collection of triangles. Each triangle is
* defined with a medium on each side.
- ******************************************************************************/
+ *****************************************************************************/
/* Creates a scene from some vertices and triangles.
* Neither vertices nor triangles can include duplicates.
* Triangles cannot be degenerated. */
@@ -165,14 +171,20 @@ senc_scene_create
/* Number of triangles */
const unsigned triangles_count,
/* User function that provides vertices ids for triangles */
- void(*get_indices)(const unsigned itri, unsigned ids[3], void* context),
+ void(*get_indices)(
+ const unsigned itri,
+ unsigned ids[SENC_GEOMETRY_DIMENSION],
+ void* context),
/* User function that provides media ids for triangles */
void(*get_media) /* Can be NULL <=> SENC_UNSPECIFIED_MEDIUM medium used */
(const unsigned itri, unsigned med[2], void* context),
/* Number of vertices */
const unsigned vertices_count,
/* User function that provides coordinates for vertices */
- void(*get_position)(const unsigned ivert, double pos[3], void* context),
+ void(*get_position)(
+ const unsigned ivert,
+ double pos[SENC_GEOMETRY_DIMENSION],
+ void* context),
/* Context provided to user callbacks; can be NULL */
void* context,
/* The created scene */
@@ -186,20 +198,20 @@ senc_scene_get_convention
/* Returns the number of triangles in the scene. */
SENC_API res_T
-senc_scene_get_primitives_count
+senc_scene_get_triangles_count
(const struct senc_scene* scene,
unsigned* count);
/* Returns the itri_th triangle vertices' indices. */
SENC_API res_T
-senc_scene_get_primitive
+senc_scene_get_triangle
(const struct senc_scene* scene,
const unsigned itri,
- unsigned indices[3]);
+ unsigned indices[SENC_GEOMETRY_DIMENSION]);
/* Returns the media for the itri_th triangle. */
SENC_API res_T
-senc_scene_get_primitive_media
+senc_scene_get_triangle_media
(const struct senc_scene* scene,
const unsigned itri,
unsigned media[2]);
@@ -215,7 +227,7 @@ SENC_API res_T
senc_scene_get_vertex
(const struct senc_scene* scene,
const unsigned ivert,
- double coord[3]);
+ double coord[SENC_GEOMETRY_DIMENSION]);
/* Returns the greater medium id found in added geometry. In API calls using a
* medium, any value in the [0 max_medium_id[ range is valid. However there can
@@ -258,7 +270,7 @@ senc_scene_get_enclosure_by_medium
/* Returns the enclosures the itri_th triangle front and back sides are member
* of. */
SENC_API res_T
-senc_scene_get_primitive_enclosures
+senc_scene_get_triangle_enclosures
(const struct senc_scene* scene,
const unsigned itri,
unsigned enclosures[2]);
@@ -267,17 +279,17 @@ senc_scene_get_primitive_enclosures
* - that have arity 1 (single triangle using the segment)
* - that connect 2 different media */
SENC_API res_T
-senc_scene_get_frontier_elements_count
+senc_scene_get_frontier_segments_count
(const struct senc_scene* scene,
unsigned* count);
-/* Returns the iseg_th frontier segment; the returned indices are global unique
- * vertex indices. */
+/* Returns the iseg_th frontier segment; the returned indices are global vertex
+ * indices whose coordinates can be retrieved using senc_scene_get_vertex. */
SENC_API res_T
-senc_scene_get_frontier_element
+senc_scene_get_frontier_segment
(const struct senc_scene* scene,
const unsigned iseg,
- unsigned vrtx_id[2]);
+ unsigned vrtx_id[SENC_GEOMETRY_DIMENSION-1]);
SENC_API res_T
senc_scene_ref_get
@@ -287,20 +299,21 @@ SENC_API res_T
senc_scene_ref_put
(struct senc_scene* scene);
-/*******************************************************************************
+/******************************************************************************
* StarEnclosures enclosure. It is an handle toward an enclosure.
* Counts and other information on enclosures are not individually accessible,
* but as a whole through header access.
- * An enclosure can list the "same" triangle twice if both sides are in. In this
- * case the 2 occurences of the triangle have reversed vertices order and
+ * An enclosure can list the "same" triangle twice if both sides are in. In
+ * this case the 2 occurences of the triangle have reversed vertices order and
* unique_triangle_count and triangle_count differ.
* Vertices and triangles numbering schemes are specific to each enclosure:
* the "same" item appearing in 2 different enclosures has no reason to get the
* same index twice or to have the same index in the global numbering scheme.
* By-index API accesses of triangles (or properties) visit unique triangles
* for indices in the [0 unique_triangle_count[ range and back-faces of the
- * doubly-included triangles in the [unique_triangle_count triangle_count[ range.
- ******************************************************************************/
+ * doubly-included triangles in the [unique_triangle_count triangle_count[
+ * range.
+ *****************************************************************************/
/* Returns the header of an enclosure. */
SENC_API res_T
senc_enclosure_get_header
@@ -310,22 +323,22 @@ senc_enclosure_get_header
/* Returns the itri_th triangle of an enclosure.
* Indices are local to the enclosure. */
SENC_API res_T
-senc_enclosure_get_primitive
+senc_enclosure_get_triangle
(const struct senc_enclosure* enclosure,
const unsigned itri,
- unsigned indices[3]);
+ unsigned indices[SENC_GEOMETRY_DIMENSION]);
/* Returns the coordinates of the ivert_th vertex of an enclosure. */
SENC_API res_T
senc_enclosure_get_vertex
(const struct senc_enclosure* enclosure,
const unsigned ivert,
- double coord[3]);
+ double coord[SENC_GEOMETRY_DIMENSION]);
/* Returns the global id of the itri_th triangle of an enclosure
* and the involved side. */
SENC_API res_T
-senc_enclosure_get_primitive_global_id
+senc_enclosure_get_triangle_id
(const struct senc_enclosure* enclosure,
const unsigned itri,
unsigned* gid,
diff --git a/src/sencX3.h b/src/sencX3.h
@@ -0,0 +1,423 @@
+/* Copyright (C) |Meso|Star> 2016-2020 (contact@meso-star.com)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+#ifndef SENC_X_3D_H
+#define SENC_X_3D_H
+
+#include <star/senc.h>
+#include <rsys/rsys.h>
+
+/* This file can be used in conjunction with sencX2.h from the the
+ * star-enclosures-2D library to write code for both 2D and 3D geometries using
+ * the following pattern:
+ *
+ * #if (DIM==2)
+ * #include <star/sencX2.h>
+ * #elif (DIM==3)
+ * #include <star/sencX3.h>
+ * #else
+ * #error DIM should be defined; possible values are 2 and 3
+ * #endif
+ *
+ * Then use the sencX_... types and functions in your code.
+ */
+
+/* Forward declaration of external opaque data types */
+struct logger;
+struct mem_allocator;
+
+/* Forward declaration of StarEnclosures opaque data types. These data types
+ * are ref counted. Once created with the appropriated `senc_<TYPE>_create'
+ * function, the caller implicitly owns the created data, i.e. its reference
+ * counter is set to 1. The senc_<TYPE>_ref_<get|put> functions get or release
+ * a reference on the data, i.e. they increment or decrement the reference
+ * counter, respectively. When this counter reaches 0, the object is silently
+ * destroyed and cannot be used anymore. */
+typedef struct senc_device sencX_device;
+typedef struct senc_scene sencX_scene;
+typedef struct senc_enclosure sencX_enclosure;
+
+/*******************************************************************************
+ * The dimension of the geometry used in the library.
+ ******************************************************************************/
+#define SENCX_GEOMETRY_DIMENSION SENC_GEOMETRY_DIMENSION
+
+/* A type to discriminate triangle sides */
+enum sencXd_side {
+ SENCXD_FRONT = SENC_FRONT,
+ SENCXD_BACK = SENC_BACK
+};
+
+/* Enclosure header type */
+typedef struct senc_enclosure_header sencXd_enclosure_header;
+
+/* We consider the geometrical normal Ng to a triangle V0 V1 V2
+ * that verifies "(V0, V0V1, V0V2, Ng) is a direct system"
+ * (right-handed system).
+ *
+ * The user can set the convention used to determine which side of
+ * a triangle is to be considered front/back by using the flags :
+ * SENC_CONVENTION_NORMAL_FRONT => Ng points toward the front side,
+ * SENC_CONVENTION_NORMAL_BACK => Ng points toward the back side.
+ *
+ * Additionaly the user can set the convention used to output enclosures
+ * so that Ng points toward the enclosure or on the opposite direction
+ * (for a closed enclosure Ng points toward the inside or toward the outside)
+ * by using the flags :
+ * SENC_CONVENTION_NORMAL_INSIDE => Ng points toward the enclosure,
+ * SENC_CONVENTION_NORMAL_OUTSIDE => Ng points to the opposite of the enclosure.
+ *
+ * Note that normals in output data can be opposite to normals in input data
+ * (vertices are then given in reverse order).
+ *
+ * Also note that both sides of a triangle can be part of the same enclosure;
+ * in this case the 2 sides will be given with opposite Ng (meaning they
+ * will be given with opposite vertices order).
+ */
+enum sencXd_convention {
+ /*
+ * Convention regarding FRONT/BACK sides in input data
+ */
+
+ /* Geometrical normals point toward the front side */
+ SENCXD_CONVENTION_NORMAL_FRONT = SENC_CONVENTION_NORMAL_FRONT,
+ /* Geometrical normals point toward the back side */
+ SENCXD_CONVENTION_NORMAL_BACK = SENC_CONVENTION_NORMAL_BACK,
+
+ /*
+ * Convention regarding geometrical normals in output data
+ */
+
+ /* Geometrical normals point toward the enclosure */
+ SENCXD_CONVENTION_NORMAL_INSIDE = SENC_CONVENTION_NORMAL_INSIDE,
+ /* Geometrical normals point to the opposite of the enclosure */
+ SENCXD_CONVENTION_NORMAL_OUTSIDE = SENC_CONVENTION_NORMAL_OUTSIDE
+};
+
+/******************************************************************************
+ * The value that should be used to let media unspecified.
+ *****************************************************************************/
+#define SENCXD_UNSPECIFIED_MEDIUM SENC_UNSPECIFIED_MEDIUM
+
+BEGIN_DECLS
+
+/******************************************************************************
+ * StarEnclosures device. It is an handle toward the StarEnc library.
+ * It manages the lib resources.
+ * If provided, the allocator has to be suitable for parallel high frequency
+ * allocations. As a consequence, a rsys proxy allocator should be avoided.
+ *****************************************************************************/
+static FINLINE res_T
+sencXd_device_create
+ (struct logger* logger, /* May be NULL <=> use default logger */
+ struct mem_allocator* allocator, /* May be NULL <=> use default allocator */
+ const unsigned nthreads_hint,
+ const int verbose,
+ struct senc_device** device)
+{
+ return senc_device_create(logger, allocator, nthreads_hint, verbose, device);
+}
+
+static FINLINE res_T
+sencXd_device_ref_get
+ (struct senc_device* device)
+{
+ return senc_device_ref_get(device);
+}
+
+static FINLINE res_T
+sencXd_device_ref_put
+ (struct senc_device* device)
+{
+ return senc_device_ref_put(device);
+}
+
+/******************************************************************************
+ * StarEnclosures scene. A scene is a collection of triangles. Each triangle is
+ * defined with a medium on each side.
+ *****************************************************************************/
+/* Creates a scene from some vertices and triangles.
+ * Neither vertices nor triangles can include duplicates.
+ * Triangles cannot be degenerated. */
+static FINLINE res_T
+sencXd_scene_create
+ (struct senc_device* device,
+ const int convention,
+ /* Number of triangles */
+ const unsigned triangles_count,
+ /* User function that provides vertices ids for triangles */
+ void(*get_indices)(
+ const unsigned itri,
+ unsigned ids[SENCX_GEOMETRY_DIMENSION],
+ void* context),
+ /* User function that provides media ids for triangles */
+ void(*get_media) /* Can be NULL <=> SENC_UNSPECIFIED_MEDIUM medium used */
+ (const unsigned itri, unsigned med[2], void* context),
+ /* Number of vertices */
+ const unsigned vertices_count,
+ /* User function that provides coordinates for vertices */
+ void(*get_position)(
+ const unsigned ivert,
+ double pos[SENCX_GEOMETRY_DIMENSION],
+ void* context),
+ /* Context provided to user callbacks; can be NULL */
+ void* context,
+ /* The created scene */
+ struct senc_scene** scene)
+{
+ return senc_scene_create(device, convention, triangles_count, get_indices,
+ get_media, vertices_count, get_position, context, scene);
+}
+
+/* Returns the convention flags in use with the scene. */
+static FINLINE res_T
+sencXd_scene_get_convention
+ (const struct senc_scene* scene,
+ int* convention)
+{
+ return senc_scene_get_convention(scene, convention);
+}
+
+/* Returns the number of triangles in the scene. */
+static FINLINE res_T
+sencXd_scene_get_primitives_count
+ (const struct senc_scene* scene,
+ unsigned* count)
+{
+ return senc_enclosure_get_triangles_count(scene, count);
+}
+
+/* Returns the itri_th triangle vertices' indices. */
+static FINLINE res_T
+sencXd_scene_get_primitive
+ (const struct senc_scene* scene,
+ const unsigned itri,
+ unsigned indices[SENCX_GEOMETRY_DIMENSION])
+{
+ return senc_enclosure_get_triangle(scene, itri, indices);
+}
+
+/* Returns the media for the itri_th triangle. */
+static FINLINE res_T
+sencXd_scene_get_primitive_media
+ (const struct senc_scene* scene,
+ const unsigned itri,
+ unsigned media[2])
+{
+ return senc_enclosure_get_triangle_media(scene, itri, media);
+}
+
+/* Returns the number of vertices in the scene. */
+static FINLINE res_T
+sencXd_scene_get_vertices_count
+ (const struct senc_scene* scene,
+ unsigned* count)
+{
+ return senc_scene_get_vertices_count(scene, count);
+}
+
+/* Returns the coordinates of the ivert_th vertex. */
+static FINLINE res_T
+sencXd_scene_get_vertex
+ (const struct senc_scene* scene,
+ const unsigned ivert,
+ double coord[SENCX_GEOMETRY_DIMENSION])
+{
+ return senc_scene_get_vertex(scene, ivert, coord);
+}
+
+/* Returns the greater medium id found in added geometry. In API calls using a
+ * medium, any value in the [0 max_medium_id[ range is valid. However there can
+ * be unused ids (no geometry refered to this medium id). */
+static FINLINE res_T
+sencXd_scene_get_max_medium
+ (const struct senc_scene* scene,
+ unsigned* max_medium_id)
+{
+ return senc_scene_get_max_medium(scene, max_medium_id);
+}
+
+/* Returns the number of enclosures. */
+static FINLINE res_T
+sencXd_scene_get_enclosure_count
+ (const struct senc_scene* scene,
+ unsigned* count)
+{
+ return senc_scene_get_enclosure_count(scene, count);
+}
+
+/* Returns the number of enclosures that have some geometry refering to the
+ * imed_th medium or SENC_UNSPECIFIED_MEDIUM. */
+static FINLINE res_T
+sencXd_scene_get_enclosure_count_by_medium
+ (const struct senc_scene* scene,
+ const unsigned imed,
+ unsigned* count)
+{
+ return senc_scene_get_enclosure_count_by_medium(scene, imed, count);
+}
+
+/* Returns the idx_th enclosure. */
+static FINLINE res_T
+sencXd_scene_get_enclosure
+ (struct senc_scene* scene,
+ const unsigned idx,
+ struct senc_enclosure** enclosure)
+{
+ return senc_scene_get_enclosure(scene, idx, enclosure);
+}
+
+/* Returns the idx_th enclosure using the imed_th medium or
+ * SENC_UNSPECIFIED_MEDIUM. */
+static FINLINE res_T
+sencXd_scene_get_enclosure_by_medium
+ (struct senc_scene* scene,
+ const unsigned imed,
+ const unsigned idx,
+ struct senc_enclosure** enclosure)
+{
+ return senc_scene_get_enclosure_by_medium(scene, imed, idx, enclosure);
+}
+
+/* Returns the enclosures the itri_th triangle front and back sides are member
+ * of. */
+static FINLINE res_T
+sencXd_scene_get_primitive_enclosures
+ (const struct senc_scene* scene,
+ const unsigned itri,
+ unsigned enclosures[2])
+{
+ return senc_scene_get_triangle_enclosures(scene, itri, enclosures);
+}
+
+/* Returns the number of segments that are frontier segments:
+ * - that have arity 1 (single triangle using the segment)
+ * - that connect 2 different media */
+static FINLINE res_T
+sencXd_scene_get_frontier_elements_count
+ (const struct senc_scene* scene,
+ unsigned* count)
+{
+ return senc_scene_get_frontier_segments_count(scene, count);
+}
+
+/* Returns the iseg_th frontier segment; the returned indices are global vertex
+ * indices whose coordinates can be retrieved using sencXd_scene_get_vertex. */
+static FINLINE res_T
+sencXd_scene_get_frontier_element
+ (const struct senc_scene* scene,
+ const unsigned iseg,
+ unsigned vrtx_id[SENCX_GEOMETRY_DIMENSION-1])
+{
+ return senc_scene_get_frontier_segment(scene, iseg, vrtx_id);
+}
+
+static FINLINE res_T
+sencXd_scene_ref_get
+ (struct senc_scene* scene)
+{
+ return senc_scene_ref_get(scene);
+}
+
+static FINLINE res_T
+sencXd_scene_ref_put
+ (struct senc_scene* scene)
+{
+ return senc_scene_ref_put(scene);
+}
+
+/*******************************************************************************
+ * StarEnclosures enclosure. It is an handle toward an enclosure.
+ * Counts and other information on enclosures are not individually accessible,
+ * but as a whole through header access.
+ * An enclosure can list the "same" triangle twice if both sides are in. In this
+ * case the 2 occurences of the triangle have reversed vertices order and
+ * unique_triangle_count and triangle_count differ.
+ * Vertices and triangles numbering schemes are specific to each enclosure:
+ * the "same" item appearing in 2 different enclosures has no reason to get the
+ * same index twice or to have the same index in the global numbering scheme.
+ * By-index API accesses of triangles (or properties) visit unique triangles
+ * for indices in the [0 unique_triangle_count[ range and back-faces of the
+ * doubly-included triangles in the [unique_triangle_count triangle_count[ range.
+ ******************************************************************************/
+/* Returns the header of an enclosure. */
+static FINLINE res_T
+sencXd_enclosure_get_header
+ (const struct senc_enclosure* enclosure,
+ struct senc_enclosure_header* header)
+{
+ return senc_enclosure_get_header(enclosure, header);
+}
+
+/* Returns the itri_th triangle of an enclosure.
+ * Indices are local to the enclosure. */
+static FINLINE res_T
+sencXd_enclosure_get_primitive
+ (const struct senc_enclosure* enclosure,
+ const unsigned itri,
+ unsigned indices[SENCX_GEOMETRY_DIMENSION])
+{
+ return senc_enclosure_get_triangle(enclosure, itri, indices);
+}
+
+/* Returns the coordinates of the ivert_th vertex of an enclosure. */
+static FINLINE res_T
+sencXd_enclosure_get_vertex
+ (const struct senc_enclosure* enclosure,
+ const unsigned ivert,
+ double coord[SENCX_GEOMETRY_DIMENSION])
+{
+ return senc_enclosure_get_vertex(enclosure, ivert, coord);
+}
+
+/* Returns the global id of the itri_th triangle of an enclosure
+ * and the involved side. */
+static FINLINE res_T
+sencXd_enclosure_get_primitive_id
+ (const struct senc_enclosure* enclosure,
+ const unsigned itri,
+ unsigned* gid,
+ enum senc_side* side)
+{
+ return senc_enclosure_get_triangle_id(enclosure, itri, gid, side);
+}
+
+/* Returns the id of the imed_th medium of an enclosure. */
+static FINLINE res_T
+sencXd_enclosure_get_medium
+ (const struct senc_enclosure* enclosure,
+ const unsigned imed,
+ unsigned* medium)
+{
+ return senc_enclosure_get_medium(enclosure, imed, medium);
+}
+
+static FINLINE res_T
+sencXd_enclosure_ref_get
+ (struct senc_enclosure* enclosure)
+{
+ return senc_enclosure_ref_get(enclosure);
+}
+
+static FINLINE res_T
+sencXd_enclosure_ref_put
+ (struct senc_enclosure* enclosure)
+{
+ return senc_enclosure_ref_put(enclosure);
+}
+
+END_DECLS
+
+#endif /* SENC_X_3D_H */
diff --git a/src/senc_descriptor.c b/src/senc_descriptor.c
@@ -109,7 +109,7 @@ senc_scene_get_enclosure_by_medium
}
res_T
-senc_scene_get_primitive_enclosures
+senc_scene_get_triangle_enclosures
(const struct senc_scene* scn,
const unsigned itri,
unsigned enclosures[2])
@@ -130,7 +130,7 @@ senc_scene_get_primitive_enclosures
}
res_T
-senc_scene_get_frontier_elements_count
+senc_scene_get_frontier_segments_count
(const struct senc_scene* scn,
unsigned* count)
{
@@ -144,7 +144,7 @@ senc_scene_get_frontier_elements_count
}
res_T
-senc_scene_get_frontier_element
+senc_scene_get_frontier_segment
(const struct senc_scene* scn,
const unsigned iseg,
unsigned vrtx_id[2])
diff --git a/src/senc_enclosure.c b/src/senc_enclosure.c
@@ -75,7 +75,7 @@ senc_enclosure_get_header
}
res_T
-senc_enclosure_get_primitive
+senc_enclosure_get_triangle
(const struct senc_enclosure* enclosure,
const unsigned itri,
unsigned indices[3])
@@ -117,7 +117,7 @@ senc_enclosure_get_vertex
}
res_T
-senc_enclosure_get_primitive_global_id
+senc_enclosure_get_triangle_id
(const struct senc_enclosure* enclosure,
const unsigned itri,
unsigned* gid,
diff --git a/src/senc_s3d_helper.h b/src/senc_s3d_helper.h
@@ -33,7 +33,7 @@ senc_s3d_scene_get_indices__
const struct senc_scene* scene = ctx;
res_T r;
ASSERT(indices && scene);
- r = senc_scene_get_primitive(scene, itri, indices);
+ r = senc_scene_get_triangle(scene, itri, indices);
ASSERT(r == RES_OK); (void)r;
}
@@ -67,7 +67,7 @@ senc_s3d_enclosure_get_indices__
const struct senc_enclosure* enclosure = ctx;
res_T r;
ASSERT(indices && ctx);
- r = senc_enclosure_get_primitive(enclosure, itri, indices);
+ r = senc_enclosure_get_triangle(enclosure, itri, indices);
ASSERT(r == RES_OK); (void)r;
}
diff --git a/src/senc_scene.c b/src/senc_scene.c
@@ -235,7 +235,7 @@ senc_scene_get_convention
}
res_T
-senc_scene_get_primitives_count
+senc_scene_get_triangles_count
(const struct senc_scene* scn,
unsigned* count)
{
@@ -245,7 +245,7 @@ senc_scene_get_primitives_count
}
res_T
-senc_scene_get_primitive
+senc_scene_get_triangle
(const struct senc_scene* scn,
const unsigned itri,
unsigned indices[3])
@@ -265,7 +265,7 @@ senc_scene_get_primitive
}
res_T
-senc_scene_get_primitive_media
+senc_scene_get_triangle_media
(const struct senc_scene* scn,
const unsigned itri,
unsigned media[2])
diff --git a/src/test_senc_cube_on_cube.c b/src/test_senc_cube_on_cube.c
@@ -171,7 +171,7 @@ main(int argc, char** argv)
OK(senc_scene_get_vertices_count(scn, &count));
CHK(count == cube_on_cube_vertices_count);
- OK(senc_scene_get_primitives_count(scn, &count));
+ OK(senc_scene_get_triangles_count(scn, &count));
CHK(count == cube_on_cube_triangles_count);
OK(senc_scene_get_enclosure_count(scn, &count));
diff --git a/src/test_senc_enclosure.c b/src/test_senc_enclosure.c
@@ -71,14 +71,14 @@ test(const int convention)
BA(senc_enclosure_ref_put(NULL));
OK(senc_enclosure_ref_put(enclosure));
- BA(senc_enclosure_get_primitive(NULL, 0, indices[0]));
- BA(senc_enclosure_get_primitive(enclosure, ntriangles, indices[0]));
- BA(senc_enclosure_get_primitive(enclosure, 0, NULL));
- BA(senc_enclosure_get_primitive(NULL, ntriangles, indices[0]));
- BA(senc_enclosure_get_primitive(NULL, 0, NULL));
- BA(senc_enclosure_get_primitive(enclosure, ntriangles, NULL));
- BA(senc_enclosure_get_primitive(NULL, ntriangles, NULL));
- OK(senc_enclosure_get_primitive(enclosure, 0, indices[0]));
+ BA(senc_enclosure_get_triangle(NULL, 0, indices[0]));
+ BA(senc_enclosure_get_triangle(enclosure, ntriangles, indices[0]));
+ BA(senc_enclosure_get_triangle(enclosure, 0, NULL));
+ BA(senc_enclosure_get_triangle(NULL, ntriangles, indices[0]));
+ BA(senc_enclosure_get_triangle(NULL, 0, NULL));
+ BA(senc_enclosure_get_triangle(enclosure, ntriangles, NULL));
+ BA(senc_enclosure_get_triangle(NULL, ntriangles, NULL));
+ OK(senc_enclosure_get_triangle(enclosure, 0, indices[0]));
BA(senc_enclosure_get_vertex(NULL, 0, vrtx));
BA(senc_enclosure_get_vertex(enclosure, nvertices, vrtx));
@@ -89,22 +89,22 @@ test(const int convention)
BA(senc_enclosure_get_vertex(NULL, nvertices, NULL));
OK(senc_enclosure_get_vertex(enclosure, 0, vrtx));
- BA(senc_enclosure_get_primitive_global_id(NULL, 0, &gid, NULL));
- BA(senc_enclosure_get_primitive_global_id(enclosure, ntriangles, &gid, NULL));
- BA(senc_enclosure_get_primitive_global_id(enclosure, 0, NULL, NULL));
- BA(senc_enclosure_get_primitive_global_id(NULL, ntriangles, &gid, NULL));
- BA(senc_enclosure_get_primitive_global_id(NULL, 0, NULL, NULL));
- BA(senc_enclosure_get_primitive_global_id(enclosure, ntriangles, NULL, NULL));
- BA(senc_enclosure_get_primitive_global_id(NULL, ntriangles, NULL, NULL));
- BA(senc_enclosure_get_primitive_global_id(enclosure, 0, &gid, NULL));
- BA(senc_enclosure_get_primitive_global_id(NULL, 0, &gid, &side));
- BA(senc_enclosure_get_primitive_global_id(enclosure, ntriangles, &gid, &side));
- BA(senc_enclosure_get_primitive_global_id(enclosure, 0, NULL, &side));
- BA(senc_enclosure_get_primitive_global_id(NULL, ntriangles, &gid, &side));
- BA(senc_enclosure_get_primitive_global_id(NULL, 0, NULL, &side));
- BA(senc_enclosure_get_primitive_global_id(enclosure, ntriangles, NULL, &side));
- BA(senc_enclosure_get_primitive_global_id(NULL, ntriangles, NULL, &side));
- OK(senc_enclosure_get_primitive_global_id(enclosure, 0, &gid, &side));
+ BA(senc_enclosure_get_triangle_id(NULL, 0, &gid, NULL));
+ BA(senc_enclosure_get_triangle_id(enclosure, ntriangles, &gid, NULL));
+ BA(senc_enclosure_get_triangle_id(enclosure, 0, NULL, NULL));
+ BA(senc_enclosure_get_triangle_id(NULL, ntriangles, &gid, NULL));
+ BA(senc_enclosure_get_triangle_id(NULL, 0, NULL, NULL));
+ BA(senc_enclosure_get_triangle_id(enclosure, ntriangles, NULL, NULL));
+ BA(senc_enclosure_get_triangle_id(NULL, ntriangles, NULL, NULL));
+ BA(senc_enclosure_get_triangle_id(enclosure, 0, &gid, NULL));
+ BA(senc_enclosure_get_triangle_id(NULL, 0, &gid, &side));
+ BA(senc_enclosure_get_triangle_id(enclosure, ntriangles, &gid, &side));
+ BA(senc_enclosure_get_triangle_id(enclosure, 0, NULL, &side));
+ BA(senc_enclosure_get_triangle_id(NULL, ntriangles, &gid, &side));
+ BA(senc_enclosure_get_triangle_id(NULL, 0, NULL, &side));
+ BA(senc_enclosure_get_triangle_id(enclosure, ntriangles, NULL, &side));
+ BA(senc_enclosure_get_triangle_id(NULL, ntriangles, NULL, &side));
+ OK(senc_enclosure_get_triangle_id(enclosure, 0, &gid, &side));
BA(senc_enclosure_get_medium(NULL, 0, &medium));
BA(senc_enclosure_get_medium(enclosure, 2, &medium));
@@ -138,7 +138,7 @@ test(const int convention)
CHK(header.is_infinite == (i == 0));
FOR_EACH(t, 0, header.primitives_count) {
- OK(senc_enclosure_get_primitive_global_id(enclosure, t, &gid, &side));
+ OK(senc_enclosure_get_triangle_id(enclosure, t, &gid, &side));
CHK(gid == t);
CHK(side == (medium == 0) ? SENC_FRONT : SENC_BACK);
}
@@ -152,7 +152,7 @@ test(const int convention)
int same, reversed;
/* Read same triangles in both enclosures */
FOR_EACH(i, 0, 2)
- OK(senc_enclosure_get_primitive(enclosures[i], n, indices[i]));
+ OK(senc_enclosure_get_triangle(enclosures[i], n, indices[i]));
/* Same triangles and opposite sides for the 2 enclosures */
FOR_EACH(i, 0, 3) CHK(indices[0][i] == indices[1][2 - i]);
/* Enclosure 0 is outside (and contains medium 0 if convention is front).
@@ -180,7 +180,7 @@ test(const int convention)
OK(senc_scene_create(dev, convention, ntriangles - 1, get_indices, get_media,
nvertices, get_position, &ctx, &scn));
- OK(senc_scene_get_frontier_elements_count(scn, &count));
+ OK(senc_scene_get_frontier_segments_count(scn, &count));
CHK(count == 3);
OK(senc_scene_get_enclosure_count(scn, &count));
@@ -205,7 +205,7 @@ test(const int convention)
CHK(header.is_infinite == 1);
FOR_EACH(t, 0, header.primitives_count) {
- OK(senc_enclosure_get_primitive_global_id(enclosure, t, &gid, &side));
+ OK(senc_enclosure_get_triangle_id(enclosure, t, &gid, &side));
/* The first unique_triangle_count triangles of an enclosure
* are unique triangles */
if(t < header.unique_primitives_count) CHK(gid == t);
diff --git a/src/test_senc_inconsistant_cube.c b/src/test_senc_inconsistant_cube.c
@@ -118,7 +118,7 @@ test(const int convention)
/* Should be made of the same triangles */
CHK(same);
CHK(i ? reversed != fst_reversed : reversed == fst_reversed);
- OK(senc_enclosure_get_primitive_global_id(enclosure, i, &gid, &side));
+ OK(senc_enclosure_get_triangle_id(enclosure, i, &gid, &side));
CHK(side == expected_side);
}
SENC(enclosure_ref_put(enclosure));
diff --git a/src/test_senc_many_enclosures.c b/src/test_senc_many_enclosures.c
@@ -76,7 +76,7 @@ main(int argc, char** argv)
OK(senc_scene_get_vertices_count(scn, &count));
CHK(count == NB_CYL * cyl_vrtx_count);
- OK(senc_scene_get_primitives_count(scn, &count));
+ OK(senc_scene_get_triangles_count(scn, &count));
CHK(count == NB_CYL * cyl_trg_count);
OK(senc_scene_get_enclosure_count(scn, &count));
diff --git a/src/test_senc_many_triangles.c b/src/test_senc_many_triangles.c
@@ -76,7 +76,7 @@ main(int argc, char** argv)
OK(senc_scene_get_vertices_count(scn, &count));
CHK(count == NB_CYL * cyl_vrtx_count);
- OK(senc_scene_get_primitives_count(scn, &count));
+ OK(senc_scene_get_triangles_count(scn, &count));
CHK(count == NB_CYL * cyl_trg_count);
OK(senc_scene_get_enclosure_count(scn, &count));
diff --git a/src/test_senc_scene.c b/src/test_senc_scene.c
@@ -85,10 +85,10 @@ main(int argc, char** argv)
CHK(convention
== (SENC_CONVENTION_NORMAL_FRONT | SENC_CONVENTION_NORMAL_INSIDE));
- BA(senc_scene_get_primitives_count(NULL, &count));
- BA(senc_scene_get_primitives_count(scn, NULL));
- BA(senc_scene_get_primitives_count(NULL, NULL));
- OK(senc_scene_get_primitives_count(scn, &count));
+ BA(senc_scene_get_triangles_count(NULL, &count));
+ BA(senc_scene_get_triangles_count(scn, NULL));
+ BA(senc_scene_get_triangles_count(NULL, NULL));
+ OK(senc_scene_get_triangles_count(scn, &count));
CHK(count == ntriangles);
BA(senc_scene_get_vertices_count(NULL, &count));
@@ -97,23 +97,23 @@ main(int argc, char** argv)
OK(senc_scene_get_vertices_count(scn, &count));
CHK(count == nvertices);
- BA(senc_scene_get_primitive(NULL, 0, ind));
- BA(senc_scene_get_primitive(scn, UINT_MAX, ind));
- BA(senc_scene_get_primitive(scn, 0, NULL));
- BA(senc_scene_get_primitive(NULL, UINT_MAX, ind));
- BA(senc_scene_get_primitive(NULL, 0, NULL));
- BA(senc_scene_get_primitive(scn, UINT_MAX, NULL));
- BA(senc_scene_get_primitive(NULL, UINT_MAX, NULL));
- OK(senc_scene_get_primitive(scn, 0, ind));
-
- BA(senc_scene_get_primitive_media(NULL, 0, ind));
- BA(senc_scene_get_primitive_media(scn, UINT_MAX, ind));
- BA(senc_scene_get_primitive_media(scn, 0, NULL));
- BA(senc_scene_get_primitive_media(NULL, UINT_MAX, ind));
- BA(senc_scene_get_primitive_media(NULL, 0, NULL));
- BA(senc_scene_get_primitive_media(scn, UINT_MAX, NULL));
- BA(senc_scene_get_primitive_media(NULL, UINT_MAX, NULL));
- OK(senc_scene_get_primitive_media(scn, 0, ind));
+ BA(senc_scene_get_triangle(NULL, 0, ind));
+ BA(senc_scene_get_triangle(scn, UINT_MAX, ind));
+ BA(senc_scene_get_triangle(scn, 0, NULL));
+ BA(senc_scene_get_triangle(NULL, UINT_MAX, ind));
+ BA(senc_scene_get_triangle(NULL, 0, NULL));
+ BA(senc_scene_get_triangle(scn, UINT_MAX, NULL));
+ BA(senc_scene_get_triangle(NULL, UINT_MAX, NULL));
+ OK(senc_scene_get_triangle(scn, 0, ind));
+
+ BA(senc_scene_get_triangle_media(NULL, 0, ind));
+ BA(senc_scene_get_triangle_media(scn, UINT_MAX, ind));
+ BA(senc_scene_get_triangle_media(scn, 0, NULL));
+ BA(senc_scene_get_triangle_media(NULL, UINT_MAX, ind));
+ BA(senc_scene_get_triangle_media(NULL, 0, NULL));
+ BA(senc_scene_get_triangle_media(scn, UINT_MAX, NULL));
+ BA(senc_scene_get_triangle_media(NULL, UINT_MAX, NULL));
+ OK(senc_scene_get_triangle_media(scn, 0, ind));
BA(senc_scene_get_vertex(NULL, 0, vrtx));
BA(senc_scene_get_vertex(scn, UINT_MAX, vrtx));
@@ -179,28 +179,28 @@ main(int argc, char** argv)
/* Index 0 is out of range for SENC_UNSPECIFIED_MEDIUM. */
BA(senc_scene_get_enclosure_by_medium(scn, SENC_UNSPECIFIED_MEDIUM, 0, &enc));
- BA(senc_scene_get_primitive_enclosures(NULL, 0, ids));
- BA(senc_scene_get_primitive_enclosures(scn, UINT_MAX, ids));
- BA(senc_scene_get_primitive_enclosures(scn, 0, NULL));
- BA(senc_scene_get_primitive_enclosures(NULL, UINT_MAX, ids));
- BA(senc_scene_get_primitive_enclosures(NULL, 0, NULL));
- BA(senc_scene_get_primitive_enclosures(scn, UINT_MAX, NULL));
- BA(senc_scene_get_primitive_enclosures(NULL, UINT_MAX, NULL));
- OK(senc_scene_get_primitive_enclosures(scn, 0, ids));
-
- BA(senc_scene_get_frontier_elements_count(NULL, &count));
- BA(senc_scene_get_frontier_elements_count(scn, NULL));
- BA(senc_scene_get_frontier_elements_count(NULL, NULL));
- OK(senc_scene_get_frontier_elements_count(scn, &count));
+ BA(senc_scene_get_triangle_enclosures(NULL, 0, ids));
+ BA(senc_scene_get_triangle_enclosures(scn, UINT_MAX, ids));
+ BA(senc_scene_get_triangle_enclosures(scn, 0, NULL));
+ BA(senc_scene_get_triangle_enclosures(NULL, UINT_MAX, ids));
+ BA(senc_scene_get_triangle_enclosures(NULL, 0, NULL));
+ BA(senc_scene_get_triangle_enclosures(scn, UINT_MAX, NULL));
+ BA(senc_scene_get_triangle_enclosures(NULL, UINT_MAX, NULL));
+ OK(senc_scene_get_triangle_enclosures(scn, 0, ids));
+
+ BA(senc_scene_get_frontier_segments_count(NULL, &count));
+ BA(senc_scene_get_frontier_segments_count(scn, NULL));
+ BA(senc_scene_get_frontier_segments_count(NULL, NULL));
+ OK(senc_scene_get_frontier_segments_count(scn, &count));
CHK(count == 0);
- BA(senc_scene_get_frontier_element(NULL, 0, ids));
- BA(senc_scene_get_frontier_element(scn, UINT_MAX, ids));
- BA(senc_scene_get_frontier_element(scn, 0, NULL));
- BA(senc_scene_get_frontier_element(NULL, UINT_MAX, ids));
- BA(senc_scene_get_frontier_element(NULL, 0, NULL));
- BA(senc_scene_get_frontier_element(scn, UINT_MAX, NULL));
- BA(senc_scene_get_frontier_element(NULL, UINT_MAX, NULL));
+ BA(senc_scene_get_frontier_segment(NULL, 0, ids));
+ BA(senc_scene_get_frontier_segment(scn, UINT_MAX, ids));
+ BA(senc_scene_get_frontier_segment(scn, 0, NULL));
+ BA(senc_scene_get_frontier_segment(NULL, UINT_MAX, ids));
+ BA(senc_scene_get_frontier_segment(NULL, 0, NULL));
+ BA(senc_scene_get_frontier_segment(scn, UINT_MAX, NULL));
+ BA(senc_scene_get_frontier_segment(NULL, UINT_MAX, NULL));
BA(senc_scene_ref_get(NULL));
OK(senc_scene_ref_get(scn));
@@ -227,10 +227,10 @@ main(int argc, char** argv)
ntriangles - 1, get_indices, get_media,
nvertices, get_position, &ctx, &scn));
- OK(senc_scene_get_frontier_elements_count(scn, &count));
+ OK(senc_scene_get_frontier_segments_count(scn, &count));
CHK(count == 3);
- OK(senc_scene_get_frontier_element(scn, 0, ids));
- BA(senc_scene_get_frontier_element(scn, 3, ids));
+ OK(senc_scene_get_frontier_segment(scn, 0, ids));
+ BA(senc_scene_get_frontier_segment(scn, 3, ids));
OK(senc_scene_ref_put(scn));
@@ -248,7 +248,7 @@ main(int argc, char** argv)
CHK(!header.is_infinite);
OK(senc_enclosure_ref_put(enc));
- OK(senc_scene_get_primitive_media(scn, 0, medback));
+ OK(senc_scene_get_triangle_media(scn, 0, medback));
OK(senc_scene_ref_put(scn));
/* Medium mismatch between neighbour segments, but OK */
@@ -282,7 +282,7 @@ main(int argc, char** argv)
CHK(header.is_infinite);
OK(senc_enclosure_ref_put(enc));
- OK(senc_scene_get_primitive_media(scn, 0, medfront));
+ OK(senc_scene_get_triangle_media(scn, 0, medfront));
FOR_EACH(i, 0, 2) CHK(medback[i] == medfront[i]);
OK(senc_scene_ref_put(scn));
diff --git a/src/test_senc_some_enclosures.c b/src/test_senc_some_enclosures.c
@@ -3395,7 +3395,7 @@ main(int argc, char** argv)
OK(senc_scene_get_vertices_count(scn, &count));
CHK(count == NB_CYL * CYL_VRTX_COUNT);
- OK(senc_scene_get_primitives_count(scn, &count));
+ OK(senc_scene_get_triangles_count(scn, &count));
CHK(count == NB_CYL * CYL_TRG_COUNT);
OK(senc_scene_get_enclosure_count(scn, &count));
diff --git a/src/test_senc_some_triangles.c b/src/test_senc_some_triangles.c
@@ -2712,7 +2712,7 @@ main(int argc, char** argv)
OK(senc_scene_get_vertices_count(scn, &count));
CHK(count == NB_CYL * CYL_VRTX_COUNT);
- OK(senc_scene_get_primitives_count(scn, &count));
+ OK(senc_scene_get_triangles_count(scn, &count));
CHK(count == NB_CYL * CYL_TRG_COUNT);
OK(senc_scene_get_enclosure_count(scn, &count));
diff --git a/src/test_senc_unspecified_medium.c b/src/test_senc_unspecified_medium.c
@@ -221,10 +221,10 @@ test(const int convention)
FOR_EACH(t, 0, header.primitives_count) {
unsigned ind[3];
- OK(senc_enclosure_get_primitive_global_id(enclosure, t, &gid, &side));
+ OK(senc_enclosure_get_triangle_id(enclosure, t, &gid, &side));
CHK(gid == t);
CHK(side == (medium == 1) ? SENC_BACK : SENC_FRONT);
- OK(senc_enclosure_get_primitive(enclosure, t, ind));
+ OK(senc_enclosure_get_triangle(enclosure, t, ind));
}
OK(senc_enclosure_ref_put(enclosure));
}
@@ -300,7 +300,7 @@ test(const int convention)
OK(senc_enclosure_ref_put(ee));
FOR_EACH(t, 0, header.primitives_count) {
- OK(senc_enclosure_get_primitive_global_id(enclosure, t, &gid, &side));
+ OK(senc_enclosure_get_triangle_id(enclosure, t, &gid, &side));
CHK(gid == t);
CHK(side == (medium == 1) ? SENC_BACK : SENC_FRONT);
}
diff --git a/src/test_senc_utils.h b/src/test_senc_utils.h
@@ -150,7 +150,7 @@ dump_global
ASSERT(scn && name);
OK(senc_scene_get_vertices_count(scn, &vertices_count));
- OK(senc_scene_get_primitives_count(scn, &triangles_count));
+ OK(senc_scene_get_triangles_count(scn, &triangles_count));
stream = fopen(name, "w");
CHK(stream);
@@ -161,7 +161,7 @@ dump_global
}
FOR_EACH(i, 0, triangles_count) {
unsigned indices[3];
- OK(senc_scene_get_primitive(scn, i, indices));
+ OK(senc_scene_get_triangle(scn, i, indices));
fprintf(stream, "f %lu %lu %lu\n", (unsigned long)(1 + indices[0]),
(unsigned long)(1 + indices[1]), (unsigned long)(1 + indices[2]));
}
@@ -195,7 +195,7 @@ dump_enclosure
}
FOR_EACH(i, 0, header.primitives_count) {
unsigned indices[3];
- OK(senc_enclosure_get_primitive(enclosure, i, indices));
+ OK(senc_enclosure_get_triangle(enclosure, i, indices));
fprintf(stream, "f %lu %lu %lu\n", (unsigned long)(1+indices[0]),
(unsigned long)(1+indices[1]), (unsigned long)(1+indices[2]));
}
@@ -235,7 +235,7 @@ cmp_trg
ASSERT(enclosure && trg2 && vertices2 && trg_eq && trg_reversed);
- OK(senc_enclosure_get_primitive(enclosure, itri, trg1));
+ OK(senc_enclosure_get_triangle(enclosure, itri, trg1));
FOR_EACH(i, 0, 3) {
OK(senc_enclosure_get_vertex(enclosure, trg1[i], t1[i]));
d3_set(t2[i], vertices2 + (3 * trg2[i]));