夜雨聆风学习资料网

ARTICLE · 1355928

AutoCAD批量导入PDF插件(二)

AutoCAD批量导入PDF插件(二)

上一期我们做了 INPDF,把 PDF 批量导入 AutoCAD。很多人导入后遇到的第一个问题是:

图是进来了,但比例不对。例如,PDF 里量一段标注是 1200,图纸上写的却是 5000。

手动缩放要算比例、记小数、反复试,很容易出错,对齐缩放又有操作繁琐的问题。

为此这里提供一个 LISP 工具:定值缩放。选对象、点两点确定原始距离、输入目标长度,程序自动算比例并缩放。

使用步骤

1. 保存源码

把文末完整源码复制,保存为 DSC.lsp。如果中文显示乱码,可将文件另存为 ANSI/GBK 编码。

2. 加载插件

在 AutoCAD 中输入 APPLOAD,选择 DSC.lsp 加载。加载后命令行不会有额外提示,直接输入命令即可。

3. 运行命令

命令行输入:DSC

4. 选择对象

命令行提示选择对象,框选或点选需要缩放的全部图形,回车确认。未选择对象直接回车,命令会提示“未选择对象”并结束。

5. 指定第一点(基点)

在图形上点击一个点作为缩放基点。这个点是缩放时保持不动的参考点,通常选对象上某个角点或关键定位点。

6. 指定第二点(确定原始距离)

以刚才的基点为起点,再点一个点,两点连线就是当前的实际长度。例如 PDF 图上标注写着 1200 的那一段,就点这段的两个端点。

7. 核对原始距离

命令行会显示:原始距离 = 3756.42输入目标长度 <3756.42>:先看一眼这个数值,确认你点的两点确实是要校准的那一段。

8. 输入目标长度

直接输入你希望这段距离变成的长度,例如:1200

回车后,程序自动计算比例并执行缩放,命令行提示  ”定值缩放完成”。

如果这一步直接回车,则使用原始距离,比例 1:1,对象不会变化。

9. 检查结果

用 DIST 或标注命令量一下刚校准的那一段,应该正好等于你输入的目标长度。确认无误后,再继续处理其余图形。

典型使用场景

场景
操作
PDF 导入后比例不对
在 PDF 上找一段已知尺寸的标注,点两点,输入标注上的真实数值
图片/光栅图校准
选图片,点图上已知长度的两点,输入真实长度
块参照尺寸不统一
选块,点块上已知尺寸的两点,输入目标尺寸
图纸整体放大缩小到指定尺寸
选全部图形,点两点,输入目标长度,整体按比例缩放

参数说明

参数
说明
选择对象
需要缩放的全部图形,可框选、可点选,回车确认
第一点(基点)
缩放时保持不动的参考点
第二点
与第一点共同确定“当前实际长度”
原始距离
程序自动计算的两点距离,会显示在命令行
目标长度
你希望这段距离缩放后的长度;直接回车则保持原距离

完整源码

复制以下代码,保存为 DSC.lsp(特别注意,要打开扩展名显示才能正常更改),用 APPLOAD 加载,命令:DSC。

;;; 定值缩放 - 以两点参考距离和目标长度缩放对象;;; 命令: 定值缩放;;; 功能: 选择对象,指定第一点(基点)和第二点(参考距离),输入目标长度,;;; 程序自动计算比例并缩放。;;; BY:麻瓜工坊。(defun c:dsc (/ ss p1 p2 dist1 target_dist scale_factor)  ;; 关闭命令回显  (setvar "cmdecho" 0)  ;; 选择对象  (setq ss (ssget))  (if (null ss)    (progn      (princ "\n未选择对象,命令结束。")      (setvar "cmdecho" 1)      (exit)    )  )  ;; 获取第一点(基点)  (setq p1 (getpoint "\n指定第一点(作为基点): "))  (if (null p1)    (progn      (princ "\n未指定基点,命令结束。")      (setvar "cmdecho" 1)      (exit)    )  )  ;; 获取第二点(确定参考距离)  (setq p2 (getpoint p1 "\n指定第二点(确定原始距离): "))  (if (null p2)    (progn      (princ "\n未指定第二点,命令结束。")      (setvar "cmdecho" 1)      (exit)    )  )  ;; 计算原始距离  (setq dist1 (distance p1 p2))  (if (equal dist1 0.0 1e-8)    (progn      (princ "\n两点重合,无法计算比例。")      (setvar "cmdecho" 1)      (exit)    )  )  ;; 显示原始距离并提示输入目标长度  (princ (strcat "\n原始距离 = " (rtos dist1 2 2)))  (setq target_dist (getdist p1 (strcat "\n输入目标长度 <" (rtos dist1 22) ">: ")))  ;; 如果用户直接回车,使用原始距离(即不缩放)  (if (null target_dist)    (setq target_dist dist1)  )  ;; 检查目标长度是否为零  (if (equal target_dist 0.0 1e-8)    (progn      (princ "\n目标长度为零,无法缩放。")      (setvar "cmdecho" 1)      (exit)    )  )  ;; 计算比例因子并执行缩放  (setq scale_factor (/ target_dist dist1))  (command "scale" ss "" p1 scale_factor)  ;; 恢复命令回显  (setvar "cmdecho" 1)  (princ "\n定值缩放完成。")  (princ));; 加载时自动注册命令(princ)

功能特点

  • 两点定参考:在对象上点两点确定“现在有多长”,不需要自己量。

  • 直接输入目标长度:想要 5000 就输 5000,程序自动算比例。

  • 自动显示原始距离:输入目标长度前,命令行会先告诉你当前距离,方便核对。

  • 回车即不缩放:目标长度直接回车,等于按原距离缩放,比例 1:1,不会误操作。

  • 异常保护:未选对象、未指定点、两点重合、目标长度为零,都会给出提示并安全退出。

  • 纯 LISP 单文件:复制保存、APPLOAD 加载即可,无额外依赖。

适用版本:AutoCAD 各版本通用(仅使用基础 AutoLISP 函数)。

回首页,搜索你想要的文档

在首页搜索框输入关键词,快速定位资料

文库首页搜索指引 立即搜索

相关学习资料