{"id":30050598,"url":"https://github.com/francescopiocirillo/draw-snap-drawing-tool","last_synced_at":"2026-05-18T03:36:27.979Z","repository":{"id":308523960,"uuid":"979972278","full_name":"francescopiocirillo/draw-snap-drawing-tool","owner":"francescopiocirillo","description":"🎨DrawSnap is a Java-based geometric drawing tool built with Scrum methodology. It supports creating and editing shapes (lines, rectangles, ellipses, polygons, text), grouping, custom shape libraries, and advanced editing features like rotation, mirroring, and unlimited undo.","archived":false,"fork":false,"pushed_at":"2025-08-06T10:53:03.000Z","size":23290,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-08-06T12:27:36.657Z","etag":null,"topics":["design-patterns","drawing-app","java","java-drawing-tool","javafx","javafx-gui","junit-test","maven-java","scrum","scrum-agile","software-architecture-and-design","software-engineering","university-of-salerno"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/francescopiocirillo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-05-08T11:07:30.000Z","updated_at":"2025-08-06T10:53:06.000Z","dependencies_parsed_at":"2025-08-06T12:38:05.930Z","dependency_job_id":null,"html_url":"https://github.com/francescopiocirillo/draw-snap-drawing-tool","commit_stats":null,"previous_names":["francescopiocirillo/draw-snap-drawing-tool"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/francescopiocirillo/draw-snap-drawing-tool","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/francescopiocirillo%2Fdraw-snap-drawing-tool","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/francescopiocirillo%2Fdraw-snap-drawing-tool/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/francescopiocirillo%2Fdraw-snap-drawing-tool/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/francescopiocirillo%2Fdraw-snap-drawing-tool/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/francescopiocirillo","download_url":"https://codeload.github.com/francescopiocirillo/draw-snap-drawing-tool/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/francescopiocirillo%2Fdraw-snap-drawing-tool/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33163801,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-17T22:39:12.733Z","status":"online","status_checked_at":"2026-05-18T02:00:06.436Z","response_time":71,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["design-patterns","drawing-app","java","java-drawing-tool","javafx","javafx-gui","junit-test","maven-java","scrum","scrum-agile","software-architecture-and-design","software-engineering","university-of-salerno"],"created_at":"2025-08-07T14:01:49.364Z","updated_at":"2026-05-18T03:36:27.974Z","avatar_url":"https://github.com/francescopiocirillo.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"🎨 DrawSnap – Geometric Drawing Tool\n====================================\n\n🚀 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.\n\n\u003e Demonstrated proficiency in Java application development, agile Scrum methodology, UI/UX design, advanced shape manipulation features, and automated testing with JUnit.\n\n* * *\n\n📸 User Interface Snapshot\n--------------------------\n\n\u003cimg width=\"1690\" height=\"789\" alt=\"image\" src=\"https://github.com/user-attachments/assets/c6e60473-aa07-4b30-b8fc-2e15c55eaa1d\" /\u003e\n\n* * *\n\n📌 Overview\n-----------\n\n**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.\n\n### 📁 Project Highlights\n\n* ✅ **Multiple shape types**: lines, rectangles, ellipses, polygons, and text\n    \n* 🧠 **Advanced editing**: move, resize, rotate, mirror, stretch, cut/copy/paste\n    \n* 🎨 **Customizable UI**: colors, grid display, zoom levels, shape layering\n    \n* 📦 **Shape grouping \u0026 libraries**: group shapes, save reusable custom shapes\n    \n* 🧪 **JUnit test suite** for ensuring reliability and robustness\n    \n* 📊 **Backlogs \u0026 reports** managed via Trello and GitHub\n    \n* 📌 **Developed with real-world Scrum practices**: sprints, reviews, retrospectives, the project highlights the skills of the team members in following agile methodologies\n    \n\n* * *\n\n🌍 Language Note\n----------------\n\nAll **code comments and internal documentation** are written in **Italian**, as the project was developed during a group exam at the **University of Salerno (Italy)**.\n\nDespite this, the **codebase follows international best practices**, with clear method names and class structures that make it easily understandable for global developers and recruiters.\n\n* * *\n\n💡 Features\n-----------\n\n### 🖌️ Shape Operations\n\n* Create **lines**, **rectangles**, **ellipses**, **polygons**, and **text shapes**\n    \n* Customize **stroke and fill colors** (8+ colors)\n    \n* Adjust **shape size, position, and layering** (bring to front/back)\n    \n* **Cut, Copy, Paste** shapes with unlimited **Undo** levels\n    \n\n### 🔄 Advanced Editing\n\n* **Rotate** shapes by arbitrary angles\n    \n* **Mirror** shapes horizontally or vertically\n    \n* **Stretch** shapes in both axes\n    \n* **Group/Ungroup** multiple shapes for combined operations\n    \n\n### 📁 Shape Libraries\n\n* **Save custom shapes** as reusable creation commands\n    \n* **Import/export** shape libraries for specialized domains (e.g., electrical symbols)\n    \n\n### 🖥️ Enhanced UI\n\n* **Zoom** support (4+ levels)\n    \n* **Grid display** (toggleable and resizable)\n    \n* **Scrollable canvas** larger than the window\n    \n* **File persistence**: save/load drawings and shape libraries\n    \n\n* * *\n\n🧠 Development Process\n----------------------\n\n\u003e Developed iteratively over multiple sprints using **Scrum methodology**, simulating an agile software development lifecycle.\n\n1. **Pre-game:** Initial backlog creation, architecture design, and setup (GitHub, Trello).\n    \n2. **Sprint 1:** Basic drawing operations and file management.\n    \n3. **Sprint 2:** Advanced editing features and grouping.\n    \n4. **Sprint 3:** Shape libraries, polishing features, and final presentation.\n    \n\nEach sprint included **planning, reviews, retrospectives,** and **burndown tracking**, with artifacts stored in the repository.\n\n* * *\n\n🧪 Testing\n----------\n\n**JUnit-based automated tests** were implemented to ensure the correctness of:\n\n* Shape creation \u0026 manipulation\n    \n* Undo operation\n    \n* File save/load functionality\n    \n\nTest classes are located in:\n\n```\ntest/java/it/unisa/software_architecture_design/drawsnapdrawingtool/\n```\n\nBecause 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`.\n\n* * *\n\n📋 Documentation\n----------------\n\nAll documentation is available in the `docs/` folder, including:\n\n* **Pre-game documents:** Initial product backlog, architecture description, and sprint planning.\n    \n* **Sprint artifacts:** Sprint backlogs, burndown charts, review \u0026 retrospective reports for each sprint.\n    \n* **User Manual:** Guidance for end-users on using DrawSnap’s features.\n    \n\n* * *\n\n🧱 Project Structure\n--------------------\n\n```\n📦 draw-snap-drawing-tool\n├── 📁 docs\n│   ├── 0 - Pre-game\n│   ├── 1 - First sprint\n│   ├── 2 - Second sprint\n│   ├── 3 - Third sprint\n│   └── Manuale d’uso\n├── 📁 src/main/java/it/unisa/software_architecture_design/drawsnapdrawingtool\n│   ├── commands/\n│   ├── enumeration/\n│   ├── forme/\n│   ├── interactionstate/\n│   ├── memento/\n│   ├── utils/\n│   ├── DrawSnapApplication.java\n│   ├── DrawSnapController.java\n│   ├── DrawSnapModel.java\n│   └── module-info.java\n├── 📁 test/java/it/unisa/software_architecture_design/drawsnapdrawingtool\n├── .gitignore\n├── README.md\n├── pom.xml\n└── mvnw, mvnw.cmd\n```\n\n* * *\n\n👥 Team – University of Salerno\n-------------------------------\n\n* [@Pepi2002](https://github.com/Pepi2002)\n\n* [@RaffaeleCalabrese2](https://github.com/RaffaeleCalabrese2)\n\n* [@francescopiocirillo](https://github.com/francescopiocirillo) (👑 Team Leader)\n    \n* [@alefaso-lucky](https://github.com/alefaso-lucky)\n    \n\n* * *\n\n🚀 How to Run Locally\n---------------------\n\n1. Clone the repository:\n    \n    ```bash\n    git clone https://github.com/francescopiocirillo/draw-snap-drawing-tool.git\n    ```\n    \n2. Open in your preferred IDE (IntelliJ, VS Code, NetBeans).\n\n3. Add the following VM Options: `--add-modules javafx.controls,javafx.fxml,javafx.graphics`.\n        \n4. Run `DrawSnapApplication.java` to launch the application.\n    \n\n### 🧩 Development Environment\n\n* ☕ Java version: **23**\n    \n* 🧪 JUnit for testing\n    \n* 📦 Maven for build automation\n    \n\n* * *\n\n📬 Contacts\n-----------\n\n✉️ Got feedback or want to contribute? Feel free to open an Issue or submit a Pull Request!\n\n* * *\n\n📈 SEO Tags\n-----------\n\n```\nJava 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\n```\n\n* * *\n\n📄 License\n----------\n\nThis 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.\n\n\u003e In plain terms: **use it, build on it, just don’t blame us if something breaks**.\n\n\u003e ⭐ Like what you see? Consider giving the project a star!\n\n* * *\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffrancescopiocirillo%2Fdraw-snap-drawing-tool","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffrancescopiocirillo%2Fdraw-snap-drawing-tool","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffrancescopiocirillo%2Fdraw-snap-drawing-tool/lists"}