{"action":"created","comment":{"url":"https://api.github.com/repos/PlusToolkit/PlusLib/pulls/comments/191054734","pull_request_review_id":123562547,"id":191054734,"diff_hunk":"@@ -0,0 +1,396 @@\n+/*=Plus=header=begin======================================================\n+Program: Plus\n+Copyright (c) Laboratory for Percutaneous Surgery. All rights reserved.\n+See License.txt for details.\n+=========================================================Plus=header=end*/\n+\n+// Local includes\n+#include \"PlusConfigure.h\"\n+#include \"vtkPlusAtracsysTracker.h\"\n+#include \"AtracsysTracker.h\"\n+\n+// VTK includes\n+#include <vtkSmartPointer.h>\n+#include <vtkMatrix4x4.h>\n+#include <vtkMath.h>\n+\n+// System includes\n+#include <string>\n+#include <map>\n+#include <fstream>\n+#include <iostream>\n+\n+#ifdef __linux__\n+#include <unistd.h>\n+#endif\n+#ifdef WIN32\n+#include <windows.h>\n+#endif\n+\n+// Atracsys includes\n+#include \"ftkErrors.h\"\n+#include \"ftkEvent.h\"\n+#include \"ftkInterface.h\"\n+#include \"ftkOptions.h\"\n+#include \"ftkPlatform.h\"\n+#include \"ftkTypes.h\"\n+\n+vtkStandardNewMacro(vtkPlusAtracsysTracker);\n+\n+// for convenience\n+#define ATR_SUCCESS AtracsysTracker::ATRACSYS_RESULT::SUCCESS\n+typedef AtracsysTracker::ATRACSYS_RESULT ATRACSYS_RESULT;\n+\n+//----------------------------------------------------------------------------\n+class vtkPlusAtracsysTracker::vtkInternal\n+{\n+public:\n+  vtkPlusAtracsysTracker* External;\n+\n+  vtkInternal(vtkPlusAtracsysTracker* external)\n+    : External(external)\n+  {\n+  }\n+\n+  virtual ~vtkInternal()\n+  {\n+  }\n+\n+  int MaxMissingFiducials = 0;\n+  float MaxMeanRegistrationErrorMm = 2.0;\n+  int ActiveMarkerPairingTimeSec = 0;\n+\n+  // type of tracker connected\n+  AtracsysTracker::DEVICE_TYPE DeviceType = AtracsysTracker::UNKNOWN_DEVICE;\n+\n+  // matches plus tool id to .ini geometry file names/paths\n+  std::map<std::string, std::string> PlusIdMappedToGeometryFilename;\n+\n+  // matches fusionTrack internal tool geometry ID to Plus tool ID for updating tools\n+  std::map<int, std::string> FtkGeometryIdMappedToToolId;\n+\n+  // Atracsys API wrapper class handle\n+  AtracsysTracker* Tracker = new AtracsysTracker();\n+};\n+\n+//----------------------------------------------------------------------------\n+vtkPlusAtracsysTracker::vtkPlusAtracsysTracker()\n+  : vtkPlusDevice()\n+  , Internal(new vtkInternal(this))\n+{\n+  LOG_TRACE(\"vtkPlusAtracsysTracker::vtkPlusAtracsysTracker()\");\n+\n+  this->FrameNumber = 0;\n+  this->StartThreadForInternalUpdates = true;\n+  this->InternalUpdateRate = 60;\n+}\n+\n+//----------------------------------------------------------------------------\n+vtkPlusAtracsysTracker::~vtkPlusAtracsysTracker()\n+{\n+  LOG_TRACE(\"vtkPlusAtracsysTracker::~vtkPlusAtracsysTracker()\");\n+\n+  delete Internal;\n+  Internal = nullptr;\n+}\n+\n+//----------------------------------------------------------------------------\n+void vtkPlusAtracsysTracker::PrintSelf(ostream& os, vtkIndent indent)\n+{\n+  Superclass::PrintSelf(os, indent);\n+}\n+\n+//----------------------------------------------------------------------------\n+PlusStatus vtkPlusAtracsysTracker::ReadConfiguration(vtkXMLDataElement* rootConfigElement)\n+{\n+  LOG_TRACE(\"vtkPlusAtracsysTracker::ReadConfiguration\");\n+\n+  XML_FIND_DEVICE_ELEMENT_REQUIRED_FOR_READING(deviceConfig, rootConfigElement);\n+\n+  XML_READ_SCALAR_ATTRIBUTE_NONMEMBER_OPTIONAL(int, MaxMissingFiducials, this->Internal->MaxMissingFiducials, deviceConfig);\n+  if (this->Internal->MaxMissingFiducials < 0 || this->Internal->MaxMissingFiducials > 3)\n+  {\n+    LOG_WARNING(\"Invalid maximum number of missing fiducials provided. Must be between 0 and 3 inclusive. Maximum missing fiducials has been set to its default value of 0.\");\n+    this->Internal->MaxMissingFiducials = 0;\n+  }\n+\n+  XML_READ_SCALAR_ATTRIBUTE_NONMEMBER_OPTIONAL(float, MaxMeanRegistrationErrorMm, this->Internal->MaxMeanRegistrationErrorMm, deviceConfig);\n+  if (this->Internal->MaxMeanRegistrationErrorMm < 0.1 || this->Internal->MaxMeanRegistrationErrorMm > 5.0)\n+  {\n+    LOG_WARNING(\"Invalid maximum mean registration error provided. Must be between 0.1 and 5 mm inclusive. Maximum mean registration error has been set to its default value of 5.0mm.\");\n+    this->Internal->MaxMeanRegistrationErrorMm = 2.0;\n+  }\n+\n+  XML_READ_SCALAR_ATTRIBUTE_NONMEMBER_OPTIONAL(int, ActiveMarkerPairingTimeSec, this->Internal->ActiveMarkerPairingTimeSec, deviceConfig);\n+  if (this->Internal->ActiveMarkerPairingTimeSec > 60)\n+  {\n+    LOG_WARNING(\"Are you sure you want to leave active marker pairing enabled for more than 60 seconds?\");\n+  }\n+\n+  enum TRACKING_TYPE\n+  {\n+    ACTIVE,\n+    PASSIVE\n+  };\n+\n+  XML_FIND_NESTED_ELEMENT_REQUIRED(dataSourcesElement, deviceConfig, \"DataSources\");\n+  for (int nestedElementIndex = 0; nestedElementIndex < dataSourcesElement->GetNumberOfNestedElements(); nestedElementIndex++)\n+  {\n+    vtkXMLDataElement* toolDataElement = dataSourcesElement->GetNestedElement(nestedElementIndex);\n+    if (STRCASECMP(toolDataElement->GetName(), \"DataSource\") != 0)\n+    {\n+      // if this is not a data source element, skip it\n+      continue;\n+    }\n+    if (toolDataElement->GetAttribute(\"Type\") != NULL && STRCASECMP(toolDataElement->GetAttribute(\"Type\"), \"Tool\") != 0)\n+    {\n+      // if this is not a Tool element, skip it\n+      continue;\n+    }\n+    std::string toolId(toolDataElement->GetAttribute(\"Id\"));\n+    if (toolId.empty())\n+    {\n+    // tool doesn't have ID needed to generate transform\n+    LOG_ERROR(\"Failed to initialize Atracsys tool: DataSource Id is missing.\");\n+    continue;\n+    }\n+\n+    TRACKING_TYPE toolTrackingType;\n+    XML_READ_ENUM2_ATTRIBUTE_NONMEMBER_OPTIONAL(TrackingType, toolTrackingType, toolDataElement, \"ACTIVE\", ACTIVE, \"PASSIVE\", PASSIVE);\n+    if (toolTrackingType == ACTIVE)\n+    {\n+      // active tool, can be loaded directly into FtkGeometryIdMappedToToolId\n+      int ftkGeometryId = -1;\n+      XML_READ_SCALAR_ATTRIBUTE_NONMEMBER_OPTIONAL(int, GeometryId, ftkGeometryId, toolDataElement);\n+      if (ftkGeometryId != -1)\n+      {\n+        std::pair<int, std::string> thisTool(ftkGeometryId, toolId);\n+        this->Internal->FtkGeometryIdMappedToToolId.insert(thisTool);\n+      }\n+      else\n+      {\n+        LOG_ERROR(\"Active tool with Id \" << toolId << \" is missing a GeometryId\");\n+        return PLUS_FAIL;\n+      }\n+    }\n+    else if (toolTrackingType == PASSIVE)\n+    {\n+      // passive tool, load into PlusIdMappedToGeometryFilename to have geometry loaded in InternalConnect\n+      const char* geometryFile;\n+      if ((geometryFile = toolDataElement->GetAttribute(\"GeometryFile\")) != NULL)\n+      {\n+        std::pair<std::string, std::string> thisTool(toolId, geometryFile);","path":"src/PlusDataCollection/Atracsys/vtkPlusAtracsysTracker.cxx","position":182,"original_position":182,"commit_id":"940de02bdd741d8273ad63eb8007194ef240ab4c","original_commit_id":"940de02bdd741d8273ad63eb8007194ef240ab4c","user":{"login":"markasselin","id":17535566,"avatar_url":"https://avatars3.githubusercontent.com/u/17535566?v=4","gravatar_id":"","url":"https://api.github.com/users/markasselin","html_url":"https://github.com/markasselin","followers_url":"https://api.github.com/users/markasselin/followers","following_url":"https://api.github.com/users/markasselin/following{/other_user}","gists_url":"https://api.github.com/users/markasselin/gists{/gist_id}","starred_url":"https://api.github.com/users/markasselin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/markasselin/subscriptions","organizations_url":"https://api.github.com/users/markasselin/orgs","repos_url":"https://api.github.com/users/markasselin/repos","events_url":"https://api.github.com/users/markasselin/events{/privacy}","received_events_url":"https://api.github.com/users/markasselin/received_events","type":"User","site_admin":false},"body":"We do, I just create the std::pair to make adding to the map more intuitive","created_at":"2018-05-26T17:32:03Z","updated_at":"2018-05-26T17:32:03Z","html_url":"https://github.com/PlusToolkit/PlusLib/pull/357#discussion_r191054734","pull_request_url":"https://api.github.com/repos/PlusToolkit/PlusLib/pulls/357","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/PlusToolkit/PlusLib/pulls/comments/191054734"},"html":{"href":"https://github.com/PlusToolkit/PlusLib/pull/357#discussion_r191054734"},"pull_request":{"href":"https://api.github.com/repos/PlusToolkit/PlusLib/pulls/357"}},"in_reply_to_id":188148757},"pull_request":{"url":"https://api.github.com/repos/PlusToolkit/PlusLib/pulls/357","id":187953987,"html_url":"https://github.com/PlusToolkit/PlusLib/pull/357","diff_url":"https://github.com/PlusToolkit/PlusLib/pull/357.diff","patch_url":"https://github.com/PlusToolkit/PlusLib/pull/357.patch","issue_url":"https://api.github.com/repos/PlusToolkit/PlusLib/issues/357","number":357,"state":"open","locked":false,"title":"Atracsys support","user":{"login":"markasselin","id":17535566,"avatar_url":"https://avatars3.githubusercontent.com/u/17535566?v=4","gravatar_id":"","url":"https://api.github.com/users/markasselin","html_url":"https://github.com/markasselin","followers_url":"https://api.github.com/users/markasselin/followers","following_url":"https://api.github.com/users/markasselin/following{/other_user}","gists_url":"https://api.github.com/users/markasselin/gists{/gist_id}","starred_url":"https://api.github.com/users/markasselin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/markasselin/subscriptions","organizations_url":"https://api.github.com/users/markasselin/orgs","repos_url":"https://api.github.com/users/markasselin/repos","events_url":"https://api.github.com/users/markasselin/events{/privacy}","received_events_url":"https://api.github.com/users/markasselin/received_events","type":"User","site_admin":false},"body":"Adding ability to use Atracsys tracker. This PR is mainly for review purposes until testing has been completed with the fusionTrack devices and any necessary changes made.","created_at":"2018-05-14T21:18:45Z","updated_at":"2018-05-26T17:32:03Z","closed_at":null,"merged_at":null,"merge_commit_sha":"14e6f8ea8bd9f1343cb00cda0c319efe08878045","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/PlusToolkit/PlusLib/pulls/357/commits","review_comments_url":"https://api.github.com/repos/PlusToolkit/PlusLib/pulls/357/comments","review_comment_url":"https://api.github.com/repos/PlusToolkit/PlusLib/pulls/comments{/number}","comments_url":"https://api.github.com/repos/PlusToolkit/PlusLib/issues/357/comments","statuses_url":"https://api.github.com/repos/PlusToolkit/PlusLib/statuses/940de02bdd741d8273ad63eb8007194ef240ab4c","head":{"label":"markasselin:atracsys","ref":"atracsys","sha":"940de02bdd741d8273ad63eb8007194ef240ab4c","user":{"login":"markasselin","id":17535566,"avatar_url":"https://avatars3.githubusercontent.com/u/17535566?v=4","gravatar_id":"","url":"https://api.github.com/users/markasselin","html_url":"https://github.com/markasselin","followers_url":"https://api.github.com/users/markasselin/followers","following_url":"https://api.github.com/users/markasselin/following{/other_user}","gists_url":"https://api.github.com/users/markasselin/gists{/gist_id}","starred_url":"https://api.github.com/users/markasselin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/markasselin/subscriptions","organizations_url":"https://api.github.com/users/markasselin/orgs","repos_url":"https://api.github.com/users/markasselin/repos","events_url":"https://api.github.com/users/markasselin/events{/privacy}","received_events_url":"https://api.github.com/users/markasselin/received_events","type":"User","site_admin":false},"repo":{"id":91489382,"name":"PlusLib","full_name":"markasselin/PlusLib","owner":{"login":"markasselin","id":17535566,"avatar_url":"https://avatars3.githubusercontent.com/u/17535566?v=4","gravatar_id":"","url":"https://api.github.com/users/markasselin","html_url":"https://github.com/markasselin","followers_url":"https://api.github.com/users/markasselin/followers","following_url":"https://api.github.com/users/markasselin/following{/other_user}","gists_url":"https://api.github.com/users/markasselin/gists{/gist_id}","starred_url":"https://api.github.com/users/markasselin/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/markasselin/subscriptions","organizations_url":"https://api.github.com/users/markasselin/orgs","repos_url":"https://api.github.com/users/markasselin/repos","events_url":"https://api.github.com/users/markasselin/events{/privacy}","received_events_url":"https://api.github.com/users/markasselin/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/markasselin/PlusLib","description":"Plus is an open-source software toolkit for data acquisition, pre-processing, and calibration for navigated image-guided interventions.","fork":true,"url":"https://api.github.com/repos/markasselin/PlusLib","forks_url":"https://api.github.com/repos/markasselin/PlusLib/forks","keys_url":"https://api.github.com/repos/markasselin/PlusLib/keys{/key_id}","collaborators_url":"https://api.github.com/repos/markasselin/PlusLib/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/markasselin/PlusLib/teams","hooks_url":"https://api.github.com/repos/markasselin/PlusLib/hooks","issue_events_url":"https://api.github.com/repos/markasselin/PlusLib/issues/events{/number}","events_url":"https://api.github.com/repos/markasselin/PlusLib/events","assignees_url":"https://api.github.com/repos/markasselin/PlusLib/assignees{/user}","branches_url":"https://api.github.com/repos/markasselin/PlusLib/branches{/branch}","tags_url":"https://api.github.com/repos/markasselin/PlusLib/tags","blobs_url":"https://api.github.com/repos/markasselin/PlusLib/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/markasselin/PlusLib/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/markasselin/PlusLib/git/refs{/sha}","trees_url":"https://api.github.com/repos/markasselin/PlusLib/git/trees{/sha}","statuses_url":"https://api.github.com/repos/markasselin/PlusLib/statuses/{sha}","languages_url":"https://api.github.com/repos/markasselin/PlusLib/languages","stargazers_url":"https://api.github.com/repos/markasselin/PlusLib/stargazers","contributors_url":"https://api.github.com/repos/markasselin/PlusLib/contributors","subscribers_url":"https://api.github.com/repos/markasselin/PlusLib/subscribers","subscription_url":"https://api.github.com/repos/markasselin/PlusLib/subscription","commits_url":"https://api.github.com/repos/markasselin/PlusLib/commits{/sha}","git_commits_url":"https://api.github.com/repos/markasselin/PlusLib/git/commits{/sha}","comments_url":"https://api.github.com/repos/markasselin/PlusLib/comments{/number}","issue_comment_url":"https://api.github.com/repos/markasselin/PlusLib/issues/comments{/number}","contents_url":"https://api.github.com/repos/markasselin/PlusLib/contents/{+path}","compare_url":"https://api.github.com/repos/markasselin/PlusLib/compare/{base}...{head}","merges_url":"https://api.github.com/repos/markasselin/PlusLib/merges","archive_url":"https://api.github.com/repos/markasselin/PlusLib/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/markasselin/PlusLib/downloads","issues_url":"https://api.github.com/repos/markasselin/PlusLib/issues{/number}","pulls_url":"https://api.github.com/repos/markasselin/PlusLib/pulls{/number}","milestones_url":"https://api.github.com/repos/markasselin/PlusLib/milestones{/number}","notifications_url":"https://api.github.com/repos/markasselin/PlusLib/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/markasselin/PlusLib/labels{/name}","releases_url":"https://api.github.com/repos/markasselin/PlusLib/releases{/id}","deployments_url":"https://api.github.com/repos/markasselin/PlusLib/deployments","created_at":"2017-05-16T18:07:03Z","updated_at":"2017-05-16T18:07:07Z","pushed_at":"2018-05-13T23:18:23Z","git_url":"git://github.com/markasselin/PlusLib.git","ssh_url":"git@github.com:markasselin/PlusLib.git","clone_url":"https://github.com/markasselin/PlusLib.git","svn_url":"https://github.com/markasselin/PlusLib","homepage":"https://app.assembla.com/spaces/plus/wiki","size":80238,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":null,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"PlusToolkit:master","ref":"master","sha":"1cf2bf48ec06cdc8ab75fbf1dd8cea2250160408","user":{"login":"PlusToolkit","id":16928228,"avatar_url":"https://avatars2.githubusercontent.com/u/16928228?v=4","gravatar_id":"","url":"https://api.github.com/users/PlusToolkit","html_url":"https://github.com/PlusToolkit","followers_url":"https://api.github.com/users/PlusToolkit/followers","following_url":"https://api.github.com/users/PlusToolkit/following{/other_user}","gists_url":"https://api.github.com/users/PlusToolkit/gists{/gist_id}","starred_url":"https://api.github.com/users/PlusToolkit/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PlusToolkit/subscriptions","organizations_url":"https://api.github.com/users/PlusToolkit/orgs","repos_url":"https://api.github.com/users/PlusToolkit/repos","events_url":"https://api.github.com/users/PlusToolkit/events{/privacy}","received_events_url":"https://api.github.com/users/PlusToolkit/received_events","type":"Organization","site_admin":false},"repo":{"id":80171815,"name":"PlusLib","full_name":"PlusToolkit/PlusLib","owner":{"login":"PlusToolkit","id":16928228,"avatar_url":"https://avatars2.githubusercontent.com/u/16928228?v=4","gravatar_id":"","url":"https://api.github.com/users/PlusToolkit","html_url":"https://github.com/PlusToolkit","followers_url":"https://api.github.com/users/PlusToolkit/followers","following_url":"https://api.github.com/users/PlusToolkit/following{/other_user}","gists_url":"https://api.github.com/users/PlusToolkit/gists{/gist_id}","starred_url":"https://api.github.com/users/PlusToolkit/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PlusToolkit/subscriptions","organizations_url":"https://api.github.com/users/PlusToolkit/orgs","repos_url":"https://api.github.com/users/PlusToolkit/repos","events_url":"https://api.github.com/users/PlusToolkit/events{/privacy}","received_events_url":"https://api.github.com/users/PlusToolkit/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/PlusToolkit/PlusLib","description":"Software library for data acquisition, pre-processing, and calibration for navigated image-guided interventions.","fork":false,"url":"https://api.github.com/repos/PlusToolkit/PlusLib","forks_url":"https://api.github.com/repos/PlusToolkit/PlusLib/forks","keys_url":"https://api.github.com/repos/PlusToolkit/PlusLib/keys{/key_id}","collaborators_url":"https://api.github.com/repos/PlusToolkit/PlusLib/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/PlusToolkit/PlusLib/teams","hooks_url":"https://api.github.com/repos/PlusToolkit/PlusLib/hooks","issue_events_url":"https://api.github.com/repos/PlusToolkit/PlusLib/issues/events{/number}","events_url":"https://api.github.com/repos/PlusToolkit/PlusLib/events","assignees_url":"https://api.github.com/repos/PlusToolkit/PlusLib/assignees{/user}","branches_url":"https://api.github.com/repos/PlusToolkit/PlusLib/branches{/branch}","tags_url":"https://api.github.com/repos/PlusToolkit/PlusLib/tags","blobs_url":"https://api.github.com/repos/PlusToolkit/PlusLib/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/PlusToolkit/PlusLib/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/PlusToolkit/PlusLib/git/refs{/sha}","trees_url":"https://api.github.com/repos/PlusToolkit/PlusLib/git/trees{/sha}","statuses_url":"https://api.github.com/repos/PlusToolkit/PlusLib/statuses/{sha}","languages_url":"https://api.github.com/repos/PlusToolkit/PlusLib/languages","stargazers_url":"https://api.github.com/repos/PlusToolkit/PlusLib/stargazers","contributors_url":"https://api.github.com/repos/PlusToolkit/PlusLib/contributors","subscribers_url":"https://api.github.com/repos/PlusToolkit/PlusLib/subscribers","subscription_url":"https://api.github.com/repos/PlusToolkit/PlusLib/subscription","commits_url":"https://api.github.com/repos/PlusToolkit/PlusLib/commits{/sha}","git_commits_url":"https://api.github.com/repos/PlusToolkit/PlusLib/git/commits{/sha}","comments_url":"https://api.github.com/repos/PlusToolkit/PlusLib/comments{/number}","issue_comment_url":"https://api.github.com/repos/PlusToolkit/PlusLib/issues/comments{/number}","contents_url":"https://api.github.com/repos/PlusToolkit/PlusLib/contents/{+path}","compare_url":"https://api.github.com/repos/PlusToolkit/PlusLib/compare/{base}...{head}","merges_url":"https://api.github.com/repos/PlusToolkit/PlusLib/merges","archive_url":"https://api.github.com/repos/PlusToolkit/PlusLib/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/PlusToolkit/PlusLib/downloads","issues_url":"https://api.github.com/repos/PlusToolkit/PlusLib/issues{/number}","pulls_url":"https://api.github.com/repos/PlusToolkit/PlusLib/pulls{/number}","milestones_url":"https://api.github.com/repos/PlusToolkit/PlusLib/milestones{/number}","notifications_url":"https://api.github.com/repos/PlusToolkit/PlusLib/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/PlusToolkit/PlusLib/labels{/name}","releases_url":"https://api.github.com/repos/PlusToolkit/PlusLib/releases{/id}","deployments_url":"https://api.github.com/repos/PlusToolkit/PlusLib/deployments","created_at":"2017-01-27T01:16:26Z","updated_at":"2018-05-24T02:39:12Z","pushed_at":"2018-05-24T02:39:10Z","git_url":"git://github.com/PlusToolkit/PlusLib.git","ssh_url":"git@github.com:PlusToolkit/PlusLib.git","clone_url":"https://github.com/PlusToolkit/PlusLib.git","svn_url":"https://github.com/PlusToolkit/PlusLib","homepage":"http://www.plustoolkit.org","size":1175193,"stargazers_count":19,"watchers_count":19,"language":"C++","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":30,"mirror_url":null,"archived":false,"open_issues_count":114,"license":null,"forks":30,"open_issues":114,"watchers":19,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/PlusToolkit/PlusLib/pulls/357"},"html":{"href":"https://github.com/PlusToolkit/PlusLib/pull/357"},"issue":{"href":"https://api.github.com/repos/PlusToolkit/PlusLib/issues/357"},"comments":{"href":"https://api.github.com/repos/PlusToolkit/PlusLib/issues/357/comments"},"review_comments":{"href":"https://api.github.com/repos/PlusToolkit/PlusLib/pulls/357/comments"},"review_comment":{"href":"https://api.github.com/repos/PlusToolkit/PlusLib/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/PlusToolkit/PlusLib/pulls/357/commits"},"statuses":{"href":"https://api.github.com/repos/PlusToolkit/PlusLib/statuses/940de02bdd741d8273ad63eb8007194ef240ab4c"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"markasselin"}}