Javadoc Generated Documentation
Spike Examples Part of BowlerStudio
Java implementation of BSP based CSG (Constructive Solid Geometry). It is the only simple and free Java implementation I am aware of. This implementation uses an optimized CSG algorithm based on csg.js (see CSG
and Node
classes). Thanks to the author for creating the csg.js library.
In addition to CSG this library provides the following features:
- optimized
difference()
andunion()
operations (many thanks to Sebastian Reiter) - extrusion of concave, non-intersecting polygons (uses Poly2Tri for triangulation)
- convex hull (uses QuickHull3D)
- weighted transformations (Scale, Rotation, Translation and Mirror)
- STL import and export (STLLoader from Fiji)
- OBJ export including material information (see screenshot below)
- supports conversion of CSG's to
JavaFX 3D
nodes - 3d text support (using FXyz)
JCSG on stackoverflow.
<dependency>
<groupId>com.neuronrobotics</groupId>
<artifactId>JavaCad</artifactId>
<version>VERSION_FROM_BADGE</version>
<type>zip</type>
</dependency>
repositories {
//com.neuronrobotics hosting point
maven { url 'https://oss.sonatype.org/content/repositories/staging/' }
}
dependencies {
compile "com.neuronrobotics:JavaCad:VERSION_FROM_BADGE"
}
- Java >= 1.8
- Internet connection (dependencies are downloaded automatically)
- IDE: Gradle Plugin (not necessary for command line usage)
Open the JCSG
Gradle project in your favourite IDE (tested with NetBeans 7.4) and build it
by calling the assemble
task.
Navigate to the Gradle project (e.g., path/to/JCSG
) and enter the following command
sudo update-alternatives --config java # select Java 8
sudo apt-get install libopenjfx-java
bash gradlew assemble
gradlew assemble
// we use cube and sphere as base geometries
CSG cube = new Cube(2).toCSG();
CSG sphere = new Sphere(1.25).toCSG();
// perform union, difference and intersection
CSG cubePlusSphere = cube.union(sphere);
CSG cubeMinusSphere = cube.difference(sphere);
CSG cubeIntersectSphere = cube.intersect(sphere);
// translate geometries to prevent overlapping
CSG union = cube.
union(sphere.transformed(Transform.unity().translateX(3))).
union(cubePlusSphere.transformed(Transform.unity().translateX(6))).
union(cubeMinusSphere.transformed(Transform.unity().translateX(9))).
union(cubeIntersectSphere.transformed(Transform.unity().translateX(12)));
// save union as stl
try {
FileUtil.write(
Paths.get("sample.stl"),
union.toStlString()
);
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
-
Export your gpg private key from the system that you have created it.
- Find your key-id (using
gpg --list-secret-keys --keyid-format=long
) - Put the GPG id into a variable
OSSRH_GPG_SECRET_KEY_ID
- Export the gpg secret key to an ASCII file using
gpg --export-secret-keys -a <key-id> > secret.txt
- Edit
secret.txt
using a plain text editor, and replace all newlines with a literal "\n" until everything is on a single line
- Find your key-id (using
-
Set up GitHub Actions secrets
- Create a secret called
OSSRH_GPG_SECRET_KEY
using the text from your editedsecret.txt
file (the whole text should be in a single line) - Create a secret called
OSSRH_GPG_SECRET_KEY_PASSWORD
containing the password for your gpg secret key
- Create a secret called
-
Add Maven Credentials
- In ~/gradle.properties, osshUsername
MAVEN_USERNAME
- In ~/gradle.properties, osshPassword
MAVEN_PASSWORD
- In ~/gradle.properties, osshUsername
-
Create a GitHub Actions step to install the gpg secret key
- Add an action similar to:
- id: install-secret-key name: Install gpg secret key run: | cat <(echo -e "${{ secrets.OSSRH_GPG_SECRET_KEY }}") | gpg --batch --import gpg --list-secret-keys --keyid-format LONG
- Verify that the secret key is shown in the GitHub Actions logs
- You can remove the output from list secret keys if you are confident that this action will work, but it is better to leave it in there
- Add an action similar to: