跳转至

公式入门:变量、条件与常用写法

后台建模 约 18 分钟 更新于 2026-09-24

一只柜子能「改宽度,顶板底板自动变长;改高度,层板自动多一块」,靠的是公式。后台建模岗在柜体里给每块板写好尺寸和位置的公式,前台改参数时软件照公式重算。这一篇讲清楚公式的三件事:变量从哪来、能写哪些运算和函数、条件怎么写;再讲全局参数和父柜变量怎么引用;最后给 5 个工厂里最常用的例子,每个都有公式、验算和检查方法,可以直接照做。

一、变量:公式里的「未知数」

基础变量

每只柜体都自带四个基础变量,引用名是固定的:

引用名 含义 例子
k 宽度 800
g 高度 2000
s 深度 560
bh 板厚 18

单位都是毫米。新建柜体时填的「宽度、高度、深度、板厚」就是这四个变量的当前值和允许范围。这四个引用名被系统占用,自定义变量不能再用。

柜体里的坐标方向和它们对应:X 方向是宽(k),Y 方向是深(s),Z 方向是高(g)。比如侧夹顶底的顶板:宽 k-2*bh,厚 bh,Z 位置 g-bh。

自定义变量

基础变量不够用时,在 柜体管理 左侧 变量管理 页签里新建。编辑变量的窗口里有这些字段:

字段 填什么
变量名称 给人看的中文名,如「层板数量」
引用名 公式里用的名字,如 cbsl
分组 在参数面板里归到哪一组,如「常用」「背板参数」
变量类型 整数 / 浮点数 / 字符串 / 布尔值
值类型 固定值 / 区间 / 可选 / 复合公式
变量隐藏条件 条件为真时,这个变量在前台「编辑参数」里不显示

四种值类型的区别:

值类型 前台能不能改 适合
固定值 能,直接填 偶尔要改的数,如拉带宽
区间 能,限定在最小值~最大值之间 有上下限的数,如层板内缩 0~50
可选 能,从列表里选 几选一的配置,如踢脚类型
复合公式 不直接改,由公式算出来 由别的变量推出来的量,如层板数量

引用名的写法规则

  • 只用英文字母、数字和下划线,以字母开头,比如 cbsl、ld_kd、tjlx;
  • 不要用减号:ld-kd 会被当成 ld 减 kd;
  • 不要用中文:中文在公式里会被当成一段文字,而不是变量;
  • 不能用 k、g、s、bh,同一只柜体里不能重复。

行业里常用拼音首字母起引用名,比如层板数量 cbsl、拉带宽度 ldkd、踢脚类型 tjlx。团队内统一一套叫法,全局参数才能按名字对上。

主参数和全参数

前台右键 APlus: 编辑参数 时,左侧有 主参数 和 全参数 两个视图:主参数是这只柜体自己的变量(宽、高、深、板厚和您建的自定义变量);全参数还会列出柜体里各个组件(子柜体)的变量。所以,希望前台常改的量,建在柜体自己身上,并起一个前台看得懂的变量名称;不希望前台看到的中间量,用「变量隐藏条件」写 true 藏起来。

二、公式能写什么

柜体和板件的尺寸、位置、旋转、阵列、变量公式、隐藏条件,都用同一套写法:

类别 写法 例子
四则运算 + - * /,括号 ( ) (k-2*bh)/2
比较 >、<、>=、<=、==、!= g >= 720
逻辑 &&(并且)、||(或者) k >= 600 && g < 900
条件函数 IF(条件, 真值, 假值) IF(k >= 600, 18, 16)
三元运算 条件 ? 真值 : 假值 k > 600 ? true : false
最小 / 最大 MIN(a, b, …)、MAX(a, b, …) MIN(k, g/2)
取整 FLOOR(x) 向下、CEIL(x) 向上、ROUND(x, 位数) 四舍五入 CEIL(g/400)、ROUND(k/3, 0)
绝对值 ABS(x) ABS(k-g)

IF 和 ? : 用哪个

APlus 的公式说明建议:尺寸、位置、旋转这类要出数字的格子用 IF(...);隐藏条件这类判断真假的格子用比较运算或 ? :。按这个习惯写,出错最少。

比如「板厚小于 18 时取板厚一半,否则取 9」,在柜体公式里写 IF(bh < 18, bh/2, 9)。

