394189642 发表于 2010-1-13 10:40

autolisp求教

这个程序目的修改圆的半径,请教高手,看问题出在哪,CAD提示字符串有缺陷
(defun c:chcr()
         (setvar"cmdecho"0)
         (setq en (entsel"选取已知圆:"))
            (setq en-data(entget(car en)))
            (setq olden-data-list(assoc 40 en-data))
            (setq oldr(car data-list))
            (princ"\n oldradiul:“)(princ oldr)
            (setq cenpt(car(assoc 10 en-data)))
            (setq newr(getdist cenpt "New Radius:"))
            (setq newen-data-list(cons 40 newr))
            (setq en-data(subst newen-data-list olden-data-list en-data))
            (entmod en-data)
)
(prin1)
(prompt"***************<<c:chcr>>***************")
(prin1)

Camello 发表于 2010-1-13 11:04

找到一篇:http://www.autocad.com.tw/lisp_7.htm



请撰写一个CHGRAD.LSP,用来修改圆半径,此程式的执行过程要求如下:
* 指令: CHGRAD
* 选取已知圆:碰选画面上已存在的圆
* 自动显示该旧圆半径值於指令区
* 新半径:要求输入一半径值 new_rr

程式内容解答:

(defun c:chgrad()
(setvar "cmdecho" 0;指令执行过程不回应
;;;;以下为 INPUT 图元选取
(setq en (entsel "选取已知圆:")) ;要求碰选一个圆
;;;;以下为图元资料&半径资料取得
(setq en_data (entget (car en))) ;取得元体资料串列
(setq old_rad_list (assoc 40 en_data));取得半径子串列
(setq old_rr (cdr rad_list))         ;取得旧有半径
(princ “\n旧半径=”)(princ old_rr) ;显示该旧圆半径值於指令区
;;;;以下为新半径输入&图元资料新旧半径更替
(setq cenpt (cdr (assoc 10 en_data))) ;一口气取得圆之圆心
(setq new_rr (getdist cenpt "New Radius:"));要求输入一半径值
(setq new_rad_list (cons 40 new_rr)) ;产生新半径子串列
(setq en_data (subst new_rad_list old_rad_list en_data)) ;新旧交替
(entmod en_data) ;依新图元资料自动更新圆半径
(prin1)
)
(prompt "*************** << C:CHGRAD >> *****************")
(prin1)

程式执行:(请先在画面上任意的画一些圆)
指令: (load"chgrad")
回应: *************** << C:CHGRAD >> *****************
指令: CHGRAD
选取已知圆: (碰选画面上已有的圆)
新半径:20         ( 输入一半径值)

394189642 发表于 2010-1-13 11:43

回复 #2 Camello 的帖子

看看我那有什么问题

0426 发表于 2010-1-13 11:51

二楼的范例一不就和你的一样吗?你都懒得自己比较一下吗?

粗略看了一下,(setvar "cmdecho" 0这里你多了个“)”吧

394189642 发表于 2010-1-13 11:54

回复 #4 0426 的帖子

我就是比较了找不到问题才求教的嘛

0426 发表于 2010-1-13 12:03

原帖由 394189642 于 2010-1-13 11:54 发表 http://www.askcad.com/bbs/images/common/back.gif
我就是比较了找不到问题才求教的嘛

不同的主要有下面几句:

(setvar"cmdecho"0)

(princ"\n oldradiul:“)(princ oldr)

(setq newr(getdist cenpt "New Radius:"))

)
(prin1)




(setvar "cmdecho" 0;指令执行过程不回应
(princ “\n旧半径=”)(princ old_rr) ;显示该旧圆半径值於指令区
;;;;以下为新半径输入&图元资料新旧半径更替
(setq new_rr (getdist cenpt "New Radius:"));要求输入一半径值

(prin1)
)

你自己(princ"\n oldradiul:“)(princ oldr)的引号竟然是一个中文的,一个英文的。:L

Camello 发表于 2010-1-13 12:04

check 变量名称及字串引号["]

0426 发表于 2010-1-13 12:11

我其实对这个不太懂,不过为了方便阅读代码,你的语句中怎么也要加该有的空格吧。
页: [1]
查看完整版本: autolisp求教