(57)【要約】共同システムは、作業空間内の多数のアクティブなクライアントをサポートするよう構成されており、当該作業空間は、異なるオブジェクトのグループに分配される。作業空間に参加している間、第１アクティブクライアントは、複数のオブジェクトを一グループに統合することができる。このグループに対して取られる動作は、当該グループ内のオブジェクトの大きさ（proportions）及び相対的な位置を維持する。これらの動作は、作業空間内の第２アクティブクライアントに分配され、第２アクティブクライアントはこれらの動作を自身のオブジェクトのコピーに適用することで、第１アクティブクライアントと第２アクティブクライアントの各ビューポートが同期される。オブジェクトのグループに対する動作には、グループ全体のリサイズ、移動、固定、削除、複製が含まれる。【選択図】図４
2018525716.tif 000002
【特許請求の範囲】
【請求項１】
物理的表示空間を有するディスプレイ、ユーザ入力デバイス、プロセッサ、通信ポートを含むネットワークノードを備えるシステムであって、前記ネットワークノードは、
１以上の他のネットワークノードとの通信を確立し、
仮想作業空間内に位置を有する図形ターゲットに関連するイベントのログの少なくとも一部を保存し、前記ログのエントリには、イベントの前記図形ターゲットの前記仮想作業空間における位置、前記イベントの時刻、前記図形ターゲットのターゲット識別子を含み、
前記仮想作業空間内のビューポート内で前記ログのエントリを識別し、前記識別されたエントリによって識別される図形ターゲットを前記スクリーン空間上に描画するために、前記物理的表示空間内のスクリーン空間を前記ビューポートにマップし、
前記スクリーン空間上の図形ターゲットのグループを識別するイベントを生成する入力データを前記ユーザ入力デバイスから受け入れ、
前記識別されたグループのメンバーを識別するメッセージを、前記１以上の他のネットワークノードに送信するロジックを備えて構成されることを特徴とするシステム。
【請求項２】
前記識別されたグループの前記メンバーシップにおける変更を識別するメッセージを送信するロジックを備える請求項１に記載のシステム。
【請求項３】
前記入力データを受け入れるロジックは、
複数の図形構成物をグループのメンバーとして識別するタッチジェスチャが含まれる前記スクリーン空間でのタッチジェスチャを解釈するロジックと、特定の図形構成物によって前記グループにおけるメンバーシップを示すために、前記スクリーン空間に識別する図形構成物を描画するロジックを備える請求項１に記載のシステム。
【請求項４】
前記入力データを受け入れるロジックは、前記スクリーン空間で４つの同時のタッチイベントを検出し、前記４つの同時のタッチイベントを解釈して選択されたグループに関して前記スクリーン空間内の境界を定義するロジックを備える請求項１に記載のシステム。
【請求項５】
前記４つの同時のタッチイベントを解釈する前記ロジックは、
前記４つの同時のタッチイベントの２つの接触点の位置を第１対として選択し、前記４つの同時のタッチイベントの２つの他の接触点の位置を第２対として識別する工程と、
第１水平座標と第１垂直座標を、前記第１対を用いて定義すると共に、第２水平座標と第２垂直座標を、前記第２対を用いて定義する工程と、
前記第１水平座標、前記第１垂直座標、前記第２水平座標、前記第２垂直座標によって定義される多角形を用いて図形構成物を識別する工程と、
選択終了イベントを検出すると、前記グループのメンバーとして前記識別された図形ターゲットを含むグループを識別する工程と、
前記識別されたグループの前記メンバーを識別する前記メッセージを送信する工程を含む処理を実行する請求項４に記載のシステム。
【請求項６】
共同作業空間において協力者がオブジェクトのグループを共同システムを用いて作成する方法であって、前記共同システムは、物理的表示空間を有するディスプレイ、ユーザ入力デバイス、プロセッサ、通信ポートを含むネットワークノードを備え、前記方法は、
前記通信ポートを用いて１以上の他のネットワークノードとの通信を確立する工程と、
仮想作業空間内に位置を有する図形ターゲットに関連するイベントのログの少なくとも一部を保存する工程であって、前記ログのエントリには、イベントの前記図形ターゲットの前記仮想作業空間における位置、前記イベントの時刻、前記図形ターゲットのターゲット識別子を含む工程と、
前記仮想作業空間内のビューポート内で前記ログのエントリを識別し、前記識別されたエントリによって識別される図形ターゲットを前記スクリーン空間上に描画するために、前記物理的表示空間内のスクリーン空間を前記ビューポートにマップする工程と、
前記スクリーン空間上の図形ターゲットのグループを識別するイベントを生成する入力データを前記ユーザ入力デバイスから受け入れる工程と、
前記識別されたグループのメンバーを識別するメッセージを、前記１以上の他のネットワークノードに送信する工程を備えることを特徴する方法。
【請求項７】
前記識別されたグループの前記メンバーにおける変更を識別するメッセージを送信する工程を備える請求項６に記載の方法。
【請求項８】
入力を、前記識別されたグループ内の図形ターゲットの移動を示すジェスチャとして解釈する工程と、
前記スクリーン空間で前記識別されたグループを移動させる工程と、
前記識別されたグループの移動を示すメッセージを前記１以上の他のネットワークノードに送信する工程を更に備える請求項６に記載の方法。
【請求項９】
入力を、前記識別されたグループ内の図形ターゲットのサイズ変更を示すジェスチャとして解釈する工程と、
前記スクリーン空間で前記識別されたグループのサイズを変更する工程と、
前記識別されたグループのサイズ変更を示すメッセージを前記１以上の他のネットワークノードに送信する工程を更に備える請求項６に記載の方法。
【請求項１０】
入力を、前記識別されたグループ内の図形ターゲットの削除を示すジェスチャとして解釈する工程と、
前記スクリーン空間で前記識別されたグループを削除する工程と、
前記識別されたグループの削除を示すメッセージを前記１以上の他のネットワークノードに送信する工程を更に備える請求項６に記載の方法。
【請求項１１】
入力を、前記識別されたグループ内の図形ターゲットの除外（removal）を示すジェスチャとして解釈する工程と、
前記スクリーン空間で前記識別されたグループを除外する工程と、
前記識別されたグループの除外を示すメッセージを前記１以上の他のネットワークノードに送信する工程を更に備える請求項６に記載の方法。
【請求項１２】
入力を、前記識別されたグループへの図形ターゲットの追加を示すジェスチャとして解釈する工程と、
前記識別されたグループに前記識別されたターゲットを追加する工程と、
前記識別された図形ターゲットの追加を示すメッセージを前記１以上の他のネットワークノードに送信する工程を更に備える請求項６に記載の方法。
【請求項１３】
入力を、前記識別されたグループ内の図形ターゲットの複製を示すジェスチャとして解釈する工程と、
前記識別されたグループの各メンバーに関して
前記識別されたグループの前記メンバーを複製する工程と、
前記メンバーの複製を示すメッセージを前記１以上の他のネットワークノードに送信する工程を更に備える請求項６に記載の方法。
【請求項１４】
入力を、識別されたグループのグループ解除（ungrouping）を示すジェスチャとして解釈する工程と、
前記メンバーを前記識別されたグループから除外する工程と、
メンバーのいないグループを示すメッセージを前記１以上の他のネットワークノードに送信する工程を更に備える請求項６に記載の方法。
【請求項１５】
物理的表示空間を有するディスプレイ、ユーザ入力デバイス、プロセッサ、通信ポートを含むネットワークノードを備えるシステムであって、前記ネットワークノードは、
１以上の他のネットワークノードとの通信を確立し、
仮想作業空間内に位置を有する図形オブジェクトを含む作業空間共同データ構造の少なくとも一部を保存し、前記データ構造のエントリには、前記図形オブジェクトの前記仮想作業空間における位置を含み、
前記仮想作業空間内のビューポート内で前記データ構造のエントリを識別し、前記識別されたエントリによって識別される図形オブジェクトを前記スクリーン空間上に描画するために、前記物理的表示空間内のスクリーン空間を前記ビューポートにマップし、
前記データ構造におけるオブジェクトのグループを識別し、
入力データを前記ユーザ入力デバイスから受け入れ、前記入力がグループ内の識別メンバーに関連するかを決定し、前記入力の解釈にグループ規則を適用し、
前記グループの前記メンバーを識別するメッセージを、前記１以上の他のネットワークノードに送信するロジックを備えて構成されることを特徴とするシステム。
【請求項１６】
物理的表示空間を有するディスプレイ、ユーザ入力デバイス、プロセッサ、通信ポートを含むネットワークノードを備えるシステムであって、前記ネットワークノードは、
１以上の他のネットワークノードとの通信を確立し、
仮想作業空間内に位置を有する図形オブジェクトを含む作業空間共同データ構造の少なくとも一部を保存し、前記データ構造のエントリには、前記図形オブジェクトの前記仮想作業空間における位置を含み、
前記仮想作業空間内のビューポート内で前記データ構造のエントリを識別し、前記識別されたエントリによって識別される図形オブジェクトを前記スクリーン空間上に描画するために、前記物理的表示空間内のスクリーン空間を前記ビューポートにマップし、
前記データ構造におけるオブジェクトのグループを識別し、
他のノードからメッセージを受信し、前記メッセージがグループのメンバーに関連するかを決定し、前記メッセージの解釈にグループ規則を適用するロジックを備えて構成されることを特徴とするシステム。
【請求項１７】
前記データ構造が、仮想作業空間に位置を有する図形ターゲットに関連するイベントのログを備え、前記ログのエントリは、イベントの前記図形ターゲットの前記仮想作業空間における位置、前記イベントの時刻、前記図形ターゲットのターゲット識別子を含む請求項１５または１６に記載のシステム。
【請求項１８】
４つの同時のタッチイベントを含む、前記物理的表示空間内のタッチジェスチャに応答して検出されたデータを解釈し、選択されたグループに関して前記スクリーン空間内の境界を定義するために前記４つの同時のタッチイベントを解釈するロジックを備える請求項１５〜１７の何れか一項に記載のシステム。
【請求項１９】
前記４つの同時のタッチイベントを解釈する前記ロジックは、
前記４つの同時のタッチイベントの２つの接触点の位置を第１対として選択し、前記４つの同時のタッチイベントの２つの他の接触点の位置を第２対として識別する工程と、
第１水平座標と第１垂直座標を、前記第１対を用いて定義すると共に、第２水平座標と第２垂直座標を、前記第２対を用いて定義する工程と、
前記第１水平座標、前記第１垂直座標、前記第２水平座標、前記第２垂直座標によって定義される多角形を用いて図形構成物を識別する工程と、
選択終了イベントを検出すると、前記識別された図形ターゲットを含むグループを前記グループのメンバーとして識別する工程と、
グループのメンバーに関連した追加の入力をグループ規則に従って解釈する工程を含む処理を実行する請求項１８に記載のシステム。
【請求項２０】
前記プロセッサは、特定の図形構成物によって前記グループにおけるメンバーシップを示すために、前記物理的表示空間に識別する図形構成物を描画するロジックを備える請求項１９に記載のシステム。
【請求項２１】
スクリーン空間を有するディスプレイ、前記スクリーン空間上のタッチジェスチャを検出するユーザ入力デバイス、プロセッサを備えるシステムであって、前記プロセッサは、
４つの同時のタッチイベントを含む、スクリーン空間上のタッチジェスチャに応答して検出されたデータを解釈し、選択されたグループに関して前記スクリーン空間内の境界を定義するために前記４つの同時のタッチイベントを解釈するロジックを備えることを特徴とするシステム。
【請求項２２】
前記４つの同時のタッチイベントを解釈する前記ロジックは、
前記４つの同時のタッチイベントの２つの接触点の位置を第１対として選択し、前記４つの同時のタッチイベントの２つの他の接触点の位置を第２対として識別する工程と、
第１水平座標と第１垂直座標を、前記第１対を用いて定義すると共に、第２水平座標と第２垂直座標を、前記第２対を用いて定義する工程と、
前記第１水平座標、前記第１垂直座標、前記第２水平座標、前記第２垂直座標によって定義される多角形を用いて図形構成物を識別する工程と、
選択終了イベントを検出すると、前記識別された図形ターゲットを含むグループを前記グループのメンバーとして識別する工程と、
グループのメンバーに関連した追加の入力をグループ規則に従って解釈する工程を含む処理を実行する請求項２１に記載のシステム。
【請求項２３】
前記プロセッサは、特定の図形構成物によって前記グループにおけるメンバーシップを示すために、前記物理的表示空間に識別する図形構成物を描画するロジックを備える請求項１９に記載のシステム。
【請求項２４】
スクリーン空間を有するディスプレイ、前記スクリーン空間上のタッチジェスチャを検出するユーザ入力デバイス、プロセッサを備えるシステムに関して、
選択されたグループに関して前記スクリーン空間内の境界を定義するために、４つの同時のタッチイベントを含む、前記スクリーン空間上のタッチジェスチャに応答して検出されたデータを解釈する工程を備えることを特徴とする方法。
【請求項２５】
前記４つの同時のタッチイベントを解釈する前記ロジックは、
前記４つの同時のタッチイベントの２つの接触点の位置を第１対として選択し、前記４つの同時のタッチイベントの２つの他の接触点の位置を第２対として識別する工程と、
第１水平座標と第１垂直座標を、前記第１対を用いて定義すると共に、第２水平座標と第２垂直座標を、前記第２対を用いて定義する工程と、
前記第１水平座標、前記第１垂直座標、前記第２水平座標、前記第２垂直座標によって定義される多角形を用いて図形構成物を識別する工程と、
選択終了イベントを検出すると、前記識別された図形ターゲットを含むグループを前記グループのメンバーとして識別する工程と、
グループのメンバーに関連した追加の入力をグループ規則に従って解釈する工程を含む請求項２４に記載の方法。
【請求項２６】
特定の図形構成物によって前記グループにおけるメンバーシップを示すために、前記スクリーン空間に識別する図形構成物を描画する請求項２４または２５に記載の方法。
【発明の詳細な説明】
【関連出願】
【０００１】
２０１５年６月２６日付出願の“マルチタッチ選択ジェスチャ”と題する米国仮特許出願第６２／１８５，５０１号（代理人整理番号：ＨＡＷＴ１０２０−１）について利益が主張される。
【０００２】
２０１３年１１月２６日付出願の“空間的イベントマップを備えた共同システム”と題する、本出願と同時係属中であり、所有者を共通とする、米国特許出願第１４／０９０，８３０号（代理人整理番号：ＨＡＷＴ１０１１−２）が、本明細書に完全に記載されているかのように、参照により取り込まれる。
【技術分野】
【０００３】
開示される技術は、デジタル共同（collaboration）のための方法及びシステムに関し、特に、デジタルディスプレイシステムに関し、当該システムは、複数の同時ユーザが、グローバル作業空間内のオブジェクトをグループ化し、当該システム内で使用可能なグループ化操作を制御するためのツールを持つことを容易にする。
【背景技術】
【０００４】
デジタルディスプレイ（通常はタッチスクリーンオーバレイを備える）は、ホワイトボートと類似の方法で使用できる。幾つかのシステムでは、１つのディスプレイ上で表示画像に加えられた修正が別のディスプレイ上で複製されるように、ディスプレイ同士がネットワーク接続され、共同のための使用が可能である。本出願の出願人による同時係属中の２０１３年１１月２６日付出願の“空間的イベントマップを備えた共同システム”と題する米国特許出願第１４／０９０，８３０号に記載されているように、共同システムは、異なるクライアントプラットフォームにいるユーザが作業空間を共有する共同セッションを操作するように構成することができる。こうしたシステムの分散的性質により、異なる場所にいる複数のユーザが、同じ作業空間内のデータとの対話（interact）及び当該データの変更を同時に行い、また、当該作業空間を見ている他のユーザがいない時にもそれを行うことが可能となる。
【発明の概要】
【０００５】
共同セッション内及び当該共同セッションの参加者の分散ネットワーク内において図形構成物のグループを選択及び管理するシステム及び方法を説明する。例えば、１つのクライアントプラットフォームにいるユーザが、他のプラットフォームにいるユーザと効果的な方法で通信しながら、グループ規則を用いて、オブジェクトに対して移動、リサイズ、編集、削除、複製、その他の操作を行う目的で、作業空間内のオブジェクトをグループ化することが可能なシステム及び方法を開示する。
【０００６】
本明細書に記載のシステムは、物理的表示空間を有するディスプレイ、ユーザ入力デバイス、プロセッサ、通信ポートを備えたネットワークノードを含む。前記ネットワークノードは、１以上の他のネットワークノードとの通信を確立し、共同セッションに関して、前記セッションに割り当てられた仮想作業空間に位置を有する図形ターゲットに関連するイベントの空間的イベントログの全部または一部を保存するロジックで構成できる。前記ログのエントリには、イベントの前記図形ターゲットの前記仮想作業空間における位置、前記イベントの時刻、前記図形ターゲットに関する動作、前記図形ターゲットのターゲット識別子が含まれる。前記システムは、前記物理的表示空間内のスクリーン空間を、前記仮想作業空間内のマップされた領域にマップすることができる。開示される技術は、前記マップされた領域内の前記空間的イベントログのエントリを識別（identify）し、前記識別されたエントリによって識別される図形ターゲットを前記スクリーン空間上に描画（render）することができる。
【０００７】
前記システムは、ローカルの前記スクリーン空間上の図形ターゲットのグループを識別するイベントを生成するネットワークノードの前記ユーザ入力デバイスから、入力データを受け入れることができる。グループ選択イベントは、本明細書に記載の例である、２本の指での投げ縄（lasso）、４本の指での投げ縄、ストリング投げ縄、ジップ投げ縄、選択モード選択といったタッチスクリーンまたは他の入力センサを用いて実行されるジェスチャを含むことができる。
【０００８】
前記システムは、前記セッションで、受信者にグループ選択イベントを通知し、図形ターゲットを前記識別されたグループのメンバーとして識別するメッセージを、前記１以上の他のネットワークノードに送信することができる。また、前記システムは、識別されたグループに関して生じるグループ操作イベントまたはグループ管理イベント等のイベントを識別するメッセージも送信することができる。
【０００９】
前記メッセージの受信側ネットワークノードは、各ネットワークノードで使用される、前記セッションの前記空間的イベントマップのインスタンスに、前記イベントを追加することができる。前記イベントが、受信者の前記スクリーン空間内の図形ターゲットに関連している場合、受信者は、それを検知し、当該イベントの影響を自身のスクリーン空間に描画することができる。本明細書に記載の技術を用いて、共同セッションにおける多くのノードが、ほぼリアルタイムでグループ機能と対話することが可能である。
【００１０】
クライアント側ノードは、スクリーン空間上の図形ターゲットのグループを識別するイベントを生成する入力データを前記ユーザ入力デバイスから受け入れ、前記１以上の他のネットワークノードへ、前記識別されたグループのメンバーを識別するメッセージを送信して、協力者（collaborator）によるオブジェクトのグループ作成にグループ規則を適用することが可能である。
【００１１】
前記グループ規則は、前記識別されたグループの前記メンバーの変更を識別するメッセージを送信することを含む。
【００１２】
前記グループ規則は、入力を、前記識別されたグループ内での図形ターゲットの移動を示すジェスチャとして解釈すること、前記識別されたグループの各メンバーに関して前記スクリーン空間で前記識別されたメンバーを移動させること、前記識別されたメンバーの移動を示すメッセージを前記１以上の他のネットワークノードに送信することを含むことができる。
【００１３】
前記グループ規則は、入力を、前記識別されたグループ内の図形ターゲットのリサイズを示すジェスチャとして解釈すること、前記識別されたグループの各メンバーに関して前記スクリーン空間で前記識別されたメンバーをリサイズすること、前記識別されたメンバーのリサイズを示すメッセージを前記１以上の他のネットワークノードに送信することを含むことができる。
【００１４】
前記グループ規則は、入力を、前記識別されたグループ内で図形ターゲットの削除を示すジェスチャとして解釈すること、前記識別されたグループの各メンバーに関して前記スクリーン空間で前記識別されたメンバーを削除すること、前記識別されたメンバーの削除を示すメッセージを前記１以上の他のネットワークノードに送信することを含むことができる。
【００１５】
グループ処理に適用される他の論理規則は、入力を、前記識別されたグループ内の図形ターゲットの除外を示すジェスチャとして解釈すること、前記識別されたグループから前記識別された図形ターゲットを除外すること、前記識別された図形ターゲットの除外を示すメッセージを前記１以上の他のネットワークノードに送信することを含むことができる。
【００１６】
グループ処理に適用される他の論理規則は、入力を、前記識別されたグループへの図形ターゲットの追加を示すジェスチャとして解釈すること、前記識別されたグループに前記識別されたターゲットを追加すること、前記識別された図形ターゲットの追加を示すメッセージを前記１以上の他のネットワークノードに送信することを含むことができる。
【００１７】
前記グループ規則は、入力を、前記識別されたグループ内の図形ターゲットの複製を示すジェスチャとして解釈すること、前記識別されたグループの各メンバーに関して前記識別されたグループの前記メンバーを複製すること、前記メンバーの複製を示すメッセージを前記１以上の他のネットワークノードに送信することを含むことができる。
【００１８】
前記グループ規則は、入力を、識別されたグループのグループ解除を示すジェスチャとして解釈すること、前記識別されたグループの各メンバーに関して前記識別されたグループから前記メンバーを除外すること、前記メンバーの除外を示すメッセージを前記１以上の他のネットワークノードに送信することを含むことができる。
【００１９】
本明細書で“４本の指による投げ縄”と称するグループ選択ジェスチャについて説明する。４本の指による投げ縄は、物理的ディスプレイ上に描画された図形ターゲットの選択されたグループを囲む、または、それと交差するスクリーン空間内の領域を定義するために使用される。一実施例では、タッチセンサ式の物理的ディスプレイに同時に接触する第１手の２本の指と第２手の２本の指を用いて触れられるスクリーン上の４点が、長方形または他の多角形を定義するために使用され、その中で、図形ターゲットがグループに追加される。
【００２０】
上記の要約は本明細書で説明される共同システムのいくつかの態様についての基本的理解を提供することを目的としている。この要約は、開示される技術の鍵または重要な要素を特定する、或いは、開示される技術の範囲を詳説することを意図するものではない。
【図面の簡単な説明】
【００２１】
開示される技術は、その具体的な実施形態に関して説明され、以下の正確な縮尺では表されていない図面について参照される。
【００２２】
【図１】共同作業空間内で共同するネットワークノードのシステムを示す図である。
【００２３】
【図２】物理的スクリーン空間上に描画された無限の作業空間の一部分を示す図である。
【００２４】
【図３Ａ】グループ作成の段階を示す図である。
【図３Ｂ】グループ作成の段階を示す図である。
【図３Ｃ】グループ作成の段階を示す図である。
【図３Ｄ】グループ作成の段階を示す図である。
【図３Ｅ】グループ作成の段階を示す図である。
【００２５】
【図４】グループ作成のフローチャートを示す図である。
【００２６】
【図５Ａ】スクリーン空間上に５つの接触点がある場合の例を示す図である。
【００２７】
【図５Ｂ】スクリーン空間上に６つの接触点がある場合の例を示す図である。
【００２８】
【図５Ｃ】接触点が設定可能な構成に正確に従っていない場合の例を示す図である。
【００２９】
【図６Ａ】１つのタッチグループの作成を示す図である。
【図６Ｂ】１つのタッチグループの作成を示す図である。
【図６Ｃ】１つのタッチグループの作成を示す図である。
【００３０】
【図７Ａ】２本の指の投げ縄によるグループ選択シーケンスにおける段階を示す図である。
【図７Ｂ】２本の指の投げ縄によるグループ選択シーケンスにおける段階を示す図である。
【００３１】
【図８Ａ】グループの複製シーケンスにおける段階を示す図である。
【図８Ｂ】グループの複製シーケンスにおける段階を示す図である。
【００３２】
【図９Ａ】円形投げ縄によるグループ作成における段階を示す図である。
【図９Ｂ】円形投げ縄によるグループ作成における段階を示す図である。
【００３３】
【図１０Ａ】スワイプ投げ縄によるグループ作成における段階を示す図である。
【図１０Ｂ】スワイプ投げ縄によるグループ作成における段階を示す図である。
【図１０Ｃ】スワイプ投げ縄によるグループ作成における段階を示す図である。
【００３４】
【図１１】デジタルディスプレイ共同環境の例を示す図である。
【００３５】
【図１２】デジタルディスプレイ共同環境の更なる例を示す図である。
【００３６】
【図１３Ａ】作業空間の作業空間データの各部分のデータ構造を簡略化して示した図である。
【図１３Ｂ】作業空間の作業空間データの各部分のデータ構造を簡略化して示した図である。
【図１３Ｃ】作業空間の作業空間データの各部分のデータ構造を簡略化して示した図である。
【図１３Ｄ】作業空間の作業空間データの各部分のデータ構造を簡略化して示した図である。
【図１３Ｅ】作業空間の作業空間データの各部分のデータ構造を簡略化して示した図である。
【図１３Ｆ】作業空間の作業空間データの各部分のデータ構造を簡略化して示した図である。
【００３７】
【図１４】クライアント側ノードコンピュータシステム等のコンピュータシステム１２１０の簡略化したブロック図である。
【００３８】
【図１５】他のノードからクライアント側ノードで受信されたグループ関連イベントを処理するロジックを示す簡略化したフローチャートである。
【００３９】
【図１６】ローカルユーザ入力からクライアント側ノードで受信されたグループ関連イベントを処理するロジックを示す簡略化したフローチャートである。
【発明を実施するための形態】
【００４０】
以下の記載は当業者が開示される技術を構成し、利用するのを可能とするために提示され、特定の応用とそれに必要な条件の文脈で提供される。開示された実施形態の様々な修正は、当業者にとって明白であり、本明細書に定義される一般原理は、開示される技術の精神及び範囲を逸脱することなく他の実施形態及び応用に適用され得る。したがって、開示される技術が示される実施形態に限定されることは意図されず、本明細書に開示の原理及び特徴と矛盾しない最も広い範囲が認められる。
【００４１】
“無限の作業空間”問題はどのようにして人と機器が作業空間と時間とともに対話するかを追跡する必要を含む。この問題を解決することを目的とする、複数の空間的イベントマップと複数の共同グループを用いて共同をサポートする空間的イベントマップ及びシステム構造が、本明細書に完全に記載されているかのように参照により取り込まれる２０１３年１１月２６日付出願の“空間的イベントマップを備えた共同システム”と題する、本出願と同時係属中の米国特許出願第１４／０９０，８３０号に説明されている。空間的イベントマップは、作業空間でターゲット及びイベントを定義するのに必要な情報を含む。空間、イベント、当該空間内のイベントのマップ、複数の同時接続ユーザを含む複数のユーザによる当該空間へのアクセスの見地から本技術を考察することは有益である。
【００４２】
空間：所定の共同セッションに対し無限量の空間的情報をサポートするため、例えば１つまたは両方の次元において本質的に無限の二次元の直交座標平面によって特徴付けられる、作業空間と称する仮想空間を、例えば、新しい内容を当該空間に追加できる、内容を当該空間内で配置及び再配置できる、ユーザが当該空間の一部から別の一部へとナビゲート（navigate）できる、ユーザが当該空間内で必要なものを必要な時に容易に見つけられる、といったように組織する方法を提供する。
【００４３】
イベント：作業空間との対話はイベントとして処理される。人（触知できるユーザインタフェースデバイスを介して）及びシステムは、作業空間と対話する。イベントは、物理的ディスプレイ上に表示されるターゲット図形構成物を定義又は指し示すデータ、ターゲット図形構成物の作業空間内における作成、変更、移動及び削除としての動作、及び、これらに関連したメタデータを有する。メタデータは起案者（originator）、日付、時刻、作業空間内における位置、イベントタイプ、セキュリティ情報、及び他のメタデータ等の情報を含み得る。
【００４４】
作業空間内のイベントの追跡は、システムが、作業空間内の空間的イベントを現在の状態で提示するだけでなく、それを複数ディスプレイ上で複数ユーザと共有し、その内容に係る関連する外部情報を共有することを可能にし、且つ、空間的データが時間とともにどのように発展するかの理解を可能とする。また、空間的イベントマップは無限の作業空間を定義するものでありながら、必要なデータ量としては合理的なサイズを有することができる。
【００４５】
システムにおいて、いくつかの異なる種類のイベントがあり得る。イベントは永続的イベントに分類され得る。永続的イベントは、履歴イベントとも呼ばれ、永久に、或いは、システムがその有用寿命の間に作業空間を維持するために必要とする期間、保存される。イベントは、短期間においてのみ有用又は関心があり、セッションに参加している他のクライアント同士でライブ共有される一時的イベントに分類され得る。永続的イベントは取り消し／再生イベントストリーム内に保存される履歴イベントを含み得る。当該イベントストリームはセッションの空間的イベントマップと同じか、空間的イベントマップから派生したものであり得る。一時的イベントはシステムの取り消し／再生イベントストリームに保存されないイベントを含み得る。（複数の）空間的イベントマップは、永続的イベントと一時的イベントの両方がシステムの作業空間上に設けられた実施形態において、作業空間内の時刻と場所を追跡するために共同システムによって利用され得る。
【００４６】
マップ：作業空間内のイベントのマップは、離散的な空間的イベント全ての合計を含むことができる。作業空間に関する永続的な空間イベントが利用可能な場合、当該作業空間は、スクリーン空間を有するクライアントノードにおけるディスプレイ又はスクリーンに“マップ”される。本明細書で使用されるスクリーン空間は、スクリーン上の特定の物理的なサイズの表示可能領域を参照し、仮想作業空間における位置（及びズームレベル）または領域にマップされることが可能である。仮想作業空間のマップされた領域に位置する図形オブジェクトは、クライアントノードにおける表示可能な領域に表示されることになる。
【００４７】
複数ユーザアクセス：１つの鍵となる特性は、同時に作業空間上で作業している全てのユーザ、又は複数ユーザが、リアルタイムに近い方法で他のユーザの対話内容を把握する必要のある点である。空間的イベントマップは異なる物理的位置にディスプレイを有するユーザが、彼らの個々の表示可能領域内で、任意の所定の作業空間上にいる全てのユーザに対し、永続的イベントと一時的イベントの両方を含む、リアルタイムに近いイベントを経験することを可能にする。
【００４８】
クライアントノードにおける、グループの作成、複製、移動、編集、グループメンバーシップの変更、削除、及び、他のグループ管理対話等の、グループ対話と称される、図形ターゲットのグループのユーザ操作は、彼らの個々のスクリーン空間内で、任意の所定の作業空間上にいる全てのユーザに対し、永続的イベントと一時的イベントの両方を含む、リアルタイムに近いイベントとして経験され得る。
【００４９】
ウィジェット：ウィジェットとは、ユーザがスクリーン空間で対話する、または、見ることができる、ノート、画像、時計、ウェブブラウザ、ビデオプレーヤー、位置マーカ等の作業空間の構成要素として含まれる図形ターゲットである。ウィンドウは、２つの対角線上に対向する角を持つ長方形の領域であるウィジェットである。たいていのウィジェットは、ウィンドウでもある。
【００５０】
説明される共同システムは、作業空間内にイベントを配置するエントリを含む空間的イベントマップに基づいている。空間的イベントマップは、イベントのログを含み、ログのエントリは作業空間内のイベントの図形ターゲットの位置と時間を有する。また、ログのエントリは、図形ターゲットをディスプレイ上に描画するために使用される図形構成物を識別するパラメータ（例えば、ＵＲＬや実際のファイル）を含む。図形構成物は、描画される時にスクリーン空間内に位置及び大きさを有する。サーバ側ネットワークノードとクライアント側ネットワークノードは、対話して共同システムを形成し、当該共同システムによって、空間的イベントマップが認証されたクラインアントにアクセス可能になり、クライアントがローカルの表示領域を描画するために空間的イベントマップを利用することができ、空間的イベントマップへの追加及び他のクライアントとの共有が可能なイベントを作成することができるものとして説明される。
【００５１】
特定の共同セッションに関連する作業空間は、規定の境界（boundary）が無い、時間内に仮想共同空間にイベントを配置するための参照の枠組みを提供する無限の仮想領域として表現することができる。作業空間は、クライアント側ネットワークノードがその境界を超えてナビゲートする可能性を無視するのに十分大きいサイズを有する点で、実際的に無限の仮想領域を包含できる。例えば、１００万ピクセル×１００万ピクセルを含む、物理的表示空間にマップする仮想領域を包含するサイズは、幾つかの設定において実際的に無限と考えられる。幾つかの例では、作業空間は、そのサイズが仮想空間内の位置を識別するのに使用されるアドレス方式の範囲にしか限定されないという点で、本質的に“無限”である。また、システムは、多数の作業空間を備えることができ、各作業空間は、単一のユーザまたはユーザグループによるアクセスに対して個別に構成することができる。
【００５２】
共同システムは、サーバ側ネットワークノードとクライアント側ネットワークノードが、共同イベントについて通信できるように、アプリケーション・プログラム・インターフェース（ＡＰＩ）に従って構成される。作業空間内の位置及び時間を有する図形ターゲットと、図形ターゲットのグループを作成または変更するイベントを識別するメッセージが定義される。イベントは、履歴イベントと、つかの間の、すなわち一時的なイベントに分類でき、履歴イベントは空間的イベントマップに保存され、一時的イベントは空間的イベントマップに永続的には保存されないが共同セッションの他のクライアントに分配される。
【００５３】
情報を操作する共同システムを含むメッセージは、当該共同システム内のノード間の履歴イベント及び一時的イベントを含めて、例えばアプリケーション層で交換される。
【００５４】
共同システムは、共有された共同サーバによって管理される作業空間データに基づいて画像を表示すること、及び、作業空間データに寄与するユーザ入力を受け入れることの両方に使用されるディスプレイを備えたクライアントノードを多数、分散して有することができ、それにより、各ディスプレイは、セッション履歴、リアルタイムのローカル入力、他のクライアントノードからのリアルタイムの入力に基づいて表示する画像を迅速に構築することが可能となる。
【００５５】
本明細書で説明される技術は、まとめてグループ化されて単一のオブジェクトとして扱われる複数のオブジェクトを選択するタッチジェスチャを使用するシステム及び方法を実施するために使用してもよい。ジェスチャは、物理的表示空間上に１以上の接触点を備え、接触点は、動き（motion）を含むことができ、物理的表示空間のセンサは長時間にわたって各接触点の位置を示すデータを生成する。生成されたデータは、ユーザによるタッチ入力を示す。ジェスチャは、種々の様々な同時のタッチジェスチャを含むことができる。オブジェクトが選択され、グループ化されると、選択されたオブジェクトに対して影響を持つ種々の動作（例えば、コピー、削除、リサイズ、移動）がとられる。オブジェクトがグループ化される場合、オブジェクトは単一のオブジェクトとして扱うことができる（すなわち、オブジェクトの内の１つが選択されると、当該グループが選択される）。このグループオブジェクトは、グローバルなイベントであり、グローバルな共同に対して影響を持つ。
【００５６】
複数の実施形態において、コンピュータシステムは、一グループに含まれることになる複数のオブジェクトを示す複数のユーザタッチ入力を受け取る。選択モードは、ユーザタッチ入力を検知することによって開始される。ユーザタッチ入力は、選択モードの開始に関連付けられた所定のタッチタイプ且つ／またはジェスチャである。例えば、ユーザタッチ入力は、第１オブジェクトについて検知される。このユーザタッチ入力は、グループ選択モードを開始すると共に、第１オブジェクトを新しく作成されたグループに追加する。このユーザタッチ入力は、作業空間における第１オブジェクトへの２本の指によるタップであってもよい。複数の実施形態において、選択モードは、他のジェスチャで開始されてもよく、または、ツールバー上に見られるボタンを介して開始されてもよい。
【００５７】
選択モードの間に、更なるオブジェクトがグループに追加されることを示すユーザタッチ入力が受け取られる。このユーザタッチ入力は、更なるオブジェクトの夫々についてのタップのユーザタッチ入力を含んでもよい。複数の実施形態において、更なるオブジェクトを示すユーザタッチ入力は、第１オブジェクトから、グループに追加される予定の各更なるオブジェクトへの連続的なスワイプであってもよい。複数の実施形態において、更なるオブジェクトを示すユーザタッチ入力は、矩形の角を示すユーザタッチ入力によって描かれる矩形であってもよく、箱の中のオブジェクトがグループに含まれるよう選択される。複数の実施形態において、更なるオブジェクトを示すユーザタッチ入力は、グループに含むオブジェクトの周囲を囲む形状を描くユーザタッチ入力であってもよい。
【００５８】
複数の実施形態において、選択モードの間に、システムは、グループに含まれるように選択されたオブジェクトの視覚的表現（indication）を表示することができる。例えば、選択されたオブジェクトは、選択モードの間に、変更された影、明暗、色相で一時的に表示されてもよい。更に、矩形等の表現を、選択されたオブジェクトの周囲に表示することもできる。選択されていないオブジェクトは矩形内に存在し、選択されていないオブジェクトが元の影を留め、選択された物（item）がぼやけて見える等、選択されたオブジェクトと区別するための視覚的表現を有することも可能である。
【００５９】
グループ選択モードの間、グループに関連するツールバーが表示される。ツールバーには、ユーザがグループに対する機能を開始できるようにするボタンが含まれる。機能の例には、グループの作成、グループの移動、グループのリサイズ、グループの削除、更なるオブジェクトに対するグループの一部としての選択、選択されたグループの選択解除が含まれる。一旦グループ化されると、グループ内のオブジェクトと当該グループに行われる機能は、グループの各オブジェクトについて行われる。更に、一グループは一オブジェクトとして扱われるため、当該グループは、別のグループに一オブジェクトとして追加できる。また、一グループは一オブジェクトとして扱われるため、共同空間内のグループの位置は、共同空間内の一オブジェクトと同様に保存される。
【００６０】
複数の実施形態において、一グループ内の一オブジェクトが選択された場合、当該グループが選択され、動作がそのグループに対して適用される。更に、複数の実施形態において、ユーザがグループ内の一オブジェクトを選択してグループからそのオブジェクトを除外する一方で、グループの残りのオブジェクトはグループ化されたままである。
４本の指による投げ縄
【００６１】
４本の指による投げ縄ジェスチャは、物理的ディスプレイ上に描画された作業空間内の複数のオブジェクトを選択するために使用される。一実装例では、接触点の集合は、検知され、当該集合が第１手の２本の指と第２手の２本の指がアクティブなクライアントのタッチセンサ式の物理的ディスプレイに同時に接触する時に形成されるように構成される。このイベントは、グループ選択モードを開始し、センスされた接触点の一つが終了する（例えば、指がスクリーンから離れる）等、信号が選択シーケンスの終了を示すと、４本の指によって作成された矩形内のオブジェクトがグループに追加される。選択モードを示す個別のジェスチャは、この場合には必要とされない。
【００６２】
図１は、共同作業空間内の共同対話をサポートするネットワークノードのシステムを示している。この図は、第１ネットワークノード１０１、第２ネットワークノード１５１、仮想作業空間の一部１６５を示している。図示された例では、第１ネットワークノード１０１が、ユーザ入力デバイスとして動作するタッチセンサを備えたスクリーン空間１０５と、空間的イベントマップを定義するイベント記録、または、仮想作業空間の内容を表す他の種類のデータ構造を保存するログファイル１１１を備える。第２ネットワークノード１５１は、ユーザ入力デバイスとして動作するタッチセンサを備えたスクリーン空間１５５と、空間的イベントマップを定義するイベント記録を保存するログファイル１６１を備える。空間的イベントマップは、この例では２つの図形ターゲットを含む仮想作業空間１６５の内容を識別する。尚、図形ターゲットのグループは、スクリーン上に輪郭線（border）または他の方法で示される。
【００６３】
第１ネットワークノード１０１は、物理的表示空間１０３内のスクリーン空間１０５内に描画されているビューポート１７７内のオブジェクトを仮想作業空間１６５の中へ表示する。この例では、スクリーン空間１０５は、物理的表示空間１０３の全体的な表示可能領域を備え、同じ解像度を有する。仮想作業空間内のビューポート１７７の対向する角の座標によって識別される領域は、スクリーン空間１０５内に描画された図形ターゲットのグループ１９１の座標を含む。第２ネットワークノード１５１は、物理的表示空間１５３内に定義されたスクリーン空間１５５内に描画された（ビューポート１７７と重なるが異なる）ビューポート１７５を仮想作業空間１６５の中に備える。この例では、スクリーン空間１５５は、物理的表示空間内のウィンドウであり、表示空間全体よりは小さく、物理的表示空間１５３上のスクリーン空間とは解像度が異なっていてもよい。仮想作業空間内のビューポート１７５の対向する角の座標によって識別される領域は、スクリーン空間１５５内に描画されている図形ターゲットのグループ１９１の座標を含む。
【００６４】
一実装例では、４本の指による投げ縄等のジェスチャは、複数の図形構成物を識別するイベントを生成することができ、図形構成物のＩＤ（identity）はグループに結合される。一実装例では、ネットワークノード１０１は、図形ターゲットのグループ１９１を示すイベントを認識できる。この実装例では、第１ネットワークノード１０１は、第２ネットワークノード１５１等の仮想作業空間１６５に参加している他のネットワークノードにメッセージを送信できる。各接触点を示すメッセージは、第１ネットワークノード１０１によって生成され、第１ネットワークノード１０１から第２ネットワークノード１５１へ送信され、第２ネットワークノード１５１は接触点の標識（indicator）を描画する。メッセージはまた、第１ネットワークノード１０１上の潜在的なグループメンバーを識別するメッセージを含み、このメッセージは、第２ネットワークノード１５１が当該潜在的なグループメンバーの標識を描画できるように、第２ネットワークノード１５１に送信される。一実装例では、接触点から指が持ち上げられる等の選択終了イベントが発生すると、開示される技術は、接触点によって作成される多角形内の図形構成物のＩＤを計算するためのロジックを実行するモジュールを備え、履歴イベントを識別するメッセージが送信され、当該イベントが記録される。履歴イベントは次に、仮想作業空間１６５に参加している他のネットワークノードに送信され、空間的イベントマップに保存される。
図２
【００６５】
図２は、スクリーン空間上に描画された作業空間の一部を示している。仮想作業空間２０１は、イベントの図形ターゲットであり、夫々が作業空間内に座標を有するオブジェクト２２３、２２７、２５４、２５７、２８９として理解される複数の図形構成物を備える。クライアント側ネットワークノードの物理的表示空間は、幅と高さの各大きさにおいて個別に多数の画素を有するディスプレイ解像度を備えたタッチセンサ式ディスプレイである。スクリーン空間２６１は、ｘ、ｙ座標を持つディスプレイ上の領域であり、ディスプレイ上のウィンドウ、または、スクリーン空間のｘ、ｙ座標が物理的ディスプレイの大きさに等しいディスプレイ全体であり得る。スクリーン空間２６１は、表示クライントによって物理的ディスプレイ上に描画される。ローカルの表示クライアントは、イベントを作成するユーザ入力デバイスとして使用され、スクリーン空間に重なるタッチスクリーンを有する。ローカルの表示クライアントは、マウス等の他の入力デバイスも有する。仮想作業空間２０１内のビューポート２０３としても理解されるマップされた領域は、物理的スクリーン空間２６１上に描画される。ビューポートは、その中心に対して、ｘ、ｙ座標、及び、作業空間へのズームレベルを示すｚ座標によって定義される多角形である。ビューポートはまた、仮想作業空間２０１内に座標を有する２つの対向する角によっても定義される。ビューポート２０３の座標は、スクリーン空間２６１の座標に対してマップされる。一つの例では、ビューポート２０３内のオブジェクト２２３、２２７、２５４、２５７は、スクリーン空間２６１上に描画される。ビューポート２０３の作業空間の座標は、変更可能であり、当該ビューポート内に含まれるオブジェクトを変更することが可能である。当該変更は、スクリーン空間２６１上に描画される。ズームレベル、または、ビューポート２０３のｚレベルは、作業空間２０１のより大きな部分を含むために増加、または、より小さな部分を含むように減少させることができる。ズームレベルの変更もまた、スクリーン空間２６１に描画される。別の実装例では、ビューポート２０３の角の座標が変更可能であり、作業空間内に含まれるオブジェクトを変更することが可能である。当該変更は、スクリーン空間２６１上に描画される。
【００６６】
オブジェクト２２３、２２７、２５４、２５７、２８９は、ビューポート２０３の境界内またはビューポート２０３の境界の外にある座標へ移動させることができる。図２は、作業空間の一部に５つのオブジェクト２２３、２２７、２５４、２５７、２８９と、この５つのオブジェクトの内、４つを囲むビューポート２０３を示しており、４つのオブジェクト２２３、２２７、２５４、２５７はスクリーン空間２６１上に描画されている。
図３Ａ〜３Ｅ
【００６７】
図３Ａ、３Ｂ、３Ｃ、３Ｄ、３Ｅは、４本の指による投げ縄を用いたグループの作成における段階を示している。
【００６８】
図３Ａは、描画されたオブジェクト２２３、２２７、２５４、２５７を備えたスクリーン空間２６１を示している。また、スクリーン空間２６１上の第１手によって形成される２つの接触点３３３Ａと３４３Ａ、及び、スクリーン空間上の第２手によって形成される２つの接触点３６７Ａと３７７Ａから成る４つのタッチイベントも示されている。この例では、最も高い位置にある接触点３３３Ａは、矩形３２５Ａの最上部にあると判断され、最も左に位置する接触点３４３Ａは、矩形の最左部にあると判断され、最も右に位置する接触点３６７Ａは、矩形の最右部にあると判断され、最も低い位置にある接触点３７７Ａは、矩形の最下部にあると判断される。矩形以外の他の種類の多角形が使用できる。４本の指による投げ縄ジェスチャは、選択処理中に接触点が移動するに従って、図３Ｂ〜３Ｅに示すように、スクリーン空間描画のシーケンスとして示される。
【００６９】
矩形によって囲まれる、または、矩形と交差するオブジェクトは、グループ作成イベントの図形ターゲットである。この例では、矩形３２５Ａ内に完全に含まれるオブジェクト２５４と２５７が識別され、オブジェクトのリストに追加される。別の例では、オブジェクト２２７等の矩形３２５Ａの境界と重なるオブジェクトが識別され、リストに追加される。表示クライアントは、色相または輪郭線等の属性の変更によってオブジェクトを示すことができる。この例では、矩形内にあり、リストに追加されたオブジェクト２５４と２５７の輪郭線は強調されている。
【００７０】
各接触点は、ローカルログに保存され、タッチセンサ式ディスプレイによって知らされる動作または一連の動作であるタッチイベントから判断される。幾つかの実施形態では、当該イベントを、１以上の他のネットワークノードに伝達することもできる。現在の例は、４つの接触点を作成する４つの同時のタッチイベントを示しており、接触点は、互いに近接する対でグループ化されている。図１２のディスプレイ１１０２ｃをサポートするネットワークノードのような、或るネットワークノード上で、多数のタッチイベントがいつでも生じる可能性がある。開示される技術は、接触点毎に、つかの間の、または、一時的なイベントを作成でき、一時的イベントを他のネットワークノードに伝達することが可能である。４つの接触点がグループ選択構成で検知された場合、ローカルノードは、スクリーン上の多角形を識別し、その境界の表現（indication）を表示するロジックを実行する。４本の指による投げ縄ジェスチャの場合には、指の内１つが持ち上げられる時、その時点でグループ作成イベントがローカルノードによって作成され、グループ作成イベントは、指が持ち上げられた時に４本の指で表される多角形によって境界が定められていた領域内にあったオブジェクトのリストと共に送信される。他のクライアントは、指による接触点がディスプレイ上で動く際は、作成された多角形の標識（indicator）は生成しないかもしれない。なぜなら、一時的なタッチイベントは、グループ作成イベントの前には放送されないためである。或いは、他のクライアントが、グループ作成イベントが受け取られるまで標識の描画を遅らせるようにプログラムされているためである。タッチの１以上が解除されてジェスチャが完了するまでグループ作成イベントメッセージを延期することで、指による接触がより多くのオブジェクトを包含するために移動する際の、セッション内のオブジェクトに対する“生きた（live）”選択状態変更は存在しない。
【００７１】
この例では、イベントタイプは、グループ選択ジェスチャの一部であるジェスチャの新しいストロークの開始を示すコードである。接触点がタッチセンサ式ディスプレイ中を移動する際、“ｖｅ”記録が、以前開始されたストロークの継続を示す別のコードのイベントタイプで作成される。ストロークが終了した等の終了イベントは、ストロークの終了を示すイベントタイプで“ｖｅ”記録を生成する。一連の“ｖｅ”記録は、他のネットワークノードに送信され、各受信側ネットワークノードは、各グループ選択イベントに関連する図形構成物（輪郭線の描画、強調等）を描画する。グループ選択イベントの完了は、“ｈｅ”（履歴イベント）記録または一連の履歴イベントを用いて共有される。
【００７２】
一実装例では、タッチセンサ式ディスプレイは、スクリーン上のタッチイベントを検知し、当該タッチイベントに関して感知された座標を識別するデータを生成するセンサを備える。１または複数のセンサは、同時に複数のタッチイベントを検知し、それら全てに関してデータを提供する。センサからのデータは、例えば、イベントのデータに関する中心点を発見することによって、または、別の方法によって、各イベントに関する座標を識別するために処理される。
【００７３】
ネットワークノードにおけるロジックは、４つの同時のタッチイベントの内、２つの接触点の位置を第１対として選択し、他の２つの接触点を第２対として識別するアルゴリズムを実行する。物理的スクリーン空間２６１をサポートするネットワークノードは、４つの接触点３３３Ａ、３４３Ａ、３６７Ａ、３７７Ａを通過する矩形を計算し、その矩形３２５Ａをスクリーン空間上に表示する。４つの接触点がタッチされている間、矩形３２５Ａ等の視覚的標識が４本の指による投げ縄の境界を示すために使用される。一実装例では、点線が矩形３２５Ａの輪郭線を示す。ユーザがスクリーン上の接触点を移動させる際、潜在的なグループ矩形３２５Ａの輪郭線は、接触点と共に移動する。
【００７４】
例えば、後にクライアントは図３Ｂに示すようにスクリーン空間を描画する。図３Ｂは、第２手によって作成された２つの接触点が接触点３６７Ｂ、３７７Ｂとして動かずにいる一方で、第１手によって作成された２つの接触点３３３Ｂと３４３Ｂが移動された後の描画を示している。結果として、オブジェクト２２３は、矩形３２５Ｂの輪郭線内に含まれる。この例では、オブジェクト２２３の輪郭線は、潜在的なグループ矩形３２５Ｂ内のメンバーシップを示すために強調されている。
【００７５】
潜在的なグループの輪郭線内に完全に含まれていたオブジェクトが、もはや潜在的なグループ内に存在しないように、接触点が移動する。図３Ｃは、第１手の接触点３３３Ｃと３４３Ｃがスクリーン空間２６１上の新しい位置に移動し、第２手の接触点３６７Ｃと３７７Ｃもスクリーン空間２６１上の新しい位置に移動した後のスクリーン空間の描画を示している。この例では、当該動きによって、潜在的なグループ矩形３２５Ｃの輪郭線が、接触点の新しい位置と交差するように移動することになる。潜在的なグループ矩形３２５Ｃの新しい輪郭線はもはや完全にはオブジェクト２２３、２５４を包含してはおらず、オブジェクト２２３、２５４の輪郭線はジェスチャの図形ターゲットのリストから除外され、描画された図形構成物は強調が解除されるというように変更される。潜在的なグループ矩形３２５Ｃの新しい輪郭線は、依然としてオブジェクト２５７を包含しており、オブジェクト２５７は強調された輪郭線を引き続き有する。潜在的なグループ矩形３２５Ｃの新しい輪郭線は、オブジェクト２２７も完全に包含しており、オブジェクト２２７は表現（indication）のために強調された輪郭線を有する。
【００７６】
ユーザが接触点から１以上の指を離したことを示す信号等の、選択終了イベントが生じる時、ネットワークノードは、図形ターゲットをグループの一部として識別する。アクティブなクライアントは、タイプ“group”を作成するために履歴イベント（“ｈｅ”）を作成し、この履歴イベントは、グループを作成したアクティブなクライアントのＩＤ、及び、この例では図３Ｄのオブジェクト２２７、２５７であるグループ内のチルドレンのリストを含む。“ｈｅ”記録は、ローカルの空間的イベントログに保存され、空間的イベントマップにも伝達される。スクリーン空間２６１Ｅをサポートするアクティブなクライアントは、例えば、グループ内のオブジェクトを囲むグループ矩形３３５によって、または、メンバーオブジェクトの輪郭線の影または色相の変化によって、最終的なグループの視覚的標識を作成する。“ｈｅ”“create”“group”記録は、以下に含まれるアプリケーション・プログラミング・インターフェース（ＡＰＩ）に定義される。“ｈｅ”記録は、ネットワークノードから、作業空間に参加している１以上の他のネットワークノードへ伝達される。
// client "-> server
[client"id,
"he" ,
target-id,
"create" ,
{"type" : "group" ,
-id" : "S3aS2b392S8f62fce" ,
-children" : [array of target IDs of widgets that should be part of the group]}]
【００７７】
“ｈｅ”記録が別のネットワークノードに伝達され、作業空間を定義する記録に追加されると、作業空間２０１内のグループ３３５は、図３Ｅに示されるように、何れかのアクティブなクライアントのスクリーン空間２６１Ｅ上に描画され、当該アクティブなクライアントのビューポートにグループが含まれる。グループを作成したノード及びメッセージを受け取った何れかのノードでグループ操作が実行される。オブジェクトがグループに含まれると、クライアントノードは、グループの所有者に指定されて、例えば、当該オブジェクトはロックされ、ロックされている間は、グループの所有者によってしか変更されない。一実装例では、１以上の他のネットワークノードがグループの所有権を得られるように、グラフィカル・ユーザ・インターフェース・ボタンまたは他のユーザ入力構成物が当該１以上の他のネットワークノードで提供される。
【００７８】
グループ操作規則は各クライアントノードで実施可能である。規則は、オブジェクトを一度にただ１つのグループの一部とすることを可能にするロジックを含む。図形ターゲットのグループが作成されると、リサイズ、コピー、移動、削除といった動作がそれに適用される。一例では、ユーザは、グループを選択するためにグループ内のオブジェクトにタッチすることでグループを識別する。グループが選択されると、ユーザは、グループ内のオブジェクトをタッチしたまま離さずにグループを移動させ、グループをスクリーンの中で移動させる。この例では、移動は、グループ内のオブジェクトの移動を要求する入力として解釈されるジェスチャに応答するものであり、グループ内のオブジェクトを移動させると共に、オブジェクトの夫々を移動させるメッセージを他のノードに送信する。別の実装例では、ユーザがマウスでオブジェクトをクリックし、マウスで当該オブジェクトを掴み、移動させる。マウスボタンを離すことで、そのオブジェクトは、作業空間２０１内の新しい位置に配置される。グループの移動中、グループの作業空間での移動の経過を追う“ｖｅ”（一時的イベント）が、適時（１／４０秒毎）に作成される。ユーザがスクリーンから指を離すと、アクティブなクライアントは、もはや“ｖｅ”記録を生成せず、グループの最終の座標を示す最終の“ｈｅ”記録を生成する。“ｖｅ”記録、“ｈｅ”記録は何れも、作業空間の他の全ての参加者に伝達される。グループを移動させる例では、“ｈｅ”“position”記録が作成される。“ｈｅ”“position”記録は、“rect”構成要素を用いてグループの移動の量と方向を識別し、また、“order”構成要素はズームレベルを識別する。グループ動作は、以下のＡＰＩセクションで更に十分に説明される。
// server <-- client
[client-id, "he", target-id, "position", {"rect":[-1298,-390,-1018,-230],"order":4}]
// server --> client
[client-id, "he", target-id, event-id, "position", {"rect":[-1298,-390,-1018,-230],"order":4}]
【００７９】
幾つかの実施形態では、“position”ｈｅメッセージの“rect”パラメータの最初の２つの構成要素（ｘ及びｙ）のみが使用され、それらは、作成された時のグループの位置に対する移動の量を表している。従って、オブジェクトのグループが作業空間のどこかで作成され、当該グループを１０作業空間単位右へ、１０単位上へドラッグした場合、結果として得られる位置イベントの‘rect’構成要素は、［１０，−１０，１，１］となる。こうした移動パラメータは、作業空間記録においてグループのメンバーと関連付けされるため、“position”イベントを受け取る他のノードは、移動をグループのメンバーに適用する。このアプローチによって、輪郭線またはグループのメンバーシップリストを変更するオブジェクトの選択／選択解除イベントについて、位置イベントを送信しなくても良くなる。残りの２つの数（この例では１，１）については、使用しなくてもよいし、最初のグループサイズと比較した水平及び垂直方向の縮尺係数を表すのに使用してもよい。１はグループのサイズが変更されていないことを意味する。グループに対して最初のサイズの２倍大きくするピンチズームジェスチャが検知された場合、結果としての‘rect’は、［１０，−１０，２，２］となる。或いは、グループに対して最初のサイズの半分にするピンチズームジェスチャが検出された場合は、結果としての‘rect’は、［１０，−１０，０．５，０．５］となる。別の代替案では、他のタイプのグループ位置パラメータが利用できる。
【００８０】
グループに対して取られる動作を示すために、ディスプレイ上にはアニメーションが現れる。例えば、グループをスクリーンの中で動かす間に、クライアントは、グループが色、影、輪郭を変更するように、自身のスクリーン空間を描画する。或る特定のノードにおけるグループアニメーションは、ローカルでプログラムされる。別のシステムでは、作業空間での移動処理は、共同の記録に含まれ、次の記録の変動（variation）によって他のノードに報告される。以下の例では、“ｈｅ”“template”記録は、ベージュの色設定を示している。
[client-id, "he", workspace-id, event-id, "template", {"baseName": "sessions/all/Beige"}]
【００８１】
グループの削除によって、グループに関して、“ｈｅ”“delete”削除記録が生成される。
[client-id, "he", target-id, "delete", {"hidden":true}]
【００８２】
グループのグループ解除によって、まず初めに、グループターゲットＩＤは有るがチルドレンは無い“ｈｅ”“membership”記録が作成される。次に、“ｈｅ”“delete”記録がグループに関して生成される。
[client‐id, "he", target‐id, "membership", {"children":[]}]
[client-id, "he", target-id, "delete", {"hidden":true}]
グループ作成の例
// client "-> server
[client"id,
"he" ,
target-id,
"create" ,
{"type" : "group" ,
-id" : "S3aS2b392S8f62fce" ,
-children" : []}]
●プロパティ
○type（文字列）  “グループ”
○id（文字列）  グループの一意的な識別子
○children（配列）  グループの一部となるべきウィジェットのtarget-idの配列
典型的なグループ位置の例
//client --> server
[client-id, he, groupid, 'position' , {" rect" : [0, 0 , 0 , 0 ], "order" :4}]
●プロパティ
○rect（オブジェクト）  グループの矩形。ｘ１，ｙ１，ｘ２，ｙ２と規定される。
○order（整数）  ターゲットグループのｚオーダー
メンバーシップ
ターゲットオブジェクトのチルドレンを置換する。アイテムをグループ化する際に用いられる。
// server <‐‐ client
[client‐id, "he", target‐id, "membership", {"children" : [53a52b39250f62fce, 53a52b39250f62fce]}]
// server ‐‐> client
[client‐id, "he", target‐id, event‐id, "membership", {"children" : [53a52b39250f62fce, 53a52b39250f62fce]}]
●プロパティ
○children（配列）  必須。グループに含める少なくとも１つのウィジェットＩＤを含む配列。全てのチルドレンを削除するには、代わりに削除メッセージが使用される。
グループ文書作成例
// server ‐‐> client
[ client‐id,
"he",
target‐id, // group document id
event‐id,
"create",
{
"type":"document",
"rect":[x1,y1,x2,y2]
"maxWidth":123,
"maxHeight":456,
"layout":"stacked",
"title":"title of this document",
"assetURL": "xxx/xxx/xxx.docx",
"hidden": true,
"pin": false,
"activeChildId": "id1838094221",
"children": [
"id0398749123",
"id1838094221",
"id2849239042",
"id3849012830"]}]
●プロパティ
○type（文字列）  “グループ文書”
○activeChildId（文字列）  現在表示されているＰＤＦ／Ｄｏｃのページ等のアクティブなチャイルドＩＤ
○children（文字列）  チャイルド（ページ）オブジェクトＩＤの配列。配列の順序はチャイルド（ページ）の順序を表す。
○layout（文字列）  このグループ文書を描画するためにクライアントレイアウトを定義する。
【００８３】
履歴イベント／一時的イベント関連の変更の幾つかを示す良い例が、オブジェクトのグループの移動である。グループが移動されている間、ユーザ入力を受信したクライアントは、グループのメンバーを識別し、識別された各オブジェクトに関して一連のメッセージを生成する。オブジェクトがグループのドラッグによって移動／リサイズされる間、メッセージをサーバに送信し、サーバが当該メッセージを作業空間に登録されている全てのクライアントに再放送する等して、一連の一時的イベント（ＶＥ）は他のネットワークノードに送信される。
// client sends the following volatile events during the move
// client->server format is: [<clientId>, <messageType>, <targetId>, <eventType>, <messageProperties>]
["511d6d429b4aee0000000003","ve","511d6f9c9b4aee0000000039","position",{
"rect":[-493,73,-2,565],
"order":0
}]
["511d6d429b4aee0000000003","ve","511d6f9c9b4aee0000000039","position",{
"rect":[-493,73,-2,565],
"order":0
}]
["511d6d429b4aee0000000003","ve","511d6f9c9b4aee0000000039","position",{
"rect":[-538,91,-47,583],
"order":0
}]
["511d6d429b4aee0000000003","ve","511d6f9c9b4aee0000000039","position",{
"rect":[-538,91,-47,583],
"order":0
}]
【００８４】
ユーザがグループの移動を終了すると、クライアントは、オブジェクトの位置及び順序（order）を特定するために、一連の履歴イベントを送信する。
["511d6d429b4aee0000000003","he","511d6f9c9b4aee0000000039","position",{
"rect":[-492,73,-1,565],
"order":0
}]
【００８５】
サーバは、新しい永続的なｈｅ記録で応答する。当該記録のイベントＩＤを含めることに留意する。
// server-> client format of 'he' is: [<clientId>, <messageType>, <targetId>, <eventId>,
//                                   <eventType>, <messageProps>]
["511d6d429b4aee0000000003","he","511d6f9c9b4aee0000000039","511d9165c422330000000253","position",{
"rect":[-492,73,-1,565],
"order":0
}]
【００８６】
クライアントノードは、空間的イベントマップまたは空間的イベントマップの一部をダウンロードし、スクリーン空間に表示される図形オブジェクトを構成するために当該空間的イベントマップを解析（parse）するロジックを備える。また、グループ操作をサポートするために、空間的イベントマップの解析の間、全てのグループ及び各グループのメンバーが識別される。識別されたグループが列挙されたファイルが作成され、保存される。他のネットワークノードから新しいイベントを伝えるメッセージを受け取った際は、イベントの図形ターゲットが、ファイル内で識別されるグループのメンバーと照合される。イベントの処理は、既存のグループのメンバーシップに基づいて変更可能である。上記のメンバーシップメッセージ等のメッセージを受け取った際は、グループメンバーシップのファイルは、ローカルの空間的イベントマップ内のイベントの保存と併せて、更新される。
【００８７】
図４は、クライアント側ネットワークノードと呼ばれる、スクリーン空間を描画するために使用されるディスプレイを有するネットワークノードでロジックによって実行されるグループ作成処理のフローチャートを示している。一実装例では、クライアント側ネットワークノードは、タッチセンサ式ディスプレイ上で生じる４つの同時のタッチイベントを処理する（４０１）。物理的表示空間のスクリーン空間は、当該タッチイベントを接触点として表示する（４０３）。一実装例では、接触点はスクリーン空間上に表示された形状によって示される。ネットワークノードは、接触点の対の設定可能な定義に基づいて接触点の対を計算する（４０５）。ネットワークノードは、次に、４つの接触点と交差する潜在的なグループ輪郭線を計算し、表示する（４０７）。クライアント側ネットワークノードは、輪郭線による境界内の潜在的なグループメンバーであるオブジェクトを識別する（４０９）。潜在的なグループメンバーの識別は、潜在的なグループの輪郭線内に完全に残っているオブジェクトを含み、且つ、潜在的なグループの輪郭線と重なるオブジェクトも含む。ネットワークノードは、潜在的なグループのメンバーであるオブジェクトを示す標識をスクリーン空間上に表示する（４１１）。一例では、オブジェクトの色相または影または輪郭線が、メンバーシップを示すために変更される。ネットワークノードは、ユーザがもはや４つの接触点の全てを同時にタッチしていないことを示すデータを受け取り（４１３）、それによってネットワークノードは、グループ作成イベントを示す記録を作成し、分配する（４１５）。
【００８８】
開示される技術は、図３Ａ〜３Ｅに示される４本指による投げ縄で生じるタッチイベントといった、スクリーン空間上の４つの同時のタッチイベントを処理する（４０１）ロジックを含む。タッチイベントは、図３Ａに示すように、接触点として表示される（４０３）。随意的に、タッチイベントを示す“ｖｅ”記録が、スクリーン空間２６１のネットワークノードによって作成される。任意の“ｖｅ”記録が、作業空間２０１に参加している１以上の他のネットワークノードに送信される。開示される技術は、接触点の対を計算する（４０５）ロジックを実行するモジュールを含む。接触点の対のグループ化、及び、対立（conflict）の解決が、図５に示されている。接触点と重なる輪郭線が計算され、スクリーン空間２６１上に表示される（４０７）。輪郭線は、潜在的なグループを示す“ｖｅ”記録の処理によって生成される。また、当該モジュールは、潜在的なグループメンバーを識別する（４０９）ロジックを実行する。このロジックは、潜在的なグループのメンバーシップの標識をスクリーン空間２６１上に描画し（４１１）、随意的に、潜在的なグループのメンバーシップを示す“ｖｅ”メッセージを１以上の他のネットワークノードに送信する。選択終了イベントを示すデータを受け取る（４１３）ことで、“ｈｅ”グループ作成記録が生成される。次に“ｈｅ”記録は、１以上の他のネットワークノードに分配される（４１５）。受信側ネットワークノードは、“ｈｅ”記録を受け取ると、識別されたグループの輪郭線を潜在的なグループからグループへ変更するロジックを含む。受信側ネットワークノードは、グループのメンバーの外観（appearance）を、グループ内のメンバーシップを示すために変更するロジックも含む。
図５−グループ及び対立
【００８９】
図５Ａ、５Ｂ、５Ｃは、接触点同士の対立解決を含む、接触点交差プロセスを示している。
【００９０】
４本の指による投げ縄は、４つの同時のタッチイベントが２対の接触点にグループ化される時に生じる。グループ化は、タッチイベント間の空間的関係に基づいて生じる。しかしながら、タッチセンサ式スクリーン空間上で作業している時、ユーザは、同時に４つ以外のタッチイベントを作成する可能性があり、空間的関係が設定可能な構成に正確に一致しないこともあり得る。図５Ａ、５Ｂ、５Ｃは、タッチイベントのカウントの対立と空間的関係がどのようにして解決できるのかを示している。
【００９１】
タッチイベントは、タッチセンサ式ディスプレイ上の複数の隣接する画素から成る。一実装例では、接触点は、タッチイベントの隣接する画素のほぼ中心として計算される。接触点の対は、スクリーン空間２６１上で互いに、例えば６インチの第１距離パラメータ内にある２つの接触点を含む。接触点の２つの対は、接触点の各対の計算された中心が互いに例えば２フィートの第２距離パラメータ内にある場合の、４本の指による投げ縄と考えられる。一例では、一度に４つ以外の接触点が存在する場合があり得る。例えば、ユーザが一方の手の１つの指と他方の手の２本の指で表面をタッチした場合、何の応答も生じない。ユーザが一方の手の３本の指と他方の手の２本の指で表面をタッチした場合は、５つの接触点が生じる。別の例では、ユーザが夫々の手の３つの指で表面をタッチした場合、６つの接触点が生じる。別の例では、第１手の第１接触点は、第１手の第２接触点よりも、第２手の第１接触点に近い。別の例では、第１ユーザが、或るグループに含めるために、第２ユーザによって別のグループに既に含まれているオブジェクトを選択するかもしれない。
【００９２】
図５Ａは、スクリーン空間上に５つの同時の接触点がある場合の例を示している。図５Ａは、第１手によって作成された接触点Ｐａ５０１、Ｐｂ５０５、Ｐｃ５０９を含む。また、第２手によって作成された接触点Ｐｄ５１５、Ｐｅ５１９も示されている。距離５０３は、接触点ＰａとＰｂの間の距離である。距離５０７は、接触点ＰｂとＰｃの間の距離である。距離５１１は、接触点ＰａとＰｃの間の距離である。距離５１７は、接触点ＰｄとＰｅの間の距離である。第１対５２１は、接触点Ｐａ５０１とＰｃ５０９の対である。第２対５２３は、接触点Ｐｄ５１５とＰｅ５１９の対である。距離５１３は、第１対５２１の中心（あるいは、当該位置を代表する他の位置）と、第２対５２３の中心（あるいは、当該位置を代表する他の位置）の間の距離である。
【００９３】
タッチセンサ式ディスプレイが、スクリーン空間２６１内の少なくとも４つの同時の接触点を示すデータを受け取ると、ネットワークノードは、接触点間の距離を計算する。この例では、接触点Ｐｄ５１５とＰｅ５１９は、互いに６インチの設定可能な第１距離内にあり、接触点Ｐｄ５１５とＰｅ５１９はどちらも、接触点Ｐａ５０１、Ｐｂ５０５、Ｐｃ５０９から第１距離（６インチ）よりも離れている。この例では、接触点Ｐｄ５１５とＰｅ５１９は、第１対５２３としてグループ化される。
【００９４】
接触点Ｐａ５０１、Ｐｂ５０５、Ｐｃ５０９は全て、互いに設定可能な第１距離（６インチ）内にあり、夫々、接触点Ｐｄ５１５とＰｅ５１９から第１距離よりも離れている。これらの３つの接触点は１対の接触点へ分解する必要がある。Ｐａ５０１とＰｃ５０９間の距離５１１は、Ｐａ５０１とＰｂ５０５間の距離５０３よりも短い。同様に、Ｐｃ５０９とＰｂ５０５間の距離５０７は、Ｐｃ５０９とＰａ５０１間の距離５１１よりも長い。したがって、システムは、Ｐａ５０１とＰｃ５０９を、１対の接触点として選択し、第２対５２１とする。第１対５２３と第２対５２１は、潜在的なグループを選択するために、多角形５２５の輪郭線を定義するために使用される点を備える。次にアルゴリズムは、輪郭線が４つの接触点Ｐａ５０１、Ｐｃ５０９、Ｐｄ５１５、Ｐｅ５１９を横断する潜在的なグループ多角形５２５を計算し、表示する。この例では、Ｐａ５０１はＰｃ５０９よりも上にあるが左にあるため、対５２１の最上部の接触点Ｐａ５０１は、潜在的なグループ５２５を識別する矩形の最上部となり、対５２１の最左部の接触点Ｐｃ５０９は、矩形の最左部となる。
【００９５】
図５Ｂは、スクリーン空間上に６つの接触点がある例を示している。図５Ｂでは、第１対５４１は接触点ＰａとＰｂから成り、第２対５４９は接触点ＰｃとＰｄから成り、第３対５５７は接触点ＰｅとＰｆから成る。第１対５４１の中心と第２対５４９の中心の間の距離は、距離５４５である。第１対５４１の中心と第３対５５７の中心の間の距離は、距離５５１である。第２対５４９の中心と第３対５５７の中心の間の距離は、距離５５９である。
【００９６】
この例では、各対５４１、５４９、５５７の中心は、ネットワーク機器によって計算され、各対の中心間の距離が計算される。この例では、距離５４５は距離５５１より短く、距離５４５は距離５５９より短い。開示される技術のアルゴリズムは、第１対５４１と第２対５４９から成る２つの最も近い対を、潜在的なグループ矩形５６１を生成するために使用される２対の接触点として選択する。この例では、対５４９の接触点Ｐｃは対５４９の接触点Ｐｄの左にあるため、Ｐｃは潜在的なグループ矩形５６１の最右部となり、Ｐｄは潜在的なグループ矩形５６１の最下部となる。
【００９７】
図５Ｃは、接触点が、設定可能な構成に正確に一致していない場合の例を示している。図５Ｃでは、接触点Ｐａ５７１、Ｐｂ５７５、Ｐｃ５８１、Ｐｄ５８５が識別される。更に、Ｐａ５７１とＰｂ５７５間の距離は、距離５７３として識別される。Ｐｂ５７５とＰｃ５８１間の距離は、距離５７７として識別される。第１対５９１と第２対５９３が識別される。そして、Ｐｃ５８１とＰｄ５８５間の距離は、距離５８３として識別される。この例では、第１手が接触点Ｐａ５７１とＰｂ５７５を作成し、第２手が接触点Ｐｃ５８１とＰｄ５８５を作成している。対の設定可能な構成は、各対の接触点間の距離が互いに第１距離（６インチ）内にある場合の２つの対を既定しており、この２つの対の中心は互いに２フィートの範囲内にある。この構成では、一つの手の指の間の６インチの距離が、１つの対を作成するために使用される。また、大画面ディスプレイ１１０２ｃ上で作業する人の左右の手の間の距離が２フィートとなる。また、この構成では、例えばユーザ１１０１ｃと１１０１ｄ等の１以上のユーザが大画面ディスプレイ上で作業している時に、マルチタッチの選択ジェスチャを、単一のユーザに絞ることも可能である。
【００９８】
小さいグループが作成された時に、４つの接触点が、互いに６インチよりももっと近づいているということがあり得る。図５Ｃにおける例は、対５７３の接触点Ｐｂ５７５が、対５９３の接触点Ｐｃ５８１に対して、対５７３の接触点Ｐａ５７１よりも近くにある様子を表している。また、接触点Ｐｃ５８１が、接触点Ｐｂ５７５に対して、接触点Ｐｄ５８５よりも近くにある様子を表している。この配置を調整するアルゴリズムは、最初に、４つの接触点を記録し、次に、それらの間の距離を計算する。次に、アルゴリズムは、最も近い接触点が既に対になっている場合に、２つの最も近い接触点Ｐｂ５７５とＰｃ５８１を対にすることによって、２つの対になっていない接触点Ｐａ５７１とＰｄ５８５が残ることを識別する。次にアルゴリズムは、接触点Ｐｂ５７５とＰｃ５８１を対の作成から除外し、対作成アルゴリズムを再実行する。対作成アルゴリズムは、利用可能な対５９１と５９３を発見し、関連する接触点を対にし、潜在的なグループ５９５を作成する。
２つのネットワークノード間のグループ化の対立
【００９９】
一つの例では、第１及び第２ネットワークノードが、同じオブジェクトを、或るグループ内に同時に含めるために選択する。尚、各ネットワークノードは“ｈｅ”グループ記録を作成したが、第１及び第２ネットワークノードは、当該“ｈｅ”グループ記録をまだ互いに受け取っていない。オブジェクトは１つのグループのメンバーにしかなり得ないため、対立しているオブジェクトを含むグループを定義する最初のクライアントは、当該オブジェクトをそのグループ内に保持する。そのグループの定義する際に２番目だったクライアントは、そのグループに関する更新された“ｈｅ”“membership”記録を送信することで、対立したメンバーを除外する責任を負う。
図６−単一のタッチグループ作成
【０１００】
図６Ａ、６Ｂ、６Ｃは、単一のタッチグループ作成を示している。一実装例では、ユーザは、ツールバーのボタンを介して選択モードを入力する。別の実装例では、オブジェクトを長押し（long touch）でタッチすることで、選択モードの入力と、タッチされているオブジェクトである１つのグループメンバーによるグループイベントの作成をまとめて行う。グループが作成されると、グループの複製、グループの移動、グループの削除、グループの解除、グループからのオブジェクトの除外、グループへのオブジェクトの追加、グループのリサイズといったグループ動作が実行される。
【０１０１】
図６Ａ〜６Ｃは、スクリーン空間２６１を示しており、ツールバー６２０が当該スクリーン空間内に表示されている。４つの図形構成物６１１ａ、６１１ｃ、６１１ｄ、６１１ｅもまた識別される。
【０１０２】
ツールバー６２０でグループを作成するために、選択モードがツールバー上のボタンによって開始される。ツールバーは、スクリーン空間２６１上のどこにあってもよく、可視または不可視である。可視の場合、ツールバーは、スクリーン空間上の他の何らかのオブジェクトであるかのように移動できる。ツールバーの動きを示す作成された“ｖｅ”メッセージは、１以上の他のネットワークノードに送信され、ツールバーの移動は、受信側のネットワークノードによって、受信側のネットワークノードスクリーン空間上に描画される。次に選択終了イベントが、“ｈｅ”メッセージを生成し、それもまた１以上の他のネットワークノードに送信され、空間的イベントマップに保存される。ツールバーが不可視の場合、キャンバス等のオブジェクトが無いスクリーン空間の領域上を長押しすることで可視にすることができる。一例では、長押しとは、図６Ａの長押し６１３によって示されているように、移動することなく２〜３秒続くタッチである。長押しによってツールバー６２０が表示される。ツールバー上のボタンは、選択モードのオン・オフを切り替える動作が割り当てられている。
【０１０３】
図６Ｂは、オブジェクト６１１がグループ６４１のメンバーとして選択される様子を示している。この例では、選択モードがツールバー６２０の選択モードボタンで選択されている。選択モードの間、オブジェクト６１１ａへのタッチ６２１によって、オブジェクト６１１ａがグループ６４１のメンバーとして選択される。オブジェクト６１１ａを再度タッチすると、当該オブジェクトはグループから除外される。この例では、タイプ“create”“group”の“ｈｅ”記録が、オブジェクト６１１ａである１つのチャイルドで作成され、オブジェクト６１１ａの影が、グループにおけるメンバーシップを示すために暗くなる。
【０１０４】
図６Ｃは、第２オブジェクト６１１ｄがタッチ６３１によってグループ６４１に選択される様子を示している。この例では、オブジェクト６１１ｄをグループ６４１に追加する“ｈｅ”“membership”記録が作成される。
// client --> server
[client-id, "he","53a52b39250f62fce", event-id, "membership", {"children" : ["53a52b39250f62fca",”53a52b39250f62fcb"}]
【０１０５】
次に、チルドレンがグループの寿命の間に、メンバーシップメッセージを用いて、随意に追加または除外される。“ｈｅ”“membership”記録が、１以上の他のネットワークノードに伝達され、ローカルログに保存される。オブジェクト６１１ｄの影は、グループにおけるメンバーシップを示すために暗くなる。グループ６４１の輪郭線は、グループの２つのメンバー６１１ａ、６１１ｄを包含するために拡張される。この例では、境界内のオブジェクト、または、オブジェクト６１１ｃといったグループ６４１の輪郭線による境界と重なるオブジェクトは変化せず、当該グループに対する動作はそれらのオブジェクトに影響しない。選択領域の外のキャンバス上の半長押しは、選択モードを終了させる１つの方法である。ツールバー６２０の選択モードボタンは、選択モードを終了させる別の方法である。
図７−２本の指による投げ縄
【０１０６】
図７Ａ、７Ｂから成る図７は、２本の指による投げ縄を示している。２本の指による投げ縄によって、オブジェクトを包含する矩形の２つの対向する角を同時にタッチすることで、オブジェクトのグループが選択される。２本の指による投げ縄プロセスにおけるランダムなタッチイベントの分解は困難である。
【０１０７】
図７は、スクリーン空間２６１と、キャンバス上に表示された５つの図形構成物７１１ｂ、７１１ｃ、７１１ｄ、７１１ｅ、７１１ｆを含む。図７Ａは、タッチイベントによって作成された第１接触点７２１を示しており、１つのタッチイベントとして定義される１本の指または近接する２本の指によって第１接触点が作成される。また、タッチイベントによって作成された第２接触点７３１も示されており、１つのタッチイベントとして定義される１本の指または近接する２本の指によって第２接触点が作成される。２つの同時の接触点７２１、７３１は、潜在的なグループ７４１を作成する。
【０１０８】
ユーザが自身の指を接触点から離した時、グループ７５１が作成される。“ｈｅ”“create”“group”記録が作成され、“ｈｅ”記録は、１以上の他のネットワークノードに伝達され、ローカルログに保存される。オブジェクト７１１ｃ、７１１ｄ、７１１ｅ、７１１ｆの影は、輪郭線７５１によって識別されるグループにおけるメンバーシップを示すために暗くなる。グループの輪郭線７５１は、グループの５つのメンバーを包含するために拡張される。この例では、境界内のオブジェクト、または、オブジェクト７１１ｅといったグループ７５１の輪郭線による境界と重なるオブジェクトがグループに含まれる。グループ７５１の輪郭線から完全に外にあるオブジェクト７１１ｂといったオブジェクトは、グループには含まれない。
図８−グループの複製
【０１０９】
図８Ａ、８Ｂは、グループの複製を示している。一実装例では、マルチタッチ選択ジェスチャは、図６のツールバー６２０といったツールバーとの対話によって開始される。複製動作は、グループ内の各オブジェクトのコピーを作成し、新しいオブジェクト間の空間的関係を維持しつつ、元のアイテムのオフセット内にそれらコピーを配置する。
【０１１０】
図８Ａ、８Ｂは、スクリーン空間２６１を備え、ツールバー６２０が当該スクリーン空間内に表示されている。図示された例では、カード１（８２０ａ）、カード２（８２０ｂ）、カード３（８２０ｃ）は、グループ多角形８１５でまとめてグループ化された３つの図形構成物である。この例では、グループは、破線で描かれた多角形８１５によって識別される。図形構成物８２０ａ、８２０ｂ、８２０ｃの影は、多角形８１５によって識別されたグループにおけるメンバーシップを示すためにグレー（grey shade）に設定される。
図９−フリーフォームの投げ縄
【０１１１】
図９Ａ、９Ｂは、フリーフォームの投げ縄でのグループ作成を示している。フリーフォームの投げ縄は、１つの接触点でスクリーン空間をタッチし、ユーザ入力ロジックのグループ選択モードを起動し、グループに含まれるオブジェクトの周囲にフリーフォームの形状を描くことで作成される。図９Ａ、９Ｂは、スクリーン空間２６１を含み、ツールバー６２０が当該スクリーン空間内に表示されている。また、５つの図形構成物９１１ａ、９１１ｂ、９１１ｃ、９１１ｄ、９１１ｆが含まれている。第１接触点９０５、第２接触点９１５、フリーハンドの円９１７も含まれている。
【０１１２】
選択モードの間、第１接触点９０５は、タッチイベントによって作成され、１つのタッチイベントとして定義される１本の指または近接する２本の指によって第１接触点が作成される。継続してスクリーン空間にタッチしている間に、フリーフォームの多角形を形成するフリーハンド線９１７が、グループに含まれるオブジェクトの周囲に描かれる。フリーハンドの円９１７の終点が、第１接触点に対して設定可能な距離内に到達または接触した時に、指がスクリーン空間２６１から離れて第２接触点９１５を作成する。フリーハンド線９１７は閉じていないが、第１接触点９０５と第２接触点９１５が互いに設定可能な距離の範囲内にある場合は、ネットワークノードは、第１接触点９０５と第２接触点９１５の間の線を計算し、この線を用いてフリーハンド線９１７を自動的に閉じる。これは、図９Ｂの線９３０で示されている。閉じられると、フリーハンド円９１７内のオブジェクトは“ｈｅ”“create”“group”記録に含まれる。次に、フリーハンド円９１７は、グループの境界となる。別の実装例では、フリーハンド円９１７が作成されると、まだ選択モードにある間に、フリーハンド円９１７の外にあるオブジェクトをタップすることで、そのオブジェクトがグループに追加される。
図１０−スワイプによる投げ縄
【０１１３】
図１０Ａ、１０Ｂ、１０Ｃは、スワイプによる投げ縄によるグループ作成を示している。スワイプによる投げ縄は、１つの接触点でスクリーン空間をタッチし、グループに含められるオブジェクトを通過するフリーハンドの線を描くことで作成される。図１０Ａ〜１０Ｃは、スクリーン空間２６１と６つの図形構成物１０１１ａ、１０１１ｂ、１０１１ｃ、１０１１ｅ、１０１１ｆを含む。図１０は、第１接触点１０２１、第２接触点１０３１、フリーハンド線１０４１、グループ１０５１も含む。
【０１１４】
選択モードにある間、タッチイベントは、オブジェクト１０１１ａの座標内に第１接触点１０２１を作成する。ネットワークノードは、接触点の位置を示すデータを処理し、オブジェクトの影を変更することで接触点１０２１と重なるオブジェクト１０１１ａを変更する。タッチを続ける間、オブジェクト１０１１ｃ、１０１１ｅ、１０１１ｄ、１０１１ｆを通って第２接触点１０３１で終わるフリーハンド線１０４１が描かれる。一つの例では、ネットワークノードが、スクリーン空間２６１上に描画されたオブジェクトの座標を横切るフリーハンド線１０４１によって生成されたデータを処理する際、ネットワークノードは、イベントを示すために、これらのオブジェクトの影を変更する。ユーザが第２接触点１０３１から指を持ち上げると、選択されたオブジェクトを包含するグループ１０５１の境界を識別する矩形が描かれる。この例では、オブジェクト１０１１ｂのように、フリーハンド線１０４１と重ならなかったオブジェクトの影は変更されない。
図１１
【０１１５】
図１１はデジタルディスプレイ共同環境の態様の一例を説明するものである。この例では、複数のユーザ１１０１ａ〜ｈ（総称して１１０１）が、複雑な画像、音楽、動画、文書、及び／又は他のメディア（全て、図１１において１１０３ａ〜ｄ（総称して１１０３）として示されている）の創作においてお互いに共同を望むことがあり得る。図示された例におけるユーザは、互いに共同するために、例えばタブレット１１０２ａ、パーソナルコンピュータ（ＰＣ）１１０２ｂ、及び、多数の大画面ディスプレイ１１０２ｃ、１１０２ｄ、１１０２ｅ（総称してデバイス１１０２）のような、電子的ネットワークノードとして構成された種々のデバイスを使用する。図示された例において大画面ディスプレイ１１０２ｃは、本明細書中で“壁”と呼ばれることもあるが、１より多いユーザ（例えば、ユーザ１１０１ｃと１１０１ｄ、ユーザ１１０１ｅと１１０１ｆ、及び、１１０１ｇと１１０１ｈ）に対応する。クライアント側ネットワークノードと呼ばれるユーザデバイスは、作業空間内のイベントを表示するために割り当てられた表示可能領域であるスクリーン空間が描画されたディスプレイを有する。所定のユーザの表示可能領域は、事実上無限の空間の作業空間と比較して限られた領域又は空間を有する、ディスプレイのスクリーン全体、スクリーンの一部、スクリーンに表示されるウィンドウ等を含み得る。
【０１１６】
図１２はデジタルディスプレイ共同環境の態様の更なる例を示している。図１２に示されるように、“壁”と呼ばれることもある大画面ディスプレイ１１０２ｃ、１１０２ｄ、１１０２ｅは、サーバ側物理的ネットワークノードとして構成された中央の共同サーバ１２０５とネットワーク通信を行う、物理的ネットワーク１２０４上の夫々のクライアント側ネットワークノード１２１０によって制御され、中央共同サーバ１２０５は複数の作業空間のための空間的イベントマップスタックを記憶するデータベース１２０６とアクセス可能である。本明細書中において、ネットワークノードはネットワークに取り付けられた動作中の電子機器におけるアドレス可能なデバイスまたは機能であり、通信チャネルを介して情報を送信し、受信し、又は転送することが可能である。ネットワークノードとして採用され得る電子機器の例は、任意の種類のコンピュータ、ワークステーション、ラップトップコンピュータ、ハンドヘルドコンピュータ、及びスマートフォンを含む。本明細書中において、用語“データベース”は必ずしも任意の単一構造を意味しない。例えば、２つ以上の別々のデータベースは、一緒にまとめることを考慮すると、本明細書の用語における“データベース”を構成する。
【０１１７】
共同サーバ１２０５で実行されるアプリケーションは、Ａｐａｃｈｅ又はｎｇｉｎｘのようなウェブサーバソフトウェア、或いは、Ｎｏｄｅ．ｊｓのようなランタイム環境を用いて実行される。例えば、ＬＩＮＵＸのようなオペレーティングシステムを実行する仮想マシン上で実行されることがあり得る。サーバ１２０５は図１２において単一のコンピュータとしてヒューリスティックに図示されている。しかしながら、サーバ構成には、大規模クラウドベースサービスに一般的な、サーバアプリケーションを実行する多数のコンピュータからなるシステムを含み得る。サーバ構成は、共同セッション中の夫々のクライアント毎に１より多いチャネルを含んで、様々なタイプの通信チャネル用に構成されることのできる通信モジュールを含む。例えば、ネットワークを介したリアルタイムに近い更新で、クライアントソフトウェアは、例えばＷｅｂＳｏｃｋｅｔプロトコルに基づいたメッセージベースのチャネルを使ってサーバ通信モジュールと通信することができる。最初の大容量作業空間データの受信と同様、ファイルのアップロードに際して、クライアントソフトウェアはサーバ通信モジュールとＨＴＴＰＳを介して通信する。サーバは、例えばＲｕｂｙ  ｏｎ  Ｒａｉｌｓを実装したＪａｖａＳｃｒｉｐｔで記述されたフロントエンドプログラムを実行し、例えばＯａｕｔｈに基づいた認証／承認をサポートし、多数の分散したクライアント同士の調整をサポートすることができる。サーバ通信モジュールは、作業空間データ内のユーザの動作を記録し、ユーザ動作を適用可能として他のクライアントに中継する機能を実行する、ＷｅｂＳｏｃｋｅｔアプリケーションのようなメッセージベース通信プロトコルスタックを含み得る。このシステムは例えばＮｏｄｅ．ｊｓプラットフォーム上、或いは高負荷ソケットアプリケーションを扱うために設計された他のサーバ技術上で動作する。
【０１１８】
データベース１２０６は、例えば、夫々のセッションの“ｈｅ”記録から成る空間的イベントマップについて、ディスプレイキャンバス上に表示可能なオブジェクトに関するイベントを含み、又は識別することのできる作業空間データセットのデジタル表現を保存している。作業空間データセットは空間的イベントスタックの形式で実装されることができ、少なくとも永続的空間イベントが、取消動作の間、先入れ後出しのパターンで、スタックに追加され（プッシュ）、スタックから取り出される（ポップ）ように管理される。多数の異なる作業空間毎に作業空間データセットがあり得る。所定の作業空間のためのデータセットはデータベース内に構成されるか、又は作業空間と結びついた機械により可読な文書として構成され得る。作業空間は無限の、又は事実上無限の大きさを有し得る。作業空間データは、表示クライアントによってディスプレイ壁上の表示領域内に表示可能なオブジェクトを識別するイベントデータ構造を含み、作業空間内の時間と場所を当該イベントデータ構造によって識別されたオブジェクトと関連付ける。デバイス１１０２の夫々は全体の作業空間のうち一部だけを表示する。ディスプレイ壁はオブジェクトを表示するための表示領域を有し、表示領域は作業空間内の対応する領域にマップされる。当該対応する領域は、作業空間内のユーザ位置を中心とする、或いはそうでない場合作業空間内のユーザ位置から定まる領域に対応する。作業空間内の対応する領域への表示領域のマッピングは、表示クライアントによりディスプレイ上に描画されるべき表示領域内にある作業空間データ内のオブジェクトを識別し、ディスプレイ上の表示領域内の位置におけるユーザのタッチ入力とリンクするオブジェクトを識別するのに利用できる。
【０１１９】
サーバ１２０５及びデータベース１２０６は、作業空間内に位置を有する図形ターゲットに関するイベントのログを保存するメモリを備えるサーバ側ネットワークノードを構成することができ、当該ログのエントリは、イベントに係る図形ターゲットの作業空間内における位置、イベントの時刻、及び、イベントに係る図形ターゲットのターゲット識別子を含む。サーバは、複数のアクティブなクライアント側ネットワークノードとの接続を確立し、作業空間内に位置を有する図形ターゲットの修正及び作成に関するイベントを識別するメッセージを受信し、当該メッセージに応答してログにイベントを追加し、及び、特定のクライアント側ネットワークノードから受信したメッセージのうち識別されたイベントに関するメッセージを他のアクティブなクライアント側ネットワークノードへ配信するためのロジックを含み得る。
【０１２０】
サーバ１２０５のロジックは、アプリケーション・プログラム・インタフェースを含むことができ、規定の手順及びパラメータの組を備え、これによってログの一部を運搬するメッセージをクライアント側ネットワークノードに送信し、作業空間内に位置を有する図形ターゲットに関する“ｖｅ”及び“ｈｅ”イベントを識別するデータを運搬するメッセージをクライアント側ネットワークノードから受信することができる。
【０１２１】
また、サーバ１２０５のロジックは、あるクライアント側ネットワークノードから受信したイベントを他のクライアント側ネットワークノードへ配信する処理を備えたアプリケーションインタフェースを含み得る。
【０１２２】
ＡＰＩに準拠したイベントは、ログに保存され、且つ他のクライアント側ネットワークノードへ配信される第１種のイベント（履歴イベント）と、１以上の他のクライアント側ネットワークノードへ配信されるがログに保存されない第２種のイベント（一時的イベント）を含み得る。
【０１２３】
サーバ１２０５は複数の作業空間に対し作業空間のデータセットを保持でき、セッションに参加する表示クライアントに作業空間データを提供することができる。作業空間データは、その後、表示クライアントソフトウェアを含む適当なソフトウェア１２１２を備えたコンピュータシステム１２１０によって、ディスプレイ上に表示する画像を決定し、対話対象のオブジェクトをディスプレイ面上の位置に割り当てるのに利用される。サーバ１２０５は、異なる共同セッションに対して、多数の作業空間を保持及び維持する。夫々の作業空間はユーザのグループにより関連付けられ、グループ内の承認されたユーザのみがアクセス可能に構成することができる。
【０１２４】
いくつかの代替する構成では、サーバ１２０５は、そのデバイス上で視認可能なキャンバス内の部分を示す“ビューポート”をデバイス１１０２毎に追跡し、当該ビューポートを描画するのに必要なデータを各デバイス１１０２に提供することができる。
【０１２５】
線画オブジェクトの描画、ユーザ入力の処理、及びサーバとの通信を担うクライアントデバイスで実行されるアプリケーションソフトウェアは、ＨＴＭＬ５或いは他のマークアップベースの手続に基づくものであることができ、ブラウザ環境で実行されるものであり得る。これは多数の異なるクライアントのオペレーティングシステム環境への容易な対応を可能とする。
【０１２６】
データベース１２０６に保存されるユーザインタフェースデータは、イメージビットマップ、ビデオオブジェクト、多ページ文書、スケーラブル・ベクタ・グラフィックス等の図形構成物を含む様々な種類のオブジェクトを含む。デバイス１１０２は、夫々、通信ネットワーク１２０４を介して共同サーバ１２０５と通信している。通信ネットワーク１２０４はＬＡＮ、ＷＡＮ、ルータ、スイッチ、ＷｉＦｉコンポーネント、セルラーコンポーネント、有線及び光学コンポーネント、及びインターネット等の全ての形式のネットワークコンポーネントを含み得る。ある状況では２以上のユーザ１１０１は同じ部屋内におり、彼らのデバイス１１０２がＷｉｆｉを介して共同サーバ１２０５と通信する。別の状況では２以上のユーザ１１０１は何千マイルも互いに離れていて、彼らのデバイス１１０２がインターネットを介して共同サーバ１２０５と通信する。壁１１０２ｃ、１１０２ｄ、１１０２ｅは、画像を表示するだけではなく、スタイラス又は１以上の指のような体の一部の何れかで表示面に触れることによって提示されるユーザジェスチャを検知することができるマルチタッチデバイスであり得る。幾つかの実施形態において、壁（例えば１１０２ｃ）は１または複数の指（或いは、例えば手全体）によるタッチとスタイラスによるタッチを区別することができる。或る実施形態では、壁は赤外光を出射し受光した光を検出することによって、ユーザの指からの反射光が壁が受光した周辺光と区別する特性を有することから、タッチを検知する。スタイラスは、壁が周辺光とユーザの指からの反射光の両方を区別できる方法で、自身の赤外光を出射する。壁１１０２ｃは、例えば、フィンランド国ヘルシンキに所在地を有するＭｕｌｔｉＴｏｕｃｈ社製造のモデルＮｏ．ＭＴ５５３ＵＴＢＬ  ＭｕｌｔｉＴａｃｔｉｏｎセルが、水平方向及び垂直方向にタイルされた配列であり得る。表現手段の多様性を提供するため、壁１１０２ｃは“状態”を維持するように動作される。即ち、それは所定の入力に対し、とりわけ入力の順序に依存して異なった反応をし得る。例えば、ツールバーを使用して、ユーザは多数の利用可能なブラシスタイル及び色の何れかを選択できる。一度選択されると、壁は、続くスタイラスによるストロークが選択されたブラシスタイル及び色を使用して線を描く状態にある。
【０１２７】
図示された実施形態において、ディスプレイ配列は、合計で高さ６フィート幅３０フィートの、複数ユーザが壁の異なる部分に立って同時に操作するのに十分な大きさの表示可能領域を有することができる。しかし、この実施形態では、壁は、異なるユーザの指、または、異なるユーザによって操作されるスタイラスを区別しないため、複数ユーザの状況では、壁における表現の柔軟性は制限されるかもしれない。したがって、１人のユーザが壁を１つの所望する状態にする場合、２番目のユーザの入力が別に扱われるべきであることを壁は認識する術を持たないため、２番目のユーザは、同じ状態を使用するように制限されることになる。
【０１２８】
この制限を避けるため、クライアント側ネットワークノードは、壁１１０２ｃ上に“描画領域”を定義することができる。本明細書で使用される描画領域は、壁の状態の少なくとも１つのアスペクト（aspect）が当該壁の他の領域とは独立して変更され得る領域である。本実施形態では、描画領域間で異なり得る状態のアスペクトが、スタイラスを用いて壁に描かれる線のプロパティを含む。指による接触行動に対するシステムの応答といった、他の状態のアスペクトは、描画領域によって影響されない。
【０１２９】
図１３Ａ〜１３Ｆは、共同サーバ１２０５のデータベースによって維持される作業空間データの一部となり得るデータ構造を表している。図１３Ａにおいて、あるイベントデータ構造が、一時的イベントや履歴イベントといったイベントに関して図示されている。イベントは作業空間データとの対話であり、当該作業空間データの変化を招き得る。したがって、イベントはイベント識別子、時刻印（timestamp）、セッション識別子、イベント型パラメータ、client-idであるクライアント識別子、及び作業空間内における位置の配列を含み、対応するイベントの１または複数を含むことができる。例えば時刻印は、競争するイベントが同一オブジェクトに影響を及ぼす競争的状況の可能性を最小にするために、ミリ秒或いはより細かい分解能を有することが望ましい。また、イベントデータ構造は、クライアントディスプレイでのタッチスクリーン上のストローク（stroke）と結びついている作業空間データ内のオブジェクトを識別するＵＩターゲットを含み得る。イベントは、例えばストロークの表示パラメータを示すスタイルイベントを含み得る。イベントは、テキストオブジェクトの作業空間内における登録、修正又は移動を示すテキスト型イベントを含み得る。イベントは、カード型オブジェクトの作業空間内における作成、修正又は移動を示すカード型イベントを含み得る。イベントは、ストロークの位置配列、及び、例えば色や線幅等のストロークの表示パラメータを識別するストローク型イベントを含み得る。
【０１３０】
イベントは永続的な履歴イベントと一時的イベントに分類される。作業空間データに追加するためのイベントの処理、及びユーザ間での共有は、イベントの分類に依存し得る。この分類はイベント型パラメータに固有のものであるか、イベントデータ構造内の付加的なフラグ又はフィールドが分類を示すために使用され得る。
【０１３１】
空間的イベントマップは履歴イベントのエントリを有するイベントのログを含み、夫々のエントリは図１３Ａに図解されるような構造を含んでいる。サーバ側ネットワークノードは一時的及び履歴イベントを運搬するメッセージをクライアント側ネットワークノードから受信し、当該一時的イベントを、イベントが対応するエントリとしてログに追加されるサーバへは転送せずに他のクライアント側ネットワークノードに送信し、当該履歴イベントを、イベントが対応するエントリとしてログに追加されるサーバへ転送する一方で他のクライアント側ネットワークノードにも送信するためのロジックを含む。
【０１３２】
図１３Ｂはカードデータ構造を図示している。カードデータ構造は、セッション識別子、カードタイプ識別子、配列識別子、クライアント識別子、カードの大きさ、カードに関連付けられたファイルのタイプ、及び、作業空間内のセッションの位置を含む、作業空間内のオブジェクトについての現在状態の情報を識別する属性のキャッシュを提供し得る。
【０１３３】
図１３Ｃはチャンクと呼ばれる、多数のイベント及びオブジェクトを１つのキャッシュ可能な組み合わせに統合したデータ構造を図示している。データ構造はセッションＩＤ、チャンク内に含まれるイベントの識別子、及び、チャンクが生成された時刻印を含む。
【０１３４】
図１３Ｄは選択された作業空間内のセッションに参加しているユーザへのリンクのためのデータ構造を図示している。このデータ構造はアクセストークン、セッションに係る表示クライアントのクライアント識別子、表示クライアントとリンクしたユーザ識別子、ユーザがセッションにアクセスした最後の時刻と有効期限を示すパラメータ、セッションについての種々の情報を運搬するクッキーを含み得る。この情報は例えば、ユーザの作業空間内の現在位置を維持することができ、ユーザがログインした夫々の時刻において、ログインと関連付けられた表示クライアントに表示するための作業空間データを決定するのに利用し得る。
【０１３５】
図１３Ｅはディスプレイ配列データ構造を図示しており、夫々が表示クライアントを有する連合ディスプレイにより実装される大画面ディスプレイに関連して利用され得る。当該連合ディスプレイの表示クライアントは単一のディスプレイとして機能するように協力する。作業空間データは配列ＩＤによってディスプレイの配列を識別し、夫々のディスプレイのセッション位置を識別するディスプレイ配列データ構造を維持することができる。夫々のセッション位置は連合ディスプレイの領域内におけるｘオフセットとｙオフセット、セッション識別子、及び深さを含み得る。
【０１３６】
システムはクライアント側ネットワークノードとの通信を暗号化し、空間的イベントマップが保存されるデータベースを暗号化することができる。また、クライアント側ネットワークノード上において、幾つかの実施形態では、クライアント側コンピュータへのアクセスを得た侵入者によるデータの不正アクセスを防ぐため、空間的イベントマップのキャッシュコピーが暗号化される。
【０１３７】
図１３Ｆは、アクティブなクライアントをアクティブな作業空間にマップするのに使用されるグローバル・セッション・アクティビティ・テーブル（ＧＳＡＴ）を示している。データ構造には、作業空間名、デバイスの種類、クライアントＩＤ、セッションＩＤ、行為者（actor）ＩＤを含む。
【０１３８】
図１４は、分散型共同システムにおいて、クライアント側の機能（例えば、コンピュータシステム１２１０）又はサーバ側の機能（例えば、サーバ１２０５）を実現するために使用され得るコンピュータシステム又はネットワークノードの簡略化されたブロック図である。コンピュータシステムは、典型的に、多数の周辺機器とバスサブシステム１４１２を介して通信するプロセッササブシステム１４１４を含む。周辺機器は、メモリサブシステム１４２６及びファイルストレージサブシステム１４２８を備えたストレージサブシステム１４２４、ユーザインタフェース入力デバイス１４２２、ユーザインタフェース出力デバイス１４２０、及び、通信モジュール１４１４内のネットワークインタフェースサブシステムを含み得る。入力及び出力デバイスはコンピュータシステムとのユーザ対話を可能にする。通信モジュール１４１６は、通信ネットワーク１２０４とのインタフェースを含んで、外部ネットワークとのインタフェースとして物理的な通信プロトコルサポートを提供し、他のコンピュータシステムの対応する通信モジュールと通信ネットワーク１２０４を介して接続している。通信ネットワーク１２０４は、多数の相互接続されたコンピュータシステム及び通信接続を含み得る。これら通信接続は、有線接続、光接続、無線接続、或いは他の任意の情報通信のための機構であり得るが、典型的には、少なくともその肢部において、ＩＰベースの通信ネットワークである。一実施形態においては、通信ネットワーク１２０４はインターネットであり、他の実施形態では、通信ネットワーク１２０４は任意の適したコンピュータネットワークであり得る。
【０１３９】
ネットワークインタフェースの物理ハードウェア要素は、時々ネットワークインタフェースカード（ＮＩＣ）と呼ばれるが、それらは必ずしもカードの形をしている必要はなく、例えばマザーボード上に直接取り付けられた集積回路（ＩＣ）とコネクタの形式、或いはコンピュータシステムの他の要素と一緒に単一の集積回路上に実装されるマクロセルの形式であり得る。
【０１４０】
ユーザインタフェース入力デバイス１４２２はキーボード、マウス、トラックボール、タッチパッド、又はグラフィックタブレット、スキャナ、ディスプレイに組み込まれたタッチスクリーン（大画面デジタルディスプレイ１１０２ｃのタッチセンサ部分を含む）のような指示デバイス、音声認識システム、マイクのような音声入力デバイス、及び他の形の触知できる入力デバイスを含み得る。一般に、用語“入力デバイス”の使用は、コンピュータシステム内に、又はコンピュータネットワーク１２０４上に情報を入力するための全ての可能な型式のデバイス及び方法を含むことが意図される。
【０１４１】
ユーザインタフェース出力デバイス１４２０は、スクリーン、及び、スクリーンを覆うタッチスクリーンまたはスクリーン上の位置を識別するための他の入力デバイスを備えるディスプレイサブシステム、プリンタ、ファックス機、或いは音声出力デバイスのような非視覚的なディスプレイを含み得る。ディスプレイサブシステムは陰極線管（ＣＲＴ）、液晶ディスプレイ（ＬＣＤ）のようなフラットパネルデバイス、投影デバイス、或いは他の可視画像を作成する機構を含み得る。図１２の実施形態において、それは大画面デジタルディスプレイ１１０２ｃの表示機能を含む。ディスプレイサブシステムは、音声出力デバイスを介して等、非視覚的なディスプレイも提供してもよい。一般に、用語“出力デバイス”の使用は、コンピュータシステムからユーザ又は他の機械又はコンピュータシステムに情報を出力するための全ての可能な型式のデバイス及び方法を含むことが意図される。
【０１４２】
ストレージサブシステム１４２４は、開示される技術の特定の実施形態の機能性を提供する基本プログラム及びデータ構造体を保存する。
【０１４３】
ストレージサブシステム１４２４は、サーバ側ネットワークノードの実装に使用される場合、イベントを作業空間内に配置する空間的イベントマップを含む機械読み出しが可能なデータ構造を記憶する持続性コンピュータ可読媒体を含んだ製品を備える。当該空間的イベントマップは、イベントのログを備え、当該ログのエントリは、イベントに係る図形ターゲットの作業空間内における位置及び時刻を含む。また、ストレージサブシステム１４２４は、サーバ側ネットワークノードに関連して本明細書中に記載された手続を実行するための実行可能な命令を含んだ製品を備える。
【０１４４】
ストレージサブシステム１４２４は、クライアント側ネットワークノードの実装に使用される場合、イベントを作業空間内に配置する空間的イベントマップを含む機械読み出しが可能なデータ構造を、以下に説明されるキャッシュコピーの形で記憶する持続性コンピュータ可読媒体を含んだ製品を備える。当該空間的イベントマップはイベントのログを備え、当該ログのエントリは、イベントに係る図形ターゲットの作業空間内における位置及び時刻を含む。また、ストレージサブシステム１４２４は、クライアント側ネットワークノードに関連して本明細書中に記載された手続を実行するための実行可能な命令を含んだ製品を備える。
【０１４５】
例えば、開示される技術の特定の実施形態の機能性を実現する種々のモジュールが、ストレージサブシステム１４２４内に保存され得る。これらのソフトウェアモジュールは一般にプロセッササブシステム１４１４によって実行される。
【０１４６】
メモリサブシステム１４２６は、典型的には、プログラム実行の間に命令及びデータを保持するための主ランダムアクセスメモリ（ＲＡＭ）１４３０、及び、固定の命令が保存された読み出し専用メモリ（ＲＯＭ）１４３２を含む多数のメモリを備える。ファイルストレージサブシステム１４２８はプログラム及びデータファイルの永久的な保管を提供し、ハードディスクドライブ、フロッピーディスクドライブと関連する着脱可能媒体、ＣＤ−ＲＯＭドライブ、光学ドライブ、又は着脱可能媒体カートリッジを含み得る。開示される技術の特定の実施形態の機能性を実現するデータベース及びモジュールは、１または複数のＣＤ−ＲＯＭのようなコンピュータ可読媒体上に提供されており、ファイルストレージサブシステム１４２８によって保存され得る。ホストメモリサブシステム１４２６は、とりわけ、プロセッササブシステム１４１４により実行されると、コンピュータシステムに本明細書に記載の機能を動作又は実行させるためのコンピュータ命令を含む。本明細書中において、“ホスト”又は“コンピュータ”内又は上で実行するとしたプロセス及びソフトフェアは、命令及びデータのための他の任意のローカルの又はリモートのストレージを含んだホストメモリサブシステム１４２６内のコンピュータ命令及びデータに応答して、プロセッササブシステム１４１４上で実行される。
【０１４７】
バスサブシステム１４１２は、コンピュータシステムの種々の要素及びサブシステムを互いに意図したとおりに通信させるための機構を提供する。バスサブシステム１４１２は模式的に単一バスとして示されているが、バスサブシステムの代替実施形態は複数バスを使用してもよい。
【０１４８】
コンピュータシステムそれ自身は、パーソナルコンピュータ、ポータブルコンピュータ、ワークステーション、コンピュータ端末、ネットワークコンピュータ、テレビ、メインフレーム、サーバファーム、又は他のデータ処理システム或いはユーザデバイスを含み、様々な種類があり得る。一実施形態において、コンピュータシステムは、夫々が大画面ディスプレイ１１０２ｃを構成するタイルの１つを制御する複数個のコンピュータシステムを含む。コンピュータ及びネットワークの絶えず変化する性質によって、図１４に示されたコンピュータシステム１２１０の記載は開示される技術の好ましい実施形態を図示するための具体的な一例を意図したに過ぎない。図１４に示したコンピュータシステムよりも要素の多いまたは少ないコンピュータシステムの他の構成が多数可能である。同一の要素及び変形は、共同サーバ１２０５と表示データベース１２０６のほか、図１１の共同環境における他のデバイス１１０２の夫々を構成することもできる。
【０１４９】
一つの種類の実施形態では、クライアント接続レイヤー、メッセージ通過レイヤー、共同レイヤーの内の１以上が、第３者によって提供（host）される物理的なマシンにおけるネットワークノードを含む仮想マシンとして実装され、本明細書に記載のサービスを提供するコンピュータプログラムによって構成されることが可能である。
【０１５０】
イベントの伝達に使用されるアプリケーション・プログラム・インターフェースは、グループ管理のために開発されたコードによって使用される。メモリサブシステムは、上述のグループ選択、作成、移動、変更、削除のクライアント側プロセスを実施するプロセッササブシステム１４１４によって実行可能なコンピュータプログラムを記憶する。また、グループ処理をサポートするタッチイベント及び他のユーザ入力を解釈するためのプロセッササブシステム１４１４によって実行可能なクライアント側プロセスのためのコンピュータプログラムを、メモリサブシステムに含めることが可能である。また、プロセッササブシステム１４１４によって実行可能なコンピュータプログラムは、本明細書に記載の空間的イベントマップＡＰＩのためのクライアント側の機能及びパラメータを実施することができる。
【０１５１】
グループ管理に関して、メモリサブシステムに記憶された関連コードは、空間的イベントマップ及びローカルノードの現在のイベントを用いて判定された、選択プロセスまたは変更プロセスの間の潜在的なグループ及び最終グループの両方である、作業空間内に存在する全てのグループのリポジトリとして機能するファイルを含む。また、上記関連コードは、作業空間内のイベントの履歴を記憶するデータベースから受け取ったグループイベントに関して解析（parser）を実施し、グループへのメンバーの追加やグループの移動といったグループ動作をローカルで実行された時はいつでも、データベースへのイベントの送信を処理する。
【０１５２】
図１５は、ストレージサブシステムに保存され、クライアント側ノードによって、他のノードから受け取ったメッセージに示されたイベントについて、本明細書に記載のグループ処理に関連して実行されるコンピュータプログラムを用いて実施されるロジックを示している。プロセスでは、作業空間に関するセッションへのログインが行われる（１５０１）。ログイン後、当該セッションに関する空間的イベントマップが、クライアント側ノードにダウンロードされる（１５０３）。クライアント側ノードは、空間的イベントマップを、クライアント側ノード上のスクリーン空間にマップするビューポート内のオブジェクト（イベントの図形ターゲット）に関して解析する（１５０５）。また、クライアント側ノードは、作成されたグループ、及び、そのグループ内のメンバーを識別するために、空間的イベントマップを解析する。グループファイルが、ローカルロジックと共に使用する目的と、他のノードから受け取ったメッセージで識別されたイベント及びクライアント側ノードでユーザ入力デバイスから受け取ったユーザ入力の解釈に使用するためにこの情報を維持する目的で、作成される（１５０７）。
【０１５３】
空間的イベントマップを解析することで生成された情報を用いて、クライアント側ノード上のスクリーン空間が描画され（１５０９）、その結果、ビューポート内に図形ターゲットが表示される。セッションの間、作業空間で実行されたイベントを識別するメッセージが、別のノードから受信される（１５１１）。クライアント側ノードは、そのメッセージで運ばれてきたイベントが、グループメンバーまたはグループに関連するかを判定し、関連する場合は、イベントの解釈にグループ規則を適用する（１５１３）。イベントが空間的イベントマップに追加され（１５１４）、スクリーン空間が必要に応じて更新された情報で描画される（１５０９）。また、グループファイルは、受信されたイベントに応答して必要に応じて更新される（１５１５）。本明細書で使用される用語であるグループ規則は、グループの全てのメンバーに適用される手続きを用いて動作を実行することを含む。
【０１５４】
図１６は、ストレージサブシステムで保存され、クライアント側ノードでローカルに生成された入力について、本明細書に記載のグループ処理に関連して当該クライアント側ノードによって実行されるコンピュータプログラムで実施されるロジックを示している。プロセスでは、作業空間に関するセッションへのログインが行われる（１６０１）。ログイン後、当該セッションに関する空間的イベントマップが、クライアント側ノードにダウンロードされる（１６０３）。クライアント側ノード上のロジックは、空間的イベントマップを、クライアント側ノード上のスクリーン空間にマップするビューポート内に位置を有するオブジェクト（イベントの図形ターゲット）であるスクリーン空間オブジェクトに関して解析する（１６０５）。また、クライアント側ノード上のロジックは、上述したように、グループに関して空間的イベントマップを解析し、グループファイルを作成する（１６０７）。
【０１５５】
空間的イベントマップを解析することで生成された情報を用いて、クライアント側ノード上のスクリーン空間が描画され、その結果、ビューポート内に図形ターゲットが表示される（１６０９）。セッションの間、タッチイベント、ジェスチャ、キーボード入力、マウス入力等の、クライアント側ノードにおいて生成されたユーザ入力が受信され、解釈される（１６１１）。クライアント側ノード上のロジックは、その入力がグループメンバーまたはグループに関連するかをグループファイルを用いて判定する。関連する場合は、入力の解釈にグループ規則が適用される（１６１３）。入力が解釈されると、メッセージが作成され、他のノードに送信される（１６１４）。また、クライアント側ノード上の空間的イベントマップは、必要に応じて更新される（１６１６）。
【０１５６】
イベントがスクリーン空間内の図形ターゲットに関連する場合、スクリーン空間は新しい情報を用いて再び描画される（１６０９）。クライアント側ノード上のロジックは、入力の解釈の後、必要に応じてグループファイルの更新も行う。
ＡＰＩ
【０１５７】
ソケット・リクエスト・サーバ（ＷｅｂＳｏｃｋｅｔ）―接続されると、関連データ（新しいストローク、カード、クライアント等）でクライアントを更新するために使用される。また、最初の接続ハンドシェイクを取り扱う。
【０１５８】
サービス・リクエスト・サーバ（ＨＴＴＰＳ／ＲＥＳＴ）―投稿データ（画像、カード等）だけでなくキャッシュ可能な応答に使用される。
【０１５９】
クライアント側ネットワークノードは、ＡＰＩに従って構成されており、対応するソケット・リクエスト・クライアント及びサービス・リクエスト・クライアントを備える。
【０１６０】
全てのメッセージは、個々のＵＴＦ−８で符号化されたＪＳＯＮ配列である。例えば、
[sender-id, message-type, ...]
●sender-id  メッセージを送信するクライアントのＩＤ、或いは、メッセージがサーバから生じた場合は“-1”。sender-idは、サーバに接続する全てのクライアント間で一意である。
●message-type  残りの引数及び意図された動作を識別するショートコード。
接続の確立
【０１６１】
クライアントは、環境に関する設定情報を検索するために、コンフィギュレーション・サービスを使用する。ソケット・サーバＵＲＬが、ws_collaboration_service_addressキーによって提供される。
１）ＷｅｂＳｏｃｋｅｔをオープンし、特定の作業空間に参加する
<collaboration_service_address>/<workspaceId>/socket?device=<device>array=<array_name>
●workspaceId（文字列）  参加する作業空間のＩＤ。
●device（文字列）  デバイスの種類。サポートされる値：壁、その他。
●array（文字列）  複数のスクリーンのインスタンスに関する識別子（任意）。
２）ロビー（lobby）に参加する
【０１６２】
ロビーによって、クライアントは、表示する特定の作業空間を知る前に、ウェブソケットをオープンできる。ロビーは、ユーザが自身の個人的なデバイス（デスクトップ／ｉＯＳ）から壁に作業空間を送信するのに使用する５桁のＰＩＮも提供する。
<collaboration_service_address>/lobby/socket?device=<device>&array=<array_name>
●device（文字列）  デバイスの種類。サポートされる値：壁、その他。
●array（文字列）  複数のスクリーンのインスタンスに関する識別子（任意）。
３）サーバ応答
【０１６３】
クライアントがサーバと新しいウェブソケット接続を確立すると、サーバは、最初に、一意的なクライアントＩＤを選択し、それを“ＩＤ”メッセージでクライアントに送信する。
４）メッセージ構造
【０１６４】
各メッセージ配列の最初の要素は、当該メッセージを発生したクライアントを指定するsender-idである。sender-idは、サーバ上の全てのセッション間で一意である。サーバからクライアントに送信される当該ＩＤ及びｃｒメッセージは、“-1”等のデフォルト値に設定されたsender-idを有する。各メッセージ配列の第２の要素は、２文字のコードである。このコードは、意図された動作と共に配列の残りの引数を定義する。-1のsender-idで送信されたメッセージは、サーバから発生したメッセージである。
メッセージタイプ
【０１６５】
以下のメッセージタイプは、公式にサポートされている。２０１３年春以降、可能な場合は、新しいトップレベルのメッセージタイプを追加する代わりにhe及びveを使う努力がなされてきた。
１）cs  セッション変更
２）echo  エコー
３）error  エラー
４）id  クライアントＩＤ
５）jr  部屋に参加する
６）rl  部屋リスト
７）un  取り消し（undo）
８）up  ユーザ許可
９）vc  ビューポート変更
１０）he  履歴イベント
１１）ve  一時的イベント
１２）disconnect  切断
１３）ls  リスト・ストリーム
１４）bs  ストリーム開始
１５）es  ストリーム終了
１６）ss  ストリーム状態
１７）oid  オブジェクトＩＤ予約
１）ｃｓ  セッション変更
【０１６６】
ディスプレイ配列で、作業空間が変更されたことをクライアントまたは兄弟（siblings）に通知する。サーバは、作業空間を壁に送信する要求を受信すると、このメッセージをクライアントに送信する。
// server --> client
[sender-id, "cs", workspaceId]
●sender-id  常に-1（サーバから生じたメッセージであることを示す）
●workspaceId（文字列）はスイッチする作業空間のＩＤ。
２）ｅｃｈｏ  エコー
【０１６７】
送信元クライアントに任意の本体部をエコーバックする。ソケット接続及びサーバは依然として健康であることを確認するために使用される。
// client --> server
[sender-id, "echo", "foo", "bar"...]
// server --> client
[-1, "echo", "foo", "bar"...]
【０１６８】
“エコー”の後に、メッセージは何らかの引数を持つことができる。これらの引数は全て、サービスとクライアントのソケット接続が健康（healthy）な場合、変更されずにクライアントへエコーバックされる。ソケットの健康を確認するエコーメッセージを使用する場合には、以下を推奨する。
●エコーメッセージの間は、少なくとも５秒待つ。
●２連続でエコーが失敗した場合にネットワークまたはサーバに問題があると考える。
【０１６９】
Ｃｈｒｏｍｅ及び他のサポートされているブラウザでのＷｅｂＳｏｃｋｅｔの現在の実装は、ネットワーク接続が切れている場合は、ｒｅａｄｙＳｔａｔｅを正しく変更しない、または、ｏｎＣｌｏｓｅを正しく起動しないため、このメッセージがプロトコルに追加された。
３）ｅｒｒｏｒ  エラー
【０１７０】
クライアントにサーバ側のエラーを通知する。
// server -> client
["-1", "error", target-id, message]
●target-id  エラーが影響するセッションのオブジェクトについてのＧＵＩＤである。
●message  エラーについてのメッセージ。
【０１７１】
このメッセージは、サーバによってのみ送信され、現在は、非同期処理の間にアップロードが失敗した際にのみ使用される。
４）ｉｄ  クライアントＩＤ
【０１７２】
クライアントがソケットに接続する際に、サーバがこのメッセージを送信する。クライアントは、次のソケット要求で使用するために割り振られたクライアントＩＤを保存することが求められる。
// server --> client 
["-1", "id", client-id]
●client-id（文字列）  新規に参加したクライアントのＩＤ。
５）ｊｒ  部屋に参加
【０１７３】
部屋は、クライアントが登録（subscribe to）できる通信チャネルである。ディスプレイ配列のために、或いは、潜在的に他のクライアントのグループのために、特定の作業空間（セッション）に関するチャネルが存在する。サーバは、イベントが当該部屋で生じた際に、特定の部屋に接続された全ユーザへ、メッセージを繰り返すまたは送信する。クライアントは、当該ディスプレイ配列または作業空間（セッション）のためのメッセージを得るために、部屋に参加する。部屋への参加要求には幾つかの種類がある。
一般的なｊｒ
【０１７４】
ＩＤが分かっていればどの部屋でも参加する。
// server <-- client
[sender-id, "jr", room-id, [data]]
●room-idには、ロビーと作業空間ＩＤの何れかを含むことができる。
●dataは、部屋を初期化するのに用いられる引数のワイルドカードの組み合わせである。
ロビーｊｒ
【０１７５】
ロビーチャネルに参加する。作業空間を表示しない一方で、ウェブソケットのオープンを維持したいクライアントによって使用される。
// server <-- client
[sender-id, "jr", "lobby"]
セッションｊｒ
【０１７６】
特定の作業空間（セッション）に関する部屋に参加する。
// server <-- client
[sender-id, "jr", "session", workspace-id]
●workspace-id  作業空間のＩＤ（作業空間）
配列ｊｒ
【０１７７】
特定のディスプレイ配列に関する部屋に参加する。
// server <-- client
[sender-id, "jr", "array", {
arrayId: "myArrayId",
x: 0,
y: 0,
width: 1920,
height: 1080
}]
●arrayId（文字列）  ディスプレイ配列のＩＤ
●x（整数）  このディスプレイのxオフセット
●y（整数）  このディスプレイのｙオフセット
●width（整数）  このディスプレイの幅
●height（整数）  このディスプレイの高さ
部屋への参加に対する応答：
【０１７８】
サーバは、成功した部屋参加（jr）メッセージに対して、部屋メッセージで応答する。
一般的な部屋
// server --> client
["-1", "room", [room-id], [databag]]
●room-idは、ロビーと作業空間の何れかを含む。
●databagは、変数の部屋特有のバグである。
ロビー部屋
// server --> client
["-1", "room", "lobby", {pin: pin-code}]
●pinは、壁認証のためのｐｉｎを含む。
セッション部屋
// server --> client
["-1","room","session",{"uid":"SU5DVpxbfnyGCesijBou","name":"Dec 16 Release","sharing_link":"https://portal.bluescape.com/sessions/1357/shares"}]``
●uid  作業空間のＩＤ
●name  クライアントで表示する作業空間の名称
●sharing_link  ユーザがこの作業空間を他人と共有できるポータルページへのリンク。
６）ｒｌ  部屋リスト
【０１７９】
クライアントに部屋のメンバーシップを通知する。部屋のメンバーシップは、当該クライアントと同じ部屋を訪れているクライアントに関する情報を含む。
// server --> client
["-1", "rl", roomMembershipList]
●roomMembershipList（部屋のメンバーシップオブジェクトの配列）
部屋のメンバーシップオブジェクトは、以下のキーを持つハッシュである。
●name  ユーザまたはデバイス名
●device_type（廃止予定）  ユーザが接続しているデバイスの種類、現在のところは壁またはその他。
●clientId  このデバイスのクライアントＩＤ
●clientType  クライアントの種類（ブラウザ、ｉＰａｄ、壁）
●ビューポート（任意）  クライアントがviewport-rectを提供すると、サーバは、それを全クライアントにリピートする。
７）ｕｎ 取り消し（undo）
【０１８０】
直近の取消可能な動作（移動、テキスト設定、ストローク等）を取り消す。
// server <-- client
[sender-id, "un", region-id]
// server --> client
[client-id, 'undo', target-id, removedEventId]
取消例：ウィンドウを移動し、その後、当該移動を取り消す。
【０１８１】
以下の例では、移動、及び、その移動の取り消し方法を示す。
// Client sends move
["5122895cff31fe3509000001","he","5122898bff31fe3509000002","position",{
"rect":[257,357,537,517],
"order":2
}]
// Server response
["5122895cff31fe3509000001","he","5122898bff31fe3509000002","5122898efde0f33509000008","position",{
"rect":[257,357,537,517]
,"order":2
}]
// Client sends undo [<clientId>, 'un', <canvasRegionId>]
["5122895cff31fe3509000001","un",null]
// Server response
// [<clientId>, 'undo', <targetId>, <removedMessageId>]
["-1","undo","5122898bff31fe3509000002","5122898efde0f33509000008"]
【０１８２】
サーバは、作業空間履歴から履歴イベントを削除し、部屋に登録している全クライアントに、この記録はもはや作業空間の履歴の時系列の一部ではないことを通知する。ＨＴＴＰ  ＡＰＩを介したその後の履歴要求には、（やり直し（redo）を実施するまで）取消イベントを含まない。
８）ｕｐ  ユーザ許可
【０１８３】
現在のユーザがこの作業空間に関して持っている許可を得る。クライアントが特定のユーザに関してエージェントとしてふるまっている時にのみ関連し、パブリックキー認証（壁）を用いている時は関連しない。
// server --> client
[sender-id, "up", permissions]
●許可  認証されたユーザが許可を有しているかを示す、許可タイプのハッシュ及び真／偽。現在のところ、唯一の許可は、作業空間を他人と共有することのできるユーザを示す“can_share”である。
９）ｖｃ  ビューポート変更
【０１８４】
１つのクライアントのビューポートが変更されたことをセッション内の他のクライアントに教える。これは、“ユーザのビューへジャンプ”及び“フォロー・ミー”特徴をサポートするよう設計されている。クライアントは、最初にセッションに入った時に、ＶＣを送信する。これにより、他のクライアントがそれらの動きをフォローすることができる。入ってくるＶＣイベントを処理する際に、クライアントは、クライアントＩＤでキー付けされたビューポートのキャッシュを保持しなければならない。これは、ビューポートを失った部屋リストメンバーシップ（ｒｌ）イベントが、関連するＶＣイベントの後に到達する場合の状況に対処するためである。ターゲットビューポートの変更されたターゲットビューポートへの変化には、１または他方或いは両方の寸法におけるビューポートのサイズの変更を含み、当該変更はビューポートの縦横比を維持しない。ターゲットビューポートの変更はまた、ビューポートのページ拡大における変更も含む。“ユーザのビューへジャンプ”及び“フォロー・ミー”モードにおけるサブジェクトクライアント側ビューポートが最初の“ｖｃ”記録を受け取る時、それは、サブジェクトクライアント側ビューポートの表示可能領域をターゲットビューポートの領域に対してマッピングするための命令である。続く“ｖｃ”記録によって、サブジェクトクライアント側ビューポートの表示可能領域が、ターゲットビューポートに対して再マッピングされる。“ユーザのビューへジャンプ”及び“フォロー・ミー”特徴が使用不可の時、サブジェクトクライアント側ビューポートは、その前のウィンドウに戻る。
// server <--> client
[sender-id, "vc", viewport-rect]
●viewport-rect  送信クライアント上で視認可能な作業空間のセクションを表す形式[x1, y1, x2, y2]における配列
１０）ｈｅ 履歴イベント
【０１８５】
履歴イベントは、データベースに永続的に保持されるデータの要素である。視覚的作業空間を再作成するのに必要な情報は、heメッセージを介して共同サービスに送信される。
例：
●ノート、画像、その他のウィジェットの作成
●ウィジェットの移動
●ウィジェット（ノートテキスト、マーカ位置）の属性の設定または更新
●ウィジェットの削除
【０１８６】
サーバは履歴イベントを受信すると、以下を行う。
●イベントに一意的なＩＤを割り当てる。
●イベントをデータベースに永続的に保持する。
●イベントをそのＩＤと共に、作業空間に接続された全クライアントに放送する。
履歴イベントの基本メッセージ形式
// server <-- client
[client-id, "he", target-id, event-type, event-properties]
●client-id（文字列）  送信元クライアントのＩＤ
●target-id（文字列）  このイベントが関連するターゲットのオブジェクト／ウィジェット／アプリのＩＤ
●event-type（文字列）  任意のイベントタイプ
●properties（オブジェクト）  イベントの関連するキー／値を記述するＪＳＯＮオブジェクト
○regionId（文字列）  オブジェクトがキャンバス領域に作成された場合のキャンバス領域識別子（任意。クライアントによって送信された履歴イベントに含まれていた場合、含まれる）
【０１８７】
メッセージに含まれる全てのプロパティはサーバに保存され、クライアントにエコーバックされる。それらはまた、ＨＴＴＰで送信された履歴にも含まれる。
// server --> client
[client-id, "he", target-id, event-id, event-type, event-properties]
●client-id（文字列）  送信元クライアントのＩＤ
●target-id（文字列）  このイベントが関連するターゲットウィンドウのＩＤ
●event-id（文字列）  データベース内のイベントのＩＤ
●event-type（文字列）  任意のイベントタイプ
●properties（オブジェクト）  イベントの関連するキー／値を記述するＪＳＯＮオブジェクト
○regionId（文字列）  オブジェクトがキャンバス領域に作成された場合のキャンバス領域識別子（任意。クライアントによって送信された履歴イベントに含まれていた場合、含まれる）
バッチ履歴イベント
【０１８８】
密結合イベントの順序を確実にするために、イベントペイロードをイベントペイロードの配列となるように変更することで、多くがバッチメッセージで送信される。
// server <‐‐ client
[client‐id, "bhe", [event1, event2,event3,event4]]
【０１８９】
この場合、各イベントは、標準ウェブソケット履歴メッセージであるパケット送信である。
イベント構造は、以下の通りである。
[targetId, eventType, props]
【０１９０】
したがって、clientId部分は繰り返されないが、他の全ては標準イベントとして繰り返される。
現在の履歴イベントタイプ
●create  作業空間にウィジェットを追加する。
●delete  作業空間からウィジェットを削除する。
●position  作業空間内のウィジェットのサイズまたは位置を更新する。
●template  カードテンプレート（背景色）を変更する。
●membership  ターゲットチルドレンを更新。グループに使用される。
●pin  ウィジェットをピンで止める、または、ウィジェットからピンを外す。
●stroke  ウィジェットにペン、または、消しゴムのストロークを追加する。
●text  ノートのテキスト及び／またはテキスト形式を設定または更新する。
●markercreate  位置マーカを作成する。
●markermove  既存の位置マーカを移動する。
●markerdelete  既存の位置マーカを削除する。
●tsxappevent  ウェブブラウザ等のtsxウィジェットの作成、削除、更新に使用される。
●navigate  グループ文書（ＭＳdocs/ＰＤＦ）内の異なるページにナビゲートするために使用される。
ウィジェット及び履歴イベントの表
2018525716.tif 000003
【０１９１】
＊ブラウザクライアントは、これらのメッセージの代替版の受信をサポートしているが、他のクライアントへは送信しない。†共同システムによってサポートされているが、現在どのクライアントにもサポートされていない。
履歴イベント詳細
コメント
コメントは、履歴データベースに保存されるが、平面上の位置ではなく、特定のオブジェクトと関連付けられる。
// client ‐‐> server
[client‐id, "he", target‐id, "create", {
"id":"5123e7ebcd18d3ef5e000001",
"type":"comment",
"text":"text of the comment",
"parent":"5123e7ebcd18d3ef5e000000"}]
サーバは、プロパティオブジェクトへのコメントの本体部に“名称”を付け加える。親プロパティは任意であり、ＩＤである。
[client‐id, "he", comment‐id, "delete"}]
[client‐id, "he", comment‐id, "text", {"text":"text of the comment"}]
作成
【０１９２】
クライアントは、共同サーバに“create”を送信して、作業空間にウィジェットを追加する。“create”メッセージに関して、target-idは、含まれる要素のＩＤであり、通常は作業空間ＩＤである。
典型的なウィジェットの作成例
// client --> server
[client-id, "he", workspace-id, "create", {
"id":"5123e7ebcd18d3ef5e000001",
"type":"widget",
"regionId":null
}]
●プロパティ
○id（文字列）  ウィジェットの一意的な識別子
○type（文字列）  ウィジェットのタイプ
○regionId（文字列）  オブジェクトがキャンバス領域に作成された場合、当該キャンバス領域
【０１９３】
たいていのウィジェットは、通常は矩形及び順序だが潜在的にはポイントまたは他の表現である位置プロパティも有する。
カード作成例
// client --> server
[client-id, "he", workspace-id, "create", {
"id":"5123e7ebcd18d3ef5e000001",
"baseName":"sessions/all/Teal",
"ext":"JPEG",
"rect":[-1298,-390,-1018,-230],
"actualWidth":560,
"actualHeight":320,
"order":4,
"type":"note",
"regionId":null,
"hidden":false,
"text":"some text for the note",
"styles": {
"font-size" : "42px",
"font-weight" : "400",
"text-transform" : "inherit"
}
}]
●プロパティ
○id（文字列）  ウィンドウの一意的な識別子
○baseName（文字列）  背景画像のファイル名
○ext（文字列）  背景画像ファイルの拡張子
○rect（オブジェクト）  ウィンドウの位置
○actualWidth（整数）  画素単位での背景画像の幅
○actualHeight（整数）  画素単位での背景画像の高さ
○order（整数）  ｚオーダー
○type（文字列）  テキストを有するオブジェクトの場合“ノート”であり、他のオブジェクトの場合“画像”となる。
○regionID（文字列）  オブジェクトがキャンバス領域に作成された場合、当該キャンバス領域
○hidden（ブール値）  ウィンドウが現在隠れているか否か
○text（文字列）  ノートに含まれるテキスト（任意）
○styles（オブジェクト）  ノートに含まれるテキストのスタイル（任意）
ＰＤＦ作成例
// server --> client
[client-id,
"he",
target-id,
event-id,
"create",
{"type":"pdf",
"id":"5307ec25a294d9250bf65fce",
"assetPath":"sessions/objects/s7t6mNHxfpqWxAYqYXLF/5307ec25a294d9250bf65fce.pdf",
"rect":[1770,284,2994,1076],
"actualWidth": 1224,
"actualHeight": 792,
"filename":"5617_FSPLT1_018078.pdf",
"title":"Record of Decision",
"hidden":false,
"pin":false
"pages":73}]
●プロパティ
○type（文字列）  “ＰＤＦ”
○id（文字列）  ＰＤＦの一意的な識別子
○assetPath（文字列）  アセットサーバ上のこのアセットの位置。アセット・ベース・パスを得るためのコンフィギュレーション・サービスを使用する。
○rect（オブジェクト）  作業空間内のウィンドウの位置
○actualWidth（整数）  “バウンディングボックス（bounding box）”を作るために、actualHeightと組み合わせられる、ＰＤＦ内で最も横方向に長い頁の幅
○actualHeight（整数）  “バウンディングボックス（bounding box）”を作るために、actualWidthと組み合わせられる、ＰＤＦ内で最も縦方向に長い頁の高さ
○filename（文字列）  ＰＤＦの元のファイル名
○order（整数）  ｚオーダー
○hidden（ブール値）  ウィンドウが現在隠れているか否か
○pin（ブール値）  ＰＤＦが作業空間上のある位置にピン止めされているか否か
○regionId（文字列）  オブジェクトがキャンバス領域に作成された場合、当該キャンバス領域（任意）
グループ作成例（上記参照）
典型的なグループ位置の例（上記参照）
メンバーシップ（上記参照）
グループ文書作成例（上記参照）
プレゼンテーション作成例
// client ‐‐> server
[client‐id,
"he",
target‐id,
"create",
{"type":"presentation",
"id":"53a52b39250f62fce",
"children": []}]
●プロパティ
○type（文字列）  “プレゼンテーション”
○id（文字列）  グループの一意的な識別子
○children（配列）  プレゼンテーションの順にプレゼンテーションの一部となるウィジェットのtarget-idの配列
プレゼンテーション作成例
// server ‐‐> client
[ client‐id,
"he",
target‐id, // presentation id
event‐id,
"create",
{
"type":"presentation",
"children": [
"id0398749123",
"id1838094221",
"id2849239042",
"id3849012830"]}]
●プロパティ
○type（文字列）  “プレゼンテーション”
○children（配列）  チャイルド（ページ）オブジェクトＩＤの配列。配列の順序はチャイルド（ページ）の順序を表す。
削除
【０１９４】
作業空間からウィジェットを削除する。
// server <-- client
[client-id, "he", target-id, "delete", {"hidden":true}]
// server --> client
[client-id, "he", target-id, event-id, "delete", {"hidden":true}]
位置
移動、フリング、リサイズ等の後、ウィジェットの位置を保存するために使用される。
典型的なウィジェット位置の例
// server <-- client
[client-id, "he", target-id, "position", {new-position}]
// server --> client
[client-id, "he", target-id, event-id, "position", {new-position}]
●プロパティ
○new-position（オブジェクト）  オブジェクトの新しい位置を表す方法。ウィンドウの例を参照。
典型的なウィンドウ位置の例
// server <-- client
[client-id, "he", target-id, "position", {"rect":[-1298,-390,-1018,-230],"order":4}]
// server --> client
[client-id, "he", target-id, event-id, "position", {"rect":[-1298,-390,-1018,-230],"order":4}]
●プロパティ
○rect（オブジェクト）  ターゲットウィンドウの位置。ｘ１，ｙ１，ｘ２，ｙ２と規定される。
○order（整数）  ターゲットウィンドウのｚオーダー
テンプレート
【０１９５】
ノートのテンプレートを変更するために用いられる。これにより、背景色を変更できる。
ノートのテンプレート例
// server --> client
[client-id, "he", workspace-id, event-id, "template", {"baseName": "sessions/all/Beige"}]
●プロパティ
○baseName（文字列）  新しい背景のファイル名。ファイルは、既に共同サーバ上にある。テンプレートの一覧は、/card_templates.jsonにおけるＨＴＴＰプロトコルを介して利用可能である。
【０１９６】
ウィジェットをピン止めして、ユーザがそのウィジェットを移動またはリサイズすることを防止するために使用される。既存のピンの削除にも使用される。
典型的なウィジェット位置の例
// server --> client
[client-id, "he", workspace-id, event-id, "pin", {"pin": true}]
●プロパティ
○pin（ブール値）  真の場合ピン止めされ、偽の場合ピン止めされていない。
ストローク
【０１９７】
ウィジェットまたは作業空間背景にストロークを追加するために使用される。
典型的なストロークの例
// server <-- client
[client-id, "he", target-id, "stroke", {
"size": 10,
"brush": 1,
"color": [255, 153, 0, 1],
"locs": [850, 616, 844, 617],
"regionId": 59.1
}]
// server --> client
[client-id, "he", target-id, event-id, "stroke", {
"size": 10,
"brush": 1,
"color": [255, 153, 0, 1],
"locs": [850, 616, 844, 617],
"regionId": 59.1
}]
●プロパティ
○size（整数）  含まれるオブジェクトの座標空間を用いるストロークの大きさ。ウィジェット上のストロークは、自身の親のウィジェット空間でサイズ指定されるのに対し、キャンバス上のストロークはワールドスペースでサイズ指定される。
○brush（整数）  ストロークを描画する際に用いるブラシタイプ。１は線描（draw）ブラシ、２は削除ブラシ。
○color（数）  ストロークの色に対するr/g/b/aの値。削除ストロークに対しては（依然として存在はするものの）無視される。
○locs（配列）  座標が配列においてペアになる［ｘ，ｙ，ｘ，ｙ，ｘ，ｙ，...］場合の、フォーマットにおけるストローク位置：［１０，１，１０，２，１２，３］。サイズと同様に、位置は、含まれるオブジェクトの座標空間内にある。
○regionId（文字列）  ストロークがキャンバス領域に作成された場合、当該キャンバス領域（任意）
【０１９８】
描画の注釈：ストロークは、当該ストロークの最初と最後の点上に夫々中心があるエンドキャップで描画される。エンドキャップの大きさは、ブラシサイズと同じである。エンドキャップの描画は、各クライアントの役割（responsibility）である。
テキスト
【０１９９】
ウィジェット上のテキストとテキストのスタイルを設定する。テキストの属性とスタイルの属性は任意である。
典型的なテキスト例
// server <-- client
[client-id, "he", target-id, "text", {
"text" : "abcdef",
"styles" : {"font-size" : "42px","font-weight" : "400","text-transform" : "inherit"}
}]
// server --> client
[client-id, "he", target-id, event-id, "text", {
"text" : "abcdef",
"styles" : {
"font-size" : "42px",
"font-weight" : "400",
"text-transform" : "inherit"
}
}]
●プロパティ
○text（文字列）  ウィジェット上に表示するテキスト文字列
○styles（ハッシュ）  テキストに適用するｃｓｓスタイル
マーカ作成
【０２００】
作業空間内の特定の場所に位置マーカ（地図マーカ、ウェイポイント）を作成する。
例
// server <-- client
[client-id, "he", new-widget-id, "markercreate",{
"creationTime":1387565966,
"name":"my marker",
"y":1828,
"x":-875,
"color":0
}]
// server --> client
[client-id, "he", new-widget-id, event-id, "markercreate",{
"creationTime":1387565966,
"name":"my marker",
"y":1828,
"x":-875,
"color":0
}]
●プロパティ
○creationTime（整数）  作成時刻（ＵＮＩＸ時間）
○name（文字列）  位置マーカのラベル
○y（数値）  マーカのｙ位置
○ｘ（数値）  マーカのｘ位置
○template（文字列）  マーカテンプレート名
ブラウザクライアントによって受け入れられる代替フォーム
// server <-- client
[client-id, "he", session-id, "create",{
"id":"52b0f86ac55697ad30003b21"
"type":"locationMarker",
"creationTime":1387565966,
"name":"my marker",
"y":1828,
"x":-875,
"template":"red"
}]
// server --> client
[client-id, "he", session-id, event-id, "create",{
"id":"52b0f86ac55697ad30003b21"
"type":"locationMarker",
"creationTime":1387565966,
"name":"my marker",
"y":1828,
"x":-875,
"template":"red"
}]
マーカ移動
【０２０１】
作業空間において、既存の位置マーカ（マップマーカ、ウェイポイント）を新しい場所に移動させる。
例
// server <-- client
[client-id, "he", marker-id, "markermove",{
"y":1828,
"x":-875,
}]
// server --> client
[client-id, "he", marker-id, event-id, "markermove",{
"y":1828,
"x":-875,
}]
●プロパティ
○ｙ（数値）  マーカのｙ位置
○ｘ（数値）  マーカのｘ位置
ブラウザクライアントによって受け入れられる代替フォーム
// server <-- client
[client-id, "he", target-id, "position",{
"y":1828,
"x":-875,
}]
// server --> client
[client-id, "he", target-id, event-id, "position",{
"y":1828,
"x":-875,
}]
マーカ削除
【０２０２】
既存の位置マーカを削除する。
例
// server <-- client
[client-id, "he", marker-id, "markerdelete",{}]
// server --> client
[client-id, "he", marker-id, event-id, "markerdelete",{}]
ブラウザクライアントによって受け入れられる代替フォーム
// server <-- client
[client-id, "he", target-id, "delete",{
"hidden":true,
}]
// server --> client
[client-id, "he", target-id, event-id, "delete",{
"hidden":true,
}]
ｔｓｘａｐｐｅｖｅｎｔ
【０２０３】
TSXappeventは、ＴＳＸシステム上の種々のウィジェットに履歴イベントを送信する。
例
// server <-- client
[client-id, "he", target-id, "tsxappevent",{
"payload":
{
additional-properties
},
"messageType":message-type,
"targetTsxAppId":tsx-app-id
}]
// server --> client
[client-id, "he", target-id, event-id, "tsxappevent",{
"payload":
{
additional-properties
},
"messageType":message-type,
"targetTsxAppId":tsx-app-id
}]
●プロパティ
○payload（オブジェクト）  このtsxappeventに必要なプロパティ
○messageType（文字列）  メッセージのタイプ
ウェブブラウザ作成例
// server <-- client
[client-id,"he",new-browser-id,"tsxappevent",{
"payload":{
"y":709,
"x":1517,
"worldSpaceWidth":800,
"worldSpaceHeight":600,
"windowSpaceWidth":800,
"windowSpaceHeight":600,
"version":1,
"url":"http://www.google.com/",
"order":735880
},
"messageType":"createBrowser",
"targetTsxAppId":"webbrowser"
}]
// server --> client
[client-id,"he",new-browser-id, event-id, "tsxappevent", {
"payload":{
"y":709,
"x":1517,
"worldSpaceWidth":800,
"worldSpaceHeight":600,
"windowSpaceWidth":800,
"windowSpaceHeight":600,
"version":1,
"url":"http://www.google.com/",
"order":735880
},
"messageType":"createBrowser",
"targetTsxAppId":"webbrowser"
}]
●プロパティ
○payload（オブジェクト）  ブラウザの作成に必要とされる詳細
■x（数値）  マーカのｘ位置
■y（数値）  マーカのｙ位置
■worldSpaceWidth（数値）  ワールドスペース内の幅
■worldSpaceHeight（数値）  ワールドスペース内の高さ
■windowSpaceWidth（数値）  ウィンドウ空間内の幅
■windowSpaceHeight（数値）  ウィンドウ空間内の高さ
■version（数値）  ＃ＴＯＤＯ
■url（数値）  このブラウザウィジェットは、当該ＵＲＬで、ブラウザを作成するためのmessageType＊（文字列）“createBrowser”、ウェブ・ブラウザ・ウィジェットのためのtargetTsxAppId＊（文字列）“webbrowser”を指す。
ウェブブラウザを削除する例
// client --> server
[client-id,"he",target-id,"tsxappevent",{
"messageType":"deleteBrowser",
"targetTsxAppId":"webbrowser",
"payload":{"version":1}
}]
ナビゲート
【０２０４】
ペイロード内の異なるアイテムにナビゲートする例。例えば、これは、ＵＲＬにナビゲートするブラウザウィジェットに使用されるかもしれない。
[
client‐id,
"he",
target‐id, //Group/presentation or maybe Browser URL ID
"navigate",
payload // navigate to this page
]
１１）ｖｅ  一時的イベント
【０２０５】
一時的イベントはデータベースには記録されないため、スクリーンの方々でカードをドラッグする等の進行中のストリームイベントに有効であり、ユーザが指を持ち上げると、履歴イベントはその最後の場所を記録するのに使用される。
一時的イベントの基本メッセージフォーマット
// server <--> client
[client-id, "ve", target-id, event-type, event-properties]
●client-id（文字列）  送信元のクライアントのＩＤ
●target-id（文字列）  このイベントが関連するターゲットウィンドウのＩＤ
●event-type（文字列）  任意のイベントタイプ
●properties（オブジェクト）  イベントの関連するキー／値を記述するＪＳＯＮオブジェクト
現時点の一時的イベントタイプ
●sb  新しいストロークを開始する。
●sc  前に開始されたストロークを続ける。
●se  ストロークを終了する。
●position  永続的でない他のクライアントと位置を共有するために使用される。例えば、リアルタイムでドラッグされているウィンドウを示す。
●bf  フォロー開始：ユーザＡがユーザＢへのフォローを開始する。ユーザＢがフォローしていることをユーザＡに通知するために使用される。
●ef  フォロー終了：ユーザＢがもうユーザＡをフォローしていない。ユーザＢがもうフォローしていないことをユーザＡに通知するために使用される。
ウィジェットタイプによる一時的イベント
2018525716.tif 000004
作業空間
●sb  ストロークを開始する。一のクライアントでストロークを描画しつつ、それらを別のクライアント上でも描画するために使用する。
●sc  以前に開始したストロークを、ストロークに含めるべき別の点を与えることにより継続する。ストロークを描画しつつ、それが別のクライアント上で描画されるために使用する。
●se  以前に開始したストロークを終了する。
●bf  フォロー開始：ユーザＡがユーザＢへのフォローを開始する。ユーザＢがフォローしていることをユーザＡに通知するために使用される。
●ef  フォロー終了：ユーザＢがもうユーザＡをフォローしていない。ユーザＢがもうフォローしていないことをユーザＡに通知するために使用される。
ノート
●position  別のユーザによって移動中のノートの位置を自動更新する。
●sb  ストロークを開始する。一のクライアントでストロークを描画しつつ、それが別のクライアント上で描画されるために使用する。
●sc  以前に開始したストロークを、ストロークに含めるべき別の点を与えることにより継続する。ストロークを描画しつつ、それが別のクライアント上で描画されるために使用する。
●se  以前に開始したストロークを終了する。
画像
●position  別のユーザによって移動中の画像の位置を自動更新する。
●sb  ストロークを開始する。一のクライアントでストロークを描画しつつ、それが別のクライアント上で描画されるために使用する。
●sc  以前に開始したストロークを、ストロークに含めるべき別の点を与えることにより継続する。ストロークを描画しつつ、それが別のクライアント上で描画されるために使用する。
●se  以前に開始したストロークを終了する。
一時的イベントの詳細
【０２０６】
以下のフィールドは幾つかの一時的イベントのプロパティである。
●stroke-id   stroke-idはクライアントによって選択される。現在のところ、それらは、ドットによって区切られた増加する整数で構成されたsender-idである。これは、全てのクライアント間におけるサーバコンテクスト内でそれを一意にするためである。
●target-id  ストロークは、作業空間内の特定のターゲット（コンテナ）に貼りつけられることがある。ウィジェットに属するストロークの場合、ターゲットＩＤフィールドは、ウィジェットのＩＤを含む。作業空間内の主キャンバスに向かうストロークは、それらのターゲットＩＤを作業空間ＩＤと同じにすることによって指定される。
位置−ｖｅ
【０２０７】
作業空間内でのウィンドウ移動の途中ステップを放送するために使用される。
典型的な位置の例
// server <--> client
[client-id, "ve", target-id, "position", {position-info}]
●プロパティ
〇position-info  ウィジェットの新しい位置についての情報
ウィンドウ位置の例
// server <--> client
[client-id, "ve", target-id, "position", {"rect":[-1298,-390,-1018,-230],"order":4}]
●プロパティ
〇rect（オブジェクト）  ターゲットウィンドウの位置
〇order（整数）  ターゲットウィンドウのｚオーダー
ｓｂ
【０２０８】
ストロークの開始を他のクライアントに放送するために使用される。
// server <--> client
[client-id, "ve", target-id, "sb",{
"brush":1,
"size":2,
"color":[214,0,17,1],
"x":100,
"y":300,
"strokeId":"395523d316e942b496a2c8a6fe5f2cac"
}]
●プロパティ
○x, y（整数）  このストロークの開始ポイント
○strokeId（文字列）  新しいストロークのＩＤ
ｓｃ：
【０２０９】
ストロークＩＤによって特定されるストロークを継続する。
// server <--> client
[client-id, "ve", target-id, "sc", {"x":100, "y":300, "strokeId":"395523d316e942b496a2c8a6fe5f2cac"}]
●プロパティ
○x, y（整数）  ストロークの新しい終了ポイント
○strokeId（文字列）  新しいストロークのＩＤ
ｓｅ：
【０２１０】
ストロークＩＤにより特定されるストロークを終了する。
// server <--> client
[client-id, "ve", target-id, "se", {"strokeId":"395523d316e942b496a2c8a6fe5f2cac"}]
●strokeId（文字列）  継続されたストロークのＩＤ
ｂｆ：
【０２１１】
フォロー開始：ユーザＡがユーザＢへのフォローを開始する。ユーザＢがフォローしていることをユーザＡに通知するために使用される。このグローバルな一時的イベントに関しては、ターゲットＩＤは、セッションＩＤである。フォローされているユーザは、ユーザＢがフォローしていることを示すためにＵＩを更新する。
// server <‐‐> client
[follower‐client‐id, "ve", session‐id, "bf", {"clientId":"395523d316e942b496a2c8a6fe5f2cac"}]
●プロパティ
○clientId（文字列）  フォローされているクライアントのＩＤ
ｅｆ：
【０２１２】
フォロー終了：ユーザＢがもうユーザＡをフォローしていない。ユーザＢがもうフォローしていないことをユーザＡに通知するために使用される。このグローバルな一時的イベントに関しては、ターゲットＩＤは、セッションＩＤである。フォローされているユーザは、ユーザＢがもうフォローしていないことを示すためにＵＩを更新する。ユーザＢがセッションを離れると、ユーザＡはユーザＢを含まない部屋リストメッセージを受信する。次に、ユーザＡの部屋リストは再構築され、ユーザＢをフォロワーとしては表示しない。
// server <‐‐> client
[follower‐client‐id, "ve", session‐id, "ef", {"clientId":"395523d316e942b496a2c8a6fe5f2cac"}]
●プロパティ
○clientId（文字列）  もはやフォローされていないクライアントのＩＤ
対話の例：オブジェクト移動
【０２１３】
履歴イベント／一時的イベント関連の変更の幾つかを示す良い例が、オブジェクトの移動である。オブジェクトがドラッグによって移動／リサイズされる間、一連の一時的イベント（ＶＥ）はサーバに送信され、作業空間に登録されている全てのクライアントに再放送される。
// client sends the following volatile events during the move
// client->server format is: [<clientId>, <messageType>, <targetId>, <eventType>, <messageProperties>]
["511d6d429b4aee0000000003","ve","511d6f9c9b4aee0000000039","position",{
"rect":[-493,73,-2,565],
"order":0
}]
["511d6d429b4aee0000000003","ve","511d6f9c9b4aee0000000039","position",{
"rect":[-493,73,-2,565],
"order":0
}]
["511d6d429b4aee0000000003","ve","511d6f9c9b4aee0000000039","position",{
"rect":[-538,91,-47,583],
"order":0
}]
["511d6d429b4aee0000000003","ve","511d6f9c9b4aee0000000039","position",{
"rect":[-538,91,-47,583],
"order":0
}]
【０２１４】
ユーザがオブジェクトの移動を終了すると、クライアントが履歴イベントを送信し、オブジェクトの矩形及び順序を特定する。
["511d6d429b4aee0000000003","he","511d6f9c9b4aee0000000039","position",{
"rect":[-492,73,-1,565],
"order":0
}]
【０２１５】
サーバは、新しく永続的に保持されたhe記録で応答する。尚、当該記録のイベントＩＤが含まれることに留意する。
// server-> client format of 'he' is: [<clientId>, <messageType>, <targetId>, <eventId>,
//                                   <eventType>, <messageProps>]
["511d6d429b4aee0000000003","he","511d6f9c9b4aee0000000039","511d9165c422330000000253","position",{
"rect":[-492,73,-1,565],
"order":0
}]
注：イベントＩＤは、ＨＴＴＰ  ＡＰＩを介してフェッチされる履歴にも含まれる。
【０２１６】
グループのリサイズによって、異なる大きさの“rect”を示す“he”記録が生成される。例えば、作業空間内のグループのサイズを倍にするためには、
["<clientId>","he","<targetId>","<eventId>","position",{"rect":[0,0,1,1], "order":0}];
の最初の記録を、
["<clientId>","he","<targetId>","<eventId>","position",{"rect":[0,0,2,2], "order":0}]
に変更する。
１２）ｄｉｓｃｏｎｎｅｃｔ  切断
【０２１７】
接続のクローズ及び再接続の試みの中止を行うために、同じユーザによってオープンされた他のアプリのインスタンスを通知する。これは、２つのタブが同じ作業空間内でオープンされている場合に見られる“慌ただしい（frantic）再接続”の問題を避けるために、ブラウザクライアントによって処理（consume）される。
// server --> client
[-1, "disconnect"]
１３）ｌｓ  リストストリーム
【０２１８】
クライアントにリスト内の現在のストリームについて通知する。部屋リストと同様に、他のイベントによって起動される。
// server ‐‐> client
[send‐id, "ls", [Stream List for Session]]
●sender-id  常に−１（サーバがメッセージの送信元であることを示す）。
ストリームリストは、オブジェクトの配列であり、オブジェクトの夫々は、以下のフィールドを含む。
●sessionId（文字列）は、会議（conference）を含む作業空間のＩＤである。
●conferenceId（文字列）  この作業空間内の全ユーザが接続する会議セッションのＩＤ
●clientId（オブジェクトＩＤ）  この特定のストリームを放送するクライアントのＩＤ
●streamId（文字列）  この特定のＡＶストリームのＩＤ
１４）ｂｓ  ストリーム開始
【０２１９】
サーバに、新しいＡＶストリームが開始したことを通知する。サーバは、リスト・ストリーム・メッセージで応答する。
// server <‐‐ client
[sender‐id, "bs", conferenceId, conferenceProvider, streamId, streamType]
●sender-id  ストリームを開始するユーザのクライアントＩＤ
●conferenceId（文字列）  この作業空間内の全ユーザが接続する会議セッションのＩＤ
●conferenceProvider（文字列）  例えばＴｏｋＢｏｘやＴｗｉｌｉｏといった、会議のタイプ
●streamId（文字列）  この特定のＡＶストリームのＩＤ
●streamType（文字列）  音声または映像またはScreenShare
１５）ｅｓ  ストリーム終了
【０２２０】
サーバに新しいＡＶストリームが終了したことを通知する。サーバは、リスト・ストリーム・メッセージで応答する。
// server <‐‐ client
[sender‐id, "es", conferenceId, streamId]
●sender-id  ストリームを開始したユーザのクライアントＩＤ
●conferenceId（文字列）  この作業空間内の全ユーザが接続する会議セッションのＩＤ
●streamId（文字列）  この特定のＡＶストリームのＩＤ
１６）ｓｓ  ストリーム状態
【０２２１】
サーバに既存のＡＶストリームの状態が変化したことを通知する。サーバは、リスト・ストリーム・メッセージで応答する。
// server <‐‐ client
[sender‐id, "ss", streamId, streamType]
●sender-id  ストリームを開始したユーザのクライアントＩＤ
●streamId（文字列）  この特定のＡＶストリームのＩＤ
●streamType（文字列）  音声または映像またはScreenShare
１７）ｏｉｄ  オブジェクトＩＤの予約
【０２２２】
オブジェクトを作成する新しい履歴イベントを生成するのにふさわしい新しい一意的なオブジェクトＩＤを作成するために、これを用いる。
```javascript
// server <-- client
[sender-id, "oid"]
サーバは以下で応答する。
// server --> client
["-1", 'oid', <new-object-id>]
【０２２３】
上述のＡＰＩはメッセージ構造の一例である。他の構造も、特定の実施例に適した形で同様に利用してもよい。
【０２２４】
本明細書中において、一項目の情報の“識別”は、情報の当該項目について直接の特定を必ずしも必要とするものではない。情報は、１または複数の間接レイヤーを介した実際の情報を単に参照することによって、或いは、組み合わせることで情報の実際の項目を判断するのに十分となる異なる情報の１または複数の項目を識別することによって、フィールド内で“識別”され得る。加えて、用語“示す（indicate）”は、本明細書中において“識別する（identify）”と同じ意味で用いられる。
【０２２５】
また、本明細書中において、所定の信号、イベント又は値は、先行する信号、イベント又は値が当該所定の信号、イベント又は値に影響を与えるものであれば、当該先行する信号、イベント又は値に“応答”する。さらに、介在する処理要素、ステップ又は期間があるときも、当該所定の信号、イベント又は値は、先行する信号、イベント又は値に“応答”する。介在する処理要素又はステップが１を超える信号、イベント又は値を組み合わせる場合、当該処理要素又はステップの信号出力は夫々の信号、イベント又は値入力に対して“応答”すると考えられる。所定の信号、イベント又は値が、先行する信号、イベント又は値と一致する場合は、単に劣化した場合に過ぎず、当該所定の信号、イベント又は値が、当該先行する信号、イベント又は値に“応答”すると考えられる。他の信号、イベント又は値に対する所定の信号、イベント又は値の“依存性”については同様に定義される。
【０２２６】
出願人は、本明細書に記載された個々の特徴の夫々、及び、当該特徴の２以上の組み合わせを、当業者の共通の一般的知識に照らして全体として現明細書に基づいて実現が可能な当該特徴又は組み合わせの範囲内において、当該特徴又は特徴の組み合わせが本明細書に記載された課題を解決するかに拘らず、また、特許請求の範囲が限定されることなく、ここに、分離して開示する。出願人は開示された技術の態様が任意の当該特徴又は特徴の組み合わせから構成され得ることを示す。前述の記載を鑑み、開示された技術の範囲内で種々の修正がなされ得ることは、当業者にとって明白である。
【０２２７】
開示された技術の好ましい実施形態についての前述の記載は、図示及び説明のために提供されたものである。網羅的であること、又は開示された技術を開示された正にその形式に限定することを意図するものではない。言うまでもなく、多数の修正や変形は熟練の実施者にとって明白であろう。例えば、本明細書中に記載したディスプレイは大型のものであるが、小型のディスプレイを配列させて複数の描画領域を利用することも可能である。もっとも、複数の描画領域は少なくとも幅１２フィートの大きさを有するディスプレイにおいてより有益である。特に、限定なく、本出願の背景技術の欄、又は参考文献に含まれる内容により記載され、示唆される任意の及び全ての変形が、本明細書の開示された技術の実施形態の記載中に参照により具体的に取り込まれる。加えて、任意のある実施形態に関して本明細書に記載され、示唆され、又は参照により取り込まれた任意の及び全ての変形は、他の全ての実施形態に対しても教示されると考えられる。本明細書中に記載の実施形態は、開示された技術の原理及びその実際の応用を最も良く説明し、これにより、様々な実施形態について、及び熟考される特定の使用に適した様々な修正について、開示された技術の理解を他の当業者に可能とするために選択され記載されたものである。開示された技術の範囲は以下の請求の範囲とその均等物によって規定されることが意図される。
【０２２８】
本出願の全てのフローチャートと同様に、実現される機能に影響することなく、ステップの多くが組み合わされ、並行して実行され、異なる順序で実行されることが可能である。幾つかの場合には、読者が理解するように、ステップの再配置は、特定の他の変更も同様に行われる場合においてのみ、同じ結果が得られる。他の場合には、読者が理解するように、ステップの再配置は、ある条件が満たされる場合にのみ、同じ結果が得られる。更に、本出願のフローチャートは、開示された技術の理解に関するステップのみを示しており、他の機能を実現するための多数の更なるステップが、示されたステップの前、後、間に実行され得る。
【０２２９】
開示された技術は、上記で詳細を説明した好ましい実施形態及び例を参考することによって開示される一方で、これらの例は、限定する意味ではなく、説明する意味で意図されていると理解される。開示された技術の精神及び以下の請求の範囲の範囲内の変形及び組み合わせは、当業者によって容易に想到されるものと思われる。本明細書に開示された技術は、空間的イベントマップとは異なる共同データ構造を用いて実施可能である。
【図１】
2018525716.tif 000005
【図２】
2018525716.tif 000006
【図３Ａ】
2018525716.tif 000007
【図３Ｂ】
2018525716.tif 000008
【図３Ｃ】
2018525716.tif 000009
【図３Ｄ】
2018525716.tif 000010
【図３Ｅ】
2018525716.tif 000011
【図４】
2018525716.tif 000012
【図５Ａ】
2018525716.tif 000013
【図５Ｂ】
2018525716.tif 000014
【図５Ｃ】
2018525716.tif 000015
【図６Ａ】
2018525716.tif 000016
【図６Ｂ】
2018525716.tif 000017
2018525716.tif 000018
【図６Ｃ】
2018525716.tif 000019
2018525716.tif 000020
【図７Ａ】
2018525716.tif 000021
【図７Ｂ】
2018525716.tif 000022
【図８Ａ】
2018525716.tif 000023
【図８Ｂ】
2018525716.tif 000024
【図９Ａ】
2018525716.tif 000025
【図９Ｂ】
2018525716.tif 000026
【図１０Ａ】
2018525716.tif 000027
【図１０Ｂ】
2018525716.tif 000028
【図１０Ｃ】
2018525716.tif 000029
【図１１】
2018525716.tif 000030
【図１２】
2018525716.tif 000031
【図１３Ａ】
2018525716.tif 000032
【図１３Ｂ】
2018525716.tif 000033
【図１３Ｃ】
2018525716.tif 000034
【図１３Ｄ】
2018525716.tif 000035
【図１３Ｅ】
2018525716.tif 000036
【図１３Ｆ】
2018525716.tif 000037
【図１４】
2018525716.tif 000038
【図１５】
2018525716.tif 000039
【図１６】
2018525716.tif 000040
【国際調査報告】
2018525716.tif 000041
2018525716.tif 000042