KOMPASの主な碑文は、 ksStampインターフェースによって記述されます。 それへのポインターを取得するには、ksDocument2D 、 ksSpcDocument 、およびksDocumentTxtインターフェースのGetStamp()およびGetStampEx() メソッド が使用されます。
GetStampExメソッドの唯一のパラメーターは、 タイトルブロックインターフェイスが要求されるシート番号です。 シート番号は1から始まります。 GetStampメソッドにはパラメーターがありません。 図面または仕様の最初のシートのタイトルブロックインターフェイスを返します。
ksStampインターフェースの説明に進む前に、 ksTextItemParamインターフェースを簡単に見てみましょう 。
行コンポーネント
ksTextItemParamインターフェイスは、テキスト文字列コンポーネントを設定します。 「コンポーネント」とは、文字列または特殊文字を意味します。 KompasObjectインターフェースのGetParamStructメソッドを使用して、このインターフェースを取得できます。 そのためには、定数ko_TextItemParamを唯一のパラメーターとしてこのメソッドに渡す必要があります。
ksTextItemParamインターフェースのプロパティは 3つだけです。
- iSNumb-特殊文字コード。 特殊文字とその番号は、KOMPASに付属のNumbSymb.frwファイルに記載されています。 これは、KOMPASプログラムのメインディレクトリのSDKサブディレクトリにあります。
- sは文字列です。 ksTextItemParamインターフェイスを使用して特殊文字を記述する場合、この行は特殊文字の後に表示されます。
- type-インターフェースの目的を設定します。 このプロパティの値がSPECIAL_SYMBOLの場合、インターフェイスは特殊文字と文字列を記述します。 この場合、行は特殊文字の直後にあります。 このプロパティの値がSPECIAL_SYMBOLと異なる場合、 iSNumbプロパティの値は無視され、インターフェイスは文字列sのみを記述します。 KOMPASの古いバージョンのヘッダーファイルでは、このプロパティはtype_ (アンダースコア付き)と呼ばれ、定数SPECIAL_SYMBOLは定義されていないことに注意してください。 彼女は17に等しいです。
KOMPAS-3D v17のドキュメントでは、ksTextItemParamインターフェイスは 「テキストドキュメント(ksDocumentTxtインターフェイス)/ ksDocumentTxt-メソッド/テキスト要素パラメーターインターフェイス/」という見出しで説明されています 。
SDKのテキスト要素パラメーターインターフェイスの説明
しかし、 typeプロパティを説明するとき、定数SPECIAL_SYMBOLは言及されていません。 (数値はありませんが)セクション「パラメーター構造と定数/テキストパラメーター構造/ TextItemParam-テキストコンポーネントのパラメーター構造」に記載されています。
SDKのテキスト文字列コンポーネントのパラメーター構造の説明
typeプロパティには3つの値(FONT_SYMBOL、FRACTION_TYPE、SUM_TYPE)もありますが、それらの目的はまだわかりませんでした。 実験が示したように、これらの定数を使用したksTextItemParamインターフェイスの動作は、 typeプロパティのゼロ値と変わりません。 確かに、私は主要な碑文のコンテキストでテストしましたが、これが独自のいくつかの制限を課す可能性があります。
ここで、 ksTextItemParamインターフェイスのメソッドを検討します。
- GetItemFont() -フォントパラメータインターフェイスksTextItemFontを返します。
- SetItemFont-新しいksTextItemFontフォントパラメータインターフェイスを設定します。 インストールされたインターフェースは、単一のパラメーターの値として渡されます。 成功すると、メソッドはtrueを返します 。
- Init() -インターフェイスプロパティをゼロで初期化します。 成功した場合、 trueを返します 。
主な碑文
上記のように、メインラベルはksStampインターフェイスによって記述されます。 このインターフェイスには興味深いプロパティがないため、すぐにメソッドの検討に進みます。
- ksClearStamp-タイトルブロックまたはその個々のセルをクリアします。 このメソッドの唯一のパラメーターは、クリアされるセルの番号です。 値がゼロの場合、メインの碑文全体がクリアされます。 成功した場合、このメソッドは1を返し、エラーの場合は0を返します 。
- ksCloseStamp() -タイトルブロックを閉じます 。 これは、タイトルブロック編集モードを終了することを意味します。 成功した場合は1を返し、エラーの場合は0を返します 。
- ksColumnNumber-現在のセルを現在にします。 このメソッドの唯一のパラメーターとして、現在のセルの番号が渡されます。 成功した場合、このメソッドは1を返し、エラーの場合は0を返します 。
- ksOpenStamp() -タイトルブロックを開きます 。 これは、タイトルブロック編集モードに入ることを意味します。 入力パラメーターはありません;成功した場合は1を返し、エラーの場合は0を返します 。
- ksTextLine-現在のセルに行を書き込みます。 現在のセルは、 ksColumnNumberメソッドを使用して設定する必要があります。 ksTextLineメソッドの唯一のパラメーターは、少し前に説明したksTextItemParamインターフェースへのポインターです。 成功した場合、 ksTextLineメソッドは1を返し、エラーの場合はゼロを返します 。
これはksStampインターフェースメソッドの不完全なリストですが、それらはタイトルブロックを扱うのに十分なものです。 ただし、多くのポイントを作成する必要があります。
- タイトルブロックのすべてのセルに番号が付けられます。 KOMPASのドキュメントにはこれらの番号は含まれていませんが、主要な碑文の状態標準仕様(GOST 2.104-68およびGOST 2.104-2006)への参照があります。 また、タイトルブロックのセルの番号はページで表示できます 。 以下の図は、実験的に得られたフォーム2aおよび2bの主な銘のセル番号を示しています。
最初のシート
2枚目以降のシート
- ksTextLineメソッドは、タイトルブロックに行を書き込む唯一の方法ではありません。 それに加えて、 ksStampインターフェイスには同じことを行うksSetStampColumnTextメソッドがあります。 唯一の違いは、セット文字列がksTextItemParamインターフェイスの形式ではなく 、 ksDynamicArray動的配列の形式で設定されることです。 この記事では考慮しません。
タイトルブロックの編集
メインの碑文を埋めるには、いくつかの連続した段階があります。
- ksTextItemParamインターフェイスへのポインターを取得します。 これを行うには、 ksKompasObjectインターフェイスのGetParamStructメソッドを使用します。 ksTextItemParamインターフェースは 、タイトルブロックに書き込まれた文字列を表すために必要です。
- ドキュメントインターフェイス仕様のGetStampまたはGetStampExメソッドを使用して、 ksStamp タイトル ブロックインターフェイスへのポインターを取得します。
- ksStampインターフェースのksOpenStamp()メソッドを呼び出します。 そこで、タイトルブロックの編集モードに入ります。
- タイトルブロックに書き込む行を準備します。 文字列は、インターフェイスksTextItemParamとして表される必要があります。
- 行を書き込むセルを選択します。 セルを選択するには、 ksStampインターフェイスのksColumnNumberメソッドを使用します。
- ksStampインターフェイスのksTextLineメソッドを呼び出して、選択したセルに行を書き込みます。
- タイトルブロックに書き込まれたすべての行について、手順4〜6を繰り返します。
- ksStampインターフェースのksCloseStampメソッドでタイトルブロックを閉じます。
例
以下は、タイトルブロックを操作する方法を示すプログラムの抜粋です。
// TextItemParamPtr TextItemParam; TextItemParam = (TextItemParamPtr)kompas->GetParamStruct(ko_TextItemParam); // StampPtr Stamp; Stamp = (StampPtr)Document2D->GetStamp(); // Stamp->ksOpenStamp(); Stamp->ksColumnNumber(1); TextItemParam->s = SysAllocString(L""); Stamp->ksTextLine(TextItemParam); Stamp->ksColumnNumber(3); TextItemParam->s = SysAllocString(L""); TextItemParam->type = SPECIAL_SYMBOL; TextItemParam->iSNumb = 51; Stamp->ksTextLine(TextItemParam); Stamp->ksColumnNumber(110); TextItemParam->set_s(SysAllocString(L" ..")); TextItemParam->type = 0; Stamp->ksTextLine(TextItemParam); // Stamp->ksCloseStamp();
このプログラムの結果、次の図に示す主な碑文が表示されます。
ソフトウェアによって取得された主な碑文。
上記のプログラムフラグメントについて2つのコメントを作成します。
- この例では、KOMPASへの接続と図面の作成を担当するコードは示されていません。 コードを理解しやすくするために削除しました。 KOMPASに接続して図面をカスタマイズする方法(主要な碑文の形式の選択を含む)は、サイクルの以前の記事で説明しました。
- 上記のコードを注意深く見ると、文字列がsプロパティに値を割り当てることによってksTextItemParamインターフェースに設定されている場合と、別の場合にはset_sメソッドを呼び出すことによって設定されていることがわかります。 実際には、COMテクノロジーでは、すべてのプロパティがメソッドの形式で表されます(ルール、インストール、および読み取り)。 これらのメソッドの名前は次のように形成されます。
get_ <プロパティ名>
set_ <プロパティ名>
プログラムでは、これらのアプローチ(プロパティへの値の割り当てまたは対応するメソッドの呼び出し)のいずれかを使用できます。
おわりに
この記事では、主な碑文を記入する方法を学び、文字列と特殊文字を表現するためのインターフェースの1つに精通しました。 シリーズの後続の記事では、他のインターフェースを紹介します。
継続するには、ブログのニュースに従ってください。
Sergey Norseev、「DelphiでのCOMPASのアプリケーション開発」の著者。