tssd这个功能如何用LISP实现?
tssd这个功能如何用LISP实现?我只会写两点的(defun C:tt (/ angle1 cl dd djdjn1 old_cmdecho xx yy osm)
(setq OLD_CMDECHO (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(setq CL (getvar "clayer"))
(setq osm (getvar "osmode")) ;;抓点
(setvar "osmode" 0)
(if (not(tblsearch "layer" "rein")) (vl-cmdf "-layer" "N" "rein" "c" "6" "rein"""))
(command "clayer" "rein")
(setq L1 (getpoint "\n请选择点筋起点:"))
(setq L2 (getpoint L1 "\n选择点筋终点:"))
(setq angle1 (angle L1 L2))
(setq dd (distance L1 L2))
(setq n1 (read (rtos (- ( / dd 800) 0.5) 2 0)))
(setq xx (sin angle1))
(setq yy (cos angle1))
(setq djdj ( makeDJL1))
(repeat n1
(command "copy" djdj "" "m" (list 0 0) (list ( * 800 yy ) ( * 800 xx )) "" )
(setq djdj (entlast))
)
(setvar "clayer" CL)
(setvar "CMDECHO" OLD_CMDECHO)
(setvar "osmode" osm)
(princ)
)
因为间距是指定值,所以这个用 grread还是很合适的。
鼠标选择LWPL对象后,获取子段的起止坐标点,宽度,计算出各钢筋点位,创建这些钢筋点,鼠标位置移动,切换与LWPL对象的上下方位,a/s 加减钢筋间距或数量,d切换间距的模式(指定间距值 or 按钢筋数量平均),f直接输入间距值或钢筋数量。
这玩意也就看起来不错,其实也没多少实际用处。
页:
[1]