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


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


回复
 
主题工具 搜索本主题 显示模式
旧 2009-04-14, 02:48 PM   #1
yang686526
高级会员
 
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
yang686526 向着好的方向发展
默认 【转帖】acdbdictionary问题

acdbdictionary问题
acdbdictionary问题
我以前用lsp写的程序中,使用了命名辞典. lsp函数: vlax-ldata-put dictname key value.
这个命名词典:
名称: dream.fei
包含的数据: (("vpscale" . 45) ("printscale" . "45") ("pmlx" . "3") ("blkn" . "6112810484498"))
我现在想取出 "printscale" 这个key 所对应的值来. 请问用c++应该怎么搞?
我现在写成这样出错:
acdbdictionary *pnameobj = null;
if (acdbhostapplicationservices()->workingdatabase()->getnamedobjectsdictionary(pnameobj, acdb::kforread) != acad::eok)
return;

acdbobjectid dictid = null;
if (pnameobj->getat(_t("dream.fei"), dictid) != acad::eok)
{
pnameobj->close();
return;
}
pnameobj->close();

acdbxrecord *pxrec = null;
if(acdbopenobject((acdbobject*&)pxrec, dictid, acdb::kforread) != acad::eok)
return;

struct resbuf *prb = null;
pxrec->rbchain(&prb);
pxrec->close();
if (prb != null)
{
struct resbuf *tmp;
tmp = prb;
while (tmp)
{
acutprintf(_t("\n获取的字符串数据: %s"),tmp->resval.rstring );
tmp= prb->rbnext;
}
acutrelrb(prb);
}
复制代码
如果您打算回答我去看帮助文档的话. 我看你还是不要回复了,省得浪费大家时间. 帮助我已经看过了,对不上号.
[ 本帖最后由 dream.fei 于 7-11-28 05:37 pm 编辑 ]
无言中,除了顶一下还能说什么呢?
我现在用的是autocad 8,objectarx8,所有代码均是,不再另行通知。
感觉到arx里面取不到lisp写的词典啊,
, 所以精彩 !!!
肯定可以的,等我有空了来写
help help help 一个程序在这卡起了.老大们,伸个援手吧~
//here, you cannot open a dictionary as a xrecord,it is very dangerous!!
acdbxrecord *pxrec = null;
if(acdbopenobject((acdbobject*&)pxrec, dictid, acdb::kforread) != acad::eok)
return;
//
// your record is stored in dictioanry (*pdict)
// so you should get the pointer of record by a key, for example, "xrec1"
acdbxrecord *pxrec;
pdict->getat("xrec1", (acdbobject*&) pxrec, acdb::kforread);
[ 本帖最后由 gangzaishao 于 7-12-2 01:58 pm 编辑 ]
我这样改动了一下,但还是取不到值:
static void plantype_tst(void)
{
acdbdictionary *pnameobj = null;
if (acdbhostapplicationservices()->workingdatabase()->getnamedobjectsdictionary(pnameobj, acdb::kforread) == acad::eok)
{
acdbdictionary *pdict = null;
if(pnameobj->getat(_t("dream.fei"), (acdbobject*&)pdict, acdb::kforread) == acad::eok)
{
acdbxrecord *pxrecd = null;
if (pdict->getat(_t("rintscale"), (acdbobject*&)pxrecd, acdb::kforread) == acad::eok)
{
struct resbuf *prb = null;
pxrecd->rbchain(&prb);
if (prb != null)
acutprintf(_t("\n得到的结果: %s."), prb->resval.rstring);
pxrecd->close();
acutrelrb(prb);
}
pdict->close();
}
pnameobj->close();
}
}
复制代码
[ 本帖最后由 dream.fei 于 7-12-2 04:41 pm 编辑 ]
下载次数:1
7-12-2 04:41 pm
该dwg中包含该词典
if (pdict->getat(_t("rintscale"),
差不多了,检查一下这句。。。
是不是 应该 “printscale”
//-------
你可以 这样检查哪里出错了
if(something!=ok)
{
print "something not valid"
}
那句是 printscale , 只是我在帖的时候他变成了表情,所以我就删除了那个表情,忘记把p加上去了.
但是却还是没有值.
在debug的时候,我中断检查过,一直能进入到pxrecd取值. 而且rb也不为空,但是却没有值.
[ 本帖最后由 dream.fei 于 7-12-4 01:36 pm 编辑 ]
再测试一回. 发现在进入pxrecd取值后,返回的是 einvalidclassname. 用 arxdbg 查看数据库. 发现 vl 写的辞典key的class是 vl_vol . 而 arx 写的key的class 是 acdbxrecod. 二都是有区别的. 我想不出怎么转换(用acdbxrecod强制转换是不行的). 我已经用arx改写新辞典而放弃了旧的vl辞典. 郁闷~
yang686526离线中   回复时引用此帖
GDT自动化论坛(仅游客可见)
回复


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

高级搜索
显示模式

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

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



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


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