Graebert Japan ヘルプセンター(FAQ)のサイトは、以下に移行しました。
新しい FAQ は、上記 URL にのみ追加されます。
また、このサイトは将来閉鎖されます。
CommonUI (CFx) のサンプル
ARES Commander SDK 以外の CommonUI (CFx) のサンプルはありませんか
CommonUI のサンプルプログラムを作ってみました。
CommonUI は ARES Commander SDK (CFx) の一部として存在します。GUI を使う C++ アプリケーションを ARES Commander SDK だけで書けるようになりました。
ダイアログボックスを作成するには
ダイアログボックスを作成するには、CFxUIDialog クラスを継承するカスタムクラスを定義します。
virtual void setupUi() 関数を定義してダイアログボックスの中身のボタンやラベルやコンボボックスを追加します。
ボタンの作成は次の4つの処理が必要です。ボタンを作成し、テキストを割り付け、レイアウトに配置し、ボタンを押したときの処理を登録します。
pBtn = new CFxUIPushButton();
pBtn->setText(QObject::tr("Add Frame"));
pLayout->addView(pBtn);
pBtn->clicked().connect(this, &ComUITestDlg::onAddFrame);
ダイアログ下部の OK, キャンセル, ヘルプ や はい、いいえ の標準ボタンは、CFxUIDialogButtonBox クラスに用意されています。どのボタンを使うか、それぞれのボタンへの処理を設定します。
ダイアログボックスを使用するには
モードレスダイアログは次のようにして使用します。
ComUITestDlg dlg;
dlg.exec();
exec()には Rejected と Accepted の戻り値がありますが、このサンプルでは使用していません。
コンボボックスに初期値を設定するには
コンボボックスに初期値を設定するには、insertItem() が使用できます。
mpOrientation = new CFxUIComboBox();
mpOrientation->insertItem(0, QObject::tr("Horizontal"));
mpOrientation->insertItem(1, QObject::tr("Vertical"));
レイアウトを利用する
コントロールの配置には、レイアウトを使用します。
CFxUIDialog::GetLayout() で、ダイアログボックスの既定のレイアウトである縦方向のレイアウト CFxUIVerticalLayout が取得できます。
コントロールをレイアウトに配置するには、CFxUILayout::AddView() を使用します。
縦方向のレイアウトに横方向のレイアウトを追加することで、ダイアログの中で横方向に等間隔でコントロールを並べることができます。
動作を定義する
このサンプルプログラムの図面設定ダイアログでは以下の処理を行っています。
図面テンプレートファイル(.dwt) を使って新規図面を作成する。
CAD コマンド (DRAWINGSTANDARDS 標準図面の設定) を呼び出す。
ダイアログからダイアログを呼び出す。
図枠の作成ダイアログでは以下の処理を行っています。
アクティブな図面を取得する。
図面のレイアウトを列挙する。
INI ファイルから情報を取得、保存する。
サポートパスからファイルを検索する。
メッセージボックスを表示する。
アクティブなレイアウトを切り替える。
DWGファイルをブロックとして挿入する。
レイアウトにプリンタ、用紙サイズ、方向、印刷範囲を設定する。
ポリラインを作図する。
ブロック参照を作図する。
ブロック属性をブロック定義より作成する。
モデルの場合は、図面の尺度に合わせて図枠とブロックを拡大する。
ビューを変更して図面範囲を表示する。
レイアウトの場合は、ビューポートを作成し、ビューポート尺度を設定する。
CFxアプリケーションでは、図形やデータベースオブジェクトは、Teigha SDK の API を使用します。
既存の図形やデータベースオブジェクトをオープンするには、safeOpenObject() を使います。
データベースオブジェクトを作成するには、createObject()を使います。
現在アクティブな画層、色、線種などをまとめて図形に設定するには setDatabaseDefaults() を使います。
ブロックテーブルレコードの appendOdDbEntity() を使って、図形を図面に登録します。
Teigha ではスマートポインタを使用するので、明示的に close() を呼び出すことはありません。
モードレスダイアログは作れません
CFxUIDialog はモードレスダイアログを作ることはできませんが、showVisible(bool) という関数を使って、ダイアログボックスを一時的に非表示にすることで、座標入力などのユーザー入力関数を使うことも可能です。