明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2006|回复: 4

[LISP]请教各位subst

[复制链接]
发表于 2004-7-30 17:13:00 | 显示全部楼层 |阅读模式
(setq dim_sc_new 1.5)
(setq dim_sc_old (cdr (assoc 1040 (cdadr (assoc -3 ent)))) )
我想用subst和entmod来实现dim_sc_new替换dim_sc_old,
请教各位大侠怎么做
发表于 2004-7-31 03:35:00 | 显示全部楼层
ent表也太深了吧! 首先你第二句中的cdr应改成cadr,因为cdr取得的是一个表,而根据你的意思dim_sc_old与dim_sc_new对应,所以dim_sc_old也应是一个数值而不是表 具体实现参看下面函数,也许方法显得笨了点,但能通过,企盼高人指点! (defun mode_ent( ent / dim_sc_old dim_sc_new dim_sc_b)
(setq dim_sc_new 1.5)
(setq dim_sc_old (cadr (assoc 1040 (cdadr (assoc -3 ent)))))
(setq dim_sc_b (assoc 1040 (cdadr (assoc -3 ent))))
(setq dim_sc_new (subst dim_sc_new dim_sc_old dim_sc_b))
(setq dim_sc_old dim_sc_b)
(setq dim_sc_b (cadr (assoc -3 ent)))
(setq dim_sc_new (subst dim_sc_new dim_sc_old dim_sc_b))
(setq dim_sc_old dim_sc_b)
(setq dim_sc_b (assoc -3 ent))
(setq dim_sc_new (subst dim_sc_new dim_sc_old dim_sc_b))
(setq dim_sc_old dim_sc_b)
(setq dim_sc_b ent)
(setq dim_sc_new (subst dim_sc_new dim_sc_old dim_sc_b))
(entmod dim_sc_new)
) ent输入: ((1 2) (-3 ((1 2) (1040 2.5) (1 2)) (1 2))) 函数返回:((1 2) (-3 ((1 2) (1040 1.5) (1 2)) (1 2)))
说明通过! 这只是测试函数的正确性,根据你的意思,ent应该是一个用(entget)函数取得 的实体数据表
发表于 2004-7-31 13:18:00 | 显示全部楼层
(setq lst '((1 2) (-3 ((1 2) (1040 2.5) (1 2)) (1 2))))
(setq new 555)
(mapcar '(lambda (x / a b)
(setq a (car x)
b (cadr x))
(if (= a -3)
(list -3 (subst (cons 1040 new) (assoc 1040 b) b))
x
)
)lst
)
->((1 2) (-3 ((1 2) (1040 . 555) (1 2))))
发表于 2004-8-1 14:51:00 | 显示全部楼层
楼上的果然高!
 楼主| 发表于 2004-8-3 15:20:00 | 显示全部楼层
多谢两位!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-9-30 20:26 , Processed in 0.165566 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表