fjutcivil 发表于 2013-8-24 02:46:59

不知道错在哪里?求指正完善

本帖最后由 fjutcivil 于 2013-8-24 11:40 编辑

我想多加两个判断不知道怎么加,求大神指导,一个是如果a -b0_a0 >4(即z3开根号与b0_a0 比较大于4 开根号不知道是什么函数,囧)时最后输出采用 ( "%%132" (itoa a) "@" (/ b0_b 3)"/"(* 2 (/ b0_b 3)))即在预设的间距里面,放两根,eg预设间距200,直径14,即为18@66/133现实摆放的顺序为14 18 18 14 18 18,他们之间的间距为200/3……,控制让a - b0_a0 <=4如果无法实现时红色显示 ,如果b0_a0-a<4取a=b0_a0-4,绿色显示。还有一个判断是 z1 <0时,黄色显示,貌似挺麻烦的,求指导,求完善!!!


(defun c:tt (/ c)    ;虽然纯数字可以作为命令名,但不建议使用
(if (not b0_a)   ;预设a、b,对于全局变量,建议使用稍复杂的变量名,子函数也同
    (setq b0_a 14)
)
(if (not b0_b)
    (setq b0_b 200)
)
(initget 6 "S")   ;非零非负
(setq n (getint "\n [参数设置(S)]: "))
(cond
    ((= n "S")      ;关键字
   (b0::s)      ;调用参数设置子函数
   (c:tt)         ;设置完毕回主程序
    )
    ((= n "X") nil)
    (t            ;其它情况——正常输入
       (progn (b1::out) (c:tt))   ;执行完毕回主程序,形成循环
    )
)
(princ)
)

(defun b1::out (/ e1 e2 a1 a2 b1 b2 z1 z2 z3 f )
   (setvar "cmdecho" 0)
   (setq e1 (entget (car (entsel"\n 选择欲替换的文字内容"))))
   (setq e2 (entget (car (entsel" \n 选择配筋计算值:" ))))
   (setq a1 (cdr (assoc 1 e1))) ;e1文字内容
   (setq a2 (atof (cdr (assoc 1 e2)))) ;e2文字内容
   (setq b1 (* pi (* (/ b0_a 2.0) (/ b0_a 2.0)))) ;通长筋钢筋面积
   (setq b2 (* b1 (/ 1000 b0_b))) ;每延米通长筋钢筋面积
   (setq z1 (- a2 b2)) ;扣除通长筋钢筋剩余面积
   (setq z2 (/ z1 (/ 1000 b0_b))) ;计算钢筋面积
   (setq z3 (/ (* z2 4) pi)) ;计算钢筋直径平方
   (cond
   ((> z3 (* 18 18)) (setq a 20))
   ((> z3 (* 16 16)) (setq a 18))
   ((> z3 (* 14 14)) (setq a 16))
   ((> z3 (* 12 12)) (setq a 14))
   ((> z3 (* 10 10)) (setq a 12))
   ((> z3 (* 8 8)) (setq a 10))
   (t (setq a 8))
   )
   (setq f (strcat "%%132" (itoa a) "@" (rtos b0_b)))
   (setq e1 (subst (cons 1 f) (assoc 1 e1) e1 ))
   (entmod e1)
   (setvar "cmdecho" 1)
)

(defun b0::s (/ b0_a0 b0_b0 )   ;设置子函数
(if (not b0_a)
    (setq b0_a 14)
)
(if (not b0_b)
    (setq b0_b 200)
)
(initget 4)         ;非零非负
(setq b0_a0 (getint (strcat "\n输入钢筋直径mm <" (itoa b0_a) "> : ")))
(if b0_a0
    (setq b0_a b0_a0)
)
(setq b0_b0 (getreal (strcat "\n输入间距 <" (rtos b0_b) "> : ")))
(if b0_b0
    (setq b0_b b0_b0)
)
)

ll_j 发表于 2013-8-24 08:04:25

