本帖最后由 涛涛_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)
)