明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2460|回复: 13

[提问] 钢筋对齐(已解决)

[复制链接]
发表于 2018-7-4 23:21 | 显示全部楼层 |阅读模式
本帖最后由 涛涛_1048 于 2018-7-28 10:59 编辑

以前请人编了个程序,当时只测试了水平钢筋,现在想用了才发现竖向钢筋没有办法对齐。现在把图纸和原来的程序贴出来,请高手帮忙。可以在此程序的基础上修改,或者另外编写都可以。一个结构佬不胜感谢!
以下是当时的程序
(defun c:gja ()
  (setvar 'cmdecho 0)(setq old-osmode (getvar 'osmode))(setvar 'osmode 0)



  (while(= (setq endate(car(entsel "选择对齐的基准钢筋:"))) nil))
  (setq datelst(entget endate))
  (setq jptlst(get10date datelst))
  (setq ang(angle(car jptlst)(cadr jptlst)))
  (setq pta(car jptlst))
  (while(= 1 1)
    (print "选择需要对齐的钢筋(包括文字):")
    (setq ass(ssget))
    (setq enss(mapcar 'cadr (cdr(reverse(ssnamex ass)))))
    (setq n 0)
    (repeat (length enss)
      (setq en(nth n enss))
      (if(equal "LWPOLYLINE" (cdr(assoc 0 (entget en))))
        (setq qptlst(get10date (entget en)))
        )
      (setq n(1+ n))
      )
    (if(or(equal ang 0 0.001)(equal ang (* 0.5 pi) 0.001))
      (progn
        (command "_.move" ass "" (car qptlst) (list(car(car qptlst))(cadr(car jptlst))))
        )
      (progn
        (command "_.move" ass "" (car qptlst) (list(car(car jptlst))(cadr(car qptlst))))
        )
      );if结束
    )
  
  (setvar 'osmode old-osmode)
  (prin1)
)
(defun get10date( datelst / ptlst x )
  (setq ptlst '())
  (mapcar '(lambda(x)
               (if(= 10 (car x))(setq ptlst(cons (cdr x) ptlst)))
               )
            datelst
            )
  (reverse ptlst)
  )

(defun *error*(msg)
  (setvar 'osmode old-osmode)
  )

本帖子中包含更多资源

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

x
 楼主| 发表于 2018-10-23 23:35 | 显示全部楼层
是一个一个的,不过好就好在,基准钢筋选过后,其他要对齐的钢筋可以一个一个的选,不用再选基准钢筋。我也想让人编成一个选过基准钢筋后,其他再选的对齐钢筋,可以一次选好多,然后可以一次对齐的。不过,能力有限,再说我们这个钢筋主要是针对我们建筑设计的结构专业。其他人有能力编程,但是局限于对我们专业的不了解,不一定能做到。
回复 支持 1 反对 0

使用道具 举报

发表于 2018-7-5 10:20 | 显示全部楼层
先这样改试:
  (setq ang (angle (car jptlst) (Last jptlst)))
  
   ;; (if (or (equal ang 0 0.001) (equal ang (* 0.5 pi) 0.001))
   ===>
    (if        (or (equal ang 0 0.001) (equal ang pi 0.001))

您的 钢筋 图元 有4四个点位值
Why?
发表于 2018-7-5 10:04 | 显示全部楼层
就改了两个地方,看看是不是这样,太高深的我也不会。只会简单的。

本帖子中包含更多资源

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

x
发表于 2018-7-5 10:05 | 显示全部楼层
(setq ang(angle(car jptlst)(car (reverse jptlst))))

(if(or(equal ang 0 0.001)(equal ang (* 1 pi) 0.001))

就这两个地方
 楼主| 发表于 2018-7-7 10:57 | 显示全部楼层
谢谢大家的辛苦努力,按evayleung的修改后的程序可以满足使用了。做结构的可以下载下来使用。
发表于 2018-10-22 15:58 | 显示全部楼层
涛涛_1048 发表于 2018-7-7 10:57
谢谢大家的辛苦努力,按evayleung的修改后的程序可以满足使用了。做结构的可以下载下来使用。

还是有bug 假如水平钢筋有直勾  钢筋对齐后 是直勾对齐目标线 而不是钢筋对齐目标线
发表于 2018-10-23 09:29 | 显示全部楼层
不能批量对齐,只能一个个对齐啊
发表于 2018-10-24 09:30 | 显示全部楼层
涛涛_1048 发表于 2018-10-23 23:35
是一个一个的,不过好就好在,基准钢筋选过后,其他要对齐的钢筋可以一个一个的选,不用再选基准钢筋。我也 ...

还是有bug 假如水平钢筋有直勾  钢筋对齐后 是直勾对齐目标线 而不是钢筋对齐目标线
 楼主| 发表于 2018-10-24 10:30 | 显示全部楼层
在别的论坛有人给写了一个,什么钢筋都能对齐,就是每次都要选择基准钢筋,并且还要安装论坛的API才能用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-2 13:18 , Processed in 0.432810 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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