找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3349|回复: 20

[每日一码] 再贴个算钢筋的小程序

[复制链接]
发表于 2013-6-1 16:19:59 | 显示全部楼层 |阅读模式

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

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

×
  1. (defun c:gj (/)  (setq gj_ggname (entget (car (entsel "\n钢筋规格"))))
  2.   (setq kk (entsel "\n钢筋长度"))
  3.   (if kk
  4.     (setq gj_cdname (entget (car kk))
  5.           gj_cd (atof (cdr (assoc 1 gj_cdname)))
  6.     )
  7.     (setq gj_cd (getreal "\n钢筋长度:"))
  8.   )
  9.   (setq gj_gs (getreal "\n钢筋根数:"))        ; _钢筋根数
  10.   (setq gj_zcname (entget (car (entsel))))
  11.   (setq gj_zlname (entget (car (entsel))))
  12.   (setq gj_gg (atof (cdr (assoc 1 gj_ggname))))        ; _规格
  13.   (setq gj_zc (atof (cdr (assoc 1 gj_zcname))))        ; _求钢筋总长
  14.   (setq gj_zl (atof (cdr (assoc 1 gj_zlname))))        ; _求钢筋重量
  15.   (setq gj_zcnr (* gj_cd gj_gs))
  16.   (setq gj_zcnrf (rtos (/ (* gj_cd gj_gs) 1000.0) 2 1))
  17.   (setq gj_zlnr (rtos (/ (* (* 0.00617 (expt gj_gg 2.0)) gj_zcnr) 1000.0) 2 1))
  18.   (setq gj_zcnrf (cons 1 gj_zcnrf))
  19.   (setq gj_zlnr (cons 1 gj_zlnr))
  20.   (setq gj_zc (subst
  21.                 gj_zcnrf
  22.                 (assoc 1 gj_zcname)
  23.                 gj_zcname
  24.               )
  25.   )
  26.   (setq gj_zl (subst
  27.                 gj_zlnr
  28.                 (assoc 1 gj_zlname)
  29.                 gj_zlname
  30.               )
  31.   )
  32.   (entmod gj_zc)
  33.   (entmod gj_zl)
  34.   (prin1)
  35. )

评分

