钢筋对齐(已解决)
本帖最后由 涛涛_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)
) 是一个一个的,不过好就好在,基准钢筋选过后,其他要对齐的钢筋可以一个一个的选,不用再选基准钢筋。我也想让人编成一个选过基准钢筋后,其他再选的对齐钢筋,可以一次选好多,然后可以一次对齐的。不过,能力有限,再说我们这个钢筋主要是针对我们建筑设计的结构专业。其他人有能力编程,但是局限于对我们专业的不了解,不一定能做到。 先这样改试:
(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? 就改了两个地方,看看是不是这样,太高深的我也不会。只会简单的。 (setq ang(angle(car jptlst)(car (reverse jptlst))))
(if(or(equal ang 0 0.001)(equal ang (* 1 pi) 0.001))
就这两个地方 谢谢大家的辛苦努力,按evayleung的修改后的程序可以满足使用了。做结构的可以下载下来使用。 涛涛_1048 发表于 2018-7-7 10:57
谢谢大家的辛苦努力,按evayleung的修改后的程序可以满足使用了。做结构的可以下载下来使用。
还是有bug 假如水平钢筋有直勾钢筋对齐后 是直勾对齐目标线 而不是钢筋对齐目标线 不能批量对齐,只能一个个对齐啊 涛涛_1048 发表于 2018-10-23 23:35
是一个一个的,不过好就好在,基准钢筋选过后,其他要对齐的钢筋可以一个一个的选,不用再选基准钢筋。我也 ...
还是有bug 假如水平钢筋有直勾钢筋对齐后 是直勾对齐目标线 而不是钢筋对齐目标线 在别的论坛有人给写了一个,什么钢筋都能对齐,就是每次都要选择基准钢筋,并且还要安装论坛的API才能用。
页:
[1]
2