IJCADで印刷処理を行う時にBlockTableRecordのNameに値を設定しても反映されない
IJCAD 2018 MechanicalでC#を使用してAutoCADのソースを移植する作業を行っております。
処理の一つに図面を印刷する機能があるのですが
図面が小さい場合はモデル空間に作図された図面をそのまま印刷し、
図面が大きい場合はレイアウト空間に図面を移動させて
範囲を指定してズームを行い、分割して印刷する機能があります。
レイアウト空間に移動を行う理由は、印刷対象となる図面には図枠が存在するのですが
その図枠の中だけを拡大したいため、ビューポートを利用しているからです。
図面が小さい場合の印刷は正常にできるのですが、
図面が大きい場合のレイアウト空間に移動を行う処理で
BlockTableRecordのNameに値を設定しても反映されない不具合が発生しています。
Document acDoc = Application.DocumentManager.MdiActiveDocument;
Database acCurDb = acDoc.Database;
using (acDoc.LockDocument())
using (Transaction acTrans = acCurDb.TransactionManager.StartTransaction())
{
// カレントレイアウトの切替
LayoutManager acLayoutMgr = LayoutManager.Current;
// テンプレートファイル読み込み用データベース
Database acExDb = new Database(false, true);
acExDb.ReadDwgFile("テンプレートファイルパス", FileOpenMode.OpenForReadAndAllShare, true, "");
// テンプレートファイル読み込み用データベースのトランザクション
using (Transaction acTransEx = acExDb.TransactionManager.StartTransaction())
{
// レイアウト情報取得
DBDictionary layoutsEx = acTransEx.GetObject(acExDb.LayoutDictionaryId, OpenMode.ForRead) as DBDictionary;
// 指定レイアウトの存在チェック
if (layoutsEx.Contains("レイアウト名"))
{
// 実レイアウト取得
Layout layEx = layoutsEx.GetAt("レイアウト名").GetObject(OpenMode.ForRead) as Layout;
BlockTableRecord blkBlkRecEx = acTransEx.GetObject(layEx.BlockTableRecordId, OpenMode.ForRead) as BlockTableRecord;
// レイアウト用オブジェクトコレクション設定
ObjectIdCollection idCol = new ObjectIdCollection();
foreach (ObjectId id in blkBlkRecEx)
{
idCol.Add(id);
}
// カレント図面のブロックテーブルを書き込みモードでオープン
BlockTable blkTbl = acTrans.GetObject(acCurDb.BlockTableId, OpenMode.ForWrite) as BlockTable;
using (BlockTableRecord blkBlkRec = new BlockTableRecord())
{
int layoutCount = layoutsEx.Count - 1;
blkTblRec.Name = "*Paper_Space" + layoutCount.ToString(); // ←ブレークで止めて実行してもエラーにはならないがNameの中身が""のまま
blkTbl.Add(blkBlkRec); // ←ここでエラーeEmptyRecordNameが発生する
acTrans.AddNewlyCreatedDBObject(blkTblRec, true);
using (IdMapping icMap = new IdMapping())
{
acExDb.WblockCloneObjects(idCol,
blkTblRec.ObjectId,
icMap,
DuplicateRecordCloning.Ignore,
false);
}
AutoCADと同じソースなのですが、AutoCADではblkTblRec.Nameに値が設定され
blkTbl.Add(blkBlkRec)が正常に動くのですが
IJCADではblkTblRec.Nameが""のままでblkTbl.Add(blkBlkRec)で落ちてしまいます。
eEmptyRecordNameで検索したり
IJCADの公式の「レイアウトを印刷する」ヘルプなどを調べたりしましたが、
解決することができませんでした。
なぜNameに値が設定できないのでしょうか。