AutoLisp 选择对象函数 ssget 用法
语法
1 |
(ssget [sel-method] [pt1 [pt2]] [pt-list] [filter-list]) |
ssget 的参数均为可选参数,需要注意的是可选参数之间的组合条件。
以下语法表示中 <parameter>
尖括号代表必选,[parameter]
方括号代表可选。
一、选择集的窗口参数
- [sel-method] 字符串类型,不区分大小写,指定一个选择方法。
- [pt1 [pt2]] 表类型,由三个数字的点参数表,表示 xyz 坐标,也可以是仅包括xy 的坐标。
- [pt-list] 表类型,由点参数表组成的表。
C 窗交(反选)
如果指定了该参数,则必须跟一对点创建一个矩形窗口,与矩形窗口相交的对象均被加入选择集。
参数语法: (ssget "c" <pt1> <pt2> [filter-list])
此时,[pt-list] 参数不能出现,否则 ssget 将会返回一个错误提示:错误的点参数
示例:
1 2 3 |
(setq pt1 (getpoint "First Pt:")) (setq pt2 (getpoint "Second Pt:")) (setq ss (ssget "c" pt1 pt2)) |
W 窗口(正选)
与 C 参数语法及用法类似,但功能不同,只有在矩形窗口内完整的对象才会被加入选择集。
参数语法: (ssget "w" <pt1> <pt2> [filter-list])
参数前加下划线 “_w” 可以使代码在不同版本的CAD平台下兼容,建议写上。
CP 圈交(多边形反选)
如果指定了该参数,则必须用构成多边形的点表响应,与多边形相交的对象被加入选择集。
参数语法: (ssget "CP" <pt-list> [filter-list])
此时点参数 [pt1] [pt2] 不能出现,而且,CP 参数依赖 <pt-list>
的顺序来构成一个多边形。
例如四个点按顺序连接为一个8字型,而不是一个矩形,ssget 将返回一个空选择集,即使对象与窗口相交。
如果参数为少于3个点的表,也将返回一个 nil。
示例:
1 2 3 4 5 |
(setq pt1 (getpoint "Piont1:")) (setq pt2 (getpoint "Piont2:")) (setq pt3 (getpoint "Piont3:")) (setq pt4 (getpoint "Piont4:")) (setq ss (ssget "c" (list pt1 pt2 pt4 pt4))) |
WP 圈围(多边形正选)
与 CP 参数语法及用法类似,但只有被多边形窗口包围的对象才会被加入选择集。
参数语法: (ssget "wp" <pt-list> [filter-list])
F 栏选
将参数点表连接为一条折线,与折线相交的对象被加入选择集。
参数语法: (ssget "f" <pt-list> [filter-list])
pt-list 最少由2个点组成表,CP/WP 参数最少需要 3 个点。
P 前一批创建的图形
包括 CAD 命令或 LISP 程序创建的图形对象。
参数语法: (ssget "p" [filter-list])
P 参数不能和 [pt1 [pt2]] [pt-list] 任何一个点参数组合,否则将返回一个错误,有的 CAD 版本会返回 nil
当分解(EXPLODE)一个 CAD 图形时,p 方法特别有用,可以一次性建立分解后的所有对象选择集。
L 最后一个创建的对象
包括 CAD 命令或 LISP 程序创建的对象,注意和 P 参数的区别。
参数语法: (ssget "l" [filter-list])
在获取最后一个对象的图元名时,以下代码是等价的,但是后者不能提供直接过滤功能。
1 |
(ssname (ssget “L”) 0) == (entlast) |
I 隐含窗口选择
参数语法: (ssget “i” [filter-list])
CAD 命令有两种执行方式,第一种先命令后选择,第二种先选择后命令。所以在 Lisp 中也允许先选择后命令,
而且这方式可以通过系统变量 pickfirst 来关闭(值为 0),此时 I 参数失效,(ssget “i”) 将返回 nil。
选择对象后,可以用 (sssetfirst nil) 取消选择集的亮显状态。
X 整个文件
在当前打开的CAD文件中选择所有对象,包括关闭、冻结图层中的图元和可见屏幕外的图元,不分大小写。
参数语法: (ssget "x" [filter-list])
X 用法与 A 用法等价,(ssget “A”) 也是选择所有对象。
:E 拾取框
用拾取框选择对象,此时 ssget 将不再拉出一个矩形窗口,直到点右键结束选择。
参数语法: (ssget ":E" [filter-list])
与 :E 对应的 :N 参数为只能拉出一个矩形窗口选择,而不能通过点选拾取对象。
:S 仅允许单一选择集
使用:s参数时,ssget 将点选对象一次就会结束,无论是否选中对象,未选中则返回 nil,可节省一次回车确认。
参数语法: (ssget ":S" [filter-list])
说明: “:S” 参数和 “:E” 可以同时使用,例如: (ssget "_:S:e")
以下参数可以组合使用, “+” 或 “-“,例如:(ssget "_:S+D")
:d 重复选择
允许同一个对象多次加入选择集,每选择一次,则加入一次。
参数语法: (ssget ":D" [filter-list])
例如:画两条直线,然后运行代码 (setq ss (ssget ":D"))
,框选3次直线后。(sslength ss)
返回 6
:L 不选择锁定图层对象
注意: L、:L、-L 的参数是不同的。
参数语法: (ssget ":L" [filter-list])
ssget 默认选择所有图层对象,这样在程序中需判断图层是否锁定,才能编辑,否则 lisp 代码将返回错误。
其他方法还有A :A -A _:V _:U _:R -M -P :P -G -L :?
等参数以及组合用法,有兴趣的朋友可以测试。
这些参数的用法官方并未在语法参考里公布,估计是程序测试留下的接口,CAD 更新时可能被关闭,不建议使用。
注意事项:
- ssget 带点参数调用时,可能会受到自动捕捉的影响,一般先将系统变量 osmode 置零。
- ssget 点参数包围的矩形、多边形应在当前绘图区域内可见,否则 ssget 仅返回可见区域内的对象选择集。
- 创建选择集会消耗 AutoCAD 的临时文件存储区,所以 AutoLISP 不允许同时创建多于 128 个选择集。
例如:画一个圆,然后执行以下代码:
1(repeat 130 (setq a (cons (ssget "l") a)))
这段程序循环了 130 次,AutoCAD提示 “错误: 超出选择集数量的最大范围”,如果继续调用 (ssget) 将返回 nil;此时,只有清空选择集变量 (setq a nil) 才能继续调用 ssget。 - ssget 选择时没有自定义提示,如果特别需要可用第三方函数,比如飞诗的:
Fsxm-ssget
二、选择集的过滤条件
[filter-list] 过滤条件,表类型,指定与属性(DXF 组码)匹配的对象被加入选择集。
常用支持过滤的 DXF 组码:
- 0 实体类型
- -4 条件运算, SSGET 的专用组码,包括逻辑条件与关系条件
- 1 图元文字内容
- -3 扩展数据
- 2 属性标记、块名
- 6 线型名
- 7 文字样式
- 8 图层名
- 40 CIRCLE 直径或 TEXT 文字高度
- 62 颜色号
0 组码
指定对象实体类型,语法 ‘((0 . types))
,对象类型 types 为字符,不分大小写,常用的实体类型如下:
"POINT"点、"TEXT"单行文本、"MTEXT"多行文本、"LINE"直线、"LWPOLYLINE"多段线、"SPLINE"样条曲线、"CIRCLE"圆、"ARC"圆弧、"ELLIPSE"椭圆、"HATCH"填充、"DIMENSION"标注、"ATTDEF"属性文字、"INSERT"图块
- “,” 逻辑或,对象类型可多选,名称用 “,” 分隔。例如,创建直线和文本的选择集:
1(ssget ‘((0 . “TEXT,LINE”)))
框选对象后,将只有直线和文本被选中(亮显)并加入选择集。 - “~” 逻辑非,用来排除某类型。例如:创建除过图块的选择集
1(ssget ‘((0 . “~INSERT,LINE”)))
显然,第二个类型 LINE 毫无意义,因为第一个 ~INSERT 非图块类型范围包含了 LINE 类型。 - “*” 通配符,用来表示模糊类型。例如,创建所有直线的选择集:
1(ssget ‘((0 . “*LINE”)))
框选对象后,可以将 “LINE”、”LWPOLYLINE”、”SPLINE”、”MLINE” 类型加入选择集,和以下过滤条件等价:
1(ssget ‘((0 . “LINE,LWPOLYLINE,SPLINE,MLINE”)))
通常我们用后者实现精确过滤。
其他:
1(ssget ‘((0 . “*E”)))
选择过滤所有直线、圆、椭圆的类型,因为他们的尾字母都是 E。
1(ssget ‘((0 . “*”)))
与 (ssget) 等价,相当于全选。
1(ssget ‘((0 . “~*”)))
Lisp 都不知道你要干嘛了,因为它什么也选不上。 - 0 组码可以和其他组码组成 list 表过滤。例如,选择半径为 20 的圆:
1(ssget ‘((0 . “CIRCLE”)(40 . 20)))
通常,对于字符类型组码均支持通配过滤语法,包括线型名、文字样式、图层等。
例如:选择非 0 层的所有对象
1(ssget ‘((8 . “~0”))) - 注意并不是所有组码都支持过滤,例如下面过滤条件将返回 nil,即使存在句柄为 “25F” 的圆。
1(ssget ‘((0 . “CIRCLE”)(5 . “2*”)))
-4 组码
逻辑条件运算
用 -4 组码和逻辑运算符组成表对,将一个或几个表项包夹。逻辑运算符对大小写不敏感。
表对必须成对出现,如:(-4 . "<xx")...(-4 . "xx>")
, 常用的逻辑运算符如下:
1 2 3 4 |
or 项目并集 and 项目交集 not 不含此项 xor 两项异或 |
- or 并集。例如,选择直线和文本:
1(ssget '((-4 . "<or")(0 . "line")(0 . "text")(-4 . "or>")))
显然与 (ssget ‘((0 . “text,LINE”))) 等价,但后者写法更简洁。
例如,选择颜色为红色和绿色的文字和直线:
1(ssget '((0 . "TEXT,LINE")(-4 . "<or")(62 . 1)(62 . 3)(-4 . "or>"))) - and 交集。例如,选择图层为 “notes”,颜色为绿色的单行文本:
1(ssget '((-4 . "<and")(0 . "text")(8 . "notes")(62 . 3)(-4 . "and>"))) - not 非。例如,选择非 “notes” 层的实体对象:
1(ssget '((-4 . "<not")(8 . "notes")(-4 . "not>")))
显然与 (ssget ‘((8 . “~notes”))) 等价。
注意:非运算只能有一个表项被包夹,否则 ssget 将返回 nil。 - xor 异或。即半加法,实现二进制加法的不进位运算。逻辑意义: 相同为0,相异为1。
例如,选择在 “notes” 层不是绿色、或是绿色而不在 “notes” 层的文本对象:
1(ssget '((0 . "text")(-4 . "<xor")(8 . "notes")(62 . 3)(-4 . "xor>")))
注意:异或运算只能有两项,如果超过两项或只有一项,ssget 将返回 nil。 - 逻辑运算可以嵌套,组成更复杂的条件运算。
123456(ssget '((0 . "text")(-4 . "<or")(-4 . "<and")(8 . "0")(62 . 1)(-4 . "and>")(-4 . "<and")(8 . "notes")(62 . 3)(-4 . "and>")(-4 . "or>")))
关系条件运算
用 -4 组码和关系运算符组成表对,放在需要比较的表项前。
与成对出现的逻辑条件不同,关系表对单个出现,常用关系运算符如下:
1 2 3 4 5 6 7 8 9 10 |
"*" 通配符 "=" 等于 "!=" 不等于 "" 不等于 "<" 小于 "<=" 小于或等于 ">" 大于 ">=" 大于或等于 "&" 按位与 "&=" 按位屏蔽相等(仅适用于组值为整型的组) |
例如:选择半径大于或等于20的圆
1 |
(ssget '((0 . "CIRCLE")(-4 . ">=")(40 . 20))) |
选择半径20的圆,颜色不是红色
1 |
(ssget '((0 . "CIRCLE")(-4 . "<and")(-4 . "!=")(62 . 1)(40 . 20)(-4 . "and>"))) |
对于含有多个元素的比较,如点坐标,可用 “,” 隔开关系运算符。
选择圆心坐标 x>100, y<120, z=0,图层名以 cir 开始的圆
1 |
(ssget '((0 . "CIRCLE")(-4 . ">,<,=")(10 100 120 0)(8 . "cir*"))) |
选择图形颜色不是随层 (bylayer) 的对象,可用以下代码
1 |
(ssget '((-4 . "&")(62 . 255))) |
我们知道 CAD 的索引颜色数为 1-255,用 2 个字节表示,随层的颜色为 0,在 DXF 组码中并不显示。
此时如果用 (ssget ‘((-4 . “>”)(62 . 0))) 来过滤是不对的,随层颜色的图形也将被选上。
如果用二进制的 8 个 1 与当前颜色数进行逻辑与的位运算 &,其结果都不是 0, 即为真, 2^8=255
1 组码
文本内容的匹配运算(与 wcmatch 函数语法相同),相当于简单正则。
对于包含大量文本对象的图形,有时候需要精确的过滤条件,可以通过以下特殊符号来实现:
1 2 3 4 5 6 7 8 9 10 |
"*" 通配符,代表一个或多个任意字符 "|" 管道符,用来连接并列字符,表示或的关系 "?" 占位符,代表一个任意字符 "#" 数字符,代表一个0-9的字符 "@" 字母符,代表一个a-z,A-Z字符 "." 特殊字符,代表一个除字母和数字的其他字符 "~" 符号非运算 "`" 转义字符(数字 1 左边那个字符) "," 分隔两个模式的表达式 "[]" 限位符,用中括号包括一个表达式,表示一位字符 |
例1: CAD 中有以下 3 组 TEXT 文本
① X=35.614 ② Y=356.201 ③ Z=11.526
- 要求匹配以 “X=” 这两个字母开始的单行文本
1(ssget ‘((0 . “TEXT”) (1 . “X=*”)))
返回第 ① 组文本的选择集
解读: “X=” 不是通配运算符,在此表示精确匹配,后面加 “*” 是任意符号。 - 要求匹配以 “X=” 或 “Y=” 这两个字母开始的单行文本
1(ssget ‘((0 . “TEXT”) (1 . “[X|Y]=*”)))
返回第 ①、② 组文本选择集
解读: 并列出现的字符,用 “|” 连接。 - 要求匹配 包含数字小于 100 的单行文本
1(ssget ‘((0 . “TEXT”) (1 . “@=##[.]*)))
返回第 ①、③ 组文本选择集
解读: “##” 代表两个数字,两个数字连接最大只能是 99。小数点单独出现用方括号 [.]
如果仅仅是 “.”,而没有方括号,则代表任意特殊符号。
例2: 我们再试验一组复杂的文本,在 CAD 中写入以下 10 组 TEXT 文本
① abcde ② 12345 ③ -25.390 ④ *&@125 ⑤ F35 ⑥ #54-65 ⑦ 头文字 ⑧ 36 75 ⑨ F ⑩ /(*&%@!
- 要求匹配 包含数字 文本
1(ssget ‘((0 . “TEXT”) (1 . “<em>#</em>“)))
以上代码将选中 ②③④⑤⑥⑧ 包含数字的 6 组文本
解读: “#” 代表一个数字字符, - 要求匹配 以*开始的 文本
1(ssget ‘((0 . “TEXT”) (1 . “`**”)))
以上代码将选中 ④ 以*开始的 1 组文本
解读: 因为"*"
是通配符,要匹配语法中的专用字符用转义"'*"
- 要求匹配 不含特殊字符 文本
1(ssget ‘((0 . “TEXT”) (1 . “~*.*”)))
以上代码将选中 ①②⑤⑦⑨,注意:负号和小数点也是特殊符号
解读: “.” 代表一个特殊字符,前后加 “.” 包含一个特殊字符,不含特殊字符就是 “~*.*” - 要求匹配 纯数字 的单行文本,包含负号和小数点
1(setq ss (ssget ‘((0 . “TEXT”) (1 . “~*[~.–9]*))))
解读: 负负得正,两次取非可获取数字本身,括号内 “[~.-]”, 意为包含小数点和负号。
注意, 220-11 不能参加计算的数字也会被包括其中。
下面给出常用匹配规则,欢迎测试
- 匹配数字,不含小数点和正负号: “~*[~0-9]*” 如: 9824
- 匹配 26 个小写字母: “~*[~a-z]*” 如: loveu
- 匹配大写字母或数字: “~*[~A-Z],~[~0-9]*” 如: NASAA 或 9527
- 匹配大写字母和数字混排: “~*[~A-Z|0-9]*” 如: F36D
- 空格是一个很特殊的字符,用一个空格可以匹配任意个空格,其他字符没有这个特性。例如:
(wcmatch " " " ")
返回 T
-3 组码
扩展数据过滤。ALISP 中可以用如下方法给图形添加扩展数据,增加自定义组码及表值。
- 第一步,注册一个扩展对象应用名
1(regapp “xapp”) - 第二步,选择一个图元并返回组码
1(setq En (entget (car (entsel)))) - 第三步,定义加入图元的扩展数据
1(setq data ‘((-3 (“xapp” (1000 . “你好中国”))))) - 第四步,将扩展数据附着更新图元
1(entmod (append En data)) - 完成,我们可以检查一下扩展数据
1(assoc -3 (entget (car (entsel)) ‘(“xapp”)))
结果返回 (-3 (“xapp” (1000 . “你好中国”)))
采用这种方法添加扩展数据,用 EXPLODE 命令不能清除。
与 -3 组码无关的话题。
用 VLisp 函数给图元添加数据比较简单,无需提前注册名称,例如
1 |
(vlax-ldata-put (car (entsel)) "xa" "你好中国") |
查询数据如下:
1 |
(vlax-ldata-get (car (entsel)) "xa") |
返回 “你好中国”
采用这种方法,用 EXPLODE 命令可以炸开扩展数据,相当于清除图元的扩展数据。
在某些二次开发的 CAD 程序中,扩展数据被大量使用,用来分类图元对象(图层分类法容易被修改)。
这时候的 ssget 方显英雄本色,用来精确选择,再适合不过。在参数化制图时,添加扩展数据,当参数发生变化时,很容易遍历修改这些对象,由于扩展数据的不可见和不可分解的特性,不会被用户误操作。
这时候只需要用下面代码即可完成过滤,连对象类别的 0 组码 都不需要了。
1 |
(ssget ‘((-3 (“xapp”)))) |
lisp组码
组码 说明
-5 APP:persistent reactor链表
-4 APP:条件运算符(仅用于 ssget)
-3 APP:扩展数据 (XDATA)标记(固定)
-2 APP:图元名引用 (固定)
-1 APP:图元名。每次打开图形时它都改变,且不被保存。(固定)
0 表示图元类型的文字字符串(固定)
1 图元的主要文字值
2 名称(属性标记、块名称等)39145 其他的文字值或名称值
5 图元句柄。最多 16 位十六进制数字的文字字符串(固定)
6 线型名(固定)
7 文字样式名(固定)
8 图层名(固定)
9 DXF:变量名标识符(仅用于DXF 文件的 HEADER 区域)。
10 主要点。此点为直线或文字图元的起点,圆的圆心等等。
DXF:主要点的 X 值(其后为 Y 和 Z 值的组码 20 和 30) APP:三维点(三个实数构成的表)39404 其他点。
DXF:其他点的 X 值(其后为 Y 和 Z 值的组码 21-28 和 31-38) APP:三维点(三个实数构成的表)
20, 30 DXF:主要点的 Y 和 Z 值
21-28, 31-37 DXF:其他点的 Y 和 Z 值
38 DXF:如果非零,则为图元的标高
39 如果非零,则为图元的厚度(固定)
40-48 浮点值(文字高度、比例因子等)
48 线型比例。浮点标量值。缺省值适用于所有图元类型。
49 可重复的浮点值。一个图元中的可变长度表(例如 LTYPE 表中的虚线长度)中可出现多个组码49。组码 7x 总是在第一个组码 49 前出现,用于指定表的长度。
50-58 角度(在 DXF 文件中单位为度,在 AutoLISP 和 ARX 应用程序中单位为弧度)。
60 表示图元可见性的整数值。不赋值或值为 0 时表示可见;为 1 时表示不可见。
62 颜色代码(固定)
66 “图元跟随”标志(固定)
67 空间,即模型空间或图纸空间(固定)
68 APP:表示视口打开但不可见、未激活或者关闭。
69 APP:视口标识数字。
70-78 整数值,如重复部分的计数器、标志位或模式等。
90-99 32 位整数值
100 子类数据标记(把继承下来的类名当作字符串)。由具体类继承下来的所有对象和图元类都必须有此项。此标记用于分离某个对象中由不同的类定义的数据。它也满足从ARX 继承下来的每个独立的具体类的 DXF 命名需要(请参见子类标记)。
102 控制字符串,其后为“{<任意名称>”或”}”。除了字符串必须以 “{” 开始外,它与外部数据组码
1002 类似。其后可跟任意字符串,且此字符串的解释取决于应用程序。另一个可用的控制字符串为”}”,它标识组的结束。如上所述,除了在执行图形核查操作期间外 AutoCAD一般不解释这些字符串;它们仅用于应用程序。
105 DIMVAR 符号表条目对象句柄。
210 拉伸方向(固定)。
DXF:拉伸方向的 X 值 APP:三维拉伸方向矢量
220, 230 DXF:拉伸方向的 Y 和 Z 值
280-289 8 位整数值
290-299 布尔标志值
300-309 任意的文字字符串
310-319 任意二进制数据组,与组码 1004 具有相同表示法和限制:最长为 254 个字符的十六进制字符串表示最长为
127 个字节的数据数据组。
320-329 任意对象句柄。句柄值保留原样,在执行 INSERT 和 XREF 操作时它们不被转化。
330-339 软键指针句柄。任意指向同一 DXF 文件或图形中的其他对象的软键指针,在执行 INSERT 和 XREF 操作时被转化。
340-349 硬键指针句柄。任意指向同一 DXF 文件或图形中的其他对象的硬键指针,在执行 INSERT 和 XREF 操作时被转化。
350-359 软键从属句柄。链接到同一 DXF 文件或图形中其他对象的任意软键从属链接,在执行 INSERT 和 XREF 操作时被转化。
360-369 硬键从属句柄。链接到同一 DXF 文件或图形中其他对象的任意硬键从属链接,在执行 INSERT 和 XREF 操作时被转化。
370-379 线宽枚举值 (AcDb::LineWeight)。作为短整数保存并移动。自定义非图元对象可使用全部范围组码,但图元类只能在其描述中使用371-379的DXF组码,因为AutoCAD和AutoLISP都总是采用370组码作为图元的线宽。在这里370组码就象其它的“公用”图元字段一样。
380-389 打印样式名类型枚举(AcDb::PlotStyleNameType)。作为短整数保存并移动。自定义非图元对象可使用全部范围组码,但图元类只能在其描述中使用381-389的DXF组码,其原因与上面的线宽范围相同。
390-399 描述打印样式名对象的句柄值,本质上是硬指针,但它有一不同的范围以使向后兼容能容易地处理。作对象的ID(在DXF文件中为句柄)和在AutoLISP中为特殊的类型保存并移动。自定义非图元对象可使用全部范围组码,但图元类只能在其描述中使用391-399的DXF组码,其原因与上面的线宽范围相同。
400-409 16位整数
410-419 字符串
999 DXF:999 组码表示其后为注释字符串行。DXFOUT不在 DXF 输出文件中包括此组;DXFIN 能识别词组码,但忽略其后的注释。通过 999组码,用户可以在所编辑的 DXF 文件中包括注释。
1000 扩展数据中的 ASCII 字符串(最长 255 个字节)。
1001 扩展数据的已注册应用程序名(ASCII 字符串,最长 31 个字节)。
1002 扩展数据控制字符串(”{” 或 “}”)。
1003 扩展数据图层名。
1004 扩展数据中的字节数据组(最长 127 字节)。
1005 扩展数据中的图元句柄。文字字符串,最多 16 位十六进制数字。
1010 扩展数据中的点
DXF:X 值(其后跟组码 1020 和 1030) APP:三维点
1020, 1030 DXF:点的 Y 和 Z 值
1011 扩展数据中的三维世界空间位置
DXF:X 值(其后跟组码 1021 和 1031):三维点
1021, 1031 DXF:世界空间位置的 Y 和 Z 值。
1012 扩展数据中的三维世界空间位移
DXF:X 值(其后跟组码 1022 和 1032):三维矢量
1022, 1032 DXF:世界空间位移的 Y 和 Z 值
1013 扩展数据中的三维世界空间方向
DXF:X 值(其后跟组码 1022 和 1032) APP:三维矢量
1023, 1033 DXF:世界空间方向的 Y 和 Z 值
1040 扩展数据浮点值。
1041 扩展数据距离值。
1042 扩展数据比例因子。
1070 扩展数据 16 位符号整数。
1071 扩展数据 32 位符号整数。
坐等大佬D盘更新,祝大佬全家福寿安康
有公众号之类的吗,之前这个网站打不开了
[…] 关于使用Change…
[…] 关于使用Functi…
谢谢提醒,已删 :)