EaBIM
标题:
[数据库操作] 给一条直线新增一个属性
[打印本页]
作者:
萧闫子
时间:
2014-1-8 16:40
标题:
[数据库操作] 给一条直线新增一个属性
在AutoCAD2010程序界面画一条直线保存为Drawing.dwg,在C#中启动AutoCAD2010打开Drawing.dwg获取这条直线并给这条直线新增一个属性length。
执行下面代码不报异常,但在直线的特性中找不到Length属性。麻烦各位帮我看看是什么问题。
class AutoClass
{
[CommandMethod("WriteData")]
public void AddData()
{
Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
Database db = doc.Database;
Editor ed = doc.Editor;
PromptEntityResult ent = ed.GetEntity("\n选择要写数据的对象");
if (ent.Status == PromptStatus.OK)
{
using (Transaction tr = db.TransactionManager.StartTransaction())
{
Entity entity = (Entity)tr.GetObject(ent.ObjectId, OpenMode.ForWrite, true);
if (entity.GetType().Name.ToString() == "Line")
{
Line line = entity as Line;
AttributeDefinition ad = AttributeDefinition("Length", "L", line.Length.ToString(), new Point3d(100, 100, 0));
BlockTableRecord btr = new BlockTableRecord();
btr.Name = "LineBlock2";
btr.AppendEntity(entity);
btr.AppendEntity(ad);
ObjectId id;
id = AddToBlockTable(btr);
ToModelSpace(id, Point3d.Origin, db);
tr.Commit();
}
}
}
}
/// <summary>
/// 创建属性
/// </summary>
/// <param name="Label">标记名</param>
/// <param name="Prompt">提示</param>
/// <param name="Value">属性值</param>
/// <param name="pt">属性插入点位置</param>
/// <returns></returns>
public static AttributeDefinition AttributeDefinition(string Label, string Prompt, string Value, Point3d pt)
{
AttributeDefinition ad = new AttributeDefinition();
ad.Constant = false;
ad.Tag = Label;
ad.Prompt = Prompt;
ad.TextString = Value;
ad.Position = pt;
return ad;
}
/// <summary>
/// 将指定的块定义变成块参照添加到指定模型空间
/// </summary>
/// <param name="blkid">块定义Id</param>
/// <param name="pt">插入点</param>
/// <param name="db">数据库</param>
/// <returns></returns>
public static ObjectId ToModelSpace(ObjectId blkid, Point3d pt, Database db)
{
ObjectId blkrfid = new ObjectId();
using (Transaction trans = db.TransactionManager.StartTransaction())
{
BlockTable bt = trans.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
BlockTableRecord modelspace = trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;
BlockTableRecord block = trans.GetObject(blkid, OpenMode.ForRead) as BlockTableRecord;
BlockReference br = new BlockReference(pt, blkid); // 通过块定义添加块参照
blkrfid = modelspace.AppendEntity(br); //把块参照添加到块表记录
trans.AddNewlyCreatedDBObject(br, true); // 通过事务添加块参照到数据库
foreach (ObjectId id in block)
{
if (id.ObjectClass.Equals(RXClass.GetClass(typeof(AttributeDefinition))))
{
AttributeDefinition ad = trans.GetObject(id, OpenMode.ForRead) as AttributeDefinition;
AttributeReference ar = new AttributeReference(ad.Position, ad.TextString, ad.Tag, new ObjectId());
br.AttributeCollection.AppendAttribute(ar);
}
}
trans.Commit();
}
return blkrfid;
}
/// <summary>
/// 将块表记录加入到块表中
/// </summary>
/// <returns></returns>
public static ObjectId AddToBlockTable(BlockTableRecord Record)
{
Database db = HostApplicationServices.WorkingDatabase;
ObjectId id = new ObjectId();
using (Transaction transaction = db.TransactionManager.StartTransaction())
{
BlockTable table = transaction.GetObject(db.BlockTableId, OpenMode.ForWrite) as BlockTable;
id = table.Add(Record);
transaction.AddNewlyCreatedDBObject(Record, true);
transaction.Commit();
}
return id;
}
}
复制代码
作者:
AK47
时间:
2014-2-13 10:00
帮我解决了很多实际的问题
作者:
车晶晶
时间:
2014-2-18 12:08
路过!!! 帮顶……
作者:
烈火ivk
时间:
2014-3-10 13:22
路过!!! 帮顶……
作者:
严英华
时间:
2014-3-11 11:06
顶起来…………
作者:
长风
时间:
2014-3-11 11:11
谢谢!!! 帮顶……
作者:
等你回来
时间:
2014-3-11 11:15
了解下BIM.....
作者:
风吹枫落
时间:
2014-3-14 11:19
路过!!! 帮顶……
作者:
cocacola
时间:
2014-3-14 11:24
(*^__^*) 嘻嘻……
作者:
chen_0003
时间:
2014-3-14 11:28
顶!!!!!!!!!!
作者:
月之影
时间:
2014-3-14 11:34
(*^__^*) 嘻嘻……
作者:
MIMDxFzL
时间:
2014-5-7 10:01
顶起来…………
作者:
宇航员
时间:
2014-5-7 10:15
顶......
楼下跟上.....
作者:
楚客
时间:
2014-5-13 10:19
路过!!! 不发表意见……
作者:
车晶晶
时间:
2014-5-13 10:25
路过!!!
帮顶……
作者:
矮矮
时间:
2014-5-13 10:27
顶起来…………
作者:
lw7511
时间:
2014-5-20 14:31
顶!!!!!!!!!!!!!!!!!!!!!!!!!
作者:
看看侃侃
时间:
2014-5-22 15:22
顶!!!!!!!!!!!!!!!!!!!!!!!!!
作者:
中华!
时间:
2014-5-22 15:37
路过!!!
帮顶……
作者:
黑超BB
时间:
2014-5-22 15:47
(*^__^*) 嘻嘻……
作者:
best
时间:
2014-6-9 15:46
路过!!! 不发表意见……
作者:
dgren
时间:
2014-6-9 15:51
顶!!!!!!!!!!!!!!!!!!!!!!!!!
作者:
欧宝
时间:
2014-6-11 18:13
路过!!!
帮顶……
作者:
zj1345
时间:
2014-6-11 18:15
顶起来…………
作者:
中华!
时间:
2014-6-13 14:13
(*^__^*) 嘻嘻……
作者:
chen_0003
时间:
2014-6-13 14:19
顶......
楼下跟上.....
作者:
dison
时间:
2014-6-13 14:30
(*^__^*) 嘻嘻……
作者:
cocacola
时间:
2014-6-13 14:32
顶起来…………
欢迎光临 EaBIM (https://eabim.net/)
Powered by Discuz! X3.2