マルチ引出線を右から左へ引くと、2点目の座標がずれる。
マルチ引出線を右から左へ引くと、2点目の座標がプログラムで指定した位置からずれた位置へ作図されてしまいます。
※左から右へ引いた場合は、プログラムで指定した座標に作図することができました。
MLeaderの初期化が足りていないのでしょうか?
回避策を教えてください。
[CommandMethod("xxxx", CommandFlags.Session)]
public void Entry()
{
var text = "あいうえお";
// 1点目
var p1 = new Point3d(0,0,0);
// 2点目
var p2 = new Point3d(-1000,1000,1000); // ←作図したマルチ引出線を確認すると、
// 座標p2からずれた位置に2点目が設定されている。
AddMLeader(p1, p2, text);
}
private void AddMLeader(Point3d first, Point3d last, string tag)
{
var doc = CADApplication.DocumentManager.MdiActiveDocument;
using (doc.LockDocument())
using (var tran = doc.TransactionManager.StartTransaction())
{
var ent = new MLeader();
ent.SetDatabaseDefaults();
var leader = ent.AddLeader();
var idx = ent.AddLeaderLine(leader);
ent.AddFirstVertex(idx, first);
ent.AddLastVertex(idx , last);
// 下線の方向を設定
var direction = first.GetVectorTo(last).X < 0 ? Vector3d.XAxis.Negate() : Vector3d.XAxis;
ent.SetDogleg(idx, direction);
ent.TextHeight = 100;
ent.ArrowSize = 2;
ent.ContentType = ContentType.MTextContent;
var textEnt = new MText();
textEnt.SetDatabaseDefaults();
textEnt.TextHeight = 250;
textEnt.Contents = tag;
ent.MText = textEnt;
// データベースへ登録
var bkTbl = (BlockTable)tran.GetObject(doc.Database.BlockTableId, OpenMode.ForRead);
var blkTblRec = (BlockTableRecord)tran.GetObject(bkTbl[BlockTableRecord.ModelSpace], OpenMode.ForRead);
blkTblRec.UpgradeOpen();
blkTblRec.AppendEntity(ent);
tran.AddNewlyCreatedDBObject(ent, true);
textEnt.Dispose();
tran.Commit();
}
}