除此之外,板件的「自定义函数」里还有一批做造型和加工的专用函数,比如 拷贝阵列(方向,步长,数量)、斜切(端面,保留边,角度)、打孔(中心点,尺寸,法线,阵列)、开槽(...)、孔线(...)、倒角(...)。在公式编辑器里选中函数名就能看到参数说明和例子,这里不展开。

三个地方,三种口径

公式写在不同地方,能用的写法不完全一样。这是最容易踩的坑:

写在哪里 能用的运算 变量怎么写
柜体里板件的尺寸、位置、旋转、阵列;变量的复合公式;隐藏条件 上表全部 k、g、s、bh 和本柜体的自定义引用名
组件(子柜体)的尺寸、位置和「变量管理」里的覆盖值 上表全部 parent.引用名 取父柜体的值;self.引用名 取子柜体自己的值
连接件的孔位(尺寸、位置、旋转) 只有四则运算和 min、max、abs、round、floor、ceil,不能写条件 bh、original.bh、contact.bh、cabinet.k 等,见连接件原理

所以同一条「板厚小于 18 取一半,否则取 9」:在柜体公式里写 IF(bh < 18, bh/2, 9),在连接件孔位里写 min(bh/2, 9)。

三、全局参数怎么被柜体用上

主面板 数据管理 → 全局参数,按页面(默认有铰链、连接件、门板、自定义)和方案维护常用参数的默认值。每一行填变量代号和值,比如 jlpp → 图特、ldkd → 80。

它和柜体的关系是一条明确的规则:

全局参数的套用规则

  1. 柜体第一次放进 SketchUp 时,柜体里每个变量拿自己的引用名去全局参数里找变量代号相同的一行,找到了就用那一行的值作为默认值;
  2. 场景里已经放好的柜体不受影响;
  3. 可选型变量,值必须在它的选项里;数值型变量,值必须在它的区间内;对不上的跳过,不拦放置;
  4. 复合公式型变量不会被覆盖;
  5. 靠上的页面优先,同一个变量代号先命中的生效;
  6. 值会一直传到柜体里的组件(子柜体)上。

所以,柜体里不需要写任何特殊前缀来引用全局参数。您只要保证:柜体变量的引用名和全局参数的变量代号完全一样,变量不是复合公式型,值在允许范围内。

全局参数用在哪

适合放「整个工厂或整个客户统一、偶尔整体切换」的量:铰链品牌、拉带宽度、门板厚度、踢脚高度等。比如给某个装修公司的单子统一用另一个铰链品牌,就新建一个方案切过去,不用逐个改柜子。

四、子柜体引用父柜体的变量

柜体里可以把另一只柜体当「组件」放进来,比如把背板拉带、踢脚、抽屉做成组件。在柜体管理里点中一个组件,右侧会显示它的 尺寸大小(mm)、变量管理、位置、旋转、高级设置(隐藏条件)和 阵列。

组件里的变量写法规则

  1. 在组件的尺寸、位置、变量覆盖里,取父柜体的值要写 parent. 前缀,比如 parent.k-2*parent.bh;
  2. 取子柜体自己的值写 self. 前缀;
  3. 尺寸或变量覆盖的格子里只写一个变量名(如 k)时,系统会自动补成 parent.k;
  4. 变量管理里的覆盖值留空表示不覆盖,子柜体用它自己的默认值;
  5. 子柜体里值类型是「复合公式」的变量,不接受父柜体传值,它总在子柜体自己里面算。要改它,去改子柜体里那条公式。

不写 parent. 会取到谁的值

在组件的公式里写成 k-2*bh 这种带运算的式子时,系统不会替您补前缀,这时 k 可能被当成子柜体自己的宽度(子柜体的默认值),而不是父柜体的宽度。组件公式里凡是想取父柜体的量,一律显式写 parent.。

五、5 个实用例子

每个例子都按「目的 → 变量 → 公式 → 验算 → 检查」写。数值规则(比如层板间距不超过 400)是示例,以您工厂的工艺为准。

例 1:层板数量按柜高自动算

目的:柜子越高层板越多,保证每格净高不超过 400。

变量:新建 cbsl(层板数量),变量类型「整数」,值类型「复合公式」,公式表达式:

MAX(CEIL((g-2*bh)/400)-1, 0)

意思是:内高 g-2*bh 除以 400 向上取整,得到至少要分几格;格数减 1 就是层板数量;最少 0 块。

层板的公式(在柜体里点中层板,右侧填):

