『已解决』利用cad的api怎么画一个带箭头的“引线”(leader)? - 精华帖集合
www.dimcax.com
『已解决』利用cad的api怎么画一个带箭头的“引线”(leader)?
请问各位大虾:利用cad的api怎么画一个带箭头的“引线”(leader)?就像输入“leader”命令一样。是不是和画直线,圆等实体一样的画法啊?有没有其它其它画带箭头直线的方法?
我用的是以下这个方法,怎么没有反应?
public static objectid drawline(point3d startpoint,point3d endpoint)
{
objectid lineid = objectid.null;// the return value for this function
database db = hostapplicationservices.workingdatabase;//获得当前工作空间的数据库
using (transaction trans = db.transactionmanager.starttransaction())
{
blocktable bt = trans.getobject(db.blocktableid, openmode.forwrite) as blocktable;
blocktablerecord btr = bt[blocktablerecord.modelspace].getobject(openmode.forwrite) as blocktablerecord;
leader leader = new leader();// 标注线(带箭头)
leader.appendvertex(startpoint);
leader.appendvertex(endpoint);
lineid = btr.appendentity(leader);
trans.addnewlycreateddbobject(leader, true);
trans.commit();
}
return lineid;
}
复制代码
光有一个appendvertex函数是不够的,还要一个setvertexat函数……
public static objectid drawline(point3d startpoint,point3d endpoint)
{
objectid leaderid = objectid.null;// the return value for this function
database db = hostapplicationservices.workingdatabase;//获得当前工作空间的数据库
using (transaction trans = db.transactionmanager.starttransaction()) // begin the transaction
{
blocktable bt = trans.getobject(db.blocktableid, openmode.forwrite) as blocktable;//获得块表
blocktablerecord btr = bt[blocktablerecord.modelspace].getobject(openmode.forwrite) as blocktablerecord;//获得模型空间的块表记录
leader leader = new leader();// 标注线(带箭头)
leader.appendvertex(startpoint);
leader.appendvertex(endpoint);
leader.setvertexat(0, startpoint);
leader.setvertexat(1, endpoint);
leaderid = btr.appendentity(leader);
trans.addnewlycreateddbobject(leader, true);
trans.commit();
}
return leaderid;
}
复制代码
是这样吗?我试了,还是不行。
using system;
using autodesk.autocad.applicationservices;
using autodesk.autocad.runtime;
using autodesk.autocad.databaseservices;
using autodesk.autocad.editorinput;
using autodesk.autocad.geometry;
namespace cs_temp
{
public class testclass
{
[commandmethod("test")]
public void test()
{
database db = hostapplicationservices.workingdatabase;
using (transaction trans = db.transactionmanager.starttransaction())
{
blocktable bt = (blocktable)trans.getobject
(db.blocktableid, openmode.forwrite);
blocktablerecord btr = (blocktablerecord)trans.getobject
(bt[blocktablerecord.modelspace],openmode.forwrite);
leader leader = new leader();
leader.appendvertex(new point3d(0,0,0));
leader.appendvertex(new point3d(20,10,0));
leader.setvertexat(0, new point3d(0, 0, 0));
leader.setvertexat(1, new point3d(20, 10, 0));
btr.appendentity(leader);
trans.addnewlycreateddbobject(leader, true);
trans.commit();
}
}
}
}
复制代码
版主,用你的例子没有问题。问题解决了,非常感谢!
学习
学问必须合乎自己的兴趣,方才可以得益。
跟着学习。。
原来可以这样画“引线”