h3 3.4.4 → 3.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +10 -0
- data/Gemfile.lock +1 -1
- data/README.md +2 -1
- data/ext/h3/Makefile +1 -1
- data/ext/h3/src/.gitignore +2 -1
- data/ext/h3/src/CHANGELOG.md +9 -0
- data/ext/h3/src/CMakeLists.txt +72 -45
- data/ext/h3/src/RELEASE.md +2 -1
- data/ext/h3/src/VERSION +1 -1
- data/ext/h3/src/docs/api/hierarchy.md +2 -0
- data/ext/h3/src/docs/api/indexing.md +3 -1
- data/ext/h3/src/docs/api/inspection.md +20 -0
- data/ext/h3/src/docs/api/misc.md +2 -0
- data/ext/h3/src/docs/api/regions.md +2 -0
- data/ext/h3/src/docs/api/traversal.md +2 -0
- data/ext/h3/src/docs/api/uniedge.md +2 -0
- data/ext/h3/src/docs/community/bindings.md +4 -0
- data/ext/h3/src/docs/community/tutorials.md +12 -0
- data/ext/h3/src/scripts/update_version.sh +50 -0
- data/ext/h3/src/src/apps/applib/include/args.h +122 -0
- data/ext/h3/src/src/apps/applib/include/utility.h +5 -62
- data/ext/h3/src/src/apps/applib/lib/args.c +216 -0
- data/ext/h3/src/src/apps/applib/lib/utility.c +40 -206
- data/ext/h3/src/src/apps/filters/geoToH3.c +7 -9
- data/ext/h3/src/src/apps/filters/h3ToComponents.c +50 -47
- data/ext/h3/src/src/apps/filters/h3ToGeo.c +7 -30
- data/ext/h3/src/src/apps/filters/h3ToGeoBoundary.c +7 -27
- data/ext/h3/src/src/apps/filters/h3ToLocalIj.c +42 -25
- data/ext/h3/src/src/apps/filters/hexRange.c +43 -24
- data/ext/h3/src/src/apps/filters/kRing.c +4 -4
- data/ext/h3/src/src/apps/filters/localIjToH3.c +63 -21
- data/ext/h3/src/src/apps/miscapps/h3ToGeoBoundaryHier.c +68 -44
- data/ext/h3/src/src/apps/miscapps/h3ToGeoHier.c +68 -43
- data/ext/h3/src/src/apps/miscapps/h3ToHier.c +48 -37
- data/ext/h3/src/src/apps/testapps/mkRandGeo.c +32 -27
- data/ext/h3/src/src/apps/testapps/mkRandGeoBoundary.c +33 -28
- data/ext/h3/src/src/apps/testapps/testH3GetFaces.c +136 -0
- data/ext/h3/src/src/h3lib/include/faceijk.h +19 -7
- data/ext/h3/src/src/h3lib/include/h3api.h.in +12 -1
- data/ext/h3/src/src/h3lib/lib/algos.c +7 -2
- data/ext/h3/src/src/h3lib/lib/faceijk.c +135 -103
- data/ext/h3/src/src/h3lib/lib/h3Index.c +86 -5
- data/lib/h3/bindings/private.rb +1 -0
- data/lib/h3/inspection.rb +34 -0
- data/lib/h3/version.rb +1 -1
- data/spec/inspection_spec.rb +33 -1
- metadata +6 -2
@@ -1,5 +1,5 @@
|
|
1
1
|
/*
|
2
|
-
* Copyright 2016-2017 Uber Technologies, Inc.
|
2
|
+
* Copyright 2016-2017, 2019 Uber Technologies, Inc.
|
3
3
|
*
|
4
4
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
5
5
|
* you may not use this file except in compliance with the License.
|
@@ -17,7 +17,7 @@
|
|
17
17
|
* @brief takes an optional H3 index and generates all descendant cells at the
|
18
18
|
* specified resolution.
|
19
19
|
*
|
20
|
-
*
|
20
|
+
* See `h3ToHier --help` for usage.
|
21
21
|
*
|
22
22
|
* The program generates all cells at the specified resolution, optionally
|
23
23
|
* only the children of the given index.
|
@@ -25,30 +25,25 @@
|
|
25
25
|
* `resolution` should be a positive integer. The default is 0 (i.e., only the
|
26
26
|
* base cells).
|
27
27
|
*
|
28
|
-
* `
|
28
|
+
* `parent` should be an H3Index. By default, all indices at the specified
|
29
29
|
* resolution are generated.
|
30
30
|
*/
|
31
31
|
|
32
|
+
#include <inttypes.h>
|
32
33
|
#include <stdio.h>
|
33
34
|
#include <stdlib.h>
|
34
|
-
#include
|
35
|
+
#include "args.h"
|
35
36
|
#include "baseCells.h"
|
36
|
-
#include "coordijk.h"
|
37
|
-
#include "geoCoord.h"
|
38
37
|
#include "h3Index.h"
|
39
38
|
#include "h3api.h"
|
40
39
|
#include "kml.h"
|
41
40
|
#include "utility.h"
|
42
|
-
#include "vec2d.h"
|
43
|
-
|
44
|
-
#include "algos.h"
|
45
41
|
|
46
42
|
void recursiveH3IndexToHier(H3Index h, int res) {
|
47
43
|
for (int d = 0; d < 7; d++) {
|
48
44
|
H3_SET_INDEX_DIGIT(h, res, d);
|
49
45
|
|
50
46
|
// skip the pentagonal deleted subsequence
|
51
|
-
|
52
47
|
if (_isBaseCellPentagon(H3_GET_BASE_CELL(h)) &&
|
53
48
|
_h3LeadingNonZeroDigit(h) == 1) {
|
54
49
|
continue;
|
@@ -62,28 +57,54 @@ void recursiveH3IndexToHier(H3Index h, int res) {
|
|
62
57
|
}
|
63
58
|
}
|
64
59
|
|
65
|
-
int main(int argc, char*
|
66
|
-
|
67
|
-
|
68
|
-
fprintf(stderr, "usage: %s [resolution H3Index]\n", argv[0]);
|
69
|
-
exit(1);
|
70
|
-
}
|
60
|
+
int main(int argc, char *argv[]) {
|
61
|
+
int res;
|
62
|
+
H3Index parentIndex = 0;
|
71
63
|
|
72
|
-
|
73
|
-
|
64
|
+
Arg helpArg = ARG_HELP;
|
65
|
+
Arg resArg = {.names = {"-r", "--resolution"},
|
66
|
+
.scanFormat = "%d",
|
67
|
+
.valueName = "res",
|
68
|
+
.value = &res,
|
69
|
+
.required = true,
|
70
|
+
.helpText = "Resolution, 0-15 inclusive."};
|
71
|
+
Arg parentArg = {
|
72
|
+
.names = {"-p", "--parent"},
|
73
|
+
.scanFormat = "%" PRIx64,
|
74
|
+
.valueName = "parent",
|
75
|
+
.value = &parentIndex,
|
76
|
+
.helpText = "Print only indexes descendent from this index."};
|
74
77
|
|
75
|
-
|
78
|
+
Arg *args[] = {&helpArg, &resArg, &parentArg};
|
79
|
+
const int numArgs = 3;
|
80
|
+
const char *helpText = "Print all indexes at the specified resolution";
|
76
81
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
82
|
+
if (parseArgs(argc, argv, numArgs, args, &helpArg, helpText)) {
|
83
|
+
return helpArg.found ? 0 : 1;
|
84
|
+
}
|
85
|
+
|
86
|
+
if (res > MAX_H3_RES) {
|
87
|
+
printHelp(stderr, argv[0], helpText, numArgs, args,
|
88
|
+
"Resolution exceeds maximum resolution.", NULL);
|
89
|
+
return 1;
|
90
|
+
}
|
91
|
+
|
92
|
+
if (parentArg.found && !H3_EXPORT(h3IsValid)(parentIndex)) {
|
93
|
+
printHelp(stderr, argv[0], helpText, numArgs, args,
|
94
|
+
"Parent index is invalid.", NULL);
|
95
|
+
return 1;
|
84
96
|
}
|
85
97
|
|
86
|
-
if (
|
98
|
+
if (parentArg.found) {
|
99
|
+
// parent is the same or higher resolution than the target.
|
100
|
+
if (res <= H3_GET_RESOLUTION(parentIndex)) {
|
101
|
+
h3Println(parentIndex);
|
102
|
+
} else {
|
103
|
+
int rootRes = H3_GET_RESOLUTION(parentIndex);
|
104
|
+
H3_SET_RESOLUTION(parentIndex, res);
|
105
|
+
recursiveH3IndexToHier(parentIndex, rootRes + 1);
|
106
|
+
}
|
107
|
+
} else {
|
87
108
|
// Generate all
|
88
109
|
for (int bc = 0; bc < NUM_BASE_CELLS; bc++) {
|
89
110
|
H3Index rootCell = H3_INIT;
|
@@ -96,15 +117,5 @@ int main(int argc, char* argv[]) {
|
|
96
117
|
recursiveH3IndexToHier(rootCell, 1);
|
97
118
|
}
|
98
119
|
}
|
99
|
-
} else {
|
100
|
-
// prefix is the same or higher resolution than
|
101
|
-
// the target.
|
102
|
-
if (res <= H3_GET_RESOLUTION(prefixIndex)) {
|
103
|
-
h3Println(prefixIndex);
|
104
|
-
} else {
|
105
|
-
int rootRes = H3_GET_RESOLUTION(prefixIndex);
|
106
|
-
H3_SET_RESOLUTION(prefixIndex, res);
|
107
|
-
recursiveH3IndexToHier(prefixIndex, rootRes + 1);
|
108
|
-
}
|
109
120
|
}
|
110
121
|
}
|
@@ -17,7 +17,7 @@
|
|
17
17
|
* @brief generates random lat/lon pairs and bins them at the specified
|
18
18
|
* resolution
|
19
19
|
*
|
20
|
-
*
|
20
|
+
* See `mkRandGeo --help` for usage.
|
21
21
|
*
|
22
22
|
* The program generates `numPoints` random lat/lon coordinates and outputs
|
23
23
|
* them along with the corresponding H3Index at the specified `resolution`.
|
@@ -25,38 +25,43 @@
|
|
25
25
|
|
26
26
|
#include <stdio.h>
|
27
27
|
#include <stdlib.h>
|
28
|
-
#include
|
29
|
-
#include "baseCells.h"
|
30
|
-
#include "h3Index.h"
|
28
|
+
#include "args.h"
|
31
29
|
#include "utility.h"
|
32
30
|
|
33
|
-
void randomGeo(GeoCoord* g) {
|
34
|
-
static int init = 0;
|
35
|
-
if (!init) {
|
36
|
-
srand((unsigned int)time(0));
|
37
|
-
init = 1;
|
38
|
-
}
|
39
|
-
|
40
|
-
g->lat = H3_EXPORT(degsToRads)(
|
41
|
-
(((float)rand() / (float)(RAND_MAX)) * 180.0) - 90.0);
|
42
|
-
g->lon = H3_EXPORT(degsToRads)((float)rand() / (float)(RAND_MAX)) * 360.0;
|
43
|
-
}
|
44
|
-
|
45
31
|
int main(int argc, char* argv[]) {
|
46
|
-
|
47
|
-
if (argc > 3) {
|
48
|
-
fprintf(stderr, "usage: %s numPoints resolution\n", argv[0]);
|
49
|
-
exit(1);
|
50
|
-
}
|
51
|
-
|
32
|
+
int res = 0;
|
52
33
|
int numPoints = 0;
|
53
|
-
if (!sscanf(argv[1], "%d", &numPoints))
|
54
|
-
error("numPoints must be an integer");
|
55
34
|
|
56
|
-
|
57
|
-
|
35
|
+
Arg helpArg = ARG_HELP;
|
36
|
+
Arg numPointsArg = {
|
37
|
+
.names = {"-n", "--num-points"},
|
38
|
+
.required = true,
|
39
|
+
.scanFormat = "%d",
|
40
|
+
.valueName = "num",
|
41
|
+
.value = &numPoints,
|
42
|
+
.helpText = "Number of random lat/lon pairs to generate."};
|
43
|
+
Arg resArg = {.names = {"-r", "--resolution"},
|
44
|
+
.required = true,
|
45
|
+
.scanFormat = "%d",
|
46
|
+
.valueName = "res",
|
47
|
+
.value = &res,
|
48
|
+
.helpText = "Resolution, 0-15 inclusive."};
|
49
|
+
|
50
|
+
Arg* args[] = {&helpArg, &numPointsArg, &resArg};
|
51
|
+
const int numArgs = 3;
|
52
|
+
const char* helpText =
|
53
|
+
"Generates random lat/lon pairs and indexes them at the specified "
|
54
|
+
"resolution.";
|
58
55
|
|
59
|
-
if (
|
56
|
+
if (parseArgs(argc, argv, numArgs, args, &helpArg, helpText)) {
|
57
|
+
return helpArg.found ? 0 : 1;
|
58
|
+
}
|
59
|
+
|
60
|
+
if (res > MAX_H3_RES) {
|
61
|
+
printHelp(stderr, argv[0], helpText, numArgs, args,
|
62
|
+
"Resolution exceeds maximum resolution.", NULL);
|
63
|
+
return 1;
|
64
|
+
}
|
60
65
|
|
61
66
|
for (int i = 0; i < numPoints; i++) {
|
62
67
|
GeoCoord g;
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/*
|
2
|
-
* Copyright 2016-2017 Uber Technologies, Inc.
|
2
|
+
* Copyright 2016-2017, 2019 Uber Technologies, Inc.
|
3
3
|
*
|
4
4
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
5
5
|
* you may not use this file except in compliance with the License.
|
@@ -16,7 +16,7 @@
|
|
16
16
|
/** @file
|
17
17
|
* @brief generates random cell indexes and the corresponding cell boundaries
|
18
18
|
*
|
19
|
-
*
|
19
|
+
* See `mkRandGeoBoundary --help` for usage.
|
20
20
|
*
|
21
21
|
* The program generates `numPoints` random lat/lon coordinates and outputs
|
22
22
|
* them along with the corresponding H3Index at the specified `resolution`.
|
@@ -24,38 +24,43 @@
|
|
24
24
|
|
25
25
|
#include <stdio.h>
|
26
26
|
#include <stdlib.h>
|
27
|
-
#include
|
28
|
-
#include "baseCells.h"
|
29
|
-
#include "h3Index.h"
|
27
|
+
#include "args.h"
|
30
28
|
#include "utility.h"
|
31
29
|
|
32
|
-
void randomGeo(GeoCoord* g) {
|
33
|
-
static int init = 0;
|
34
|
-
if (!init) {
|
35
|
-
srand((unsigned int)time(0));
|
36
|
-
init = 1;
|
37
|
-
}
|
38
|
-
|
39
|
-
g->lat = H3_EXPORT(degsToRads)(
|
40
|
-
(((float)rand() / (float)(RAND_MAX)) * 180.0) - 90.0);
|
41
|
-
g->lon = H3_EXPORT(degsToRads)((float)rand() / (float)(RAND_MAX)) * 360.0;
|
42
|
-
}
|
43
|
-
|
44
30
|
int main(int argc, char* argv[]) {
|
45
|
-
|
46
|
-
if (argc > 3) {
|
47
|
-
fprintf(stderr, "usage: %s numPoints resolution\n", argv[0]);
|
48
|
-
exit(1);
|
49
|
-
}
|
50
|
-
|
31
|
+
int res = 0;
|
51
32
|
int numPoints = 0;
|
52
|
-
if (!sscanf(argv[1], "%d", &numPoints))
|
53
|
-
error("numPoints must be an integer");
|
54
33
|
|
55
|
-
|
56
|
-
|
34
|
+
Arg helpArg = ARG_HELP;
|
35
|
+
Arg numPointsArg = {
|
36
|
+
.names = {"-n", "--num-points"},
|
37
|
+
.required = true,
|
38
|
+
.scanFormat = "%d",
|
39
|
+
.valueName = "num",
|
40
|
+
.value = &numPoints,
|
41
|
+
.helpText = "Number of random lat/lon pairs to generate."};
|
42
|
+
Arg resArg = {.names = {"-r", "--resolution"},
|
43
|
+
.required = true,
|
44
|
+
.scanFormat = "%d",
|
45
|
+
.valueName = "res",
|
46
|
+
.value = &res,
|
47
|
+
.helpText = "Resolution, 0-15 inclusive."};
|
48
|
+
|
49
|
+
Arg* args[] = {&helpArg, &numPointsArg, &resArg};
|
50
|
+
const int numArgs = 3;
|
51
|
+
const char* helpText =
|
52
|
+
"Generates random cell indexes and cell boundaries at the specified "
|
53
|
+
"resolution.";
|
57
54
|
|
58
|
-
if (
|
55
|
+
if (parseArgs(argc, argv, numArgs, args, &helpArg, helpText)) {
|
56
|
+
return helpArg.found ? 0 : 1;
|
57
|
+
}
|
58
|
+
|
59
|
+
if (res > MAX_H3_RES) {
|
60
|
+
printHelp(stderr, argv[0], helpText, numArgs, args,
|
61
|
+
"Resolution exceeds maximum resolution.", NULL);
|
62
|
+
return 1;
|
63
|
+
}
|
59
64
|
|
60
65
|
for (int i = 0; i < numPoints; i++) {
|
61
66
|
GeoCoord g;
|
@@ -0,0 +1,136 @@
|
|
1
|
+
/*
|
2
|
+
* Copyright 2019 Uber Technologies, Inc.
|
3
|
+
*
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
* you may not use this file except in compliance with the License.
|
6
|
+
* You may obtain a copy of the License at
|
7
|
+
*
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
*
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
* See the License for the specific language governing permissions and
|
14
|
+
* limitations under the License.
|
15
|
+
*/
|
16
|
+
/** @file
|
17
|
+
* @brief tests the h3GetFaces function
|
18
|
+
*/
|
19
|
+
|
20
|
+
#include <stdio.h>
|
21
|
+
#include <stdlib.h>
|
22
|
+
#include "baseCells.h"
|
23
|
+
#include "h3Index.h"
|
24
|
+
#include "h3api.h"
|
25
|
+
#include "test.h"
|
26
|
+
#include "utility.h"
|
27
|
+
|
28
|
+
static int countFaces(H3Index h3, int expectedMax) {
|
29
|
+
int sz = H3_EXPORT(maxFaceCount)(h3);
|
30
|
+
t_assert(sz == expectedMax, "got expected max face count");
|
31
|
+
int *faces = calloc(sz, sizeof(int));
|
32
|
+
|
33
|
+
H3_EXPORT(h3GetFaces)(h3, faces);
|
34
|
+
|
35
|
+
int validCount = 0;
|
36
|
+
for (int i = 0; i < sz; i++) {
|
37
|
+
if (faces[i] >= 0 && faces[i] <= 19) validCount++;
|
38
|
+
}
|
39
|
+
|
40
|
+
free(faces);
|
41
|
+
return validCount;
|
42
|
+
}
|
43
|
+
|
44
|
+
static void assertSingleHexFace(H3Index h3) {
|
45
|
+
int validCount = countFaces(h3, 2);
|
46
|
+
t_assert(validCount == 1, "got a single valid face");
|
47
|
+
}
|
48
|
+
|
49
|
+
static void assertMultipleHexFaces(H3Index h3) {
|
50
|
+
int validCount = countFaces(h3, 2);
|
51
|
+
t_assert(validCount == 2, "got multiple valid faces for a hexagon");
|
52
|
+
}
|
53
|
+
|
54
|
+
static void assertPentagonFaces(H3Index h3) {
|
55
|
+
t_assert(H3_EXPORT(h3IsPentagon)(h3), "got a pentagon");
|
56
|
+
int validCount = countFaces(h3, 5);
|
57
|
+
t_assert(validCount == 5, "got 5 valid faces for a pentagon");
|
58
|
+
}
|
59
|
+
|
60
|
+
SUITE(h3GetFaces) {
|
61
|
+
TEST(singleFaceHexes) {
|
62
|
+
// base cell 16 is at the center of an icosahedron face,
|
63
|
+
// so all children should have the same face
|
64
|
+
iterateBaseCellIndexesAtRes(2, assertSingleHexFace, 16);
|
65
|
+
iterateBaseCellIndexesAtRes(3, assertSingleHexFace, 16);
|
66
|
+
}
|
67
|
+
|
68
|
+
TEST(hexagonWithEdgeVertices) {
|
69
|
+
// Class II pentagon neighbor - one face, two adjacent vertices on edge
|
70
|
+
H3Index h3 = 0x821c37fffffffff;
|
71
|
+
assertSingleHexFace(h3);
|
72
|
+
}
|
73
|
+
|
74
|
+
TEST(hexagonWithDistortion) {
|
75
|
+
// Class III pentagon neighbor, distortion across faces
|
76
|
+
H3Index h3 = 0x831c06fffffffff;
|
77
|
+
assertMultipleHexFaces(h3);
|
78
|
+
}
|
79
|
+
|
80
|
+
TEST(hexagonCrossingFaces) {
|
81
|
+
// Class II hex with two vertices on edge
|
82
|
+
H3Index h3 = 0x821ce7fffffffff;
|
83
|
+
assertMultipleHexFaces(h3);
|
84
|
+
}
|
85
|
+
|
86
|
+
TEST(classIIIPentagon) {
|
87
|
+
H3Index pentagon;
|
88
|
+
setH3Index(&pentagon, 1, 4, 0);
|
89
|
+
assertPentagonFaces(pentagon);
|
90
|
+
}
|
91
|
+
|
92
|
+
TEST(classIIPentagon) {
|
93
|
+
H3Index pentagon;
|
94
|
+
setH3Index(&pentagon, 2, 4, 0);
|
95
|
+
assertPentagonFaces(pentagon);
|
96
|
+
}
|
97
|
+
|
98
|
+
TEST(res15Pentagon) {
|
99
|
+
H3Index pentagon;
|
100
|
+
setH3Index(&pentagon, 15, 4, 0);
|
101
|
+
assertPentagonFaces(pentagon);
|
102
|
+
}
|
103
|
+
|
104
|
+
TEST(baseCellHexagons) {
|
105
|
+
int singleCount = 0;
|
106
|
+
int multipleCount = 0;
|
107
|
+
for (int i = 0; i < NUM_BASE_CELLS; i++) {
|
108
|
+
if (!_isBaseCellPentagon(i)) {
|
109
|
+
// Make the base cell index
|
110
|
+
H3Index baseCell;
|
111
|
+
setH3Index(&baseCell, 0, i, 0);
|
112
|
+
int validCount = countFaces(baseCell, 2);
|
113
|
+
t_assert(validCount > 0, "got at least one face");
|
114
|
+
if (validCount == 1)
|
115
|
+
singleCount++;
|
116
|
+
else
|
117
|
+
multipleCount++;
|
118
|
+
}
|
119
|
+
}
|
120
|
+
t_assert(singleCount == 4 * 20,
|
121
|
+
"got single face for 4 aligned hex base cells per face");
|
122
|
+
t_assert(multipleCount == 1.5 * 20,
|
123
|
+
"got multiple faces for non-aligned hex base cells");
|
124
|
+
}
|
125
|
+
|
126
|
+
TEST(baseCellPentagons) {
|
127
|
+
for (int i = 0; i < NUM_BASE_CELLS; i++) {
|
128
|
+
if (_isBaseCellPentagon(i)) {
|
129
|
+
// Make the base cell index
|
130
|
+
H3Index baseCell;
|
131
|
+
setH3Index(&baseCell, 0, i, 0);
|
132
|
+
assertPentagonFaces(baseCell);
|
133
|
+
}
|
134
|
+
}
|
135
|
+
}
|
136
|
+
}
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/*
|
2
|
-
* Copyright 2016-
|
2
|
+
* Copyright 2016-2019 Uber Technologies, Inc.
|
3
3
|
*
|
4
4
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
5
5
|
* you may not use this file except in compliance with the License.
|
@@ -50,10 +50,6 @@ typedef struct {
|
|
50
50
|
extern const GeoCoord faceCenterGeo[NUM_ICOSA_FACES];
|
51
51
|
|
52
52
|
// indexes for faceNeighbors table
|
53
|
-
/** Invalid faceNeighbors table direction */
|
54
|
-
#define INVALID -1
|
55
|
-
/** Center faceNeighbors table direction */
|
56
|
-
#define CENTER 0
|
57
53
|
/** IJ quadrant faceNeighbors table direction */
|
58
54
|
#define IJ 1
|
59
55
|
/** KI quadrant faceNeighbors table direction */
|
@@ -61,6 +57,19 @@ extern const GeoCoord faceCenterGeo[NUM_ICOSA_FACES];
|
|
61
57
|
/** JK quadrant faceNeighbors table direction */
|
62
58
|
#define JK 3
|
63
59
|
|
60
|
+
/** Invalid face index */
|
61
|
+
#define INVALID_FACE -1
|
62
|
+
|
63
|
+
/** Digit representing overage type */
|
64
|
+
typedef enum {
|
65
|
+
/** No overage (on original face) */
|
66
|
+
NO_OVERAGE = 0,
|
67
|
+
/** On face edge (only occurs on substrate grids) */
|
68
|
+
FACE_EDGE = 1,
|
69
|
+
/** Overage on new face interior */
|
70
|
+
NEW_FACE = 2
|
71
|
+
} Overage;
|
72
|
+
|
64
73
|
// Internal functions
|
65
74
|
|
66
75
|
void _geoToFaceIjk(const GeoCoord* g, int res, FaceIJK* h);
|
@@ -69,8 +78,11 @@ void _faceIjkToGeo(const FaceIJK* h, int res, GeoCoord* g);
|
|
69
78
|
void _faceIjkToGeoBoundary(const FaceIJK* h, int res, int isPentagon,
|
70
79
|
GeoBoundary* g);
|
71
80
|
void _faceIjkPentToGeoBoundary(const FaceIJK* h, int res, GeoBoundary* g);
|
81
|
+
void _faceIjkToVerts(FaceIJK* fijk, int* res, FaceIJK* fijkVerts);
|
82
|
+
void _faceIjkPentToVerts(FaceIJK* fijk, int* res, FaceIJK* fijkVerts);
|
72
83
|
void _hex2dToGeo(const Vec2d* v, int face, int res, int substrate, GeoCoord* g);
|
73
|
-
|
74
|
-
|
84
|
+
Overage _adjustOverageClassII(FaceIJK* fijk, int res, int pentLeading4,
|
85
|
+
int substrate);
|
86
|
+
Overage _adjustPentVertOverage(FaceIJK* fijk, int res);
|
75
87
|
|
76
88
|
#endif
|