高级会员
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
|
【转帖】有关objectarx提取autocad数据的问题
有关objectarx提取autocad数据的问题
有关objectarx提取autocad数据的问题
我想用objectarx提取现有dwg文件中的信息,如线段的长度、文字信息,等等
然后我找了下面这段程序:
public:
// - arx3_6.blocksearches1 command (do not rename)
static void arx3_6blocksearches1(void)
{
acdbdatabase extdb(adesk::kfalse); //定义一个空数据库
char *blockname;
wchar_t dwgname[134];
struct resbuf filedia, fileres;
acedgetvar(_t("filedia"), &filedia); //读入系统变量filedia之值
if(filedia.resval.rint == 0)
filedia.resval.rint = 1;
if(ads_getfiled(_t("选择图形文件"), null, _t("dwg"), 0, &fileres) == rtnorm)
{
if(fileres.restype == rtstr)
// dwgname = fileres.resval.rstring;
_tcscpy(dwgname, fileres.resval.rstring);
//strcpy(dwgname, (char *)fileres.resval.rstring);
else
return;
}
else
return;
free(fileres.resval.rstring);
//将选择的dwg文件读入extdb数据库中
// converttowchar(pstr);
// wchar_t *text = converttowchar(dwgname);
extdb.readdwgfile(dwgname);
// extdb.readdwgfile((achar *)dwgname);
//获得指向当前图形的块表指针pblocktable
acdbblocktable *pbtable; //定义块表记录指针
//获得指向extdb数据库的块表指针
extdb.getblocktable(pbtable, acdb::kforread);
//获得指向该图块的块表记录指针pblocktablerecord;
acdbblocktablerecord *pbtrecord; //定义块表记录指针
//定义遍历块表的浏览器、获得指向块表浏览器指针
acdbblocktableiterator *pbiterator;
pbtable->newiterator(pbiterator);
//利用循环结构和块表浏览器遍历块表
for(pbiterator->start(); pbiterator->done(); pbiterator->step())
{
//调用开办浏览器的成员函数getrecord获得指向开办记录的指针
pbiterator->getrecord(pbtrecord, acdb::kforread, adesk::kfalse);
pbtrecord->getname((achar *&)blockname); //得到块名
char tmp[32];
tmp[0] = *blockname;
ads_printf(_t("\n块名: %s"), blockname); //显示块名
}
delete pbiterator; //删除浏览器对象
//pbtrecord->close();
pbtable->close();
}
} ;
但是它始终运行不到for(pbiterator->start(); pbiterator->done(); pbiterator->step())这个循环里面去,敢情是没有取到数据?
请高手帮忙改进一下程序,或者提供一个明确一点的研究方向。小妹先在这谢过了
这段程序可以只能取到块,取不到你要的文字线段之类的东西,,实体都存在块表的模型空间里面,,呵呵,,arxdbg挺好的,你需要的里面全都可以实现,在arx的sample里面,可以研究一下,那个研究透彻,arx就基本上可以搞定了
//定义遍历块表的浏览器、获得指向块表浏览器指针
acdbblocktableiterator *pbiterator;
pbtable->newiterator(pbiterator);
我觉得这里有点问题,不应该是那样子的;
我认为是这样:
acdbblocktablerecord *px;
acdbblocktablerecorditerator *precod;
px->newiterator(precod);
if this article is useful to you ,please let me know ,your reply is my power!
|