From 83d7e2a3b5e14d5e5da076d21f14f5518bc3df2c Mon Sep 17 00:00:00 2001 From: stephengold Date: Fri, 28 Jun 2024 23:15:02 -0700 Subject: [PATCH] add the CylinderShape class --- .../stephengold/joltjni/CylinderShape.java | 58 +++++++++++++++++++ ...thub_stephengold_joltjni_CylinderShape.cpp | 41 +++++++++++++ 2 files changed, 99 insertions(+) create mode 100644 src/main/java/com/github/stephengold/joltjni/CylinderShape.java create mode 100644 src/main/native/glue/com_github_stephengold_joltjni_CylinderShape.cpp diff --git a/src/main/java/com/github/stephengold/joltjni/CylinderShape.java b/src/main/java/com/github/stephengold/joltjni/CylinderShape.java new file mode 100644 index 00000000..85b1997f --- /dev/null +++ b/src/main/java/com/github/stephengold/joltjni/CylinderShape.java @@ -0,0 +1,58 @@ +/* +Copyright (c) 2024 Stephen Gold + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + */ +package com.github.stephengold.joltjni; + +/** + * A {@code Shape} to represent a right circular cylinder. + * + * @author Stephen Gold sgold@sonic.net + */ +public class CylinderShape extends ConvexShape { + // ************************************************************************* + // constructors + + /** + * Instantiate a shape with the specified native object assigned. + * + * @param virtualAddress the virtual address of the native object to assign + * (not zero) + */ + CylinderShape(long virtualAddress) { + super(virtualAddress); + } + + /** + * Instantiate a shape with the specified radius. + * + * @param halfHeight half the desired height + * @param radius the desired radius + */ + public CylinderShape(float halfHeight, float radius) { + long shapeVa = createCylinderShape(halfHeight, radius); + setVirtualAddress(shapeVa, true); + } + // ************************************************************************* + // native private methods + + native private static long createCylinderShape( + float halfHeight, float radius); +} diff --git a/src/main/native/glue/com_github_stephengold_joltjni_CylinderShape.cpp b/src/main/native/glue/com_github_stephengold_joltjni_CylinderShape.cpp new file mode 100644 index 00000000..71e76c91 --- /dev/null +++ b/src/main/native/glue/com_github_stephengold_joltjni_CylinderShape.cpp @@ -0,0 +1,41 @@ +/* +Copyright (c) 2024 Stephen Gold + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + */ + +/* + * Author: Stephen Gold + */ +#include +#include +#include "auto/com_github_stephengold_joltjni_CylinderShape.h" + +using namespace JPH; + +/* + * Class: com_github_stephengold_joltjni_CylinderShape + * Method: createCylinderShape + * Signature: (FF)J + */ +JNIEXPORT jlong JNICALL Java_com_github_stephengold_joltjni_CylinderShape_createCylinderShape + (JNIEnv *, jclass, jfloat halfHeight, jfloat radius) { + CylinderShape * const pResult = new CylinderShape(halfHeight, radius); + return reinterpret_cast (pResult); +}