几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量  


返回   几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量 » 仿射空间:CAX软件开发(三)二次开发与程序设计 » CAD二次开发 » AutoCAD二次开发 » ObjectARX(VB.NET/C#)
用户名
密码
注册 帮助 会员 日历 银行 搜索 今日新帖 标记论坛为已读


回复
 
主题工具 搜索本主题 显示模式
旧 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自动化论坛(仅游客可见)
回复


主题工具 搜索本主题
搜索本主题:

高级搜索
显示模式

发帖规则
不可以发表新主题
不可以回复主题
不可以上传附件
不可以编辑您的帖子

vB 代码开启
[IMG]代码开启
HTML代码关闭



所有的时间均为北京时间。 现在的时间是 07:08 AM.


于2004年创办,几何尺寸与公差论坛"致力于产品几何量公差标准GD&T | GPS研究/CAD设计/CAM加工/CMM测量"。免责声明:论坛严禁发布色情反动言论及有关违反国家法律法规内容!情节严重者提供其IP,并配合相关部门进行严厉查处,若內容有涉及侵权,请立即联系我们QQ:44671734。注:此论坛须管理员验证方可发帖。
沪ICP备06057009号-2
更多