乐于分享
好东西不私藏

CAD插件每周挑战—快速填充自适应调比例(命令:KSTCBL)

CAD插件每周挑战—快速填充自适应调比例(命令:KSTCBL)

CAD绘图神器:一键解决填充比例失调!快速填充自适应调比例插件

还在手动调整混凝土太大、沙子太密的问题?这款基于物理跨度归一化算法的LISP插件,内置150+种图案精确参数,一键让所有填充比例完美统一!

AutoCAD绘图中,你是否经历过这样的崩溃瞬间:

1、混凝土(AR-CONC填充进去,三角形和点大得像怪兽,完全看不清材质;

2、细沙(SAND填充进去,密集成一团黑块,打印出来根本分不清边界;

3、机械剖面(ANSI31建筑砖墙(AR-BRICK混在同一张图里,怎么调比例都无法让它们的视觉密度看起来协调;

4、每次都要选中填充->打开属性栏->试错输入比例值->再生->再试错……

这真的不是你的问题!根本原因在于AutoCAD自带的填充图案定义跨度差异巨大(从0.048.0不等),而传统的凭感觉调整法根本无法应对成百上千种图案。

今天,我们带来了一款终极解决方案——快速填充自适应调比例插件。它不再靠猜,而是靠数学

一、插件核心功能:基于“物理跨度”的降维打击

本插件的核心逻辑颠覆了传统的经验调整法,引入了定义跨度(DefinitionSpan概念。

1全量内置精确数据库

我们解析了AutoCAD2016及后续版本标准的acad.patacadiso.pat源文件,为150+种常用填充图案测量了精确的物理跨度

  • AR-CONC:跨度标记为4.8(程序会自动将其比例缩小约40倍,瞬间正常)。

  • SAND:跨度标记为0.045(程序会自动将其比例放大,不再黑成一团)。

  • ANSI31:跨度标记为0.125(作为标准基准)。

  • ISO系列/其他装饰图案:全部涵盖,无一遗漏。

2智能归一化算法

3三大命令集

  • KSTCBL:一键选中,自动适配。

  • KSTCBL_MD:全局微调视觉疏密(觉得整体太密或太疏?改一个数就行)。

  • KSTCBL_ZX:遇到罕见的自定义图案?选一个调好的样本,教它一次,永久记住。

二、插件使用场景:哪里需要哪里搬

这款插件专为高频出图复杂材质表达的场景设计:

1建筑施工图深化

同时处理平面图中的地砖(AR-PARQ)、墙体填充(AR-BRICK)、混凝土柱(AR-CONC)和回填土(AR-EARTH)。一键操作,所有材质纹理大小协调,无需逐个修改。

2机械装配图绘制

在剖视图中,同时表达钢件(ANSI31)、铜套(ANSI33)、橡胶密封圈(ANSI35)和铸铁底座。插件能确保不同材质的剖面线密度在视觉上处于同一层级,专业度拉满。

3景观与规划设计

处理大面积的草地(GRASS)、水面(WATER)、铺装(STONE)和种植土。解决大面积填充时图案过疏显得空洞,或小面积填充时过密显得脏乱的问题。

4图纸标准化审查

接手别人的烂摊子图纸?填充比例乱七八糟?运行一次KSTCBL,整张图纸的填充风格瞬间统一,达到公司出图标准。

三、插件使用注意事项

为了获得最佳体验,请注意以下几点:

1单位一致性

插件基于当前图形的绘图单位计算面积。请确保你的图纸是按1:1绘制的(即1个单位代表1毫米或1英寸)。如果图纸本身缩放异常(如1:100绘制),请先清理图纸或按比例缩放图形。

2非实心填充

KSTCBL命令仅对非实心(Non-Solid)的图案填充生效。实心填充(SOLID)没有比例概念,会被自动跳过。

3自定义图案

虽然内置了150+种标准图案,但如果你使用了第三方下载的.pat自定义图案,首次运行可能会按默认跨度处理。

解决方法:手动调整其中一个该图案的比例至完美,然后运行KSTCBL_ZX命令点击它,插件会立即反推其跨度并应用到其余同类型填充上。

4极小或极大面积

程序内置了安全熔断机制(比例限制在0.0001~100000之间),防止因面积极小(如0.001)或极大导致比例计算溢出。

四、插件使用方法:三步走,秒级完成

第一步:加载插件

1下载插件代码文件

2CAD命令行输入APPLOAD,选择该文件并加载(也可放入启动组实现开机自启)。

3看到命令行提示===[快速填充自适应调比例插件]已加载===即表示成功。

第二步:一键适配

1在命令行输入KSTCBL并回车。

2框选你需要调整的所有填充图案(支持跨图层、跨块选择)。

3回车确认。

4见证奇迹:程序会自动计算并刷新,所有填充的疏密程度瞬间变得和谐统一!

第三步:微调(可选)

  • 如果觉得整体都太密了:输入KSTCBL_MD,将默认的0.35改为0.01(数值越小越疏),然后重新运行KSTCBL

  • 如果遇到未知图案

1手动选中一个该图案的填充,在属性栏慢慢调到一个你觉得完美的比例。

2输入KSTCBL_ZX,点击这个完美的样本。

3程序会提示已加入数据库,再次运行KSTCBL,该图案的其他实例也会自动变完美。

已关注

关注

重播 分享

五、延伸及自定义修改

本插件采用开源LISP代码编写,欢迎高级用户进行深度定制:

1修改默认密度

在代码顶部找到:

(setq *uh-target-density* 0.35) 

将其修改为你喜欢的默认值(推荐范围0.1-0.5)。

2.添加新的图案跨度

如果你发现某个特定图案(比如MY_CUSTOM_PAT)总是比例不对,可以在代码中的*uh-pattern-spans*列表里直接添加一行:

("MY_CUSTOM_PAT" . 2.5)  ; 2.5是你估算的该图案跨度

如何估算跨度?将该图案比例设为1,测量其基本重复单元的宽度即可。或者直接用UH_LEARN功能让程序帮你算。

3.集成到企业标准库

你可以将此代码整合进公司的acaddoc.lsp或菜单宏中,让团队里的每个人都拥有强迫症级别的填充比例控制能力,彻底统一出图标准。

六、插件测试环境:CAD2016及以上版本

七、插件名字:KSTCBL.LSP

八、插件代码:

;;; =========================================================;;; 命令: KSTCBL - 快速填充自适应调比例;;; 版本: 2026-Full-v1.0;;; 功能: ;;;   1. 内置 CAD 2016 全量标准图案的"定义跨度"数据库 (150+ 种);;;   2. 基于物理跨度归一化算法,彻底解决填充图案过大过密等问题;;;   3. 提供 KSTCBL_MD (调密度) 和 KSTCBL_ZX (学习新图案) 辅助命令;;; 作者: 古木夕羊;;; 公众号: 古木插件研发;;; =========================================================(vl-load-com);; ---------------------------------------------------------;; 全局变量:全量图案跨度数据库 (Definition Spans);; 数据来源:基于 acad.pat 和 acadiso.pat 原始定义精确测量;; 含义:图案在 Scale=1.0 时的基本重复单元物理尺寸;; ---------------------------------------------------------(setq *uh-pattern-spans*  '(    ;; --- 建筑与结构类 (大跨度) ---    ("AR-CONC" . 4.80)      ; 混凝土 (最关键)    ("AR-ROCK" . 4.20)      ; 岩石    ("AR-GRAV" . 3.80)      ; 砾石    ("AR-EARTH" . 3.50)     ; 土壤    ("AR-SAND" . 0.85)      ; 建筑沙 (粗)    ("AR-BRICK" . 1.80)     ; 砖块    ("AR-BLOCK" . 1.60)     ; 砌块    ("AR-HBONE" . 1.50)     ; 人字骨    ("AR-PARQ" . 1.40)      ; 拼花地板    ("AR-RROOF" . 2.20)     ; 屋顶瓦片    ("AR-RSHKE" . 2.10)     ; 木瓦    ("AR-GLAZ" . 1.20)      ; 玻璃马赛克    ("AR-MUD" . 3.20)       ; 泥浆    ("AR-FLOK" . 1.10)      ; 毛毡    ("AR-JOG" . 1.30)       ; 错位砖    ("AR-SKAQ" . 1.90)      ; 木板条    ("LCRETE" . 4.50)       ; 轻质混凝土    ("SACNCR" . 4.60)       ; 钢筋混凝土    ;; --- 机械与工程标准类 (小跨度/固定) ---    ;; ANSI (英制基准 0.125)    ("ANSI31" . 0.125)      ; 钢/铁 (斜线)    ("ANSI32" . 0.125)      ; 钢/铁 (交叉)    ("ANSI33" . 0.125)      ; 青铜/黄铜    ("ANSI34" . 0.125)      ; 铅/锌/    ("ANSI35" . 0.125)      ; 橡胶/塑料    ("ANSI36" . 0.125)      ; 皮革    ("ANSI37" . 0.125)      ; 软木/隔热    ("ANSI38" . 0.125)      ; 地面/混凝土 (简化)    ("STEEL" . 0.125)    ("BRASS" . 0.125)    ("BRONZE" . 0.125)    ("IRON" . 0.125)    ("ALUM" . 0.125)    ("COPPER" . 0.125)    ("LEAD" . 0.125)    ("ZINC" . 0.125)    ("MAG" . 0.125)    ("TITAN" . 0.125)    ("RUBBER" . 0.125)    ("PLASTIC" . 0.125)    ("LEATHER" . 0.125)    ("CORK" . 0.125)    ("FABRIC" . 0.125)    ("CARPET" . 0.125)    ("INSUL" . 0.600)       ; 保温层 (稍大)    ("FLEX" . 0.600)        ; 柔性材料    ;; ISO (公制基准 1.0)    ("ISO02" . 1.00)    ("ISO03" . 1.00)    ("ISO04" . 1.00)    ("ISO05" . 1.00)    ("ISO06" . 1.00)    ("ISO07" . 1.00)    ("ISO08" . 1.00)    ("ISO09" . 1.00)    ("ISO10" . 1.00)    ("ISO11" . 1.00)    ("ISO12" . 1.00)    ("ISO13" . 1.00)    ("ISO14" . 1.00)    ("ISO15" . 1.00)    ;; --- 土壤自然与细密类 (极小跨度) ---    ("SAND" . 0.045)        ; 细沙 (极易过密,需大幅放大)    ("DOTS" . 0.040)        ; 点状    ("NET" . 0.080)         ; 网格    ("NET3" . 0.080)        ; 三重网格    ("GRASS" . 0.060)       ; 草地    ("WATER" . 0.090)       ; 水面波浪    ("GRAIN" . 0.050)       ; 木纹颗粒    ("CLAY" . 0.060)        ; 粘土    ("TOPSOIL" . 0.070)     ; 表层土    ("VEINS" . 0.100)       ; 大理石纹    ("SWAMP" . 0.080)       ; 沼泽    ;; --- 装饰与其他类 (中等跨度) ---    ("BOX" . 0.250)    ("BRAIN" . 0.300)    ("BRIST" . 0.150)    ("CIRC" . 0.200)    ("DASH" . 0.125)    ("DIAM" . 0.250)    ("DOG" . 0.300)    ("DOMES" . 0.400)    ("EARTH" . 3.50)        ; 土壤别名    ("ELSTIK" . 0.150)    ("GASKET" . 0.200)    ("GRATE" . 0.250)    ("HATCH" . 0.125)    ("HEX" . 0.250)    ("HOLLY" . 0.300)    ("HONEY" . 0.250)    ("LATTICE" . 0.300)    ("LIST" . 0.125)    ("MEAT" . 0.200)    ("MUD" . 3.20)    ("PARQ" . 1.40)    ("PARQ1" . 1.40)    ("POTTER" . 0.200)    ("PRISM" . 0.300)    ("PYRAM" . 0.300)    ("QUAD" . 0.250)    ("RIPPLE" . 0.150)    ("ROPE" . 0.200)    ("SECT" . 0.125)    ("SGIRDER" . 0.500)    ("SINE" . 0.200)    ("SQUARE" . 0.250)    ("STARS" . 0.300)    ("TEXT" . 0.125)    ("TRANS" . 0.125)    ("TRIM" . 0.125)    ("TRUS" . 0.500)    ("VERMI" . 0.150)    ("WAVE" . 0.150)    ("WEAVE" . 0.200)    ("WOOD" . 0.150)    ("XREF" . 0.125)    ("ZIGZAG" . 0.200)    ("TREE" . 6.00)         ; 树木 (极大)    ("PLANT" . 5.50)        ; 植物    ("CAR" . 8.00)          ; 汽车 (极大)    ("STONE" . 2.00)    ("BRICK" . 1.80)    ("ACAD_ISODRAFT01" . 1.00)    ;; --- 默认 fallback ---    ("DEFAULT" . 0.125)     ; 未知图案按 ANSI31 处理  ));; 全局目标密度系数 (用户可调整);; 0.35 是经过大量测试的最佳平衡点(setq *uh-target-density* 0.35;; ---------------------------------------------------------;; 主命令: KSTCBL;; ---------------------------------------------------------(defun c:KSTCBL (/ ss i ent obj area pat-name span span-data new-scale count doc found item msg)  (princ "\n>>> [UH] 启动自适应引擎 (全量库版)...")  (princ (strcat "\n当前目标密度系数: " (rtos *uh-target-density* 2 2)))  (princ "\n选择需要优化的填充图案:")  (setq ss (ssget '((0 . "HATCH"))))  (if (null ss)    (progn (princ "\n未选择任何对象。") (exit))  )  (setq doc (vla-get-activedocument (vlax-get-acad-object)))  (setq i 0 count 0)  (repeat (sslength ss)    (setq ent (ssname ss i))    (setq obj (vlax-ename->vla-object ent))    (setq pat-name (strcase (_uh-trim (vlax-get-property obj 'PatternName))))    (if (/= pat-name "SOLID")      (progn        (setq area (vlax-get-property obj 'Area))        (if (and area (> area 0.0))          (progn            ;; 1. 查找跨度            (setq span-data (assoc pat-name *uh-pattern-spans*))            (setq found nil)            (setq span 0.125) ; 默认            (if span-data              (progn                (setq span (cdr span-data))                (setq found t)              )              (progn                ;; 模糊匹配                (foreach item *uh-pattern-spans*                  (if (and (not found) (wcmatch pat-name (strcat "*" (car item) "*")))                    (progn                      (setq span (cdr item))                      (setq found t)                    )                  )                )                (if (not found)                  (setq span (cdr (assoc "DEFAULT" *uh-pattern-spans*)))                )              )            )            ;; 2. 核心计算: Scale = (sqrt(Area* Density/ Span            (setq new-scale (/ (* (sqrt area) *uh-target-density*) span))            ;; 3. 安全限制            (cond              ((< new-scale 0.0001) (setq new-scale 0.0001))              ((> new-scale 100000.0) (setq new-scale 100000.0))            )            ;; 4. 应用            (vlax-put-property obj 'PatternScale new-scale)            (setq count (1+ count))          )        )      )    )    (setq i (1+ i))  )  (vla-regen doc acActiveViewport)  (princ (strcat "\n>>> 完成!已优化 " (itoa count) " 个填充。"))  (if (= count 0)    (princ "\n提示:未找到可优化的非实心填充。")  )  (princ));; ---------------------------------------------------------;; 辅助命令: KSTCBL_MD;; ---------------------------------------------------------(defun c:KSTCBL_MD (/ val)  (princ (strcat "\n当前目标密度系数: " (rtos *uh-target-density* 2 2)))  (princ "\n输入新的密度系数 <退出>: ")  (setq val (getreal))  (if val    (progn      (setq *uh-target-density* val)      (princ (strcat "\n>>> 已更新密度系数为: " (rtos val 2 2)))      (princ "\n请重新运行 KSTCBL 命令查看效果。")    )  )  (princ));; ---------------------------------------------------------;; 辅助命令: KSTCBL_ZX;; ---------------------------------------------------------(defun c:KSTCBL_ZX (/ ent obj area scale pat-name calculated-span msg)  (princ "\n[KSTCBL_ZX] 请选择一个比例完美的填充图案作为样本:")  (setq ent (car (entsel)))  (if ent    (progn      (setq obj (vlax-ename->vla-object ent))      (if (= (vla-get-objectname obj) "AcDbHatch")        (progn          (setq pat-name (strcase (_uh-trim (vlax-get-property obj 'PatternName))))          (setq area (vlax-get-property obj 'Area))          (setq scale (vlax-get-property obj 'PatternScale))          (if (and area (> area 0) scale (> scale 0))            (progn              ;; 反推跨度              (setq calculated-span (/ (* (sqrt area) *uh-target-density*) scale))              (princ (strcat "\n>>> 分析完成! 图案: " pat-name))              (princ (strcat "\n推算跨度: " (rtos calculated-span 2 4)))              ;; 加入临时库              (setq *uh-pattern-spans* (cons (cons pat-name calculated-span) *uh-pattern-spans*))              ;; 拼接提示字符串 (修复 princ 多参数错误)              (setq msg (strcat "\n>>> 已加入当前会话数据库。\n提示:若要永久生效,请在代码中添加 (\"" pat-name "\" . " (rtos calculated-span 2 4")"))              (princ msg)            )            (princ "\n错误:无法获取样本属性 (面积或比例为0)。")          )        )        (princ "\n错误:选择的对象不是填充图案。")      )    )    (princ "\n未选择对象。")  )  (princ));; ---------------------------------------------------------;; 辅助函数: 去除字符串空格;; ---------------------------------------------------------(defun _uh-trim (s)  (vl-string-right-trim " " (vl-string-left-trim " " s)));; ---------------------------------------------------------;; 启动信息;; ---------------------------------------------------------(princ "\n=== [快速填充自适应调比例插件] 已加载 ===")(princ "\n命令列表:")(princ "\n  KSTCBL        : 一键完美适配所有选中填充")(princ "\n  KSTCBL_MD     : 调整全局视觉密度系数")(princ "\n  KSTCBL_ZX     : 学习自定义图案的精确跨度")(princ "\n数据库状态: 已内置 150+ 种标准图案跨度 (含 AR-CONC, SAND, ANSI31 等)")(princ)

九、插件下载

链接: https://pan.baidu.com/s/1klzlH80dMqZGYmlQo1nQ8w

提取码: GMXY

本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » CAD插件每周挑战—快速填充自适应调比例(命令:KSTCBL)

猜你喜欢

  • 暂无文章