{"action":"opened","number":950,"pull_request":{"url":"https://api.github.com/repos/vispy/vispy/pulls/950","id":36564792,"html_url":"https://github.com/vispy/vispy/pull/950","diff_url":"https://github.com/vispy/vispy/pull/950.diff","patch_url":"https://github.com/vispy/vispy/pull/950.patch","issue_url":"https://api.github.com/repos/vispy/vispy/issues/950","number":950,"state":"open","locked":false,"title":"WIP on a singular efficient Transform class","user":{"login":"almarklein","id":3015475,"avatar_url":"https://avatars.githubusercontent.com/u/3015475?v=3","gravatar_id":"","url":"https://api.github.com/users/almarklein","html_url":"https://github.com/almarklein","followers_url":"https://api.github.com/users/almarklein/followers","following_url":"https://api.github.com/users/almarklein/following{/other_user}","gists_url":"https://api.github.com/users/almarklein/gists{/gist_id}","starred_url":"https://api.github.com/users/almarklein/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/almarklein/subscriptions","organizations_url":"https://api.github.com/users/almarklein/orgs","repos_url":"https://api.github.com/users/almarklein/repos","events_url":"https://api.github.com/users/almarklein/events{/privacy}","received_events_url":"https://api.github.com/users/almarklein/received_events","type":"User","site_admin":false},"body":"(I had this branch laying around for a while and make it \"public\" so it might be useful for Luke's epic quest for a better scene graph).\r\n\r\nissues:  implements part of #832, #894\r\n\r\nThis PR implements a `DefaultTransform` class that can deal with translation, scaling, rotation, and anything else than can be described with a 4x4 matrix. Its smart enough to keep the internal description as simple as possible, which means it's also fast.\r\n\r\nHaving one transform class simplifies things, especially for the user.\r\n\r\ncc @campagnola note that I made some fixes/changes in the quaternion class, which needed some changes in the cameras as well.","created_at":"2015-05-30T12:26:07Z","updated_at":"2015-05-30T12:26:07Z","closed_at":null,"merged_at":null,"merge_commit_sha":null,"assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/vispy/vispy/pulls/950/commits","review_comments_url":"https://api.github.com/repos/vispy/vispy/pulls/950/comments","review_comment_url":"https://api.github.com/repos/vispy/vispy/pulls/comments{/number}","comments_url":"https://api.github.com/repos/vispy/vispy/issues/950/comments","statuses_url":"https://api.github.com/repos/vispy/vispy/statuses/b3c27c8558214d46acca7009c1eaa8c51a171e45","head":{"label":"almarklein:trans","ref":"trans","sha":"b3c27c8558214d46acca7009c1eaa8c51a171e45","user":{"login":"almarklein","id":3015475,"avatar_url":"https://avatars.githubusercontent.com/u/3015475?v=3","gravatar_id":"","url":"https://api.github.com/users/almarklein","html_url":"https://github.com/almarklein","followers_url":"https://api.github.com/users/almarklein/followers","following_url":"https://api.github.com/users/almarklein/following{/other_user}","gists_url":"https://api.github.com/users/almarklein/gists{/gist_id}","starred_url":"https://api.github.com/users/almarklein/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/almarklein/subscriptions","organizations_url":"https://api.github.com/users/almarklein/orgs","repos_url":"https://api.github.com/users/almarklein/repos","events_url":"https://api.github.com/users/almarklein/events{/privacy}","received_events_url":"https://api.github.com/users/almarklein/received_events","type":"User","site_admin":false},"repo":{"id":12317009,"name":"vispy","full_name":"almarklein/vispy","owner":{"login":"almarklein","id":3015475,"avatar_url":"https://avatars.githubusercontent.com/u/3015475?v=3","gravatar_id":"","url":"https://api.github.com/users/almarklein","html_url":"https://github.com/almarklein","followers_url":"https://api.github.com/users/almarklein/followers","following_url":"https://api.github.com/users/almarklein/following{/other_user}","gists_url":"https://api.github.com/users/almarklein/gists{/gist_id}","starred_url":"https://api.github.com/users/almarklein/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/almarklein/subscriptions","organizations_url":"https://api.github.com/users/almarklein/orgs","repos_url":"https://api.github.com/users/almarklein/repos","events_url":"https://api.github.com/users/almarklein/events{/privacy}","received_events_url":"https://api.github.com/users/almarklein/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/almarklein/vispy","description":"Main repository for Vispy","fork":true,"url":"https://api.github.com/repos/almarklein/vispy","forks_url":"https://api.github.com/repos/almarklein/vispy/forks","keys_url":"https://api.github.com/repos/almarklein/vispy/keys{/key_id}","collaborators_url":"https://api.github.com/repos/almarklein/vispy/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/almarklein/vispy/teams","hooks_url":"https://api.github.com/repos/almarklein/vispy/hooks","issue_events_url":"https://api.github.com/repos/almarklein/vispy/issues/events{/number}","events_url":"https://api.github.com/repos/almarklein/vispy/events","assignees_url":"https://api.github.com/repos/almarklein/vispy/assignees{/user}","branches_url":"https://api.github.com/repos/almarklein/vispy/branches{/branch}","tags_url":"https://api.github.com/repos/almarklein/vispy/tags","blobs_url":"https://api.github.com/repos/almarklein/vispy/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/almarklein/vispy/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/almarklein/vispy/git/refs{/sha}","trees_url":"https://api.github.com/repos/almarklein/vispy/git/trees{/sha}","statuses_url":"https://api.github.com/repos/almarklein/vispy/statuses/{sha}","languages_url":"https://api.github.com/repos/almarklein/vispy/languages","stargazers_url":"https://api.github.com/repos/almarklein/vispy/stargazers","contributors_url":"https://api.github.com/repos/almarklein/vispy/contributors","subscribers_url":"https://api.github.com/repos/almarklein/vispy/subscribers","subscription_url":"https://api.github.com/repos/almarklein/vispy/subscription","commits_url":"https://api.github.com/repos/almarklein/vispy/commits{/sha}","git_commits_url":"https://api.github.com/repos/almarklein/vispy/git/commits{/sha}","comments_url":"https://api.github.com/repos/almarklein/vispy/comments{/number}","issue_comment_url":"https://api.github.com/repos/almarklein/vispy/issues/comments{/number}","contents_url":"https://api.github.com/repos/almarklein/vispy/contents/{+path}","compare_url":"https://api.github.com/repos/almarklein/vispy/compare/{base}...{head}","merges_url":"https://api.github.com/repos/almarklein/vispy/merges","archive_url":"https://api.github.com/repos/almarklein/vispy/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/almarklein/vispy/downloads","issues_url":"https://api.github.com/repos/almarklein/vispy/issues{/number}","pulls_url":"https://api.github.com/repos/almarklein/vispy/pulls{/number}","milestones_url":"https://api.github.com/repos/almarklein/vispy/milestones{/number}","notifications_url":"https://api.github.com/repos/almarklein/vispy/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/almarklein/vispy/labels{/name}","releases_url":"https://api.github.com/repos/almarklein/vispy/releases{/id}","created_at":"2013-08-23T07:16:26Z","updated_at":"2015-01-28T09:54:38Z","pushed_at":"2015-04-02T19:02:48Z","git_url":"git://github.com/almarklein/vispy.git","ssh_url":"git@github.com:almarklein/vispy.git","clone_url":"https://github.com/almarklein/vispy.git","svn_url":"https://github.com/almarklein/vispy","homepage":"","size":8645,"stargazers_count":1,"watchers_count":1,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":1,"default_branch":"master"}},"base":{"label":"vispy:master","ref":"master","sha":"edebe3931d9ae5ea734091848c793593d65a0e41","user":{"login":"vispy","id":3934254,"avatar_url":"https://avatars.githubusercontent.com/u/3934254?v=3","gravatar_id":"","url":"https://api.github.com/users/vispy","html_url":"https://github.com/vispy","followers_url":"https://api.github.com/users/vispy/followers","following_url":"https://api.github.com/users/vispy/following{/other_user}","gists_url":"https://api.github.com/users/vispy/gists{/gist_id}","starred_url":"https://api.github.com/users/vispy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vispy/subscriptions","organizations_url":"https://api.github.com/users/vispy/orgs","repos_url":"https://api.github.com/users/vispy/repos","events_url":"https://api.github.com/users/vispy/events{/privacy}","received_events_url":"https://api.github.com/users/vispy/received_events","type":"Organization","site_admin":false},"repo":{"id":8935948,"name":"vispy","full_name":"vispy/vispy","owner":{"login":"vispy","id":3934254,"avatar_url":"https://avatars.githubusercontent.com/u/3934254?v=3","gravatar_id":"","url":"https://api.github.com/users/vispy","html_url":"https://github.com/vispy","followers_url":"https://api.github.com/users/vispy/followers","following_url":"https://api.github.com/users/vispy/following{/other_user}","gists_url":"https://api.github.com/users/vispy/gists{/gist_id}","starred_url":"https://api.github.com/users/vispy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vispy/subscriptions","organizations_url":"https://api.github.com/users/vispy/orgs","repos_url":"https://api.github.com/users/vispy/repos","events_url":"https://api.github.com/users/vispy/events{/privacy}","received_events_url":"https://api.github.com/users/vispy/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/vispy/vispy","description":"Main repository for Vispy","fork":false,"url":"https://api.github.com/repos/vispy/vispy","forks_url":"https://api.github.com/repos/vispy/vispy/forks","keys_url":"https://api.github.com/repos/vispy/vispy/keys{/key_id}","collaborators_url":"https://api.github.com/repos/vispy/vispy/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/vispy/vispy/teams","hooks_url":"https://api.github.com/repos/vispy/vispy/hooks","issue_events_url":"https://api.github.com/repos/vispy/vispy/issues/events{/number}","events_url":"https://api.github.com/repos/vispy/vispy/events","assignees_url":"https://api.github.com/repos/vispy/vispy/assignees{/user}","branches_url":"https://api.github.com/repos/vispy/vispy/branches{/branch}","tags_url":"https://api.github.com/repos/vispy/vispy/tags","blobs_url":"https://api.github.com/repos/vispy/vispy/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/vispy/vispy/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/vispy/vispy/git/refs{/sha}","trees_url":"https://api.github.com/repos/vispy/vispy/git/trees{/sha}","statuses_url":"https://api.github.com/repos/vispy/vispy/statuses/{sha}","languages_url":"https://api.github.com/repos/vispy/vispy/languages","stargazers_url":"https://api.github.com/repos/vispy/vispy/stargazers","contributors_url":"https://api.github.com/repos/vispy/vispy/contributors","subscribers_url":"https://api.github.com/repos/vispy/vispy/subscribers","subscription_url":"https://api.github.com/repos/vispy/vispy/subscription","commits_url":"https://api.github.com/repos/vispy/vispy/commits{/sha}","git_commits_url":"https://api.github.com/repos/vispy/vispy/git/commits{/sha}","comments_url":"https://api.github.com/repos/vispy/vispy/comments{/number}","issue_comment_url":"https://api.github.com/repos/vispy/vispy/issues/comments{/number}","contents_url":"https://api.github.com/repos/vispy/vispy/contents/{+path}","compare_url":"https://api.github.com/repos/vispy/vispy/compare/{base}...{head}","merges_url":"https://api.github.com/repos/vispy/vispy/merges","archive_url":"https://api.github.com/repos/vispy/vispy/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/vispy/vispy/downloads","issues_url":"https://api.github.com/repos/vispy/vispy/issues{/number}","pulls_url":"https://api.github.com/repos/vispy/vispy/pulls{/number}","milestones_url":"https://api.github.com/repos/vispy/vispy/milestones{/number}","notifications_url":"https://api.github.com/repos/vispy/vispy/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/vispy/vispy/labels{/name}","releases_url":"https://api.github.com/repos/vispy/vispy/releases{/id}","created_at":"2013-03-21T18:43:22Z","updated_at":"2015-05-30T08:16:23Z","pushed_at":"2015-05-30T12:26:07Z","git_url":"git://github.com/vispy/vispy.git","ssh_url":"git@github.com:vispy/vispy.git","clone_url":"https://github.com/vispy/vispy.git","svn_url":"https://github.com/vispy/vispy","homepage":"http://vispy.org","size":19050,"stargazers_count":560,"watchers_count":560,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":108,"mirror_url":null,"open_issues_count":136,"forks":108,"open_issues":136,"watchers":560,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/vispy/vispy/pulls/950"},"html":{"href":"https://github.com/vispy/vispy/pull/950"},"issue":{"href":"https://api.github.com/repos/vispy/vispy/issues/950"},"comments":{"href":"https://api.github.com/repos/vispy/vispy/issues/950/comments"},"review_comments":{"href":"https://api.github.com/repos/vispy/vispy/pulls/950/comments"},"review_comment":{"href":"https://api.github.com/repos/vispy/vispy/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/vispy/vispy/pulls/950/commits"},"statuses":{"href":"https://api.github.com/repos/vispy/vispy/statuses/b3c27c8558214d46acca7009c1eaa8c51a171e45"}},"merged":false,"mergeable":null,"mergeable_state":"unknown","merged_by":null,"comments":0,"review_comments":0,"commits":3,"additions":775,"deletions":39,"changed_files":7}}