VisualPolygon is a JavaFX desktop application for drawing polygons, placing a circular "camera," and visualizing which vertices and edges are visible from that camera. It combines interactive editing with computational geometry powered by JTS to animate the step-by-step construction of a visibility polygon.
- Draw polygons interactively or load them from WKT files stored in
src/test/resources. - Place a circular camera inside the polygon and visualize visibility lines (green), occluded lines (red), and intermediate intersections (yellow).
- Step through the scanning process or run it automatically to build the full visibility polygon.
- Save polygons back to disk via a WKT writer.
- Basic logging panel with filtering and pause/tail controls.
+--------------------+ +----------------+ +---------------------------+
| JavaFX View (FXML) | <---> | ViewModel | <---> | Model (Geometry Builder) |
| - ViewController | | - ViewModel | | - DataModel / Builder |
| - Shapes & Camera | | - Observable | | - GeometryCamera, Vertex |
+--------------------+ +----------------+ +---------------------------+
| | |
| user events | binds / updates | JTS geometry
v v v
Render polygons, Tracks vertices, camera Computes steps, lines,
drag/zoom/pan, details, files, status, and visibility polygon
trigger scan steps and delegates to model using JTS operations
- Java 11
- JavaFX (controls, FXML)
- JTS Topology Suite (geometry operations)
- Lombok
- Maven
- JUnit 5
- Ensure Java 11+ and Maven are installed.
- Clone the repository and navigate to its root.
- Download dependencies:
mvn dependency:resolve
mvn clean javafx:runThis launches the JavaFX UI, starting from com.bachelor.visualpolygon.StartApp.
mvn testNote: in restricted environments Maven may be unable to resolve plugins from Maven Central.
- View layer (
viewpackage):ViewControllerwires FXML controls, handles mouse events for drawing/editing polygons, manages zoom/pan (SceneGestures), and renders polygons/lines viaPolygonModified,Point, andCamerashapes. - ViewModel layer (
viewmodelpackage):ViewModelexposes observable lists for vertices, camera details, status text, file picker entries, and delegates geometry updates to the model. It also loads/saves polygons using WKT readers/writers. - Model layer (
modelpackage):DataModelManagerimplementsDataModelby coordinating thegeometrypackage.Builderdrives the sweep/stripe algorithm, leveragingInitializerutilities,GeometryCamerafor tangents, andVertexobjects tied to JavaFX properties.
VisualPolygon/
├── pom.xml
├── README.md
├── src/
│ ├── main/java/com/bachelor/visualpolygon/
│ │ ├── App.java
│ │ ├── StartApp.java
│ │ ├── logging/
│ │ ├── model/
│ │ │ └── geometry/
│ │ ├── view/
│ │ │ └── shapes/
│ │ └── viewmodel/
│ └── test/java/com/bachelor/visualpolygon/
│ └── ...
└── src/test/resources/ # Sample WKT polygons
- Add validation to prevent creating invalid or self-intersecting polygons during drawing.
- Persist user settings (last loaded file, default camera radius, theme).
- Provide headless computation mode (CLI) for batch visibility calculations.
- Replace static collections (e.g., vertices) with instance-level state to support multiple polygons or sessions.
- Improve error handling and user feedback for geometry exceptions (e.g., camera inside polygon).
- Fork the repository and create a feature branch.
- Format code consistently with existing style (Java 11, Lombok-enabled).
- Add tests for new functionality where feasible (
src/test/java). - Run
mvn test(or explain environment limitations) before submitting. - Open a pull request describing the change and rationale.