![]() |
[求助]?例四 编程遇到的问题
[求助]範例四 编程遇到的问题
www.dimcax.com [求助]範例四 编程遇到的问题 初学autolisp,请大家帮忙 题目:範例四:請撰寫一個 cirsca.lsp,其內有二個可執行函數: cira碰選circle後,原circle大小自動縮為原來的1/2 cirb碰選circle後,原circle大小自動放大為原來的2倍 我的答案: (defun c:cirsca() (setvar "cmdecho" 0) (setq cir (entsel "choose a circle")) (setq table (entget (car cir))) (setq rad_t (assoc 40 table)) (setq rad (cdr rad_t)) (setq mid (cdr (assoc 10 table)));centre of circle (setq choose (getstring "a--scale 1/2, b--scale 2")) (setq n (cond ((or (= choose a) (= choose a)) 0.5) ((or (= choose b) (= choose b)) 2) ) ) (setq n_rad (* rad n)) (setq new_rad(cons 40 n_rad)) (setq table(subst rad_t new_rad table)) (entmod table) ;依新圖元資料自動更新圓半徑 (prin1) ) (prompt "*************** << c:cirsca >> *****************") (prin1) load之后出现这样的提示 命令: (load"cirsca") *************** << c:cirsca >> ***************** 命令: cirsca choose a circlea--scale 1/2, b--scale 2a ; 错误: 参数类型错误: numberp: nil cira碰選circle後,原circle大小自動縮為原來的1/2 cirb碰選circle後,原circle大小自動放大為原來的2倍 我的答案: (defun c:cirsca() (setvar "cmdecho" 0) (setq cir (entsel "choose a circle")) (setq table (entget (car cir))) (setq rad_t (assoc 40 table)) (setq rad (cdr rad_t)) (setq mid (cdr (assoc 10 table)));centre of circle (setq choose (getstring "a--scale 1/2, b--scale 2")) (setq n (cond ((or (= choose a) (= choose a)) 0.5) ((or (= choose b) (= choose b)) 2) ) ) (setq n_rad (* rad n)) (setq new_rad(cons 40 n_rad)) (setq table(subst rad_t new_rad table)) (entmod table) ;依新圖元資料自動更新圓半徑 (prin1) ) (prompt "*************** << c:cirsca >> *****************") (prin1) load之后出现这样的提示 命令: (load"cirsca") *************** << c:cirsca >> ***************** 命令: cirsca choose a circlea--scale 1/2, b--scale 2a ; 错误: 参数类型错误: numberp: nil d test(defun c:cirsca() (setvar "cmdecho" 0) (setq cir (entsel "choose a circle")) (setq table (entget (car cir))) (setq rad_t (assoc 40 table)) (setq rad (cdr rad_t)) (setq mid (cdr (assoc 10 table)));centre of circle (setq choose (getstring "a--scale 1/2, b--scale 2")) (setq n (cond ((or (= choose "a") (= choose "a")) 0.5) ((or (= choose "b") (= choose "b")) 2) ) ) (setq n_rad (* rad n)) (setq new_rad(cons 40 n_rad)) (setq table(subst new_rad rad_t table)) (entmod table) ;依新圖元資料自動更新圓半徑 (prin1) ) (prompt "*************** << c:cirsca >> *****************") (prin1) change your life style. d subst函数你用错了,应该像二楼一样,subst 新项 旧项 源data 新项要放着前面。 另外:建议不要用getstring函数,因为没有字符串的限制。 用这个吧: (initget 1 "a b") (setq choose (getkword "\n a--scale 1/2, b--scale 2: <a>")) (if (null choose) (setq choose "a")) 这样只能输入a或者b了,当回车时默认输入为a。 (setq choose (getkword "\n a--scale 1/2, b--scale 2: <a>")) (if (null choose) (setq choose "a")) 这样只能输入a或者b了,当回车时默认输入为a。 d 谢谢咯 d |
| 所有的时间均为北京时间。 现在的时间是 06:25 AM. |