Skip to content

Commit d6ddd1f

Browse files
Ink Open Sourcecopybara-github
authored andcommitted
Add remaining methods for MutableParallelogram
This adds populateFrom() and fromSegmentAndPadding() PiperOrigin-RevId: 682408129
1 parent 5461748 commit d6ddd1f

File tree

5 files changed

+64
-13
lines changed

5 files changed

+64
-13
lines changed

ink/geometry/internal/jni/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -250,6 +250,7 @@ cc_library(
250250
":vec_jni_helper",
251251
"//ink/geometry:angle",
252252
"//ink/geometry:envelope",
253+
"//ink/geometry:point",
253254
"//ink/geometry:quad",
254255
"//ink/geometry:vec",
255256
"//ink/jni/internal:jni_defines",

ink/geometry/internal/jni/affine_transform_jni.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ using ::ink::Quad;
3030

3131
extern "C" {
3232

33-
JNI_METHOD(geometry, AffineTransformHelper, void, nativeApplyParallelogram)
33+
JNI_METHOD(geometry_internal, AffineTransformNative, void,
34+
nativeApplyParallelogram)
3435
(JNIEnv* env, jclass clazz, jfloat affine_transform_A,
3536
jfloat affine_transform_B, jfloat affine_transform_C,
3637
jfloat affine_transform_D, jfloat affine_transform_E,

ink/geometry/internal/jni/parallelogram_jni.cc

Lines changed: 53 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,14 @@
1414

1515
#include <jni.h>
1616

17+
#include <array>
1718
#include <utility>
1819

1920
#include "ink/geometry/angle.h"
2021
#include "ink/geometry/envelope.h"
2122
#include "ink/geometry/internal/jni/rect_jni_helper.h"
2223
#include "ink/geometry/internal/jni/vec_jni_helper.h"
24+
#include "ink/geometry/point.h"
2325
#include "ink/geometry/quad.h"
2426
#include "ink/geometry/vec.h"
2527
#include "ink/jni/internal/jni_defines.h"
@@ -28,14 +30,16 @@ namespace {
2830

2931
using ::ink::Angle;
3032
using ::ink::Envelope;
33+
using ::ink::Point;
3134
using ::ink::Quad;
3235
using ::ink::Vec;
3336

3437
} // namespace
3538

3639
extern "C" {
3740

38-
JNI_METHOD(geometry, ParallelogramNative, jobject, nativeCreateBoundingBox)
41+
JNI_METHOD(geometry_internal, ParallelogramNative, jobject,
42+
nativeCreateBoundingBox)
3943
(JNIEnv* env, jclass clazz, jfloat center_x, jfloat center_y, jfloat width,
4044
jfloat height, jfloat rotation, jfloat shear_factor,
4145
jclass immutable_box_class, jclass immutable_vec_class) {
@@ -48,7 +52,8 @@ JNI_METHOD(geometry, ParallelogramNative, jobject, nativeCreateBoundingBox)
4852
immutable_vec_class);
4953
}
5054

51-
JNI_METHOD(geometry, ParallelogramNative, void, nativePopulateBoundingBox)
55+
JNI_METHOD(geometry_internal, ParallelogramNative, void,
56+
nativePopulateBoundingBox)
5257
(JNIEnv* env, jclass clazz, jfloat center_x, jfloat center_y, jfloat width,
5358
jfloat height, jfloat rotation, jfloat shear_factor, jobject mutable_box) {
5459
Quad quad = Quad::FromCenterDimensionsRotationAndShear(
@@ -59,7 +64,8 @@ JNI_METHOD(geometry, ParallelogramNative, void, nativePopulateBoundingBox)
5964
Envelope(quad).AsRect().value());
6065
}
6166

62-
JNI_METHOD(geometry, ParallelogramNative, jobjectArray, nativeCreateSemiAxes)
67+
JNI_METHOD(geometry_internal, ParallelogramNative, jobjectArray,
68+
nativeCreateSemiAxes)
6369
(JNIEnv* env, jclass clazz, jfloat center_x, jfloat center_y, jfloat width,
6470
jfloat height, jfloat rotation, jfloat shear_factor,
6571
jclass immutable_vec_class) {
@@ -78,7 +84,7 @@ JNI_METHOD(geometry, ParallelogramNative, jobjectArray, nativeCreateSemiAxes)
7884
return vector_array;
7985
}
8086

81-
JNI_METHOD(geometry, ParallelogramNative, void, nativePopulateSemiAxes)
87+
JNI_METHOD(geometry_internal, ParallelogramNative, void, nativePopulateSemiAxes)
8288
(JNIEnv* env, jclass clazz, jfloat center_x, jfloat center_y, jfloat width,
8389
jfloat height, jfloat rotation, jfloat shear_factor, jobject out_axis1,
8490
jobject out_axis2) {
@@ -90,4 +96,47 @@ JNI_METHOD(geometry, ParallelogramNative, void, nativePopulateSemiAxes)
9096
ink::FillJMutableVecFromVec(env, out_axis2, axes.second);
9197
}
9298

99+
JNI_METHOD(geometry_internal, ParallelogramNative, jobjectArray,
100+
nativeCreateCorners)
101+
(JNIEnv* env, jclass clazz, jfloat center_x, jfloat center_y, jfloat width,
102+
jfloat height, jfloat rotation, jfloat shear_factor,
103+
jclass immutable_vec_class) {
104+
Quad quad = Quad::FromCenterDimensionsRotationAndShear(
105+
{center_x, center_y}, width, height, Angle::Radians(rotation),
106+
shear_factor);
107+
std::array<Point, 4> corners = quad.Corners();
108+
jobjectArray vector_array =
109+
env->NewObjectArray(4, immutable_vec_class, nullptr);
110+
for (int i = 0; i < 4; ++i) {
111+
env->SetObjectArrayElement(vector_array, i,
112+
ink::CreateJImmutableVecFromPoint(
113+
env, corners[i], immutable_vec_class));
114+
}
115+
return vector_array;
116+
}
117+
118+
JNI_METHOD(geometry_internal, ParallelogramNative, void, nativePopulateCorners)
119+
(JNIEnv* env, jclass clazz, jfloat center_x, jfloat center_y, jfloat width,
120+
jfloat height, jfloat rotation, jfloat shear_factor, jobject out_corner1,
121+
jobject out_corner2, jobject out_corner3, jobject out_corner4) {
122+
Quad quad = Quad::FromCenterDimensionsRotationAndShear(
123+
{center_x, center_y}, width, height, Angle::Radians(rotation),
124+
shear_factor);
125+
std::array<Point, 4> corners = quad.Corners();
126+
ink::FillJMutableVecFromPoint(env, out_corner1, corners[0]);
127+
ink::FillJMutableVecFromPoint(env, out_corner2, corners[1]);
128+
ink::FillJMutableVecFromPoint(env, out_corner3, corners[2]);
129+
ink::FillJMutableVecFromPoint(env, out_corner4, corners[3]);
130+
}
131+
132+
JNI_METHOD(geometry_internal, ParallelogramNative, jboolean, nativeContains)
133+
(JNIEnv* env, jclass clazz, jfloat center_x, jfloat center_y, jfloat width,
134+
jfloat height, jfloat rotation, jfloat shear_factor, jfloat point_x,
135+
jfloat point_y) {
136+
Quad quad = Quad::FromCenterDimensionsRotationAndShear(
137+
{center_x, center_y}, width, height, Angle::Radians(rotation),
138+
shear_factor);
139+
return quad.Contains({point_x, point_y});
140+
}
141+
93142
} // extern "C"

ink/geometry/internal/jni/rect_jni.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ using ::ink::Rect;
2828

2929
extern "C" {
3030

31-
JNI_METHOD(geometry, BoxHelper, jobject, nativeCreateCenter)
31+
JNI_METHOD(geometry_internal, BoxNative, jobject, nativeCreateCenter)
3232
(JNIEnv* env, jclass clazz, float rect_x_min, jfloat rect_y_min,
3333
jfloat rect_x_max, jfloat rect_y_max, jclass immutable_vec_class) {
3434
Rect rect =
@@ -38,7 +38,7 @@ JNI_METHOD(geometry, BoxHelper, jobject, nativeCreateCenter)
3838
return ink::CreateJImmutableVecFromPoint(env, point, immutable_vec_class);
3939
}
4040

41-
JNI_METHOD(geometry, BoxHelper, void, nativePopulateCenter)
41+
JNI_METHOD(geometry_internal, BoxNative, void, nativePopulateCenter)
4242
(JNIEnv* env, jclass clazz, float rect_x_min, jfloat rect_y_min,
4343
jfloat rect_x_max, jfloat rect_y_max, jobject mutable_vec) {
4444
Rect rect =
@@ -48,15 +48,15 @@ JNI_METHOD(geometry, BoxHelper, void, nativePopulateCenter)
4848
ink::FillJMutableVecFromPoint(env, mutable_vec, point);
4949
}
5050

51-
JNI_METHOD(geometry, BoxHelper, jboolean, nativeContainsPoint)
51+
JNI_METHOD(geometry_internal, BoxNative, jboolean, nativeContainsPoint)
5252
(JNIEnv* env, jclass clazz, jfloat rect_x_min, jfloat rect_y_min,
5353
jfloat rect_x_max, jfloat rect_y_max, jfloat point_x, jfloat point_y) {
5454
Rect rect =
5555
Rect::FromTwoPoints({rect_x_min, rect_y_min}, {rect_x_max, rect_y_max});
5656
return rect.Contains(Point{point_x, point_y});
5757
}
5858

59-
JNI_METHOD(geometry, BoxHelper, jboolean, nativeContainsBox)
59+
JNI_METHOD(geometry_internal, BoxNative, jboolean, nativeContainsBox)
6060
(JNIEnv* env, jclass clazz, jfloat rect_x_min, jfloat rect_y_min,
6161
jfloat rect_x_max, jfloat rect_y_max, jfloat other_x_min, jfloat other_y_min,
6262
jfloat other_x_max, jfloat other_y_max) {

ink/geometry/internal/jni/vec_jni.cc

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,29 +26,29 @@ using ::ink::Vec;
2626

2727
extern "C" {
2828

29-
JNI_METHOD(geometry, VecNative, jobject, unitVec)
29+
JNI_METHOD(geometry_internal, VecNative, jobject, unitVec)
3030
(JNIEnv* env, jclass clazz, jfloat vec_X, jfloat vec_Y,
3131
jclass immutable_vec_class) {
3232
return CreateJImmutableVecFromVec(env, Vec{vec_X, vec_Y}.AsUnitVec(),
3333
immutable_vec_class);
3434
}
3535

36-
JNI_METHOD(geometry, VecNative, void, populateUnitVec)
36+
JNI_METHOD(geometry_internal, VecNative, void, populateUnitVec)
3737
(JNIEnv* env, jclass clazz, jfloat vec_X, jfloat vec_Y,
3838
jobject output_mutable_vec) {
3939
FillJMutableVecFromVec(env, output_mutable_vec,
4040
Vec{vec_X, vec_Y}.AsUnitVec());
4141
}
4242

43-
JNI_METHOD(geometry, VecNative, jfloat, absoluteAngleBetween)
43+
JNI_METHOD(geometry_internal, VecNative, jfloat, absoluteAngleBetween)
4444
(JNIEnv* env, jclass clazz, jfloat first_vec_X, jfloat first_vec_Y,
4545
jfloat second_vec_X, jfloat second_vec_Y) {
4646
return Vec::AbsoluteAngleBetween(Vec{first_vec_X, first_vec_Y},
4747
Vec{second_vec_X, second_vec_Y})
4848
.ValueInRadians();
4949
}
5050

51-
JNI_METHOD(geometry, VecNative, jfloat, signedAngleBetween)
51+
JNI_METHOD(geometry_internal, VecNative, jfloat, signedAngleBetween)
5252
(JNIEnv* env, jclass clazz, jfloat first_vec_X, jfloat first_vec_Y,
5353
jfloat second_vec_X, jfloat second_vec_Y) {
5454
return Vec::SignedAngleBetween(Vec{first_vec_X, first_vec_Y},

0 commit comments

Comments
 (0)