- The "shapes" folder in the execution directory contains all shapes for the application to run.
- If you want to add a shape, simply copy its .dll file and paste it there. Similarly, if you want to remove a shape, just delete its .dll file inside the folder.
- The "shapes" folder can be empty/absent, though that way, the application is unable to draw anything.
- 19120268 - Ngô Đặng Gia Lâm
- 19120383 - Huỳnh Tấn Thọ
- 19120496 - Trần Thị Khánh Duyên
- Design Pattern: singleton, factory, object pool, prototype
- Dynamically load all graphic objects that can be drawn from external DLL files.
- The user can choose which object to draw.
- The user can see the preview of the object they want to draw.
- The user can finish the drawing preview and their change becomes permanent with previously drawn objects.
- The list of drawn objects can be saved and loaded again for continuing later.
- Save and load all drawn objects as an image in bmp/png/jpg format (rasterization).
- Line: controlled by two points, the starting point, and the endpoint.
- Rectangle: controlled by two points, the left top point, and the right bottom point.
- Ellipse: controlled by two points, the left top point, and the right bottom point.
- Square: controlled by two points, the left top point, and the right bottom point.
- Circle: controlled by two points, the left top point, and the right bottom point.
- Two bonus shapes for the user to create: square and circle.
- Allow the user to change the color, pen width, and stroke type (dash, dot, dash dot,...)
- Adding image to the canvas.
- Undo and Redo.
- "New File" button to quickly start over, the application will of course ask the user for confirmation if any new changes is detected.
- Objects in drawable list have their own icons instead of plain text.
- Used Fluent.Ribbon to obtain MS Paint-like user interface.
- Select a single shape to move around, rotate, resize, and delete.
- Select a single shape to copy and paste.
- Bulk interaction: hold control key to select multiple shapes to move, copy, paste, or delete.