![]() |
【转帖】有关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! |
所有的时间均为北京时间。 现在的时间是 04:39 PM. |