news 2026/5/20 9:42:07

批量遍历文件夹中的DWG文件,读取多段线总面积。

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
批量遍历文件夹中的DWG文件,读取多段线总面积。
;;;============================================================;;; 功能:批量遍历文件夹中的DWG文件,读取多段线总面积;;; 方式:直接打开每个图形(不依赖ObjectDBX,兼容所有版本);;; 命令:GetPolylineArea_Open;;;============================================================(vl-load-com);;; 调用Windows文件夹浏览对话框(defunBrowseForFolder(msg/shellfolderfolderObjpath)(setqshell(vlax-create-object"Shell.Application"))(setqfolder(vlax-invokeshell'BrowseForFolder0msg0))(iffolder(progn(setqfolderObj(vlax-get-propertyfolder'Self))(setqpath(vlax-get-propertyfolderObj'Path))))(vlax-release-objectshell)(ifpath(vl-string-right-trim"\\"path)nil));;; 检查并设置SDI模式(必须为0,允许多文档)(defunCheckSDIMode(/sdiVal)(setqsdiVal(getvar"SDI"))(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"*.dwg"1))(if(nulldwgList)(progn(princ"\n该文件夹下没有找到DWG文件!")(exit)))(princ(strcat"\n共发现 "(itoa(lengthdwgList))" 个DWG文件。"));; 4. 指定输出文本文件路径(setqoutPath(getfiled"保存面积统计结果"(getvar"dwgprefix")"txt"1))(if(nulloutPath)(exit));; 5. 打开输出文件(写入模式)(setqoutFile(openoutPath"w"))(if(nulloutFile)(progn(princ"\n错误:无法创建输出文件!")(exit)))(write-line"文件名\t\t总面积"outFile)(write-line"================================"outFile);; 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-apply'vla-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-pobj'Area)(not(zerop(vla-get-Areaobj))))(setqtotalArea(+totalArea(vla-get-Areaobj))))));; 关闭文档(不保存更改)(setqcloseErr(vl-catch-all-apply'vla-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 方法,待查原因。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/20 9:41:12

3步掌握ScienceDecrypting:终极PDF解密工具完全指南

3步掌握ScienceDecrypting:终极PDF解密工具完全指南 【免费下载链接】ScienceDecrypting 破解CAJViewer带有效期的文档,支持破解科学文库、标准全文数据库下载的文档。无损破解,保留文字和目录,解除有效期限制。 项目地址: http…

作者头像 李华
网站建设 2026/5/20 9:41:10

Visio画流程图,大括号{}到底藏哪儿了?两种方法帮你快速找到并画好

Visio流程图绘制:揭秘大括号的隐藏位置与高效绘制技巧 在办公文档、技术架构图或流程设计中,大括号({})是表达分支、循环或集合关系的常见符号。然而许多Visio新手在需要使用时,往往会在界面中四处寻找却无功而返。这种…

作者头像 李华
网站建设 2026/5/20 9:38:42

Fast-GitHub架构解析:基于Manifest V3的浏览器扩展网络加速方案

Fast-GitHub架构解析:基于Manifest V3的浏览器扩展网络加速方案 【免费下载链接】Fast-GitHub 国内Github下载很慢,用上了这个插件后,下载速度嗖嗖嗖的~! 项目地址: https://gitcode.com/gh_mirrors/fa/Fast-GitHub 技术架…

作者头像 李华
网站建设 2026/5/20 9:37:56

实数理论:一篇文章带你看清数学最深的根基

一、先讲一个让我"开窍"的故事 大一刚开学,第一节数学分析课。 老师走进教室,没有寒暄,直接在黑板上写下一行字: “什么是实数?” 教室里一片寂静。同学们面面相觑——这还用问吗?实数不就是………

作者头像 李华