{"id":20132803,"url":"https://github.com/memo/msafreehander","last_synced_at":"2025-03-02T22:19:04.369Z","repository":{"id":8686760,"uuid":"10347949","full_name":"memo/MSAFreehander","owner":"memo","description":null,"archived":false,"fork":false,"pushed_at":"2013-06-10T01:06:15.000Z","size":7781,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-02T17:09:49.286Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C++","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/memo.png","metadata":{"files":{"readme":"README.txt","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}},"created_at":"2013-05-28T23:37:48.000Z","updated_at":"2017-10-26T18:41:33.000Z","dependencies_parsed_at":"2022-09-11T06:16:48.502Z","dependency_job_id":null,"html_url":"https://github.com/memo/MSAFreehander","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/memo%2FMSAFreehander","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/memo%2FMSAFreehander/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/memo%2FMSAFreehander/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/memo%2FMSAFreehander/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/memo","download_url":"https://codeload.github.com/memo/MSAFreehander/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241577450,"owners_count":19984998,"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":[],"created_at":"2024-11-13T20:55:10.788Z","updated_at":"2025-03-02T22:19:04.343Z","avatar_url":"https://github.com/memo.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"MSAFreehander is a very minimal and crude freehand drawing app I wrote for my workshop at EYEO 2013 entitled \"The black art of manipulating numbers. Essential applied maths for computational artists.\" A workshop covering fundamentals and applications of trigonometry, vector maths, matrices etc. \nhttp://eyeofestival.com/speaker/memo-akten/\n\nInstead of preparing hundreds of slides, I wanted to just sit down and draw, as if I had an overhead projector, or a whiteboard. In essence MSAFreehander is an overhead projector simulator application.\n\nExample output: \nhttp://farm9.staticflickr.com/8545/8966343618_15702447e0_o.png\n\n\nSome key features I wanted were:\n- infinite canvas, with simple and quick to activate pan and zoom controls\n- simple access to predefined colours, brush size etc.\n- save / load as XML\n- interactive navigator map view shows whole canvas, which you can zoom and pan on as well\n- select, move, edit already drawn shapes\n- type in text\n\n\n\n//--------------------------------------------------------------\nINSTRUCTIONS (for using the app)\nLaunch the app, and draw with your mouse! (plugging in a wacom makes it much simpler and easier to use)\n\nYou can be in one of these PERMANENT modes:\nDRAW: click and drag on the canvas to draw\n(tap 'd' to switch to DRAW)\n\nSELECT: click on one (or more) shapes to select. once selected you can move, delete and edit\n(tap SPACEBAR to toggle between SELECT and DRAW)\n\nTEXT: click on the canvas to insert text, start typing. ENTER to finish.\n(tap 't' to toggle between TEXT and DRAW)\n\n\nYou can also be in one of these TEMPORARY modes:\n(these are only active while the relevant key is held down)\nZOOM: click and drag on the canvas to zoom in/out\n(hold down 'z' to activate ZOOM, release to switch back to DRAW)\n\nPAN: click and drag on the canvas to pan\n(hold down 'x' to activate PAN, release to switch back to DRAW)\n\nCONNECT: instead of creating a new shape, draw line between the last mouse click and new mouse click (useful for drawing polygons)\n(hold down 'TAB' to activate CONNECT, release to switch back to normal DRAW)\n\n\nOTHER KEYS:\nDisplay:\nf: toggle fullscreen\ng: toggle grid\ne: zoom extents\n,.: zoom in/out\nARROWS: pan\n\n\nI/O\ns: save canvas as XML\nl: load canvas as XML\n\nModifying:\nSHIFT + N: start new canvas\nBACKSPACE: erase last point (on selected shapes) or letter (on selected texts)\nSHIFT + BACKSPACE: erase selected shape(s)\n0-6: colours (black, red, green, blue, yellow, purple, cyan)\n[]: change brush thickness of selected shapes OR for next drawing (if no shapes are selected)\n{}: change brush smoothing of selected shapes OR for next drawing (if no shapes are selected)\n\n\n\n//--------------------------------------------------------------\nINSTRUCTIONS (for compiling the source)\nThe source is written ontop of openFrameworks (0.7.4)\nhttps://github.com/openframeworks/openFrameworks\n\nand uses my ofxMSAInteractiveObject add-on \nhttps://github.com/memo/ofxMSAInteractiveObject\n\n\n\n//--------------------------------------------------------------\nTODOS\n(in order of priority)\n- optimise drawing (use VBOs)\n- optimise drawing of navigation map (cache all unmodified shapes to fbo?)\n- save / load as SVG\n- render to PDF (quite buggy right now)\n- load (bitmap) images\n- undo\n- put all settings in a settings XML including colours and keyboard shortcuts\n- multiple pages (currently can be faked by saving / loading canvases)\n- have a 'presenter' view which loads text file showing the topics you want to cover, with a timer (similar to Keynote.app)\n- use extra wacom data (pressure, angle etc).","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmemo%2Fmsafreehander","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmemo%2Fmsafreehander","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmemo%2Fmsafreehander/lists"}