列出计算式并显示计算结果
这个应该不难,论坛里有很多类似的东西。 愿付费开发,可以联系我。 本帖最后由 newbuser 于 2014-12-4 18:25 编辑
(defun c:tt (/ lst clst)
(setq ss (ssget '((0 . "LINE"))));选择直线
(setq i 0)
(repeat (sslength ss)
(setq e(ssname ss i)
el (entget e)
q(assoc 10 el)
z(assoc 11 el)
)
(setq a (cdr q))
(setq b (cdr z))
(setq
pt_Ymax (car (vl-sort (list a b)
'(lambda (u v) (> (cadr u) (cadr v)))
)
)
)
;;Y值大的坐标
(setq
pt_Ymin (car (vl-sort (list a b)
'(lambda (u v) (< (cadr u) (cadr v)))
)
)
)
;;X值大坐标
(setq ang (angle pt_Ymin pt_Ymax))
;;文字竖直朝左角度
;(setq pt (list (car (cdr q)) (max (caddr q) (caddr z)) 0)) ;;找出Y值大的坐标
(setq ss1 (ssget "f" (list (cdr q) (cdr z)) '((0 . "TEXT"))))
;获取通过该直线的文字选择集
(setq e1(ssname ss1 0)
el1 (entget e1)
h1(assoc 40 el1)
h (cdr h1)
)
(setq mrk (atoi (cdr (assoc 1 el1))))
;;获取钢筋编号(将字符串转为整数)
(setq e-obj (vlax-ename->vla-object e))
;;转为vla对象
(setq l (vla-get-length e-obj))
(setq clst (append clst (list l)))
;;获取线的长度
(setq str-len (rtos l))
;;单根直线长度字符串
;(setq ang (vla-get-angle e-obj)) ;;获取线的角度
;;; (setq lst nil)
(setq lst (append lst (list (list mrk str-len))))
(entmake (list '(0 . "TEXT")
(cons 8 "0")
(append '(10) pt_Ymax)
(append '(11) pt_Ymax)
h1
(cons 1 str-len)
(cons 50 ang)
(cons 71 0)
(cons 72 2)
(cons 73 0)
)
)
(setq i (1+ i))
)
(setq
llst (vl-sort lst
(function (lambda (e1 e2) (< (car e1) (car e2))))
)
)
(setq p1 (getpoint "\n 请指定X方向表格左上角位置==>> "))
;;表格左上角坐标
(setqpz (polar p1 0 (* 15.75 h))
;;表格右上角坐标
p1_x (polar p1 4.71239 (* 1.4 h))
pz_x (polar p1_x 0 (* 15.75 h))
p_c(polar p1 0 (* 5.25 h))
p_g(polar p1 0 (* 10.5 h))
)
(command "line" p1 pz "")
(command "line" p1_x pz_x "")
;;; (setq btxlst (list (list p1 pz) (list p1_x pz_x)))
;;; (点表生成直线 btxlst)
(setqpp(polar p1 4.71239 (* 1.275 h))
pbh (polar pp 0 (* h 0.125))
;;编号插入点
pcd (polar pp 0 (* h 5.375))
;;长度插入点
pgs (polar pp 0 (* h 10.625))
;;根数插入点
)
(setq n 0)
(repeat (length llst)
(setq pq (polar p1 4.71239 (* (+ (* n 1.4) 2.8) h)))
;;文字下横线起点
(setq pe (polar pq 0 (* 15.75 h)))
;;由起点算出终点
(setq bm1 (polar pbh 4.71239 (+ (* 1.4 h) (apply '* (list 1.4 n h))))
bm2 (polar bm1 0 (* 5.25 h))
bm3 (polar bm1 0 (* 10.5 h))
)
(setq zlst (nth n llst))
(entmake (list '(0 . "TEXT")
(cons 1 (itoa (car zlst)))
h1
(append '(10) bm1)
)
)
(entmake (list '(0 . "TEXT")
(cons 1 (cadr zlst))
h1
(append '(10) bm2)
)
)
(entmake
(list '(0 . "TEXT") (cons 1 "1") h1 (append '(10) bm3))
)
(command "line" pq pe "")
(setq n (1+ n))
)
(setqpd1 (polar p1
4.71239
(apply '* (list (+ (length llst) 2) 1.4 h))
)
pd2 (polar p_c
4.71239
(apply '* (list (+ (length llst) 2) 1.4 h))
)
pd3 (polar p_g
4.71239
(apply '* (list (+ (length llst) 2) 1.4 h))
)
pd4 (polar pz
4.71239
(apply '* (list (+ (length llst) 2) 1.4 h))
)
)
(setqphz (polar pbh
4.71239
(apply '* (list (+ (length llst) 1) 1.4 h))
)
pz1 (polar phz 0 (* h 5.375))
pz2 (polar phz 0 (* h 10.625))
)
(command "line" p1 pd1 "")
(command "line" p_c pd2 "")
(command "line" p_g pd3 "")
(command "line" pz pd4 "")
(command "line" pd1 pd4 "")
(setqbtlst
(list (list "编号" pbh)
(list "长度" pcd)
(list "根数" pgs)
(list "汇总" phz)
(list (rtos (apply '+ clst) 2 3) pz1)
(list (rtos (length llst) 2 0) pz2)
)
)
;;标题文字坐标插入点表
(foreach n btlst
(entmake (list '(0 . "TEXT")
(cons 1 (car n))
(append '(10) (cadr n))
h1
)
)
)
;;标题文字生成
)已经初步形成了,不过,沿X方向你自己看着修改下吧。希望能够满足您的要求。 看帖回帖是美德
页:
[1]