
前回の
記事では、MultiCAD.NET APIテーブル機能を使用して、選択したオブジェクトに関するレポートを自動的に生成する例を紹介しました。 私たちは意図的に年表に違反しており、今日の出版は単純な表の作成と書式設定から始まります。 テーブルにテキストおよび数値形式のデータを入力すること、および数式を使用することを検討してください。 次に、セルのコンテンツとしてブロックとサブテーブルを追加し、動的に変化するテーブルデータとしての描画オブジェクトのプロパティの使用の説明で記事を終了します。
テーブルの作成とフォーマット
MultiCAD.NET APIでは、テーブルは
Multicad.Symbols.Tables
名前空間の
McTable
クラスによって表されます。 次のコードスニペットは、空のテーブルを作成し、位置0から2行3列を追加します。
McTable Table1 = new McTable(); int rowCount = 4; int colCount = 5; Table1.Rows.AddRange(0, rowCount + 1); Table1.Columns.AddRange(0, colCount);
同様に、任意の範囲の行と列を指定した位置に追加できます。
新しく作成されたテーブルのコンテンツを追加し、セルの形式を定義します。 たとえば、テーブルはパーツのリストにデータを保存します:テーブルのシリアル番号、名前、バッチ番号、材料および数量。 単位数を含むセルの場合、数値形式を決定し、残りのセルにはテキストが含まれます。

MultiCAD.NETのテーブルの際立った機能の1つは、テーブルに入力するときにテキストの幅または高さがセルサイズよりも大きい場合に、セル内のテキストの配置を指定する機能です。
HorzFits
プロパティを使用して、次の水平表記モードを設定できます。
HorizontalFitsEnum.None
テキストを入力しないでください。テキストは隣接するセルに重なる場合があります。HorizontalFitsEnum.Shrink
テキストを水平方向に圧縮します(デフォルトモード)、HorizontalFitsEnum.Wrap
ワードラップ。
VertFits
プロパティは、垂直方向のテキストフィットを設定します。
VerticalFitsEnum.None
テキストを入力しないでください。テキストは隣接するセルに重なる場合があります。VerticalFitsEnum.Shrink
フォントの高さを減らす(デフォルトモード)VerticalFitsEnum.Expand
線の高さを増やし、VerticalFitsEnum.AddRows
テキストの各行に疑似行を追加します。
もちろん、テーブルが形成された後、その構造を編集できます。 たとえば、行と列を追加、削除、またはコピーします。 リストに「ボルト」部品に関するレコードをもう1つ追加し、「数量」列を最後の位置に移動して、部品のシリアル番号のある列を削除します。
Table1.Rows.CopyRange(4, 5, 1, true); Table1.Columns.Move(2,5); Table1.Columns.Delete(0);

次に、組み込みの表式「Sum」を使用して、テーブル内の部品の総数を計算する機能を追加します。
Table1.Rows.AddRange(Table1.Rows.Count, 1); System.Drawing.Rectangle rect2 = new System.Drawing.Rectangle(0, Table1.Rows.Count - 1, Table1.Columns.Count - 2, 0); Table1.Merge(rect2); Table1[Table1.Rows.Count - 1, 0].TextHeight = 5; Table1[Table1.Rows.Count - 1, 0].Value = ":"; String SummStartCell = Table1[2, Table1.Columns.Count - 1].AddressOfCell(); String SummEndCell = Table1[Table1.Rows.Count - 2, Table1.Columns.Count - 1].AddressOfCell(); Table1[Table1.Rows.Count - 1, Table1.Columns.Count - 1].ValueFormula = "=summ(" + SummStartCell + ":" + SummEndCell + ")";
その結果、テーブルは次の形式になります。

セルの範囲からのデータを要約するために、数式の文字列表現が最終セルに追加されました。 テーブルエディターでは、このセルの内容は次のようになります。

