fcut2004 发表于 2012-10-6 18:50:09

轴力求和程序,待完善

本帖最后由 fcut2004 于 2012-10-10 12:42 编辑

参考http://bbs.mjtd.com/thread-93264-1-1.html的讨论,我写了个轴力求和的代码。轴力的数值分别在81 82 图层,下面的代码两个图层一起选择的时候,就没有问题;但是如果只选其中一个图层时,就出错了 “*error* 函数中出错no function definition: &TSTY”。请问是怎么回事呢?

;桩轴力求和
(defun c:dd (/ ss ss1 ss2 n i sum1 sum2)
(defun wmg-ssgetp (ss filter)
(sssetfirst nil ss)
(ssget "p" (list (cons 8 filter)))
) ;wmg-ssgetp 子函数
(setq ss1 nil)
(setq ss2 nil )
(setq ss (ssget '((0 . "TEXT")(8 . "81,82"))));选择对象
(setq ss1(wmg-ssgetpss "82") );调用子函数,创建ss1选择集,如果选择集SS只有81图层,就出错
(setq ss2(wmg-ssgetpss "81") );调用子函数,ss2选择集,如果选择集SS只有82图层,就出错

;下面对ss1操作
(setq n (sslength ss1))
(setq i 0 sum1 0)
(repeat n
(setq string (cdr (assoc 1 (entget (ssname ss1 i)))))
(setq a1 (vl-string-search"," string))
(setq string (substr string 3 (-a1 2)))
(setq sum1 (+ sum1 (atof string)))
(setq i (+ i 1))
)
;下面对ss2操作
(setq i 0 sum2 0 )
(setq n (sslength ss2))
(repeat n
(setq string (cdr (assoc 1 (entget (ssname ss2 i)))))
(setq sum2 (+ sum2 (atof string)))
(setq i (+ i 1))
)
(setq sum1 (+ sum1 sum2))
(setq p1 (getpoint "\n计算结果基点: "))
(command "text" "ml" p1 "150""0" (strcat "\n 轴力和:"(rtos sum1 2 0) "") ""); 轴力结果
)

蔡__洛 发表于 2012-10-8 16:35:24

能不能多写点 代码注释呢 这样方便看 因为做结构在论坛是小部分人

fcut2004 发表于 2012-10-8 19:13:43

蔡__洛 发表于 2012-10-8 16:35 static/image/common/back.gif
能不能多写点 代码注释呢 这样方便看 因为做结构在论坛是小部分人

上面的注释已经不少了,兄台。这个我有个vlx版本的,刚学lisp,想自己写写。

蔡__洛 发表于 2012-10-9 13:56:41

fcut2004 发表于 2012-10-8 19:13 static/image/common/back.gif
上面的注释已经不少了,兄台。这个我有个vlx版本的,刚学lisp,想自己写写。

vlx版本很多种 也已经出了很久了! 我Q 231682564 我也是初学者 希望多交流!

chlh_jd 发表于 2012-10-9 23:02:37

你这个不需要写,JCCAD 中墙下线设置输出方式为集中荷载 即可得到合力作用位置和大小

fcut2004 发表于 2012-10-10 08:50:09

chlh_jd 发表于 2012-10-9 23:02 static/image/common/back.gif
你这个不需要写,JCCAD 中墙下线设置输出方式为集中荷载 即可得到合力作用位置和大小

好的,谢谢。这贴主要就是讨论下过滤选择的问题,呵呵。

springwillow 发表于 2012-10-10 09:40:06

我看了一下你的图,81图层包括弯矩和轴力,只按图层求和恐怕是不行。弯矩不应该计入轴力里。如果要编完善了,需要判断字符和柱的关系,只对轴力求和。墙的82图层倒是好弄,你的出错我想是因为字符为N=***,M=***,只有数字的字符才能转换为数值。所以需要对字符进行判断、处理。

fcut2004 发表于 2012-10-10 12:44:18

springwillow 发表于 2012-10-10 09:40 static/image/common/back.gif
我看了一下你的图,81图层包括弯矩和轴力,只按图层求和恐怕是不行。弯矩不应该计入轴力里。如果要编完善了 ...

(setq ss (ssget '((0 . "TEXT")(8 . "81,82"))));选择对象
(setq ss1(wmg-ssgetpss "82") );调用子函数,创建ss1选择集,如果选择集SS只有81图层,就出错
(setq ss2(wmg-ssgetpss "81") );调用子函数,ss2选择集,如果选择集SS只有82图层,就出错
主要是上面三句话的问题

springwillow 发表于 2012-10-11 08:49:11

fcut2004 发表于 2012-10-10 12:44 static/image/common/back.gif
(setq ss (ssget '((0 . "TEXT")(8 . "81,82"))));选择对象
(setq ss1(wmg-ssgetpss "82") );调用子函 ...

你这个需要用cond判断一下,看ss选择集中是否有81、82或81和82,三种情况,分情况调用。

pxt2001 发表于 2012-10-11 22:03:37

结构剪力墙轴力求和,请试用这个
页: [1] 2
查看完整版本: 轴力求和程序,待完善