VNII Signal JSCのソフトウェアエンジニアであるKOMPAS-3D CAD API Sergey Norseevの使用に関する一連の記事を続けています。DelphiでのKOMPASのアプリケーション開発の著者です。 使用される環境はC ++ Builderです。 一連の記事の第4部で、主な碑文を使用した作業を既に検討しました。 この記事では、タイトルブロックに書き込むためのより複雑な手法を検討します。 しかし、最初に、多くの新しいインターフェースに慣れる必要があります。
レッスンシリーズ「COMPASS-3D APIの操作」の内容
1. 基本
2. 図面デザイン
3. COMPASSへの正しい接続
4. 主な碑文
5. グラフィックプリミティブ
6. ドキュメントをさまざまな形式で保存する
7. 設定を知る
8. タイトルブロックに書き込むより複雑な方法
動的配列( ksDynamicArray )
KOMPASシステムの動的配列は、
ksDynamicArrayインターフェイスによって記述されます。
KompasObjectインターフェイスの
GetDynamicArrayメソッドを使用して取得できます。 唯一のパラメーターとして、配列の整数型を取ります。これは、配列に格納される要素の型を決定します。 原則として、他のインターフェイスがそこに保存されます。 多くの配列があるので、すべての可能なタイプの配列を提供するわけではありません。
ksDynamicArrayインターフェースに
はプロパティ
が 1つしか
ありません。
reference-インターフェイスへのポインター。 インターフェイスメソッドを検討します。
ksAddArrayItem-配列に要素を追加します。 以下は、このメソッドのプロトタイプです。
long ksAddArrayItem ( long index,
indexパラメーターは、新しい要素を挿入する前の要素のシリアル番号を設定します。 要素には
最初から番号が付けられます。 このパラメーターの値が
-1の場合、新しい要素が配列の最後に挿入されます。
成功した場合、このメソッドは値
1を返し、エラーの場合は
ゼロを返し
ます 。
ksClearArray() -配列のすべての要素を削除しますが、配列自体は削除しません。 入力パラメーターはありません。 成功した場合は
1を返し、エラーの場合は
ゼロを返し
ます 。
ksDeleteArray() -配列を削除します。 配列が空でない場合、その要素はすべて自動的に削除されます。 入力パラメーターはありません。 成功した場合は
1を返し、エラーの場合は
ゼロを返し
ます 。
ksExcludeArrayItem-配列要素を削除します。 削除されたアイテムのインデックスを唯一のパラメーターとして使用します。 成功の場合は
1を返し、エラーの場合は
ゼロを返し
ます 。
ksGetArrayCount() -配列内の要素の数を返します。
ksGetArrayItem-配列の指定された要素を返します。 以下は、このメソッドのプロトタイプです。
long ksGetArrayItem ( long index,
indexパラメーターは、要求された配列要素のシーケンス番号を設定します(番号は
最初から付けられます)。
itemパラメーターには、配列の読み取り可能な要素が書き込まれるインターフェイスが含まれます。 このインターフェイスのタイプは、配列のタイプによって異なります。
成功した場合、
ksGetArrayItemメソッドは
1を返し、エラーの場合は
ゼロを返し
ます 。 注:要求されたアイテムは、
アイテムパラメータで返されます。
ksGetArrayType() -配列のタイプを返します。
ksSetArrayItem-指定された配列要素を
変更します。 以下は、このメソッドのプロトタイプです。
long ksSetArrayItem( long index,
itemパラメーターには、インデックス番号
indexを持つ要素の場所に書き込まれたインターフェイスが含まれ
ます (番号は
最初から付けられます)。 このインターフェイスのタイプは、配列のタイプによって異なります。
成功した場合、
ksSetArrayItemメソッドは
1を返し、エラーの場合は
ゼロを返し
ます 。
文字列パラメーター( ksTextLineParam )
ksTextLineParamインターフェースは、テキストの行を記述します。
KompasObjectインターフェースの
GetParamStructメソッドを使用して取得できます。 そのためには、定数
ko_TextLineParam (
29 )を唯一のパラメーターとしてこのメソッドに渡す必要があります。
ksTextLineParamインターフェースに
はプロパティ
が 1つしか
ありません
スタイル -テキストスタイル(サイクルの次の記事で説明します)。
ksTextLineParamインターフェースのメソッドを検討してください。 それらは3つだけです。
GetTextItemArr() -
ksTextItemParamインターフェイスの動的配列(
ksDynamicArray )を
返します。 この配列のタイプは
TEXT_ITEM_ARR (
4 )です。
Init() -すべてのインターフェイスプロパティをリセットします。 成功した場合、
trueを返し
ます 。
SetTextItemArr -
ksTextItemParamインターフェイスの動的配列を設定します。 配列を唯一のパラメーターとしてインストールする必要があります(
ksDynamicArrayインターフェース)。 成功した場合は
trueを返し、エラーの場合は
falseを返し
ます 。
この説明から、
ksTextLineParamインターフェースが本質的に
ksTextItemParamインターフェースの動的配列のラッパーであることが容易に
わかります。
例1
以下は、
ksTextLineParamインターフェイスを使用して
タイトルブロックに入力する方法を示すプログラムの例です。
// TextItemParamPtr TextItemParam; TextItemParam = (TextItemParamPtr)kompas->GetParamStruct(ko_TextItemParam); TextLineParamPtr TextLineParam; TextLineParam = (TextLineParamPtr)kompas->GetParamStruct(ko_TextLineParam); // DynamicArrayPtr DynamicArray; DynamicArray = (DynamicArrayPtr)kompas->GetDynamicArray(TEXT_ITEM_ARR); // StampPtr Stamp; Stamp = (StampPtr)Document2D->GetStamp(); // Stamp->ksOpenStamp(); // TextItemParam->set_s(SysAllocString(L"")); DynamicArray->ksAddArrayItem(-1, TextItemParam); TextLineParam->SetTextItemArr(DynamicArray); // Stamp->ksColumnNumber(ksStPartNumber); Stamp->ksTextLine(TextLineParam); // DynamicArray->ksClearArray(); // TextItemParam->set_s(SysAllocString(L" ")); DynamicArray->ksAddArrayItem(-1, TextItemParam); // TextItemParam->Init(); TextItemParam->set_type(SPECIAL_SYMBOL); TextItemParam->set_iSNumb(51); DynamicArray->ksAddArrayItem(-1, TextItemParam); // TextItemParam->set_type(0);; TextItemParam->set_s(SysAllocString(L" ")); DynamicArray->ksAddArrayItem(-1, TextItemParam); // TextLineParam->SetTextItemArr(DynamicArray); Stamp->ksColumnNumber(ksStMaterial); Stamp->ksTextLine(TextLineParam); // Stamp->ksCloseStamp();
この例を単純化するために、KOMPASへの接続、ドキュメントの作成と処理、およびリソースの解放を担当するコードは省略されました(これらの問題は、シリーズの以前の記事で議論されました)。 次の図は、このプログラムによって形成されるメインラベルを示しています。
いくつかの点に注意してください。
1.この例では、
KompasObjectインターフェースから
ksDynamicArrayインターフェースを取得します。 しかし、
ksTextLineParamインターフェイスから取得するのを妨げるものは何もありません。 さらに、
ksDynamicArrayインターフェースが
GetTextItemArray()メソッドによって取得された
場合 、配列はすでに
ksTextLineParamインターフェースに関連付けられているため、
SetTextItemArrayメソッドを呼び出すことはできません。
2.セル番号を示すために、定数
ksStPartNumberおよび
ksStMaterialを使用します。 これらの定数は、最も頻繁に使用されるセルに対してKOMPASによって導入されます。 KOMPASのドキュメントの
「パラメーター構造と定数/定数/設計オブジェクトの定数/ ksStampEnum-スタンプセルの識別子」セクションでそれらをよく理解できます。
3.タイトル
ブロックに行を書き込むには、
ksStampインターフェイスの
ksTextLineメソッドを使用します。 同じ方法がサイクルの4番目の部分で使用され、
ksTextItemParamインターフェイスを調べました。 このメソッドは、パラメーターとして
ksTextLineParamインターフェースとより単純な
ksTextItemParamの両方を取ることができます。
4.タイトルブロックに2行入力します。 最初の行は単純で、1つのコンポーネントのみで構成されています。 2行目は3つのコンポーネントで構成されています。 次の図では、垂直の赤い線で区切られています。 原則として、最後の2つのコンポーネントを1つにまとめることができます。 しかし、
ksTextLineParamインターフェースがどのように
機能するかをより明確に示すために、3つのコンポーネントを使用しました。
KsSetStampColumnTextメソッド
ksStampインターフェイスの
ksSetStampColumnTextメソッドは、指定された
タイトルブロックセルにテキストを設定します。 以下は、このメソッドのプロトタイプです。
long ksSetStampColumnText ( long numb,
設定されたテキストは、動的配列
ksDynamicArrayとして設定されます。 成功した場合、
ksSetStampColumnTextメソッドは
1を返し、エラーの場合は
ゼロを返し
ます 。
ksSetStampColumnTextメソッド
は 、
タイトルブロックの編集モードでのみ使用されることに注意してください。 つまり、
ksOpenStamp()メソッドを呼び出した後、
ksStampインターフェイスの
ksCloseStamp()メソッドを呼び出す前です。
textArr配列のタイプは
TEXT_LINE_ARR (
3 )です。 これは、配列の要素が
ksTextLineParamインターフェースであり、それぞれに動的配列も含まれているが、すでに
ksTextItemParamインターフェースが含まれていることを
意味します。 次の図は、
textArrパラメーターの構造を示しています。
上の図の配列要素の数は3つですが、実際には任意の数にすることができます。
textArr配列が複数の要素で構成されている場合、すべての
ksTextLineParam行
が接着されて
無感覚なセルに表示されます。
例2
以下は、
ksSetStampColumnTextメソッドを使用して
タイトルブロックに
入力する方法を示すプログラムの例です。
// TextItemParamPtr TextItemParam; TextItemParam = (TextItemParamPtr)kompas->GetParamStruct(ko_TextItemParam); TextLineParamPtr TextLineParam; TextLineParam = (TextLineParamPtr)kompas->GetParamStruct(ko_TextLineParam); // ksTextItemParam DynamicArrayPtr DynamicArrayItems; DynamicArrayItems = (DynamicArrayPtr)kompas->GetDynamicArray(TEXT_ITEM_ARR); DynamicArrayItems->ksClearArray(); // ksTextLineParam DynamicArrayPtr DynamicArrayLines; DynamicArrayLines = (DynamicArrayPtr)kompas->GetDynamicArray(TEXT_LINE_ARR); DynamicArrayLines->ksClearArray(); // StampPtr Stamp; Stamp = (StampPtr)Document2D->GetStamp(); // Stamp->ksOpenStamp(); // TextItemParam->set_s(SysAllocString(L"")); DynamicArrayItems->ksAddArrayItem(-1, TextItemParam); TextLineParam->SetTextItemArr(DynamicArrayItems); // DynamicArrayLines->ksAddArrayItem(-1, TextLineParam); // Stamp->ksSetStampColumnText(ksStPartNumber, DynamicArrayLines); // DynamicArrayLines->ksClearArray(); DynamicArrayItems->ksClearArray(); // TextItemParam->set_s(SysAllocString(L" ")); DynamicArrayItems->ksAddArrayItem(-1, TextItemParam); // TextItemParam->Init(); TextItemParam->set_type(SPECIAL_SYMBOL); TextItemParam->set_iSNumb(51); DynamicArrayItems->ksAddArrayItem(-1, TextItemParam); // TextItemParam->set_type(0); TextItemParam->set_s(SysAllocString(L" ")); DynamicArrayItems->ksAddArrayItem(-1, TextItemParam); // TextLineParam->SetTextItemArr(DynamicArrayItems); DynamicArrayLines->ksAddArrayItem(-1, TextLineParam); // Stamp->ksSetStampColumnText(ksStMaterial, DynamicArrayLines); // Stamp->ksCloseStamp();
このプログラムの結果は、前の例の結果に似ています。
注意:行が書き込まれるセルの番号はすでに
ksSetStampColumnTextメソッドに渡されているため、
ksColumnNumberメソッドを呼び出す必要はありません。
おわりにタイトルブロックセルに文字列を記述する3つの方法を検討しました
。ksTextItemParamインターフェイス(
記事シリーズの第4部で説明 )、
ksTextLineParamインターフェイス、および
ksSetStampColumnTextメソッドを使用します。
最初の方法が最も簡単です。 動的配列を操作する必要はありません。 行を書くのに最適です。 これを使用して、複雑な文字列を形成することもできます。 これを行うには、制御文字が使用されます。これについては、サイクルの次の記事で説明します。
2番目のメソッド(
ksTextLineParamインターフェイス)は、最初のメソッドほど複雑ではありません。 3番目のメソッドでは、
ksTextLineParamインターフェイスも使用されます。 したがって、3番目の方法を理解するには、理解する必要があります。
3番目のメソッド(
ksSetStampColumnTextメソッド)は実装が最も困難です。 最初の2つのメソッドに対する唯一の本当の利点は、
ksColumnNumberメソッドを呼び出す必要がないことです。 ただし、このメソッドで使用されるアプローチは、タイトルブロックのセルの内容を読み取るときに使用されます(サイクルの次の記事で詳しく説明します)。
これらの方法のいずれかを使用できます。 個人的には、通常は最初のものを使用します。
継続するには、ブログのニュースに従ってください。 Sergey Norseev、「DelphiでのCOMPASのアプリケーション開発」の著者。