字段 公式 说明
尺寸 LenX k-2*bh 夹在两块侧板之间
尺寸 LenZ bh 层板厚度
位置 X bh 从左侧板内侧开始
位置 Z (g-bh)/(cbsl+1) 第一块层板的底面高度
阵列 数量 cbsl 一共几块
阵列 间距 (g-bh)/(cbsl+1) 相邻两块的位移
阵列 方向 X / Y / Z 0 / 0 / 1 沿高度方向排
高级设置 隐藏条件 cbsl==0 一块都不需要时隐藏

为什么位置 Z 和间距都是 (g-bh)/(cbsl+1):设内高 H = g − 2 × bh,要让 n 块层板把内高分成 n + 1 格一样高的净空,每格净高 = (H − n × bh) ÷ (n + 1),第一块底面 = bh + 净高,相邻两块相差「净高 + bh」。两者化简后都等于 (g − bh) ÷ (n + 1)。

验算:

柜高 g 内高 cbsl 间距 每格净高
2000 1964 4 396.4 378.4
720 684 1 351 333
400 364 0 隐藏 364

检查:同步到 SU 后,把柜高分别改成 2000、720、400,数层板块数(4、1、0),用卷尺量相邻层板的净空是否相等。

想让前台能手动改层板数

再建一个区间变量 cbsl_sd(手动层板数,0~10,默认 0),把 cbsl 的公式改成 IF(cbsl_sd > 0, cbsl_sd, MAX(CEIL((g-2*bh)/400)-1, 0)):前台填 0 时自动算,填几就是几块。

训练里常说的「层板内缩值可调」,做法是再建一个区间变量 cbns(层板内缩,比如 0~50),把层板的尺寸 LenY 在原公式基础上再减 cbns(比如原来是 s-20,改成 s-20-cbns)。如果希望内缩让在前面,还要把位置 Y 的公式同步调整,方向以同步到 SU 后的实际效果为准。

例 2:背板拉带按高度自动排

目的:柜内高每满 800 加一根拉带,至少一根,上下净空均分。拉带宽度用全局参数统一控制。

变量:

  • ldkd(拉带宽度),浮点数,值类型「区间」,比如 40~150,默认 80。它的引用名和全局参数里的变量代号 ldkd 相同,放柜子时会自动套用全局参数的值;
  • ldsl(拉带数量),整数,值类型「复合公式」:MAX(FLOOR((g-2*bh)/800), 1)。

拉带板的公式:

字段 公式
尺寸 LenX k-2*bh
尺寸 LenZ(拉带的高度) ldkd
位置 Z bh+(g-2*bh-ldsl*ldkd)/(ldsl+1)
阵列 数量 ldsl
阵列 间距 (g-2*bh-ldsl*ldkd)/(ldsl+1)+ldkd
阵列 方向 X / Y / Z 0 / 0 / 1

拉带的厚度、Y 方向位置按您的背板结构填,这里不展开。

验算(bh = 18,ldkd = 80):

柜高 g 内高 ldsl 每段净空 第一根底面 Z 第二根底面 Z
2400 2364 2 734.7 752.7 1567.3
720 684 1 302 320 —

检查:同步到 SU,量拉带之间、拉带到顶底板内侧的净空是否相等;在全局参数里把 ldkd 改成 100,新放一只柜子,拉带宽应是 100(已经放好的柜子不变)。

待核对

这类阵列也可以在板件的「自定义函数」里用 拷贝阵列(方向,步长,数量) 实现,比如 拷贝阵列([0,0,1], 步长, ldsl),步长是每次复制的实际位移,不会自动加板厚。其中「数量」是否包含原来那一块,请以同步到 SU 后的实际块数为准。

例 3:孔位、孔深按板厚取值

目的:侧孔中心在板厚小于 18 时取板厚一半,否则取 9。

写法:

写在哪 公式
柜体或板件公式里 IF(bh < 18, bh/2, 9)
连接件孔位的 Z min(bh/2, 9)
连接件里接触板件上、要和原板件侧孔对齐的孔的 Z min(original.bh/2, 9)

验算:bh = 12 → 6;bh = 16 → 8;bh = 18 → 9;bh = 25 → 9。

检查:把柜体板厚改成 16 和 25 各生成一次五金,量侧孔中心到板面的距离。

同样的思路可以写孔深:比如「面孔深度不超过板厚减 5,且不超过 14」写成 MIN(bh-5, 14)(连接件孔位里写 min(bh-5, 14))。数值以五金说明书为准。

例 4:踢脚三选一,宽柜底座加中立板