简单看了一下,有几点需要改进的:
1. (setq n (getint "\n [参数设置(S)]: "))和 (setq e1 (entget (car (entsel"\n 选择欲替换的文字内容"))))可能需要合起来,否则单单前一句,用户除了输入S以为,不知道输入什么值。
2.(c:gbj)         ;设置完毕回主程序,函数名错误。
3. (prompt "\n 选择配筋计算值:")   (setq e2 (entget (car (nentsel )))),两句应该合并,entsel是可以带提示的。
4. (setq b1 (* pi (* (/ b0_a 2) (/ b0_a 2)))) ;通长筋钢筋面积,这里的2,都应该用2.0(实数),顺便说一句,按照钢筋的相关规范,面积的计算根据直径保留的位数不同,有点麻烦(可以看看我的网络U盘中的ca.lsp)。
5. (setq f (strcat "%%132" (itoa a) "@" b0_b)),这里的b0_b应该用rtos转换一下。




ZZXXQQ 发表于 2013-8-24 08:18:32

6.递归调用怎么无出口? (progn (b1::out) (c:tt))   ;执行完毕回主程序,形成循环

ll_j 发表于 2013-8-24 08:44:52

ZZXXQQ 发表于 2013-8-24 08:18 static/image/common/back.gif
6.递归调用怎么无出口? (progn (b1::out) (c:tt))   ;执行完毕回主程序,形成循环

他是想不断循环,这是新手常用的手段。
在提示设置参数一句增加一个退出选项X就行了,cond段增加((=n "X") nil)就行。

500w008 发表于 2013-8-24 09:19:22

fjutcivil 发表于 2013-8-24 11:43:56

ll_j 发表于 2013-8-24 08:04 static/image/common/back.gif
简单看了一下,有几点需要改进的:
1. (setq n (getint "\n [参数设置(S)]: "))和 (setq e1 (entget (car...

第一点我不知道怎么下手,后面的改正了,初步能运行了,钢筋面积保留位数那个后面在研究下你的那个,还有 我加了((= n "X") nil) ,输入X的时候提示“需要正的非零整数 或选项关键字。”
还有前面说的两个判断完全不知道怎么下手,求解啊

fjutcivil 发表于 2013-8-24 11:45:44

ZZXXQQ 发表于 2013-8-24 08:18 static/image/common/back.gif
6.递归调用怎么无出口? (progn (b1::out) (c:tt))   ;执行完毕回主程序,形成循环

我是菜鸟啊,工作后自己用业余时间学了点LISP,大学那会读土木去了,就学过VF,囧,帮我看看前面两个判断咋整吧 哪里有问题的帮我完善下吧 不胜感激

fjutcivil 发表于 2013-8-24 11:47:54

500w008 发表于 2013-8-24 09:19 static/image/common/back.gif
要实现什么功能 付个图

其实就是个计算面积的过程,我也不知道怎么附图,前面的判断不知道咋弄

ll_j 发表于 2013-8-24 13:31:57

fjutcivil 发表于 2013-8-24 11:43 static/image/common/back.gif
第一点我不知道怎么下手,后面的改正了,初步能运行了,钢筋面积保留位数那个后面在研究下你的那个,还有 ...

第一个问题这样:
(defun c:tt (/ c)    ;虽然纯数字可以作为命令名,但不建议使用
(if (not b0_a)   ;预设a、b,对于全局变量,建议使用稍复杂的变量名,子函数也同
    (setq b0_a 14)
)
(if (not b0_b)
    (setq b0_b 200.0)      ;实数
)
(initget "S X")   ;非零非负
(setq n (entsel "\n选择欲替换的文字 或 [参数设置(S)/退出(X)]<X>: "))
(cond
    ((= n "S")      ;关键字
   (b0::s)      ;调用参数设置子函数
   (c:tt)         ;设置完毕回主程序
    )
    ((or (= n "X") (= n nil)) nil)
    (t            ;其它情况——正常输入
       (progn (b1::out) (c:tt))   ;执行完毕回主程序,形成循环
    )
)
(princ)
)

fjutcivil 发表于 2013-8-24 13:41:53

ll_j 发表于 2013-8-24 13:31 static/image/common/back.gif
第一个问题这样:

换颜色那个呢?大侠
页: [1] 2
查看完整版本: 不知道错在哪里?求指正完善