Koebe-Lib Development Environment
The purpose of this library is to support the creation of geometric constructions in the inversive
geometry of circles on the 2-sphere. The design of the code base was heavily influenced by Sherif Ghali's Introduction to Geometric Computing. This is an excellent reference for anyone interesting in coding a geometric library and gives a good overview of the various design decisions involved. Ghali also gives plenty of companion C++ code, which we referred to for coding several of the operations on various geometric objects and the structure of the
geometry.primitives package is in line with Ghali's suggestion for how to structure such libraries.
The code base also has one application (well, there are a few dummy ones that I need to remove/clean up) that is a first version of what I hope will eventually become a GeoGebra-like application for inversive geometric constructions. That is the
SphericalSketch found in the
sketches package. This application loads a little bare-bones Python IDE and 3D view that allows a user to create and visualize geometric constructions on the fly. Eventually we will post some sample scripts somewhere in this repository.
This is a very alpha-level release. I'm just getting started with this code base, and have some ideas for applications to build on top of it, but I decided to go ahead and release it, because some others are starting to use the code base and thus there needs to be a public repository.
The codebase is written in Kotlin and is developed in JetBrain’s IDEA IntelliJ.
Here is a set-up guide for getting a development environment up and running.
The codebase has some weird dependencies.
They are all managed with Gradle and do not need to be retreived manually.
- cpcore.jar 2.8 - Extracted from CirclePack link
- jython-standalone 2.7.0 - link
- rsyntaxtextarea 2.6.1 - link
- jogl-all-main 2.3.2 - need native libraries - link
- gluegen-rt-main 2.3.2 - need native libraries - link
- processing-core 3.3.6 - link
- antlr4 4.7.1 - link
I have also included an ArcBall class that was converted to Kotlin and lightly modified. The original can be found here.
Setting up the dev-environment.
Dependency gathering and building is done with Gradle.
A local installation can be used, or a Gradle wrapper is available in the bin directory.
To use the wrapper substitute
gradle in the steps below.
Method 1: IntelliJ Project
The goal of this method is to easily retrieve all dependency JARs and register them as dependencies in the IntelliJ project. Building and Running is all done through IntelliJ's systems.
Step 1: Download dependencies
- Clone the repo
- In the
- This will download all dependencies to
Step 2: Create a new IntelliJ Project
- Create a new project
- Select 'Kotlin' in the left pane and 'Kotlin (JVM)' and click 'Next'
- Name the project whatever you want, like 'Koebe-Lib'
- Change the project location to the cloned repo and click 'Finish'
Step 3: Add dependencies to project
- Open Project Structure dialog (Command+; or Ctrl+Shift+Alt+S)
- Click 'Modules' and open the Dependencies tab
- Click '+' and select 'JARs or directories...'
- Select the
- Click the 'Export' checkbox and click 'Apply' and 'OK'
Step 4: Create a runtime configuration.
- Right click on the the
- Select the Run option
Method 2: Standalone Gradle build
The goal of this method is to allow for building and running without using IntelliJ.
All standalone building is done in the builder directory.
Configuration options are available in
Option 1: Build a JAR
- From the
- A standalone executable JAR will be built in
- This can be run with
java -jar build/lib/koebelib.jar
Option 2: Package a Distribution
- From the
- A tarball and a zip file distribution will be built in
Option 3: Install a Distribution
- From the
- A distribution will be installed in
- This can be run with the start script at
Option 4: Just compile (cannot be run)
- From the
Because of how Gradle handles dependencies we cannot run the program from a gradle build
that has not been bundled in some form (ie options 1-3 above).
Attempting to use
gradle run or other methods may result in missing native libraries.