我想问个修改字体组码的问题
(defun c:tt()(setq a(ssget()))
(setq n 0)
(if(/= a nil)
(progn
(setq L (sslength a ))
(repeat L
(setq b (entget(ssname a n )))
(setq c(assoc 40 b))我要改40里的值,要怎么改,改完字体会变大不
n(+ n 1)
)
)
)
)
(defun c:tt ()
(setq a (ssget ()))
(setq n 0)
(if (/= a nil)
(progn
(setq L (sslength a))
(repeat L
(setq b (entget (ssname a n)))
(setq c (assoc 40 b))
(entmod (subst (cons 40 100) C B));;把40改成100
(setq n (+ n 1))
)
)
)
) wanchr 发表于 2019-11-21 22:08
5楼就是专业的了,我菜鸟,还没好好看书,能解释一下(cons 40 100) 结果是(40 . 100) ,这个 ...
cons函数的参数有两个,均可以是任何元素或表,而点对是一种特殊的表.作用分两种,当第二个参数是表的时候(第二个参数是点对的时候也是这种情况),是将第一个参数原样插入到第二个元素的最前,返回值是一个表
当第二个参数是元素的时候,是与第一个参数的原样生成一个点对.
所以(cons 40 表)和(cons 40 元素)都是正确的使用方法.
注:所有非表的数据类型都是元素,包括实数,整数,字符串,ename等
(atom item)参数item任意 AutoLISP 项。某些版本的 LISP 对 atom(原子)的解释有些不同,所以在使用移植的代码时应加以注意。返回值如果 item 是表,则为 nil,否则为 T。任何不是表的变量都认为是元素原子。
wanchr 发表于 2019-11-21 22:08
5楼就是专业的了,我菜鸟,还没好好看书,能解释一下(cons 40 100) 结果是(40 . 100) ,这个 ...
(cons 40 100)->(40 . 100);点对
(list 40 100)->(40 100);表
点对和表不一样,很简单的一点就是用cdr处理.(car对于两者是相同的)
(cdr (cons 1 2)->2
(cdr (list 1 2) ->(2)
对于图元信息表,是一个点对组成的列表.
(cons 41 '( 40 100))->(41 40 100)
(cons 41 '(40 . 100))->(41 40 . 100);注意这个点
(list 41 '(40 100))->(41 (40 100))
另外
(append '( 41) '(40 100))->(41 40 100)
(cons '(41) '( 40 100))->((41) 40 100)
(list '(41) '(40 100))->((41) (40 100))
非常不错,谢谢你的帮助 (if(/= a nil)....)
可以简写成
(if a .....)
也可以扩写成
(if (= 'PICKSET (type a))....)
先判断a是不是选择集.
(setq L (sslength a ))
(repeat L ...)
可以合并为
(repeat (sslength a ) ...)
省略一个中间变量
另外if后只有一个分支,可以去掉progn函数
建议把局部变量加上去. (defun c:tt ( / a b n)
(while (not (setq a (ssget(list (cons 0 "*TEXT"))))));选择集筛选文字对象,当未获得选择集时重新获取
(repeat (setq n (sslength a))
(setq b (entget (ssname a (setq n (1- n)))))
(entmod (subst (cons 40 100) (assoc 40 b) b));;把40改成100
)
)
更简洁些.而且可读性不会降低很多 非常简洁干净,少了很多变量 本帖最后由 wanchr 于 2019-11-21 23:30 编辑
5楼就是专业的了,我菜鸟,还没好好看书,能解释一下(cons 40 100) 结果是(40 . 100) ,这个”."是什么意思
我看说明里(cons 40 表) 100的位置是个表
不理解
(defun c:tt(/ a n)
(if(setq n 0 a(ssget'((0 . "TEXT"))))
(repeat(sslength a)
(entmod(append(entget(ssname a n))'((40 . 100))))
(setq n(1+ n))
)))
页:
[1]
2