π A Java-based geometric drawing application built using the Scrum methodology, designed to support shape creation, editing, grouping, and custom shape libraries, developed as part of a university project.
Demonstrated proficiency in Java application development, agile Scrum methodology, UI/UX design, advanced shape manipulation features, and automated testing with JUnit.
DrawSnap is a geometric drawing tool developed as part of a Software Architecture Design course project at the University of Salerno. Built in Java using the Scrum framework, this application provides users with an intuitive interface for creating and editing shapes with advanced manipulation capabilities.
-
β Multiple shape types: lines, rectangles, ellipses, polygons, and text
-
π§ Advanced editing: move, resize, rotate, mirror, stretch, cut/copy/paste
-
π¨ Customizable UI: colors, grid display, zoom levels, shape layering
-
π¦ Shape grouping & libraries: group shapes, save reusable custom shapes
-
π§ͺ JUnit test suite for ensuring reliability and robustness
-
π Backlogs & reports managed via Trello and GitHub
-
π Developed with real-world Scrum practices: sprints, reviews, retrospectives, the project highlights the skills of the team members in following agile methodologies
All code comments and internal documentation are written in Italian, as the project was developed during a group exam at the University of Salerno (Italy).
Despite this, the codebase follows international best practices, with clear method names and class structures that make it easily understandable for global developers and recruiters.
-
Create lines, rectangles, ellipses, polygons, and text shapes
-
Customize stroke and fill colors (8+ colors)
-
Adjust shape size, position, and layering (bring to front/back)
-
Cut, Copy, Paste shapes with unlimited Undo levels
-
Rotate shapes by arbitrary angles
-
Mirror shapes horizontally or vertically
-
Stretch shapes in both axes
-
Group/Ungroup multiple shapes for combined operations
-
Save custom shapes as reusable creation commands
-
Import/export shape libraries for specialized domains (e.g., electrical symbols)
-
Zoom support (4+ levels)
-
Grid display (toggleable and resizable)
-
Scrollable canvas larger than the window
-
File persistence: save/load drawings and shape libraries
Developed iteratively over multiple sprints using Scrum methodology, simulating an agile software development lifecycle.
-
Pre-game: Initial backlog creation, architecture design, and setup (GitHub, Trello).
-
Sprint 1: Basic drawing operations and file management.
-
Sprint 2: Advanced editing features and grouping.
-
Sprint 3: Shape libraries, polishing features, and final presentation.
Each sprint included planning, reviews, retrospectives, and burndown tracking, with artifacts stored in the repository.
JUnit-based automated tests were implemented to ensure the correctness of:
-
Shape creation & manipulation
-
Undo operation
-
File save/load functionality
Test classes are located in:
test/java/it/unisa/software_architecture_design/drawsnapdrawingtool/
Because of a version compatiility issue between Mockito and Java 23, when executing tests it is important to add the following VM Options: -ea -Dnet.bytebuddy.experimental=true.
All documentation is available in the docs/ folder, including:
-
Pre-game documents: Initial product backlog, architecture description, and sprint planning.
-
Sprint artifacts: Sprint backlogs, burndown charts, review & retrospective reports for each sprint.
-
User Manual: Guidance for end-users on using DrawSnapβs features.
π¦ draw-snap-drawing-tool
βββ π docs
β βββ 0 - Pre-game
β βββ 1 - First sprint
β βββ 2 - Second sprint
β βββ 3 - Third sprint
β βββ Manuale dβuso
βββ π src/main/java/it/unisa/software_architecture_design/drawsnapdrawingtool
β βββ commands/
β βββ enumeration/
β βββ forme/
β βββ interactionstate/
β βββ memento/
β βββ utils/
β βββ DrawSnapApplication.java
β βββ DrawSnapController.java
β βββ DrawSnapModel.java
β βββ module-info.java
βββ π test/java/it/unisa/software_architecture_design/drawsnapdrawingtool
βββ .gitignore
βββ README.md
βββ pom.xml
βββ mvnw, mvnw.cmd
-
@francescopiocirillo (π Team Leader)
-
Clone the repository:
git clone https://github.com/francescopiocirillo/draw-snap-drawing-tool.git
-
Open in your preferred IDE (IntelliJ, VS Code, NetBeans).
-
Add the following VM Options:
--add-modules javafx.controls,javafx.fxml,javafx.graphics. -
Run
DrawSnapApplication.javato launch the application.
-
β Java version: 23
-
π§ͺ JUnit for testing
-
π¦ Maven for build automation
βοΈ Got feedback or want to contribute? Feel free to open an Issue or submit a Pull Request!
Java drawing tool, geometric drawing program, shape editing software, Java graphics project, collaborative software engineering, Scrum-based Java project, University of Salerno software project, UML-based architecture, JUnit tested Java application, Maven Java project, shape libraries Java, undo redo operations Java, custom shape creation tool, agile software development project, academic Java project
This project is licensed under the MIT License, a permissive open-source license that allows anyone to use, modify, and distribute the software freely, as long as credit is given and the original license is included.
In plain terms: use it, build on it, just donβt blame us if something breaks.
β Like what you see? Consider giving the project a star!