几何尺寸与公差论坛------致力于产品几何量公差标准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-29, 05:30 PM   #1
yang686526
高级会员
 
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
yang686526 向着好的方向发展
默认 【转帖】实体的扩展数据xdata怎么删除啊?(已解决) - 精华帖集合

实体的扩展数据xdata怎么删除啊?(已解决) - 精华帖集合
www.dimcax.com
实体的扩展数据xdata怎么删除啊?(已解决)

实体的扩展数据xdata怎么删除啊?
(除了利用删除regapptable记录的方法之外)
当我给实体重新赋予xdata后,扩展数据只是增多了。
这时可以用两个应用程序名分别进行访问。
搞不清,为什么给扩展数据重新赋值,xdata总是接着后面增加?
就向在执行resultbuffer.add()一样。
比如对一个实体复制粘贴后,两个实体就有相同的regname1的扩展数据了。为了不删除原先实体的扩展数据,怎么修改新实体的扩展数据。(让新实体只有一个regname的扩展数据)
blockreference br = (blockreference)tr.getobject(id, openmode.forwrite, false);
if (br.xdata !=
null)
{
string regappname = id.handle.value +
"_xdata";
typedvalue[] values = br.xdata.asarray();
values[0] =
new typedvalue((int)dxfcode.extendeddataregappname, regappname);
//注册新程序名
symboltable stable = (symboltable)tr.getobject(curdatabase.regapptableid, openmode.forwrite, false);
if (!stable.has(regappname))
{
regapptablerecord ratr =
new regapptablerecord();
ratr.name = regappname;
stable.add(ratr);
tr.addnewlycreateddbobject(ratr, true);
}
br.upgradeopen();
// br.xdata = null;//没有用的。
br.xdata =
new resultbuffer(values);
br.downgradeopen();
}
复制代码
没有用啊,扩展数据增多了,并没有覆盖原来的。
[ ]

覆盖扩展数据

****************我先贴个方法~我觉得应该有像c++和vba或者lisp一样清除的方法,只是我还没找到,希望高手出现~
100 /// |<summary>
101 /// |clear extended data
102 /// |</summary>
103 [commandmethod("clearxdata", commandflags.usepickset)]
104
105 public void clearxdatatest()
106 {
107 //get selectimplied
108 document doc = autodesk.autocad.applicationservices.application.documentmanager.mdiactivedocument;
109 promptselectionresult res = doc.editor.selectimplied();
110
111 //if err,show alertdialog
112 if (res.status != promptstatus.ok)
113 {
114 autodesk.autocad.applicationservices.application.showalertdialog("err: failure actions, get nothing!");
115 return;
116 }
117
118 //show the count of selectedimplied
119 string strmsg = string.format("selectedcount={0}\nthere are:", res.value.count);
120
121 //traversal entitys
122 foreach (selectedobject obj in res.value)
123 {
124 //show the extended data
125 strmsg = string.format("\n\n{0}name={1};\nid={2};", strmsg, obj.gettype().tostring(), obj.objectid.tostring());
126
127 using (transaction ts = doc.database.transactionmanager.starttransaction())
128 {
129
130 //get objectid
131 dbobject dbobj = doc.database.transactionmanager.getobject(obj.objectid, openmode.forwrite, false);
132
133 //debug:dbobj
134 system.diagnostics.debug.assert(dbobj != null);
135
136 //a new list
137 resultbuffer xdatares = new resultbuffer();
138 //set list is null except application name
139 xdatares.add(new typedvalue(convert.toint16(dxfcode.extendeddataregappname), "myappname"));//application name
140 xdatares.add(new typedvalue(convert.toint16(dxfcode.extendeddataasciistring), ""));//xdata is null
141
142 //set extended data
143 dbobj.xdata = xdatares;
144
145 //judge extended data
146 if (dbobj.xdata == null)
147 {
148 //success: clear completed!"
149 strmsg = string.format("{0}\nxdata={1}\n", strmsg, "null! clear completed!");
150 //
151 //to remove an appname (and its xdata) from an object, just use a resbuf with restype == 1001,
152 //resval == and no data resbufs following it (that is, either its rbnext == null or the next resbuf is another 1001)
153 }
154 else
155 {
156 //err: loser
157 typedvalue[] xdatas = dbobj.xdata.asarray();
158 foreach (typedvalue xdata in xdatas)
159 {
160 strmsg = string.format("{0}\nxdata={1}\n", strmsg, xdata.value);
161 }
162 }
163 ts.commit();
164 }
165 autodesk.autocad.applicationservices.application.showalertdialog(strmsg);
166 }
167 }
复制代码
[ ]
impossible is nothing
程序里有昨天小米说的一句话,贴上来希望对大家有所启示!

to remove an appname (and its xdata) from an object, just use a resbuf with restype == 1001, resval == and no data resbufs following it (that is, either its rbnext == null or the next resbuf is another 1001).
[ ]
impossible is nothing
没法删只能替换
书山有路勤为径,学海无涯苦作舟!
是版本问题吗?cad2006以上有方法吗?高版本的我没有尝试过~
impossible is nothing
哈哈,终于解决问题了。整理下马上就把源码贴出来了。再次多谢各位的指导!
yang686526离线中   回复时引用此帖
GDT自动化论坛(仅游客可见)
回复


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

高级搜索
显示模式

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

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



所有的时间均为北京时间。 现在的时间是 12:50 PM.


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