找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1943|回复: 5

[ARX程序]:大批量DWG文件挨个执行某一个操作

[复制链接]
发表于 2004-5-14 14:50:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
对一批dwg文件进行同样的操作,
也就是执行一个命令,但是文件太多,打开关闭太麻烦,
最好能一次选择多个文件,然后自动自行指定的lisp程序里的命令。
我不知道的是对于某一个文件怎么操作,
1。打开文件
2。向这个文件发送命令
3。关闭该文件
思路对吧?但是不知道到底用到哪些技术,多文档?通知?事务处理?代理?
不知道!

请您赐教!

在线等待!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 1个

财富等级: 恭喜发财

发表于 2004-5-14 22:49:33 | 显示全部楼层
编写一个脚本文件(*.Scr),让ACAD自身执行,可以不用编程
大概是这样(好几年没有用了)
open yourfile
yourcommand
close
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-5-15 20:37:24 | 显示全部楼层
用arx也可。先通过CFileDialog类选择要处理的文件。
然后循环用数据库的形式修改文件即可。
采用该方法不用显示图形,速度要快得多。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-9-2 16:16:18 | 显示全部楼层
用 COM 开发一个exe 程序, 这个程序 能自动打开AutoCAD, 然后装载图纸, 然后执行你的命令.
然后关闭图纸.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2004-9-3 09:32:46 | 显示全部楼层
可用以下函数完成!
函数将c:\bak目录下所有dwg文件的文本读出并存入t1.txt文件
///使用以下代码注意加入必要的正确性判断!
void chdwg1(char *file,FILE *fp)
{
AcDbBlockTable *pBlockTable;
AcDbBlockTableRecord *pRec;
AcDbDatabase DB(Adesk::kFalse);
Acad::ErrorStatus err;
DB.readDwgFile(file);
//acdbCurDwg()->getBlockTable(pBlockTable,AcDb::kForRead);
DB.getBlockTable(pBlockTable,AcDb::kForRead);
pBlockTable->getAt(ACDB_MODEL_SPACE, pRec,AcDb::kForWrite);
pBlockTable->close();
AcDbBlockTableRecordIterator *pR;
pRec->newIterator(pR);
pRec->close();
int n;
for(n=0;!pR->done();n++,pR->step()){
    AcDbEntity *pE;
    AcDbObjectId id;
    pR->getEntityId(id);
    err=pR->getEntity(pE,AcDb::kForWrite);
    if (err == Acad::eOk) {
      if(strcmp(pE->isA()->name(),"AcDbText")==0){
        AcDbText *pt=AcDbText::cast(pE);
        fprintf(fp,"%lf %lf %s\n",pt->position().x,pt->position().y,pt->textString());
        }
       }
      pE->close();
    }
//DB.saveAs(file);//若修改加该句
}


void chdwgall( void )
{
char file[260];
struct _finddata_t c_file;
long hFile;
FILE *fp;
/* Find first .c file in current directory */
fp=fopen("c:\\bak\\t1.txt","w");
if( (hFile = _findfirst( "c:\\bak\\*.dwg", &c_file )) != -1L ){
  strcpy(file,"c:\\bak\\");
  strcat(file,c_file.name);
  ads_printf("\nfile=%s",file);
  chdwg1(file,fp);
  while( _findnext( hFile, &c_file ) == 0 ) {
    strcpy(file,"c:\\bak\\");
    strcat(file,c_file.name);
    ads_printf("\nfile=%s",file);
    chdwg1(file,fp);
     }
  _findclose( hFile );
   }
fclose(fp);
}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-9-3 16:30:14 | 显示全部楼层
如果执行的任务很简单的话,用COM做一个程序来驱动CAD好像有点大炮打蚊子的感觉,所以这个问题关键是看它打开文件要干什么!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-22 01:39 , Processed in 0.195345 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表