テーブルエディター自体は、図面内のテーブルをダブルクリックするか、プログラムで-テーブルオブジェクトの
OnEdit()
メソッド
OnEdit()
呼び出すことで呼び出すことが
OnEdit()
ます。
パーツ数のあるセルの内容の例では、数値形式が以前に設定されていることに注意してください。 デフォルトの形式は
Auto
。これにより、データ型を自動的に決定できます。
図面へのテーブルの追加
通常のプリミティブとして、次の2つの方法のいずれかを使用して、テーブルを図面に追加できます。
Table.DbEntity.AddToCurrentDocument();
-テーブルプリミティブを図面に追加します。テーブルの左上隅の座標は原点と一致します。
Table.PlaceObject();
-インタラクティブなオブジェクト挿入。 ユーザーは、テーブルの挿入ポイントを決定するように求められます。 引数の値に応じて、テーブルエディターの予備呼び出しで挿入を実行できます。 引数なしで、
McEntity.PlaceFlags.Normal
値を
McEntity.PlaceFlags.Normal
呼び出しは、テーブルエディターを呼び出します。
テーブルエディターを呼び出すことなく、挿入ポイントの対話型選択を使用して図面にテーブルを追加します。
Table1.PlaceObject(McEntity.PlaceFlags.Silent);
セルコンテンツとしてのブロックとサブテーブルの使用
MultiCAD.NETテーブルでは、通常のテキストおよび数値データに加えて、ブロックおよびその他のテーブルをセルのコンテンツとして使用できます。 金属プロファイルの要素を記述するテーブルを作成する例で、この可能性を考慮してください。 プロファイルのタイプは最初の列に示され、その仕様は2番目に、プロファイル画像は3番目に示されます。

プロファイルタイプの指定は、次の形式のテーブルとして保存されると仮定します。

さまざまなプロファイルの一般的なビューは、個別のブロックの形式で外部ファイルにあります。

プロファイルイメージとその仕様をメインテーブルに追加します。
サブテーブル挿入
サブテーブルを挿入するには、メソッドを使用します
McTable.InsertSubtable(ref McTable inTable, int row, int col, InsertionModeEnum mode);
inTable
挿入されるテーブル
row, col
挿入が実行されるセルの行と列の番号、
mode
テーブル挿入モード。
挿入モードは次のとおりです。
InSingleCell
テーブルは別のセルに挿入されます。 この場合、結果のテーブルの構造は、挿入されたテーブルの構造に従って変更されます。
CellByCell
テーブルは左上から開始して「セルからセルへ」挿入されます。 結果のテーブルには、両方のテーブルの構造に共通するセルが含まれます。
Over
-テーブルが上に挿入されます。 両方のテーブルのセルサイズは変更されません。
メインテーブルの別のセルにプロファイル仕様テーブルを挿入します。
Table1.InsertSubtable(ProfileTable1, 1, 1, InsertionModeEnum.InSingleCell);

セルのコンテンツとしてのブロック
ブロックを挿入するには、
Cell
クラスの
EmbedBlock()
メソッドを使用します。これにより、ブロックID、その名前またはブロック名、およびそれを含むファイルの名前を指定することにより、別のセルにブロックを埋め込むことができます。
bool EmbedBlock(int row, int col, McObjectId Id);
bool EmbedBlock(int row, int col, ref String name);
bool EmbedBlock(int row, int col, ref String name, ref String fileName);
ブロックとして外部ファイルに保存されているガイドプロファイルの画像を挿入します。
Table1[1, 0].Value = " "; Table1[1, 2].EmbedBlock("Profile_03", "C:\\Profiles.dwg");

テーブル内のオブジェクトプロパティを取得する
MultiCAD.NETのテーブルAPIのもう1つの便利な機能は、プリミティブをテーブルにバインドすることです。 オブジェクトがテーブルにアタッチされた後、数式を使用してそのプロパティをセルのコンテンツとして使用できます。 次のコードは、閉じたポリラインをテーブルにアタッチし、ポリラインで囲まれた領域の値をセルコンテンツ(0、0)として受け取ります。
String object = Table1.AttachObject(polyline.ID); Table1[0, 0].ValueFormula = object + ".\"Geometry.Area\"";
オブジェクトをテーブルにバインドすると、変更を動的に追跡できます。接続されたオブジェクトのプロパティが変更されると、対応するセルの内容も変更されます。
記事に関する議論は、フォーラム(
forum.nanocad.ru/index.php?showtopic=6511)でも利用できます。
記事の英語への翻訳:
MultiCAD.NETの表。 パート2:作成と変更 。
こちらもご覧ください:
MultiCAD.NETでテーブルを操作します。 パート1.テンプレートに基づいてレポートを作成するMultiCAD.NETでテーブルを操作します。 パート3.外部テーブルファイルとMicrosoft Excelとのデータ交換