参与人数 2D豆 +13 收起 理由
XDSoft + 10 出题引导交流奖!
牢固 + 3 很给力!经验;技术要点;资料分享奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
 楼主| 发表于 2013-6-1 16:23:08 | 显示全部楼层
  1. ;;;(entget (car (entsel)))
  2. (defun C:er(/ ss)
  3.   (setq ss (ssget '((-4 . "<OR")(62 . 1) (0 . "INSERT")(-4 . "OR>"))))
  4.   (vl-cmdf "_erase" ss "")
  5.   )

  6. (defun c:eco(/ ss)
  7.   (setq ss (ssget '((-4 . "<OR")(62 . 1) (0 . "INSERT")(-4 . "OR>"))));(0 . "LWPOLYLINE")
  8.   (vl-cmdf "_copy" ss "")
  9.   )
删除和复制
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-1 16:24:26 | 显示全部楼层
  1. (defun sc(m /)
  2.   (setq ss (ssget '((0 . "Line"))))
  3.   (if ss (progn
  4.      (setq i 0)
  5.      (repeat (sslength ss)
  6.        (setq tt (ssname ss i))
  7.        (setq data (entget tt))
  8.        (setq t1 (cdr (assoc 10 data)))
  9.        (setq t2 (cdr (assoc 11 data)))
  10.        (if (<= (sqrt (+ (expt (- (car t1) (car t2)) 2.0) (expt (- (cadr t1) (cadr t2)) 2.0))) m) (entdel tt))
  11.        (setq i (1+ i))
  12.       )
  13.    ))
  14. )
  15. ;;;(sc 2)

  16. ;;;(setq ss (ssget '((0 . "Line"))))


  17. (defun sp(m /)
  18.   (setq ss (ssget '((0 . "Point"))))
  19.   (vl-cmdf "_ERSE" ss "")  
  20. )
这个用来删除指定长度的线条

点评

Line 的长度可以用 (distance p10 p11) 的,不用那么复杂的计算  详情 回复 发表于 2013-6-1 16:35
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-6-1 16:35:04 | 显示全部楼层
hai20130408 发表于 2013-6-1 16:24
这个用来删除指定长度的线条

Line  的长度可以用 (distance p10 p11) 的,不用那么复杂的计算

点评

是的,但如果三维的点用distance可能会出现错误,所以还是用这个了。  详情 回复 发表于 2013-6-1 16:36
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-1 16:36:59 | 显示全部楼层
本帖最后由 hai20130408 于 2013-6-1 16:41 编辑
Free-Lancer 发表于 2013-6-1 16:35
Line  的长度可以用 (distance p10 p11) 的,不用那么复杂的计算

是的,用distance好些。不过三维的点就不太适用了,因为一条线在平面视图状态下可能就只是一个点

点评

是的,用distance好些。不过三维的点就不太适用了,因为一条线在平面视图状态下可能就只是一个点  详情 回复 发表于 2013-6-1 16:42
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-1 16:42:07 | 显示全部楼层
hai20130408 发表于 2013-6-1 16:36
是的,用distance好些。不过三维的点就不太适用了,因为一条线在平面视图状态下可能就只是一个点

是的,用distance好些。不过三维的点就不太适用了,因为一条线在平面视图状态下可能就只是一个点

点评

对 Distance ,给的是二维点就是二维距离,如果是三维点就是三维距离,看Help  详情 回复 发表于 2013-6-1 16:47
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-6-1 16:47:07 | 显示全部楼层
hai20130408 发表于 2013-6-1 16:42
是的,用distance好些。不过三维的点就不太适用了,因为一条线在平面视图状态下可能就只是一个点

对 Distance ,给的是二维点就是二维距离,如果是三维点就是三维距离,看Help

点评

前辈,你说的没错,我考虑到了三维的直线在二维平面图下显示点的效果,实际这个程序的应用背景是:当一个填充图形被炸开块以后出现的很多细点,如果手动删除不仅不干净,而且速度慢。当然这里一般炸开后只有平面线条  详情 回复 发表于 2013-6-1 16:52
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-1 16:52:45 | 显示全部楼层
Free-Lancer 发表于 2013-6-1 16:47
对 Distance ,给的是二维点就是二维距离,如果是三维点就是三维距离,看Help

前辈,你说的没错,我考虑到了三维的直线在二维平面图下显示点的效果,实际这个程序的应用背景是:当一个填充图形被炸开块以后出现的很多细点,如果手动删除不仅不干净,而且速度慢。当然这里一般炸开后只有平面线条。但是对于有些线段实际是一条线,但是在xoy平面下只有一个点,或者一条短线,当删除这样一条直线,改程序依然适用,但是对于distance做判断条件得到的结果却是另外一种情况。

点评

填充是平面实体啊,你的填充不是在一个面上做的?  详情 回复 发表于 2013-6-1 17:36
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-6-1 17:36:43 | 显示全部楼层
hai20130408 发表于 2013-6-1 16:52
前辈,你说的没错,我考虑到了三维的直线在二维平面图下显示点的效果,实际这个程序的应用背景是:当一个 ...

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

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-6-1 17:39:48 | 显示全部楼层
楼主,你可以用向量的长度算距离,更简洁

  1. ;;;-----------------------------------------------------------;;
  2. ;;; 向量的模(长度)                                              ;;
  3. ;;; Vector Norm - Lee Mac                                             ;;
  4. ;;; Args: v - vector in R^n                                      ;;
  5. ;;;-----------------------------------------------------------;;
  6. (defun MAT:norm ( v )
  7.   (sqrt (apply '+ (mapcar '* v v)))
  8. )


算两点距离的时候:

  1.    (setq dis (Mat:Norm (mapcar '- p2 p1)))

点评

呵呵,谢谢各位前辈高手对我的程序的点评,这些程序实际是在工作中随用随编的一些小工具,一些代码编写的也是没有考虑的十分周全。实际上正如我前面的帖子说我的动机确实不够纯正的,主要是为了看看有权限设置的精华  详情 回复 发表于 2013-6-3 12:37
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-6-1 17:50:17 | 显示全部楼层
楼主,你的程序在你都正确交互的情况可能得到结果,但是中间如果有任何交互错误,比如没点到实体等,都会出错,程序应该加上必要的选择判断,我试着修改下你的程序,你看看。

  1. (defun c:gj (/)
  2.   (if (and
  3.         (setq gj_ggname (entget (car (entsel "\n钢筋规格"))))
  4.         (cond
  5.           ((setq kk (entsel "\n拾取实体确定钢筋长度<输入>:"))
  6.             (setq gj_cdname (entget (car kk))
  7.                   gj_cd (atof (cdr (assoc 1 gj_cdname)))
  8.             )
  9.           )
  10.           (t
  11.             (setq gj_cd (getreal "\n输入钢筋长度<退出>:"))
  12.           )
  13.         )
  14.         (setq gj_gs (getreal "\n钢筋根数<退出>:")) ; _钢筋根数
  15.         (setq gj_zcname (entget (car (entsel "\n什么提示,你自己输入<退出>:"))))
  16.         (setq gj_zlname (entget (car (entsel "\n什么提示,你自己输入<退出>:"))))
  17.       )
  18.     (progn
  19.       (setq gj_gg (atof (cdr (assoc 1 gj_ggname)))) ; _规格
  20.       (setq gj_zc (atof (cdr (assoc 1 gj_zcname)))) ; _求钢筋总长
  21.       (setq gj_zl (atof (cdr (assoc 1 gj_zlname)))) ; _求钢筋重量
  22.       (setq gj_zcnr (* gj_cd gj_gs))
  23.       (setq gj_zcnrf (rtos (/ (* gj_cd gj_gs) 1000.0) 2 1))
  24.       (setq gj_zlnr (rtos (/ (* (* 0.00617 (expt gj_gg 2.0)) gj_zcnr) 1000.0) 2 1))
  25.       (setq gj_zcnrf (cons 1 gj_zcnrf))
  26.       (setq gj_zlnr (cons 1 gj_zlnr))
  27.       (setq gj_zc (subst
  28.                     gj_zcnrf
  29.                     (assoc 1 gj_zcname)
  30.                     gj_zcname
  31.                   )
  32.       )
  33.       (setq gj_zl (subst
  34.                     gj_zlnr
  35.                     (assoc 1 gj_zlname)
  36.                     gj_zlname
  37.                   )
  38.       )
  39.       (entmod gj_zc)
  40.       (entmod gj_zl)
  41.     )
  42.   )
  43.   (prin1)
  44. )

点评

呵呵,谢谢各位前辈高手对我的程序的点评,这些程序实际是在工作中随用随编的一些小工具,一些代码编写的也是没有考虑的十分周全。实际上正如我前面的帖子说我的动机确实不够纯正的,主要是为了看看有权限设置的精华  详情 回复 发表于 2013-6-3 12:36
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-6-1 19:14:17 来自手机 | 显示全部楼层
用distance计算一个2d距离和3d距离判断来自: Android客户端

点评

呵呵,谢谢各位前辈高手对我的程序的点评,这些程序实际是在工作中随用随编的一些小工具,一些代码编写的也是没有考虑的十分周全。实际上正如我前面的帖子说我的动机确实不够纯正的,主要是为了看看有权限设置的精华  详情 回复 发表于 2013-6-3 12:35
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

已领礼包: 218个

财富等级: 日进斗金

发表于 2013-6-2 18:50:25 来自手机 | 显示全部楼层
这句话解释下~  (if (<= (sqrt (+ (expt (- (car t1) (car t2)) 2.0) (expt (- (cadr t1) (cadr t2)) 2.0))) m) (entdel tt))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-3 12:35:28 | 显示全部楼层
Free-Lancer 发表于 2013-6-1 19:14
用distance计算一个2d距离和3d距离判断

呵呵,谢谢各位前辈高手对我的程序的点评,这些程序实际是在工作中随用随编的一些小工具,一些代码编写的也是没有考虑的十分周全。实际上正如我前面的帖子说我的动机确实不够纯正的,主要是为了看看有权限设置的精华帖,当然我这抛出来的臭泥砖,引来各位高手的金玉良言,也是意料之外。再次说声谢谢。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-25 12:25 , Processed in 0.256685 second(s), 69 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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