CAD插件每周挑战—快速填充自适应调比例(命令:KSTCBL)
CAD绘图神器:一键解决填充比例失调!快速填充自适应调比例插件
还在手动调整混凝土太大、沙子太密的问题?这款基于“物理跨度归一化”算法的LISP插件,内置150+种图案精确参数,一键让所有填充比例完美统一!
在AutoCAD绘图中,你是否经历过这样的崩溃瞬间:
1、混凝土(AR-CONC)填充进去,三角形和点大得像怪兽,完全看不清材质;
2、细沙(SAND)填充进去,密集成一团黑块,打印出来根本分不清边界;
3、机械剖面(ANSI31)和建筑砖墙(AR-BRICK)混在同一张图里,怎么调比例都无法让它们的视觉密度看起来协调;
4、每次都要选中填充->打开属性栏->试错输入比例值->再生->再试错……
这真的不是你的问题!根本原因在于AutoCAD自带的填充图案定义跨度差异巨大(从0.04到8.0不等),而传统的“凭感觉”调整法根本无法应对成百上千种图案。
今天,我们带来了一款终极解决方案——快速填充自适应调比例插件。它不再靠猜,而是靠数学。
一、插件核心功能:基于“物理跨度”的降维打击
本插件的核心逻辑颠覆了传统的经验调整法,引入了“定义跨度(DefinitionSpan)”概念。
1、全量内置精确数据库
我们解析了AutoCAD2016及后续版本标准的acad.pat和acadiso.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、下载插件代码文件。
2、在CAD命令行输入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
夜雨聆风