- 积分
- 3521
- 明经币
- 个
- 注册时间
- 2010-9-4
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
发表于 2019-10-10 18:41:28
|
显示全部楼层
(defun c:ttt(/ ss lst_ss lst_r fuzz ci)
(setq ss (ssget '((0 . "CIRCLE") )));构造选择集
(setq lst_ss (wyl:ss2ptlist ss -1));选择集转换成图元列表
(setq lst_r (list
'(0.5)
'(0.75)
'(1)
)
lst_no nil
);做一个变量保存完成值
(setq fuzz 0.125);设置容差
(foreach en lst_ss
(setq ci (wyl:dxfcdr 40 en))
(cond
((equal (car (nth 0 lst_r)) ci fuzz)
(setq lst_r (append (list (append (car lst_r) (list en))) (cdr lst_r)))
)
((equal (car (nth 1 lst_r)) cifuzz)
(setq lst_r (append (car lst_r) (list (append (cadr lst_r) (list en))) (caddr lst_r)))
)
((equal (car (nth 2 lst_r)) ci fuzz)
(setq lst_r (append (car lst_r) (cadr lst_r) (list (append (caddr lst_r) (list en)) )))
)
(t (setq lst_no (append (list en ) lst_no)))
)
)
(princ (strcat "\n分类好的圆列表如下:\n"
(vl-princ-to-string lst_r )
"\n未分类的圆列表如下:\n"
(vl-princ-to-string lst_no )
))
)
;;选择集转为dxf列表
;;说明:传入选择集,将对应的组码返回
;;参数:ss:选择集
;;参数:dxf:组码,例如10代表插入点,0代表对象类型,2代表对象名,8代表图层,-1是图元名
;;返回:列表
(defun wyl:ss2ptlist ( ss dxf / n i elist )
;(defun ss2ptlist ( ss / )
(setq n (if (= (type ss) 'Pickset) (sslength ss) 0)
elist '()
)
(repeat n
(setq elist (cons (cdr (assoc dxf (entget (ssname ss (setq n (1- n)))))) elist))
)
)
;|
dxfcar,直接返回car后的值,例如图层名等
参数:
i:编号,int
en:对象图元名或对象信息表,ename或list
返回值:对应子表包含组码值,如果错误返回对应内容,如果传入的en为nil那么返回(nil nil)
|;
(defun wyl:dxfcdr(i en / r)
(cdr (wyl:dxf i en))
)
;|
dxf,根据组码编号及对象返回组码内容
参数:
i:编号,int
en:对象图元名或对象信息表,ename或list
返回值:对应子表包含组码值,如果错误返回对应内容,如果传入的en为nil那么返回(nil nil)
|;
(defun wyl:dxf(i en / r)
(if en
(progn
(setq r nil)
(if (/= "INT" (vl-prin1-to-string (type i)))
(setq r "确定组码为int")
)
(if (and (/= "ENAME" (vl-prin1-to-string(type en)))
(/= "LIST" (vl-prin1-to-string(type en))))
(setq r "确定en为表或者ename")
)
(if (and
(not r)
(= "LIST" (vl-prin1-to-string(type en)))
)
(if (/= nil (assoc i en))
(setq r (assoc i en))
(setq r "无对应组码")
)
(setq r (wyl:dxf i (entget en)))
)
r
)
'(nil nil)
)
)
这个有点啰嗦,cond函数可以简化成while循环,apply跟mapcar可能用不到这里吧? |
|