查看单个帖子
旧 2009-04-20, 10:38 AM   #1
yang686526
高级会员
 
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
yang686526 向着好的方向发展
默认 【转帖】c#如何操作实体的扩展数据?

c#如何操作实体的扩展数据?
www.dimcax.com
c#如何操作实体的扩展数据?
在autolisp中,用entget和entmod可以获得及修改扩展的自定义数据,即先用regapp定义一个应用类型,然后用entget和entmod操作。请问各位,在c#中如何操作这样的扩展实体数据?
c# + autocad public void mousedoubleclicktest() { //获取autocad中当前选择的实体 document doc = autocadapp.documentmanager.mdiactivedocument; promptselectionresult res = doc.editor.selectimplied(); if (res.status != promptstatus.ok) { autocadapp.showalertdialog("获取选择的实体失败;"); return; } string strmsg = string.format("selectedcount={0}\nthere are:", res.value.count); foreach (selectedobject obj in res.value ) { strmsg = string.format("\n\n{0}name={1};\nid={2};", strmsg, obj.gettype().tostring(), obj.objectid.tostring() ); using(transaction ts = doc.database.transactionmanager.starttransaction()) { dbobject dbobj = doc.database.transactionmanager.getobject(obj.objectid, openmode.forwrite, false); system.diagnostics.debug.assert(dbobj != null); if (dbobj.xdata != null) { typedvalue[] xdatas = dbobj.xdata.asarray(); foreach (typedvalue xdata in xdatas) { strmsg = string.format("{0}\nxdata={1}\n", strmsg, xdata.value); } } else { //查看是否注册了应用程序 using(transaction ts2 = doc.database.transactionmanager.starttransaction()) { regapptable apptable =(regapptable)ts2.getobject(doc.database.regapptableid, openmode.forwrite); bool exist = false; foreach (objectid aid in apptable) { regapptablerecord app =(regapptablerecord)ts2.getobject(aid, openmode.forread); if (app.name == "myappname") { exist = true; break; } } //create regapptablerecord, if needed if (!exist) { regapptablerecord tr = new regapptablerecord(); tr.name = "myappname"; apptable.add(tr); ts2.addnewlycreateddbobject(tr, true); ts2.commit(); } } promptresult ret = doc.editor.getstring("请输入一个字符串当作扩展数据:"); while (ret.status != promptstatus.ok) { ret = doc.editor.getstring("请输入一个字符串当作扩展数据:"); } resultbuffer xdata = new resultbuffer(); xdata.add(new typedvalue(convert.toint16(dxfcode.extendeddataregappname), "myappname"));//第一项要写注册的应用程序名称 xdata.add(new typedvalue(convert.toint16(dxfcode.extendeddataasciistring),ret.stringresult)); //dbobj. dbobj.xdata = xdata; strmsg = string.format("{0};写入扩展数据:{1}", strmsg, ret.stringresult); } ts.commit(); } } autocadapp.showalertdialog(strmsg); } [
上面的帖子如果觉得复杂的话,可以使用dotnetarx中的tools.setxdata和getxdata来对扩展数据进行操作。
c#最适合开发autocad,因为它拥有vb容易的特点,却具有vc++的强大功能。
不错 收了~
system.diagnostics.debug.assert(dbobj != null); 我是菜鸟,这句没看懂. 另外,为什么在添加扩展数据的时候总要注册程序啊
总能把手机放到我自己找不到的地方...
请问如何删除一个实体的扩展数据?
总能把手机放到我自己找不到的地方...
请问如何修改扩展数据中的某一条记录呢??
学习了,谢谢.
实体的扩展数据xdata怎么删除啊?
实体的扩展数据xdata怎么删除啊?参见:
上面的帖子如果觉得复杂的话,可以使用dotnetarx中的tools.setxdata和getxdata来对扩展数据进行操作。
admin 发表于
这个tools需要引用什么文件啊?我用的是vs
yang686526离线中   回复时引用此帖
GDT自动化论坛(仅游客可见)