找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1775|回复: 6

[求助] [求助]:求一个计算钢筋面积并写出的程序

[复制链接]
发表于 2007-2-8 13:37:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
想编一个计算钢筋面积并写到图上的程序,请哪位高手指点迷津
钢筋的格式为3%%13225表示3根25的钢筋,中间的%%132是钢筋的符号。
我现在有一个计算钢筋面积的子程序,但不知道怎么用??


  1.   [FONT=courier new]
  2. ;;钢筋数量
  3. (defun NumOfBars (str)
  4.    (apply '+
  5.    (mapcar '(lambda (x)
  6.                (read (car (Parse_It (vl-string-subst "x" "%%131" x) "x"))))
  7.               (Parse_It (car (Parse_It str " ")) "+")))
  8. )
  9. ;;计算钢筋面积
  10. (defun BarArea        (str / e)
  11.   (apply
  12.     '+
  13.     (mapcar '(lambda (x)
  14.                (setq e (Parse_It (vl-string-subst "x" "%%131" x) "x"))
  15.                (* (read (car e)) (CirArea (read (cadr e)))))
  16.             (Parse_It (car (Parse_It str " ")) "+")))
  17.   )
  18.   [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2007-2-8 18:42:53 | 显示全部楼层
将字符串拆分为表的子函数Parse_It楼主未提供定义
有了这个子函数后 的用法:
(BarArea  "3%%13225")
应该返回1473
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-2-8 20:04:10 | 显示全部楼层

  1.   [FONT=courier new]
  2. ;;计算钢筋面积
  3. (defun BarArea        (str / e)
  4.   (apply
  5.     '+
  6.     (mapcar '(lambda (x)
  7.                (setq e (Parse_It (vl-string-subst "x" "%%131" x) "x"))
  8.                (* (read (car e)) (CirArea (read (cadr e)))))
  9.             (Parse_It (car (Parse_It str " ")) "+")))
  10.   )
  11. ;计算园面积
  12. (defun CirArea        (dia)
  13.   (* pi dia dia 0.25)
  14.   )
  15. ;选筋(对称)
  16. (defun PickBars         (a n / barlst dia1 pos )
  17.   (setq barlst '(12 14 16 18 20 22 25 28 30 32))
  18.   (setq dia1 (1+ (fix (sqrt (/ (* 4 (/ a n)) pi)))))
  19.   (if (not (member dia1 barlst))
  20.     (setq dia1 (nth (setq pos (vl-position
  21.                                 dia1
  22.                                 (vl-sort (cons dia1 barlst) '<)))
  23.                     barlst))
  24.     (setq pos (vl-position dia1 barlst))
  25.   )
  26.   (if dia1
  27.     (cond
  28.       ((<= n 2)
  29.        (strcat "2%%131" (itoa dia1)))
  30.       ((> n 2)
  31.        (if (> pos 0)
  32.          (if (> (+ (* (- n 2) (CirArea (nth (1- pos) barlst))) (* 2 (CirArea dia1))) a)
  33.           (strcat "2%%131"
  34.                             (itoa dia1)
  35.                             "+"
  36.                             (itoa (- n 2))
  37.                             "%%131"
  38.                             (itoa (nth (1- pos) barlst)))
  39.           (strcat (itoa n) "%%131" (itoa dia1))
  40.           )
  41.          (strcat (itoa n) "%%131" (itoa dia1))
  42.         );if
  43.        )
  44.       );cond
  45.     ) ;if
  46.   )
  47. ; 作者: Bill Kramer
  48. ;
  49. (defun Parse_It         (inStr ;Input string to parse
  50.                   Delim ;Delimeter character (or ascii code)
  51.                   / Res ;Result list buffer
  52.                   Inx ;Character location of delim in string
  53.                   InxP ;Previous character location
  54. )
  55. ;
  56. ; Verify DELIM is of the proper type
  57. ;
  58.   (setq        Delim (if (= (type Delim) 'STR)
  59.                 (ASCII Delim) ;Convert character to integer
  60.                 (if (/= (type Delim) 'INT) ;is it integer?
  61.                   32 ;then use space
  62.                   (if (> 0 Delim 256)
  63.                     Delim
  64.                     32)))
  65. ;
  66. ; Set up parameters for string search loop
  67. ;
  68.         Inx   (VL-String-Position Delim inStr 0)
  69.         InxP  -1
  70.         )
  71. ;
  72.   (while (and Inx (< Inx (strlen inStr)))
  73.     (setq Res
  74.                (cons (substr inStr (+ 2 InxP) (- Inx InxP 1))
  75.                      Res)
  76.           InxP Inx
  77.           Inx  (VL-String-Position Delim inStr (1+ InxP))
  78.           )
  79.     )
  80.   (setq Res (cons (substr inStr (+ 2 InxP)) Res))
  81.   (reverse Res)
  82.   )
  83. ;
  84.   [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-2-8 20:05:17 | 显示全部楼层
全部程序都在这里了,可惜我不会组装,能否按我的意图组装成一个程序??
谢谢!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-2-9 13:00:14 | 显示全部楼层
命令: (BarArea (cdr (assoc 1 (entget (car (entsel))))))
选择对象: 1256.64



命令: (PickBars 20 4)
"4%%13112"


这个子函数写得很专业哦
是哪个高人的手笔啊
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-2-9 14:52:16 | 显示全部楼层
上面写的程序很不错啊
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-2-20 21:46:54 | 显示全部楼层
如果是132? 130呢
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-17 19:03 , Processed in 0.190616 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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