{"id":18427317,"url":"https://github.com/enzoalbornoz/py-igs","last_synced_at":"2025-04-07T16:33:19.390Z","repository":{"id":123918300,"uuid":"370866919","full_name":"EnzoAlbornoz/py-igs","owner":"EnzoAlbornoz","description":"Python Interactive Graphical System made during Computer Graphics classes (INE5420-2021.1)","archived":false,"fork":false,"pushed_at":"2021-09-03T02:50:49.000Z","size":3650,"stargazers_count":4,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-22T21:35:15.940Z","etag":null,"topics":["2d","3d","computer-graphics","python","python-3","university","university-assignment"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/EnzoAlbornoz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2021-05-26T00:56:56.000Z","updated_at":"2024-04-06T15:49:27.000Z","dependencies_parsed_at":null,"dependency_job_id":"aea9ee2d-493b-4083-b285-605950d39c5b","html_url":"https://github.com/EnzoAlbornoz/py-igs","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EnzoAlbornoz%2Fpy-igs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EnzoAlbornoz%2Fpy-igs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EnzoAlbornoz%2Fpy-igs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EnzoAlbornoz%2Fpy-igs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/EnzoAlbornoz","download_url":"https://codeload.github.com/EnzoAlbornoz/py-igs/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247688353,"owners_count":20979644,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["2d","3d","computer-graphics","python","python-3","university","university-assignment"],"created_at":"2024-11-06T05:10:23.626Z","updated_at":"2025-04-07T16:33:19.364Z","avatar_url":"https://github.com/EnzoAlbornoz.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PY-IGS - The PYthon Interactive Graphical System\n\n\u003cdiv align=\"center\"\u003e\n    \u003cimg src=\"./doc/images/full-screenshot2.png\" alt=\"PY-IGS\" height=\"400\" \u003e\u003c/img\u003e\n    \u003cp\u003e\n        \u003cem\u003eThe PY-IGS\u003c/em\u003e\n    \u003c/p\u003e\n\u003c/div\u003e\n\n## Installation\nTo install this software you will need these dependencies (with their thevelopment libraries):\n\n- Numba/SciPy/NumPy Compatible Setup (`https://numba.readthedocs.io/en/stable/user/installing.html`) (Use for C matrix multiplication)\n- Gtk 3.20+\n- PyGOBject Dependencies (`libgirepository1.0-dev gcc libcairo2-dev pkg-config python3-dev gir1.2-gtk-3.0`)\n- Python 3.8+\n- Poetry (To install it, please visit the [official install instructions](https://python-poetry.org/docs/#installation))\n\nAfter install them, install python dependencies\nwith:\n\n```\npoetry install\n```\n\n---\n\n## How to Use\n### Executing\n\nIn order to execute this program, run the following command:\n\n```\npoetry run python3 py_igs\n```\n\n### Navigation\n\nTo navigate through the world, you can use the mouse or the navigation widget.\n\nTo move with the mouse, simply click over the viewport and drag your cursor over the screen. The amplitude of this movement is inverse to the scale of the world, enabling a smooth view in your screen.\n\nIf you want to use the navigation widget, you need to click on the buttons that are displayed on the navigation grid in the left panel. You can configure the amplitude of this movement with the \"Pan Step\" field (world units).\n\nFor zooming, you can use your mouse scroll or the `+` and `-` buttons on the navigation grid. You can configure the zoom ammount with the \"Zoom Step\" slider (from 0,01% up to 50% each step)\n\nYou can also rotate the Window using the upper left and upper right buttons on navigation grid.\n\n\u003cdiv align=\"center\"\u003e\n    \u003cimg src=\"./doc/images/navigation-widget.png\" alt=\"Navigation Widget\" height=\"200\" \u003e\u003c/img\u003e\n    \u003cp\u003e\n        \u003cem\u003eThe navigation widget\u003c/em\u003e\n    \u003c/p\u003e\n\u003c/div\u003e\n\n### Adding Objects\n\nTo add an object, you need to click on the \"Add\" button located in the objects widget. A dialog will popup in your screen.\n\nIn this dialog, insert the object name (unique in the scene) then insert the points coordinates of your object. You can select the type of the object by changing the active tab of the dialog. The drawing color can also be defined in this dialog.\nThere is an option to fill wireframes too, just check the `filled` option when adding the object.\n\nYou can also input raw values at the \"Text\" tab. To use it, declare points using this format: `(x1, y1), (x2, y2), ...` (Obs: New lines are not allowed).\n\nAfter that, click on the save button. The object will appear on the world at the given coordinates.\n\n\u003cdiv align=\"center\"\u003e\n    \u003cimg src=\"./doc/images/object-add.png\" alt=\"Adding an object\" height=\"200\" \u003e\u003c/img\u003e\n    \u003cp\u003e\n        \u003cem\u003eAdding an object\u003c/em\u003e\n    \u003c/p\u003e\n\u003c/div\u003e\n\n### Editing Objects (Transforms)\nClicking in the edit button (in the objects widget) will open the editing dialog. In this window, you can define 3 transformations to apply on the object. They are: Translation, Rotation and Scaling. The translation will move the object over the world. The rotation will rotate the object around a given point that can be the world origin, the object center or a point that you specify. The scale will scale the objects in a \"natural\" way, i.e., based on the object center.\n\nAll transformations are stored in a list that will be merged when applying these transformations to the object.\n\n\u003cdiv align=\"center\"\u003e\n    \u003cimg src=\"./doc/images/object-edit.png\" alt=\"Editing an object\" height=\"200\" \u003e\u003c/img\u003e\n    \u003cp\u003e\n        \u003cem\u003eEditing an object\u003c/em\u003e\n    \u003c/p\u003e\n\u003c/div\u003e\n\n### Removing Objects\n\nSelect an object of the object list and then press the remove button in the objects widget. The object will disappear.\n\n\u003cdiv align=\"center\"\u003e\n    \u003cimg src=\"./doc/images/objects-widget.png\" alt=\"Objects Widget\" height=\"150\" \u003e\u003c/img\u003e\n    \u003cp\u003e\n        \u003cem\u003eThe objects widget\u003c/em\u003e\n    \u003c/p\u003e\n\u003c/div\u003e\n\n### Window Clipping\n\nCurrently we support 3 methods for Window clipping, they are:\n\n- None\n- Cohen-Sutherland\n- Liang-Barsky\n\nTo choose it, select the desired method in the `Clipping Method` option in the Window widget.\n\n\u003cdiv align=\"center\"\u003e\n    \u003cimg src=\"./doc/images/window-widget.png\" alt=\"Window Widget\" width=\"300\" \u003e\u003c/img\u003e\n    \u003cp\u003e\n        \u003cem\u003eThe window widget\u003c/em\u003e\n    \u003c/p\u003e\n\u003c/div\u003e\n\n### Import/Export Scenes (Wavefront Object)\n\nIn the menu bar, you can select the `Scene`, then select `Open` to import objects. A file chooser will pop up and the you need to select the file to import.\n\nTo export your scene, click on `Scene`, then select `Save As`. Then define were you want to save your `.obj` (Model) file and then select a location for the `.mtl` (Materials) file.\n\n#### Example Files\n\nIn the `example/objects` folder you can find many models that were utilized to test Py-Igs functionalities.\n\n---\n## About\nMade by Enzo Coelho Albornoz and Gabriel Soares Flores.\n\nSoftware developed for the Computer Graphics (INE5420-2021.1)  course. This course is part of our graduation in Computer Science at the Federal University of Santa Catarina (UFSC). \n\n\u003cdiv align=\"right\"\u003e\n    \u003ca href=\"https://ufsc.br/\"\u003e\n        \u003cimg src=\"./doc/images/brasao.ufsc.svg\" alt=\"Window Widget\" width=\"200\"\u003e\u003c/img\u003e\n    \u003c/a\u003e\n    \u003cp\u003e\n        \u003cem\u003eMade in UFSC\u003c/em\u003e\n    \u003c/p\u003e\n\u003c/div\u003e\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fenzoalbornoz%2Fpy-igs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fenzoalbornoz%2Fpy-igs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fenzoalbornoz%2Fpy-igs/lists"}