地図投影図法 > インポートした地図の上にグラフィック・オブジェクトを追加する > Sample クラス、Main 関数、コンストラクターの定義
 
Sample クラス、Main 関数、コンストラクターの定義
クラス
このサンプルはクラス SimpleMapViewer として実装され、地図をロードし都市を作成します。
次のようなフィールドが含まれます。
private:
IlvGadgetContainer* _container;
IlvSCManagerRectangle* _managerRectangle;
IlvMapInfo* _mapInfo;
IlvTextField* _statusBar;
ここで、_container はこのアプリケーションのトップ・ウィンドウ、_managerRectangleIlvManagerIlvView を組み合わせ、_mapinfo フィールドは IlvMapInfo インスタンスで、地図座標系からマネージャー座標系に座標を変換するための情報を格納します。地図情報は .ilv ファイルとともに保存されるため、地図ファイルをロードする際にこのフィールドが初期化されます。そのため、地図上に都市を位置付けたり、地図上にマウスのポインターで示された位置に対応する地理座標を表示するために、このフィールドが使用できます。これらの地理座標は、ステータス・バーとして機能する IlvTextField に格納されます。
Main 関数
Main 関数は、IlvDisplay を初期化し、SimpleMapViewer クラスのインスタンスを作成してから、Rogue Wave Views のメイン・ループに入ります。
int main(int, char**)
{
IlvDisplay* display = new IlvDisplay("Map Viewer");
if (display->isBad()) {
IlvPrint("Cannot create the display");
return 1;
}
SimpleMapViewer* viewer = new SimpleMapViewer(display,
"../data/usa.ilv");
IlvMainLoop();
return 0;
}
コンストラクター
SimpleMapViewer のコンストラクターは、次の 2 つのアクションを実行します。クラスのインターフェース・コンポーネントを作成し、次に地図データをロードします。
SimpleMapViewer::SimpleMapViewer(IlvDisplay* display,
const char* fileName)
:_managerRectangle(0),
_statusBar(0),
_container(0),
_mapInfo(0)
{
createGUI(display);
loadMap(fileName);
}
createGUI メソッドは、アプリケーションのトップ・ビューである IlvGadgetContainer のインスタンスを作成し、次に、地図を含むコンテナーの ManagerRectangle を作成するメソッドおよび、ツールバーを作成するメソッドを呼び出します。
void
SimpleMapViewer::createGUI(IlvDisplay* display)
{
_container = new IlvGadgetContainer(display,
?SimpleMapViewer",
"Integrating projections and graphics",
IlvRect(50, 50, 450, 450),
IlFalse);
_container->setDestroyCallback(_exit, this);
createManagerRectangle(_container);
createStatusBar(_container);
}
createManagerRectangle メソッドは、地図を格納するマネージャーを作成し、ビューを初期化します。
void
SimpleMapViewer::createManagerRectangle(IlvGadgetContainer* container)
{
_managerRectangle = new IlvSCManagerRectangle(container->getDisplay(),
IlvRect(0, 0, 450, 435));
container->addObject(_managerRectangle);
 
// Attachments.
container->getHolder()->attach(_managerRectangle, IlvHorizontal);
container->getHolder()->attach(_managerRectangle, IlvVertical);
 
IlvManager* manager = _managerRectangle->getManager();
IlvView* view = _managerRectangle->getView();
 
manager->setKeepingAspectRatio(view, IlTrue);
manager->setDoubleBuffering(view, IlTrue);
}
次に、createStatusBar メソッドが、ステータス・バーとして使用される IlvTextField を作成し、付加します。
void
SimpleMapViewer::createStatusBar(IlvGadgetContainer* container)
{
_statusBar = new IlvTextField(container->getDisplay(),
"",
IlvRect(0, 435, 450, 15));
container->addObject(_statusBar, IlTrue);
 
_statusBar->setEditable(IlFalse);
 
// Attachments.
container->getHolder()->attach(_statusBar, IlvHorizontal);
container->getHolder()->attach(_statusBar, IlvVertical, 1, 0, 0);
}
グラフィック・インターフェースの準備ができたら、地図をロードできます。
void
SimpleMapViewer::loadMap(const char* fileName)
{
IlvManager* manager = _managerRectangle->getManager();
IlvView* view = _managerRectangle->getView();
manager->read(fileName);
_mapInfo = IlvMapInfo::Get(manager);
if (_mapInfo) {
view->setInputCallback(_showMousePosition, this);
addCities();
}
manager->fitTransformerToContents(view, IlTrue);
}
地図がロードされたら、.ilv ファイルに保存されていた地図情報を _mapinfo フィールドに格納し、入力コールバックのインストールによってマウスの位置を表示して都市を追加します。

Version 5.6
Copyright © 2012, Rogue Wave Software, Inc. All Rights Reserved.