目的:同一只地柜,踢脚可以选「无 / 垫条 / 底座」;选底座且柜宽超过 900 时,底座中间自动加一块立板。

变量:tjlx(踢脚类型),变量类型「整数」,值类型「可选」,可选项 0、1、2,约定 0 = 无、1 = 垫条、2 = 底座。变量名称里把约定写清楚,比如「踢脚类型(0无 1垫条 2底座)」。

隐藏条件(条件为真时隐藏):

对象 隐藏条件 意思
垫条组件 tjlx != 1 不是垫条就隐藏
底座组件 tjlx != 2 不是底座就隐藏
底座组件里的中间立板 k <= 900 宽度不超过 900 就不要中立板

中间立板写在底座这个子柜体里,这里的 k 是底座自己的宽度。底座组件的尺寸 X 写 parent.k(或减去侧板厚度),它就跟着地柜的宽度变。

检查:把 tjlx 分别改成 0、1、2,看垫条、底座是否只出现一个;选 2 时把柜宽改成 800 和 1000,看中立板是否出现。

用数字做选项更稳

选项用 0、1、2 这样的数字,比用「底座」「垫条」这样的文字更不容易写错:文字要和选项一字不差,多一个空格条件就不成立。

例 5:子柜体跟着父柜体变

目的:把背板拉带做成组件放进衣柜,拉带组件的宽高跟着衣柜变,拉带宽度由衣柜统一控制。

组件的尺寸大小(mm):

字段 公式
X parent.k-2*parent.bh
Z parent.g-2*parent.bh

组件的变量管理:子柜体的 ldkd 一行填 parent.ldkd,表示用衣柜的拉带宽度;ldsl 是子柜体里的复合公式,不接受传值,留空。

检查:在衣柜上改 ldkd,同步到 SU 后拉带宽度跟着变;改衣柜宽度,拉带长度跟着变。

做错了会怎样

现象 原因 改法
改了柜宽,某块板长度不变 这块板的尺寸写了固定数字 改成含 k 的公式
公式报错或算不出来 引用名写错、用了带减号或中文的名字、括号不配对 检查引用名,按规则改名
层板数量为 0 时柜子里还剩一块层板 只写了阵列数量,没写隐藏条件 加隐藏条件 cbsl==0
子柜体的尺寸取成了它自己的默认值 组件公式里没写 parent. 改成 parent.k 这样的写法
父柜体给子柜体传的值不生效 子柜体里那个变量是复合公式型 去子柜体里改公式,或把它改成区间/固定值变量
全局参数设了,柜子没套用 引用名和变量代号不一致;值超出区间或不在选项里;柜子是之前放的 核对名字和范围,重新放一只柜子
连接件生成五金失败,提示公式无法计算 在孔位里用了 IF 或 ? : 孔位里用 min / max 改写
尺寸格子用 ? : 写,结果不对或报错 三元运算更适合隐藏条件 尺寸格子改用 IF(...)

自测

学完这一篇,您应该能
  • 说出 k、g、s、bh 的含义,以及柜体里 X、Y、Z 分别对应哪个方向;
  • 按规则给自定义变量起引用名,并说出为什么不能用减号和中文;
  • 说出四种值类型的区别,以及复合公式型变量为什么不接受父柜传值、不被全局参数覆盖;
  • 说出同一条「小于 18 取一半否则取 9」在柜体公式和连接件孔位里分别怎么写;
  • 说出全局参数套用的条件:引用名等于变量代号、值在范围内、第一次放进场景;
  • 独立做出例 1:层板数量随柜高自动变,净空相等。

常见问题

公式里的数字要写单位吗?

不写。长度一律是毫米,旋转一律是度。

变量的复合公式能引用另一个复合公式吗?

可以,比如例 2 里 ldsl 的结果又被阵列间距引用。注意不要互相引用成一个圈(A 用 B、B 又用 A),那样算不出来。

隐藏条件和阵列数量为 0,用哪个?

两个一起用。产品自己的做法也是「阵列数量写变量,隐藏条件写变量 == 0」,这样数量为 0 时板件不会残留。

前台改了参数,柜子没变?

前台在「编辑参数」里改完要点「应用参数」。后台在柜体管理里改了公式,要对模型里的柜子再点一次「同步到SU」,场景里的柜子才会按新公式重建。改了尺寸后记得重新生成五金。

下一步

最后更新:2026-09-24分格、拉带、踢脚等数值规则为示例,以您工厂的工艺为准