第 3 章 アイテムの読みだし・作成・修正
3.3 データベースアイテムの作成と修正
3.3.2 関数
初期化
TmpgInit : テンポラリデータ領域を初期化する。テンポラリアイテム数が 0 になる。
アイテムのオープン
TmpgOpen1 : 新しくテンポラリアイテムをオープンする。
この関数は、テンポラリアイテムエントリを確保するだけであり、アイテムのデー タはなにもない。
まず全く新しいアイテムを作る。アイテム属性はコモンから取られる。つぎに既存 のアイテムと同じアイテム属性でオープンする。
テンポラリアイテムをデータベースに格納するとき、データベースの既存のアイテ ムを更新するか、新しいアイテムとしてデータベースに格納するかを選択できる。
TmpgCopy : TmpgOpen1 が単に新しくテンポラリアイテムエントリを確保するだけなのに対し て、この関数は新しいテンポラリアイテムをオープンし、データベースから指定し たアイテムのデータをコピーしてくる。
APPEND モードを指示すると、カレントテンポラリアイテムの最後に、指定したア イテムのデータをデータベースからコピーし追加する。
サブレコードの追加
TmpgAddSr : カレント テンポラリアイテムの最後にサブレコードを1つ追加する。
TmpgALast : 最後のテンポラリアイテムの最後にサブレコードを1つ追加する。
もし最後のテンポラリアイテムが既に、アイテムの終わりを示すサブレコードを 持っていればその直前に追加する。
アイテムのクローズ
TmpgClose : 最後のテンポラリアイテムの最後にアイテムの終わりを示すサブレコードを1つ追 加しアイテムをクローズする。
このあとで、TmpgAddSr を使用してはいけない。
アイテムのデータベースへの格納
第3章 アイテムの読みだし・作成・修正
TmpgWrtoDB : テンポラリアイテムをデータベースに書き込む。
サブレコードの読出し
Tmpgsityp : サブレコードのヘッダを得る。
TmpgGetSr : サブレコードの内容を取り出す Tmpgcanon : セグメントを得る。
Tmpgfont : サブレコードのフォント番号を得る。またはフォント番号を変更する。
サブレコードの更新
TmpgWrt : サブレコードの内容を更新する。
サブレコードの移動
Tmpgdel : サブレコードを削除する。削除したサブレコードの位置はつめられる。
Tmpgmove : サブレコードを移動する。サブレコードを間に追加するために使用する。また逆に 不要なサブレコードを削除するのに使用する。
アイテムの削除
Tmpgback : 最後のテンポラリアイテムを削除する。
アイテムの表示
Tmpgrptn : テンポラリアイテムをスクリーンに表示する。
ItmSR 構造体
サブレコードを関数に渡すときに使用する構造体。この構造体に値を設定する場合はマクロ SETITMSR を使用できる。
3.3.3 アイテムの作成手順
一般的な呼出し方法は、つぎのようになります。
(1) TmpgInit
新規アイテムなら (2) へ 既存アイテムなら (3) へ
(2) TmpgOpen1 → TmpgAddSr → TmpgClose 新規アイテムの作成 (3) TmpgCopy → 修正 → TmpgClose 既存アイテムの修正 (4) TmpgWrtoDB
(1) アイテム属性を設定する。
アイテムタイプはSetItemtype()で必ず設定しなければなりません。
アイテムタイプなどのシステムで使用する定数は acadprm.h で定義しています。
できるだけそれを使用すべきです。
(2) アイテムによっては、アイテム作成条件を設定する必要がある。
たとえば、ジェネラルノートをつくるときは、あらかじめテキストの文字高さやテキストフォン ト番号などを必要に応じて設定しなければなりません。
(3) アイテムを作業領域に作る。このアイテムはテンポラリアイテムと呼ぶ。
アイテムをオープンします。
TmpgOpen1(0, 0);
アイテムを構成するサブレコードを追加します。アイテムタイプ別のサブレコードの構成は別途 記述します。
TmpgAddSr(&srh);
アイテムをターミネイトします。
TmpgClose(1);
3.3 データベースアイテムの作成と修正
(4) アイテムを格納する
テンポラリアイテムをデータベースに格納します。
TmpgWrtoDB(0);
作業領域を開放します。
TmpgInit();
● 例題
以上を簡単な例題で示します。
#include "acaddef.h"
#include "acadprm.h"
#include "acadusr.h"
#include "acadupi.h"
void ucmd02(TOKEN *token) {
DPOINT dpnts[5] = { { 100.0, 0.0}, {0.0, 100.0},
{-100.0, 0.0}, {0.0, -100.0}, {100.0, 0.0} };
if (token->typ != TknCMD) return;
/* 2つの線分を作る。*/
SetItemtype(ITMLINE);
SetItemlwt(1);
for (int j = 0; j < 2; ++j) { ItmSR srh;
TmpgOpen1(0, 0);
SETITMSR(srh, SITSTART, 3, 2, 0, 0, &dpnts[j]);
TmpgAddSr(&srh);
SETITMSR(srh, SITLINE, 3, 2, 0, 0, &dpnts[j+1]);
TmpgAddSr(&srh);
TmpgClose(1);
}
/* ストリングアイテムを作る。 */
SetItemtype(ITMSTRING);
SetItemlwt(2);
TmpgOpen1(0, 0);
SETITMSR(srh, SITSTART, 3, 2, 0, 0, &dpnts[2]);
TmpgAddSr(&srh);
for (int j = 3; j < 5; ++j) { ItmSR srh;
SETITMSR(srh, SITLINE, 3, 2, 0, 0, &dpnts[j]);
TmpgAddSr(&srh);
}
TmpgClose(1);
/* アイテムをデータベースに格納する。*/
TmpgWrtoDB(0);
TmpgInit();
}
第3章 アイテムの読みだし・作成・修正