批量遍历文件夹中的DWG文件,读取多段线总面积。
;;;;;; 功能批量遍历文件夹中的DWG文件读取多段线总面积;;; 方式直接打开每个图形不依赖ObjectDBX兼容所有版本;;; 命令GetPolylineArea_Open;;;(vl-load-com);;; 调用Windows文件夹浏览对话框(defunBrowseForFolder(msg/shellfolderfolderObjpath)(setqshell(vlax-create-objectShell.Application))(setqfolder(vlax-invokeshellBrowseForFolder0msg0))(iffolder(progn(setqfolderObj(vlax-get-propertyfolderSelf))(setqpath(vlax-get-propertyfolderObjPath))))(vlax-release-objectshell)(ifpath(vl-string-right-trim\\path)nil));;; 检查并设置SDI模式必须为0允许多文档(defunCheckSDIMode(/sdiVal)(setqsdiVal(getvarSDI))(if(sdiVal1)(progn(princ\n【警告】当前SDI系统变量为1单文档模式无法批量打开多个图形。)(princ\n请将SDI设置为0后再运行本程序。)(princ\n命令:SDI回车 - 输入 0 回车)nil)t));;; 主函数(defunC:GetPolylineArea_Open(/folderPath outPath dwgList outFile acadObj totalArea doc modelSpace obj fullPath closeErr);; 1. 检查SDI模式(if(not(CheckSDIMode))(exit));; 2. 选择文件夹(setqfolderPath(BrowseForFolder请选择存放DWG文件的文件夹))(if(nullfolderPath)(progn(princ\n未选择文件夹程序退出。)(exit)))(if(not(vl-file-directory-pfolderPath))(progn(princ(strcat\n错误无效的文件夹路径-folderPath))(exit)));; 3. 获取所有DWG文件列表(setqdwgList(vl-directory-filesfolderPath*.dwg1))(if(nulldwgList)(progn(princ\n该文件夹下没有找到DWG文件)(exit)))(princ(strcat\n共发现 (itoa(lengthdwgList)) 个DWG文件。));; 4. 指定输出文本文件路径(setqoutPath(getfiled保存面积统计结果(getvardwgprefix)txt1))(if(nulloutPath)(exit));; 5. 打开输出文件写入模式(setqoutFile(openoutPathw))(if(nulloutFile)(progn(princ\n错误无法创建输出文件)(exit)))(write-line文件名\t\t总面积outFile)(write-lineoutFile);; 6. 获取AutoCAD应用程序对象(setqacadObj(vlax-get-acad-object));; 7. 遍历每个DWG文件(foreachdwg dwgList(setqfullPath(strcatfolderPath\\dwg)totalArea0.0)(princ(strcat\n正在处理: dwg));; 尝试打开文档(setqdocnil)(if(not(vl-catch-all-error-p(setqdoc(vl-catch-all-applyvla-open(list(vla-get-DocumentsacadObj)fullPath)))))(progn;; 获取模型空间(setqmodelSpace(vla-get-ModelSpacedoc))(vlax-forobj modelSpace(if(or((vla-get-ObjectNameobj)AcDbPolyline)((vla-get-ObjectNameobj)AcDb2dPolyline))(if(and(vlax-property-available-pobjArea)(not(zerop(vla-get-Areaobj))))(setqtotalArea(totalArea(vla-get-Areaobj))))));; 关闭文档不保存更改(setqcloseErr(vl-catch-all-applyvla-close(listdoc:vlax-false)))(if(vl-catch-all-error-pcloseErr)(princ(strcat\n【警告】关闭文档时出错: dwg)));; 写入结果(write-line(strcatdwg\t\t(rtostotalArea22))outFile);; 强制垃圾回收减少内存占用(gc))(progn(princ(strcat\n无法打开文件: dwg 已跳过。))(write-line(strcatdwg\t\t(打开失败))outFile))));; 8. 清理(closeoutFile)(princ(strcat\n\n处理完成结果已保存至outPath))(princ));;; 提供命令别名(princ\n输入命令 GetPolylineArea_Open 启动批量面积统计直接打开图形方式。)(princ)cad 版本为2020无法使用ObjectDBX方法测试提示无close 方法待查原因。