使用 C# 创建 MleaderStyle Autocad
Creating MleaderStyle Autocad using C#
我已经在 C# 中创建了 MleaderStyle。没有错误,但是当我 运行 它时,我得到了关注 error.Here 是我用于此目的的代码的一部分和 autocad 显示的错误.
MLeaderStyle dst =
(MLeaderStyle)acTrans.GetObject(
acCurDb.DimStyleTableId,
OpenMode.ForWrite);
MText mt = new MText();
mt.Contents = text;
dst.Name = " My LeaderStyle";
dst.ArrowSymbolId = ObjectId.Null;
dst.ArrowSize = 0.18 * scale;
dst.ContentType = 0;
dst.DefaultMText = mt;
dst.LandingGap = gap;
dst.EnableBlockRotation = true;
dst.MaxLeaderSegmentsPoints = 2;
//dst1.Add(dst);
acTrans.AddNewlyCreatedDBObject(dst, true);
MLeader lead = new MLeader();
int i= lead.AddLeader();
lead.AddLeaderLine(i);
lead.AddFirstVertex(i, start);
lead.AddLastVertex(i, end);
lead.MLeaderStyle = dst.ObjectId;
错误;
无法转换类型的对象
'Autodesk.Autocad.DataBaseServices.DimStyleTable'到'Autodesk.AutoCad.DataBaseServices.MleaderStyle'
MLeaderStyle dst = (MLeaderStyle)acTrans.GetObject(
acCurDb.DimStyleTableId, OpenMode.ForWrite);
您不能将 DimStyleTable 转换为 MLeaderStyle,您必须使用 MLeaderStyle 构造函数之一来创建一个新构造函数。
using (var tr = db.TransactionManager.StartTransaction())
{
// the newly created MText have to be disposed after using
using (MText mt = new MText())
{
mt.Contents = text;
// check if the MLeaderStyle dictionary does not already contains a style named "MyLeaderStyle"
DBDictionary mlStyles = (DBDictionary)tr.GetObject(db.MLeaderStyleDictionaryId, OpenMode.ForWrite);
if (!mlStyles.Contains("MyLeaderStyle"))
{
// create a new instance of MLeaderStyle (you can use the overloaded ctor to copy an existing style)
MLeaderStyle dst = new MLeaderStyle();
dst.ArrowSymbolId = ObjectId.Null;
dst.ArrowSize = 0.18 * scale;
dst.ContentType = 0;
dst.DefaultMText = mt;
dst.LandingGap = gap;
dst.EnableBlockRotation = true;
dst.MaxLeaderSegmentsPoints = 2;
// add the new MLeaderStyle to the database
dst.PostMLeaderStyleToDb(db, "MyLeaderStyle");
tr.AddNewlyCreatedDBObject(dst, true);
}
}
tr.Commit();
}
我已经在 C# 中创建了 MleaderStyle。没有错误,但是当我 运行 它时,我得到了关注 error.Here 是我用于此目的的代码的一部分和 autocad 显示的错误.
MLeaderStyle dst = (MLeaderStyle)acTrans.GetObject( acCurDb.DimStyleTableId, OpenMode.ForWrite);
MText mt = new MText();
mt.Contents = text;
dst.Name = " My LeaderStyle";
dst.ArrowSymbolId = ObjectId.Null;
dst.ArrowSize = 0.18 * scale;
dst.ContentType = 0;
dst.DefaultMText = mt;
dst.LandingGap = gap;
dst.EnableBlockRotation = true;
dst.MaxLeaderSegmentsPoints = 2;
//dst1.Add(dst);
acTrans.AddNewlyCreatedDBObject(dst, true);
MLeader lead = new MLeader();
int i= lead.AddLeader();
lead.AddLeaderLine(i);
lead.AddFirstVertex(i, start);
lead.AddLastVertex(i, end);
lead.MLeaderStyle = dst.ObjectId;
错误;
无法转换类型的对象 'Autodesk.Autocad.DataBaseServices.DimStyleTable'到'Autodesk.AutoCad.DataBaseServices.MleaderStyle'
MLeaderStyle dst = (MLeaderStyle)acTrans.GetObject( acCurDb.DimStyleTableId, OpenMode.ForWrite);
您不能将 DimStyleTable 转换为 MLeaderStyle,您必须使用 MLeaderStyle 构造函数之一来创建一个新构造函数。
using (var tr = db.TransactionManager.StartTransaction())
{
// the newly created MText have to be disposed after using
using (MText mt = new MText())
{
mt.Contents = text;
// check if the MLeaderStyle dictionary does not already contains a style named "MyLeaderStyle"
DBDictionary mlStyles = (DBDictionary)tr.GetObject(db.MLeaderStyleDictionaryId, OpenMode.ForWrite);
if (!mlStyles.Contains("MyLeaderStyle"))
{
// create a new instance of MLeaderStyle (you can use the overloaded ctor to copy an existing style)
MLeaderStyle dst = new MLeaderStyle();
dst.ArrowSymbolId = ObjectId.Null;
dst.ArrowSize = 0.18 * scale;
dst.ContentType = 0;
dst.DefaultMText = mt;
dst.LandingGap = gap;
dst.EnableBlockRotation = true;
dst.MaxLeaderSegmentsPoints = 2;
// add the new MLeaderStyle to the database
dst.PostMLeaderStyleToDb(db, "MyLeaderStyle");
tr.AddNewlyCreatedDBObject(dst, true);
}
}
tr.Commit();
}