{"action":"created","comment":{"url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/pulls/comments/172027471","pull_request_review_id":100985685,"id":172027471,"diff_hunk":"@@ -0,0 +1,312 @@\n+﻿// Copyright (c) Microsoft Corporation. All rights reserved.\n+// Licensed under the MIT License. See LICENSE in the project root for license information.\n+\n+using MixedRealityToolkit.InputModule.EventData;\n+using MixedRealityToolkit.InputModule.InputHandlers;\n+using UnityEngine;\n+\n+#if UNITY_WSA && UNITY_2017_2_OR_NEWER\n+using UnityEngine.XR.WSA;\n+#endif\n+\n+namespace MixedRealityToolkit.UX.BoundingBoxes\n+{\n+    public class BoundingBoxGizmoHandle : MonoBehaviour, IInputHandler, ISourceStateHandler\n+    {\n+        public enum TransformType\n+        {\n+            Rotation,\n+            Scale\n+        };\n+        public enum AxisToAffect\n+        {\n+            X,\n+            Y,\n+            Z\n+        };\n+        public BoundingBoxRig Rig;\n+\n+        private Transform transformToAffect;\n+        private TransformType affineType;\n+        private AxisToAffect axis;\n+        private Vector3 initialHandPosition;\n+        private Vector3 initialScale;\n+        private Vector3 initialPosition;\n+        private Vector3 initialOrientation;\n+        private Quaternion initialHandOrientation;\n+        private Vector3 initialScaleOrigin;\n+        private InputEventData inputDownEventData;\n+        private bool isHandRotationAvailable;\n+        private bool isLeftHandedRotation = false;\n+        private Vector3 rotationFromPositionScale = new Vector3(-300.0f, -300.0f, -300.0f);\n+        private float minimumScaleNav = 0.001f;\n+        \n+        public TransformType AffineType\n+        {\n+            get\n+            {\n+                return affineType;\n+            }\n+\n+            set\n+            {\n+                affineType = value;\n+            }\n+        }\n+        public AxisToAffect Axis\n+        {\n+            get\n+            {\n+                return axis;\n+            }\n+\n+            set\n+            {\n+                axis = value;\n+            }\n+        }\n+        public bool IsLeftHandedRotation\n+        {\n+            get\n+            {\n+                return isLeftHandedRotation;\n+            }\n+\n+            set\n+            {\n+                isLeftHandedRotation = value;\n+            }\n+        }\n+        public Transform TransformToAffect\n+        {\n+            get\n+            {\n+                return transformToAffect;\n+            }\n+\n+            set\n+            {\n+                transformToAffect = value;\n+            }\n+        }\n+\n+        private void Start()\n+        {\n+            isHandRotationAvailable = true;\n+\n+#if UNITY_WSA && UNITY_2017_2_OR_NEWER\n+            if (HolographicSettings.IsDisplayOpaque == false)\n+            {\n+                isHandRotationAvailable = false;\n+            }\n+#endif\n+        }\n+        private void Update()\n+        {\n+            if (inputDownEventData != null)\n+            {\n+                Vector3 currentHandPosition = Vector3.zero;\n+                Quaternion currentHandOrientation = Quaternion.identity;\n+\n+                //set values from hand\n+                currentHandPosition = GetHandPosition(inputDownEventData.SourceId);\n+                if (isHandRotationAvailable)\n+                {\n+                    currentHandOrientation = GetHandOrientation(inputDownEventData.SourceId);\n+                }\n+\n+                //calculate affines\n+                if (this.AffineType == TransformType.Scale)\n+                {\n+                    ApplyScale(currentHandPosition);\n+                }\n+                else if (this.AffineType == TransformType.Rotation)\n+                {\n+                    if (isHandRotationAvailable)\n+                    {\n+                        ApplyRotation(currentHandOrientation);\n+                    }\n+                    else\n+                    {\n+                        ApplyRotation(currentHandPosition);\n+                    }\n+                }\n+            }\n+        }\n+\n+        private Vector3 GetHandPosition(uint sourceId)\n+        {\n+            Vector3 handPosition = new Vector3(0, 0, 0);\n+            inputDownEventData.InputSource.TryGetGripPosition(sourceId, out handPosition);\n+            return handPosition;\n+        }\n+        private Quaternion GetHandOrientation(uint sourceId)\n+        {\n+            Quaternion handOrientation = Quaternion.identity;\n+            inputDownEventData.InputSource.TryGetGripRotation(sourceId, out handOrientation);\n+            return handOrientation;\n+        }\n+        private void ApplyScale(Vector3 currentHandPosition)\n+        {\n+            if ((transformToAffect.position - initialHandPosition).magnitude > minimumScaleNav)\n+            {\n+                float scaleScalar = (currentHandPosition - transformToAffect.position).magnitude / (transformToAffect.position - initialHandPosition).magnitude;\n+                Vector3 newScale = new Vector3(scaleScalar, scaleScalar, scaleScalar);\n+                newScale.Scale(initialScale);\n+\n+                //scale from object center\n+                transformToAffect.localScale = newScale;\n+\n+                //now handle offset\n+                Vector3 currentScaleOrigin = initialScaleOrigin;\n+                currentScaleOrigin.Scale(new Vector3(scaleScalar, scaleScalar, scaleScalar));\n+                Vector3 postScaleOffset = currentScaleOrigin - initialScaleOrigin;\n+\n+                //translate so that scale is effectively from opposite corner\n+                transformToAffect.position = initialPosition - postScaleOffset;\n+            }\n+        }\n+        private void ApplyRotation(Quaternion currentHandOrientation)\n+        {\n+            Matrix4x4 m = Matrix4x4.Rotate(initialHandOrientation);\n+            Vector3 initRay = new Vector3(0, 0, 1);\n+            initRay = m.MultiplyPoint(initRay);\n+            initRay.Normalize();\n+\n+            m  = Matrix4x4.Rotate(currentHandOrientation);\n+            Vector3 currentRay = new Vector3(0, 0, 1);\n+            currentRay = m.MultiplyPoint(currentRay);\n+            currentRay.Normalize();\n+\n+            float dot = Vector3.Dot(initRay, currentRay);\n+            dot = Mathf.Acos(dot) * Mathf.Rad2Deg;\n+\n+            if (Mathf.Abs(initRay.y - currentRay.y) < Mathf.Abs(initRay.x - currentRay.x))\n+            {\n+                if (Vector3.Cross(initRay, currentRay).y > 0)\n+                {\n+                    dot = -dot;\n+                }\n+            }\n+            else\n+            {\n+                if (Vector3.Cross(initRay, currentRay).x > 0)\n+                {\n+                    dot = -dot;\n+                }\n+            }\n+\n+            Vector3 newEulers = new Vector3(0,0,0);\n+            if (Axis == AxisToAffect.X)\n+            {\n+                newEulers = new Vector3(dot, 0, 0);\n+            }\n+            else if (Axis == AxisToAffect.Y)\n+            {\n+                newEulers = new Vector3(0, dot, 0);\n+            }\n+            else if (Axis == AxisToAffect.Z)\n+            {\n+                newEulers = new Vector3(0, 0, dot);\n+            }\n+            newEulers += initialOrientation;\n+\n+\n+            transformToAffect.rotation = Quaternion.Euler(newEulers);\n+        }\n+        private void ApplyRotation(Vector3 currentHandPosition)\n+        {\n+            Vector3 initialRay = initialHandPosition - transformToAffect.position;\n+            initialRay.Normalize();\n+\n+            Vector3 currentRay = currentHandPosition - transformToAffect.position;\n+            currentRay.Normalize();\n+\n+            Vector3 delta = currentRay - initialRay;\n+            delta.Scale(rotationFromPositionScale);\n+\n+            Vector3 newEulers = new Vector3(0, 0, 0);\n+            if (Axis == AxisToAffect.X)\n+            {\n+                newEulers = new Vector3(-delta.y, 0, 0);\n+            }\n+            else if (Axis == AxisToAffect.Y)\n+            {\n+                newEulers = new Vector3(0, delta.x, 0);\n+            }\n+            else if (Axis == AxisToAffect.Z)\n+            {\n+                newEulers = new Vector3(0, 0, delta.y);\n+            }\n+\n+            if (IsLeftHandedRotation)\n+            {\n+                newEulers.Scale(new Vector3(-1.0f, -1.0f, -1.0f));\n+            }\n+\n+            newEulers += initialOrientation;\n+\n+            transformToAffect.rotation = Quaternion.Euler(newEulers);\n+        }\n+\n+        public void OnInputDown(InputEventData eventData)\n+        {\n+            inputDownEventData = eventData;\n+\n+            initialHandPosition     = GetHandPosition(eventData.SourceId);\n+            initialScale            = transformToAffect.localScale;\n+            initialPosition         = transformToAffect.position;\n+            initialOrientation      = transformToAffect.rotation.eulerAngles;\n+            initialHandOrientation  = GetHandOrientation(eventData.SourceId);\n+            initialScaleOrigin      = transformToAffect.position - this.transform.position;\n+\n+            MixedRealityToolkit.InputModule.InputManager.Instance.PushModalInputHandler(gameObject);\n+\n+            this.gameObject.GetComponent<Renderer>().material = Rig.InteractingMaterial;\n+            Rig.FocusOnHandle(this.gameObject);\n+            eventData.Use();\n+        }\n+        public void OnInputUp(InputEventData eventData)\n+        {\n+            inputDownEventData = null;\n+\n+            if (this.AffineType == TransformType.Scale)\n+            {\n+                this.gameObject.GetComponent<Renderer>().material = Rig.ScaleHandleMaterial;\n+            }\n+            else\n+            {\n+                this.gameObject.GetComponent<Renderer>().material = Rig.RotateHandleMaterial;\n+            }\n+\n+            MixedRealityToolkit.InputModule.InputManager.Instance.PopModalInputHandler();\n+            Rig.FocusOnHandle(null);\n+\n+            if (eventData != null)\n+            {\n+                eventData.Use();\n+            }\n+        }\n+        public void OnSourceDetected(SourceStateEventData eventData)\n+        {\n+        }\n+        public void OnSourceLost(SourceStateEventData eventData)\n+        {\n+            if (eventData.SourceId == inputDownEventData.SourceId)\n+            {\n+                OnInputUp(null);\n+            }\n+            eventData.Use();\n+        }\n+    }\n+}\n+\n+\n+","path":"Assets/MixedRealityToolkit/UX/Scripts/BoundingBoxes/BoundingBoxGizmoHandle.cs","position":305,"original_position":305,"commit_id":"e4b96119ec741f3c00b144867ed4177c5e478738","original_commit_id":"e4b96119ec741f3c00b144867ed4177c5e478738","user":{"login":"StephenHodgson","id":13334553,"avatar_url":"https://avatars2.githubusercontent.com/u/13334553?v=4","gravatar_id":"","url":"https://api.github.com/users/StephenHodgson","html_url":"https://github.com/StephenHodgson","followers_url":"https://api.github.com/users/StephenHodgson/followers","following_url":"https://api.github.com/users/StephenHodgson/following{/other_user}","gists_url":"https://api.github.com/users/StephenHodgson/gists{/gist_id}","starred_url":"https://api.github.com/users/StephenHodgson/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/StephenHodgson/subscriptions","organizations_url":"https://api.github.com/users/StephenHodgson/orgs","repos_url":"https://api.github.com/users/StephenHodgson/repos","events_url":"https://api.github.com/users/StephenHodgson/events{/privacy}","received_events_url":"https://api.github.com/users/StephenHodgson/received_events","type":"User","site_admin":false},"body":"lots of empty lines here at the bottom.","created_at":"2018-03-03T20:22:38Z","updated_at":"2018-03-03T20:22:38Z","html_url":"https://github.com/Microsoft/MixedRealityToolkit-Unity/pull/1785#discussion_r172027471","pull_request_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/pulls/1785","author_association":"COLLABORATOR","_links":{"self":{"href":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/pulls/comments/172027471"},"html":{"href":"https://github.com/Microsoft/MixedRealityToolkit-Unity/pull/1785#discussion_r172027471"},"pull_request":{"href":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/pulls/1785"}}},"pull_request":{"url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/pulls/1785","id":172630898,"html_url":"https://github.com/Microsoft/MixedRealityToolkit-Unity/pull/1785","diff_url":"https://github.com/Microsoft/MixedRealityToolkit-Unity/pull/1785.diff","patch_url":"https://github.com/Microsoft/MixedRealityToolkit-Unity/pull/1785.patch","issue_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/issues/1785","number":1785,"state":"open","locked":false,"title":"MRDL->MRTK Feature Bounding Box and App Bar","user":{"login":"cre8ivepark","id":13754172,"avatar_url":"https://avatars2.githubusercontent.com/u/13754172?v=4","gravatar_id":"","url":"https://api.github.com/users/cre8ivepark","html_url":"https://github.com/cre8ivepark","followers_url":"https://api.github.com/users/cre8ivepark/followers","following_url":"https://api.github.com/users/cre8ivepark/following{/other_user}","gists_url":"https://api.github.com/users/cre8ivepark/gists{/gist_id}","starred_url":"https://api.github.com/users/cre8ivepark/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cre8ivepark/subscriptions","organizations_url":"https://api.github.com/users/cre8ivepark/orgs","repos_url":"https://api.github.com/users/cre8ivepark/repos","events_url":"https://api.github.com/users/cre8ivepark/events{/privacy}","received_events_url":"https://api.github.com/users/cre8ivepark/received_events","type":"User","site_admin":false},"body":"![mrtk_appbar_boundingbox](https://user-images.githubusercontent.com/13754172/36922999-ade6c412-1e1e-11e8-9aa6-4bb4435e531c.jpg)\r\n\r\nOverview\r\n---\r\nThis example scene demonstrates how to make objects manipulatable using BoundingBoxRig script. The bounding box is a standard interface for manipulating objects in Windows Mixed Reality. Using gizmo on the corners and edges, you can scale or rotate the object. App Bar provides the button for entering/exiting 'Adjust' mode to enable/disable Bounding Box. For more information please see '[App Bar and Bounding Box' on Windows Dev Center.\r\n](https://developer.microsoft.com/en-us/windows/mixed-reality/app_bar_and_bounding_box)\r\n\r\nDemo video\r\n---\r\nhttps://gfycat.com/TameQuaintGnu\r\n\r\nSupported devices\r\n---\r\n- HoloLens \r\n- Immersive headset \r\n\r\nTest Scene \r\n---\r\n[BoundingBoxGizmoExample.unity\r\n](https://github.com/johnppella/MixedRealityToolkit-Unity/blob/BoundingBoxWithGizmo/Assets/MixedRealityToolkit-Examples/UX/Scenes/BoundingBoxGizmoExample.unity)\r\n![mrtk_appbar_boundingbox_examplescene](https://user-images.githubusercontent.com/13754172/36923008-b8651b96-1e1e-11e8-8415-5bef82561daa.jpg)\r\n\r\n\r\nTechnical details \r\n---\r\nYou can find technical details on the README page: \r\nhttps://github.com/johnppella/MixedRealityToolkit-Unity/blob/BoundingBoxWithGizmo/Assets/MixedRealityToolkit-Examples/UX/Readme/README_BoundingBoxGizmoExample.md\r\n\r\nDependency\r\n---\r\nThis example scene demonstrates the combination of BoundingBoxRig with TwoHandManipulatable script. \r\n\r\nChanges\r\n---\r\n- Fixes: #1497 #1522\r\n#","created_at":"2018-03-02T23:38:42Z","updated_at":"2018-03-03T20:22:38Z","closed_at":null,"merged_at":null,"merge_commit_sha":"fee8f5137c03fc3e238fd22bc1f0c71987c5bf98","assignee":null,"assignees":[],"requested_reviewers":[{"login":"DDReaper","id":1793042,"avatar_url":"https://avatars0.githubusercontent.com/u/1793042?v=4","gravatar_id":"","url":"https://api.github.com/users/DDReaper","html_url":"https://github.com/DDReaper","followers_url":"https://api.github.com/users/DDReaper/followers","following_url":"https://api.github.com/users/DDReaper/following{/other_user}","gists_url":"https://api.github.com/users/DDReaper/gists{/gist_id}","starred_url":"https://api.github.com/users/DDReaper/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DDReaper/subscriptions","organizations_url":"https://api.github.com/users/DDReaper/orgs","repos_url":"https://api.github.com/users/DDReaper/repos","events_url":"https://api.github.com/users/DDReaper/events{/privacy}","received_events_url":"https://api.github.com/users/DDReaper/received_events","type":"User","site_admin":false},{"login":"keveleigh","id":3580640,"avatar_url":"https://avatars2.githubusercontent.com/u/3580640?v=4","gravatar_id":"","url":"https://api.github.com/users/keveleigh","html_url":"https://github.com/keveleigh","followers_url":"https://api.github.com/users/keveleigh/followers","following_url":"https://api.github.com/users/keveleigh/following{/other_user}","gists_url":"https://api.github.com/users/keveleigh/gists{/gist_id}","starred_url":"https://api.github.com/users/keveleigh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/keveleigh/subscriptions","organizations_url":"https://api.github.com/users/keveleigh/orgs","repos_url":"https://api.github.com/users/keveleigh/repos","events_url":"https://api.github.com/users/keveleigh/events{/privacy}","received_events_url":"https://api.github.com/users/keveleigh/received_events","type":"User","site_admin":false},{"login":"Railboy","id":9789716,"avatar_url":"https://avatars3.githubusercontent.com/u/9789716?v=4","gravatar_id":"","url":"https://api.github.com/users/Railboy","html_url":"https://github.com/Railboy","followers_url":"https://api.github.com/users/Railboy/followers","following_url":"https://api.github.com/users/Railboy/following{/other_user}","gists_url":"https://api.github.com/users/Railboy/gists{/gist_id}","starred_url":"https://api.github.com/users/Railboy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Railboy/subscriptions","organizations_url":"https://api.github.com/users/Railboy/orgs","repos_url":"https://api.github.com/users/Railboy/repos","events_url":"https://api.github.com/users/Railboy/events{/privacy}","received_events_url":"https://api.github.com/users/Railboy/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/pulls/1785/commits","review_comments_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/pulls/1785/comments","review_comment_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/issues/1785/comments","statuses_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/statuses/e4b96119ec741f3c00b144867ed4177c5e478738","head":{"label":"johnppella:Feature_UX_BoundingBoxAppBar","ref":"Feature_UX_BoundingBoxAppBar","sha":"e4b96119ec741f3c00b144867ed4177c5e478738","user":{"login":"johnppella","id":16143963,"avatar_url":"https://avatars3.githubusercontent.com/u/16143963?v=4","gravatar_id":"","url":"https://api.github.com/users/johnppella","html_url":"https://github.com/johnppella","followers_url":"https://api.github.com/users/johnppella/followers","following_url":"https://api.github.com/users/johnppella/following{/other_user}","gists_url":"https://api.github.com/users/johnppella/gists{/gist_id}","starred_url":"https://api.github.com/users/johnppella/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/johnppella/subscriptions","organizations_url":"https://api.github.com/users/johnppella/orgs","repos_url":"https://api.github.com/users/johnppella/repos","events_url":"https://api.github.com/users/johnppella/events{/privacy}","received_events_url":"https://api.github.com/users/johnppella/received_events","type":"User","site_admin":false},"repo":{"id":120040749,"name":"MixedRealityToolkit-Unity","full_name":"johnppella/MixedRealityToolkit-Unity","owner":{"login":"johnppella","id":16143963,"avatar_url":"https://avatars3.githubusercontent.com/u/16143963?v=4","gravatar_id":"","url":"https://api.github.com/users/johnppella","html_url":"https://github.com/johnppella","followers_url":"https://api.github.com/users/johnppella/followers","following_url":"https://api.github.com/users/johnppella/following{/other_user}","gists_url":"https://api.github.com/users/johnppella/gists{/gist_id}","starred_url":"https://api.github.com/users/johnppella/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/johnppella/subscriptions","organizations_url":"https://api.github.com/users/johnppella/orgs","repos_url":"https://api.github.com/users/johnppella/repos","events_url":"https://api.github.com/users/johnppella/events{/privacy}","received_events_url":"https://api.github.com/users/johnppella/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/johnppella/MixedRealityToolkit-Unity","description":"MixedRealityToolkit-Unity uses code from the base MixedRealityToolkit repository and makes it easier to consume in Unity.","fork":true,"url":"https://api.github.com/repos/johnppella/MixedRealityToolkit-Unity","forks_url":"https://api.github.com/repos/johnppella/MixedRealityToolkit-Unity/forks","keys_url":"https://api.github.com/repos/johnppella/MixedRealityToolkit-Unity/keys{/key_id}","collaborators_url":"https://api.github.com/repos/johnppella/MixedRealityToolkit-Unity/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/johnppella/MixedRealityToolkit-Unity/teams","hooks_url":"https://api.github.com/repos/johnppella/MixedRealityToolkit-Unity/hooks","issue_events_url":"https://api.github.com/repos/johnppella/MixedRealityToolkit-Unity/issues/events{/number}","events_url":"https://api.github.com/repos/johnppella/MixedRealityToolkit-Unity/events","assignees_url":"https://api.github.com/repos/johnppella/MixedRealityToolkit-Unity/assignees{/user}","branches_url":"https://api.github.com/repos/johnppella/MixedRealityToolkit-Unity/branches{/branch}","tags_url":"https://api.github.com/repos/johnppella/MixedRealityToolkit-Unity/tags","blobs_url":"https://api.github.com/repos/johnppella/MixedRealityToolkit-Unity/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/johnppella/MixedRealityToolkit-Unity/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/johnppella/MixedRealityToolkit-Unity/git/refs{/sha}","trees_url":"https://api.github.com/repos/johnppella/MixedRealityToolkit-Unity/git/trees{/sha}","statuses_url":"https://api.github.com/repos/johnppella/MixedRealityToolkit-Unity/statuses/{sha}","languages_url":"https://api.github.com/repos/johnppella/MixedRealityToolkit-Unity/languages","stargazers_url":"https://api.github.com/repos/johnppella/MixedRealityToolkit-Unity/stargazers","contributors_url":"https://api.github.com/repos/johnppella/MixedRealityToolkit-Unity/contributors","subscribers_url":"https://api.github.com/repos/johnppella/MixedRealityToolkit-Unity/subscribers","subscription_url":"https://api.github.com/repos/johnppella/MixedRealityToolkit-Unity/subscription","commits_url":"https://api.github.com/repos/johnppella/MixedRealityToolkit-Unity/commits{/sha}","git_commits_url":"https://api.github.com/repos/johnppella/MixedRealityToolkit-Unity/git/commits{/sha}","comments_url":"https://api.github.com/repos/johnppella/MixedRealityToolkit-Unity/comments{/number}","issue_comment_url":"https://api.github.com/repos/johnppella/MixedRealityToolkit-Unity/issues/comments{/number}","contents_url":"https://api.github.com/repos/johnppella/MixedRealityToolkit-Unity/contents/{+path}","compare_url":"https://api.github.com/repos/johnppella/MixedRealityToolkit-Unity/compare/{base}...{head}","merges_url":"https://api.github.com/repos/johnppella/MixedRealityToolkit-Unity/merges","archive_url":"https://api.github.com/repos/johnppella/MixedRealityToolkit-Unity/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/johnppella/MixedRealityToolkit-Unity/downloads","issues_url":"https://api.github.com/repos/johnppella/MixedRealityToolkit-Unity/issues{/number}","pulls_url":"https://api.github.com/repos/johnppella/MixedRealityToolkit-Unity/pulls{/number}","milestones_url":"https://api.github.com/repos/johnppella/MixedRealityToolkit-Unity/milestones{/number}","notifications_url":"https://api.github.com/repos/johnppella/MixedRealityToolkit-Unity/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/johnppella/MixedRealityToolkit-Unity/labels{/name}","releases_url":"https://api.github.com/repos/johnppella/MixedRealityToolkit-Unity/releases{/id}","deployments_url":"https://api.github.com/repos/johnppella/MixedRealityToolkit-Unity/deployments","created_at":"2018-02-02T23:03:32Z","updated_at":"2018-02-19T15:27:59Z","pushed_at":"2018-03-03T08:49:05Z","git_url":"git://github.com/johnppella/MixedRealityToolkit-Unity.git","ssh_url":"git@github.com:johnppella/MixedRealityToolkit-Unity.git","clone_url":"https://github.com/johnppella/MixedRealityToolkit-Unity.git","svn_url":"https://github.com/johnppella/MixedRealityToolkit-Unity","homepage":"","size":541452,"stargazers_count":1,"watchers_count":1,"language":"C#","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":null,"forks":0,"open_issues":0,"watchers":1,"default_branch":"master"}},"base":{"label":"Microsoft:Dev_Working_Branch","ref":"Dev_Working_Branch","sha":"4233e0dc287163e953c84eaf20349ed0e2081e4e","user":{"login":"Microsoft","id":6154722,"avatar_url":"https://avatars2.githubusercontent.com/u/6154722?v=4","gravatar_id":"","url":"https://api.github.com/users/Microsoft","html_url":"https://github.com/Microsoft","followers_url":"https://api.github.com/users/Microsoft/followers","following_url":"https://api.github.com/users/Microsoft/following{/other_user}","gists_url":"https://api.github.com/users/Microsoft/gists{/gist_id}","starred_url":"https://api.github.com/users/Microsoft/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Microsoft/subscriptions","organizations_url":"https://api.github.com/users/Microsoft/orgs","repos_url":"https://api.github.com/users/Microsoft/repos","events_url":"https://api.github.com/users/Microsoft/events{/privacy}","received_events_url":"https://api.github.com/users/Microsoft/received_events","type":"Organization","site_admin":false},"repo":{"id":50605426,"name":"MixedRealityToolkit-Unity","full_name":"Microsoft/MixedRealityToolkit-Unity","owner":{"login":"Microsoft","id":6154722,"avatar_url":"https://avatars2.githubusercontent.com/u/6154722?v=4","gravatar_id":"","url":"https://api.github.com/users/Microsoft","html_url":"https://github.com/Microsoft","followers_url":"https://api.github.com/users/Microsoft/followers","following_url":"https://api.github.com/users/Microsoft/following{/other_user}","gists_url":"https://api.github.com/users/Microsoft/gists{/gist_id}","starred_url":"https://api.github.com/users/Microsoft/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Microsoft/subscriptions","organizations_url":"https://api.github.com/users/Microsoft/orgs","repos_url":"https://api.github.com/users/Microsoft/repos","events_url":"https://api.github.com/users/Microsoft/events{/privacy}","received_events_url":"https://api.github.com/users/Microsoft/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Microsoft/MixedRealityToolkit-Unity","description":"MixedRealityToolkit-Unity uses code from the base MixedRealityToolkit repository and makes it easier to consume in Unity.","fork":false,"url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity","forks_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/forks","keys_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/teams","hooks_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/hooks","issue_events_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/issues/events{/number}","events_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/events","assignees_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/assignees{/user}","branches_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/branches{/branch}","tags_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/tags","blobs_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/git/refs{/sha}","trees_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/statuses/{sha}","languages_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/languages","stargazers_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/stargazers","contributors_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/contributors","subscribers_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/subscribers","subscription_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/subscription","commits_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/commits{/sha}","git_commits_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/git/commits{/sha}","comments_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/comments{/number}","issue_comment_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/issues/comments{/number}","contents_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/contents/{+path}","compare_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/merges","archive_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/downloads","issues_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/issues{/number}","pulls_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/pulls{/number}","milestones_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/milestones{/number}","notifications_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/labels{/name}","releases_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/releases{/id}","deployments_url":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/deployments","created_at":"2016-01-28T18:54:58Z","updated_at":"2018-03-03T17:38:36Z","pushed_at":"2018-03-03T12:12:20Z","git_url":"git://github.com/Microsoft/MixedRealityToolkit-Unity.git","ssh_url":"git@github.com:Microsoft/MixedRealityToolkit-Unity.git","clone_url":"https://github.com/Microsoft/MixedRealityToolkit-Unity.git","svn_url":"https://github.com/Microsoft/MixedRealityToolkit-Unity","homepage":"","size":576423,"stargazers_count":1522,"watchers_count":1522,"language":"C#","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":749,"mirror_url":null,"archived":false,"open_issues_count":327,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit"},"forks":749,"open_issues":327,"watchers":1522,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/pulls/1785"},"html":{"href":"https://github.com/Microsoft/MixedRealityToolkit-Unity/pull/1785"},"issue":{"href":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/issues/1785"},"comments":{"href":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/issues/1785/comments"},"review_comments":{"href":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/pulls/1785/comments"},"review_comment":{"href":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/pulls/1785/commits"},"statuses":{"href":"https://api.github.com/repos/Microsoft/MixedRealityToolkit-Unity/statuses/e4b96119ec741f3c00b144867ed4177c5e478738"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"StephenHodgson"}}