求各个多线的总长度,同时减去对应多线上直线的长度
本帖最后由 品茗新秀 于 2014-4-24 11:38 编辑求各个多线的总长度,同时减去对应多线上直线的长度
(defun pts-cen (pts / l)
(setq l (length pts))
(mapcar '(lambda (x) (/ x l)) (apply 'mapcar (cons '+ pts)))
)
(defun gvp (e)
(vl-remove nil (mapcar '(lambda (x) (if (= (car x) 10) (trans (cdr x) 0 1))) (entget e)))
)
(defun mktext (la str pt th)
(entmakex (list '(0 . "TEXT")
(cons 8 la)
(cons 1 str)
(cons 10 pt)
(cons 40 th)
(cons 11 pt)
(cons 71 0)
(cons 72 1)
(cons 73 2)
)
)
)
(defun MJ:rotate_pnt (pnt p1 ang /)
(polar p1 (+ (angle p1 pnt) ang) (distance p1 pnt))
)
(defun c:tt ( / a e e0 i j l len lene ll pc pts pts sl ss txt)
(setq ss (ssget '((0 . "LWPOLYLINE"))))
(repeat (setq i (sslength ss))
(setq e (ssname ss (setq i (1- i)))
lene (Vlax-Get (Vlax-Ename->Vla-Object e) 'Length )
pts (gvp e)
pc (pts-cen pts)
pts (mapcar '(lambda(x) (MJ:rotate_pnt x pc 0.01)) pts)
sl (ssget "f" pts '((0 . "line")))
l nil
)
(if (/= sl nil)
(progn
(repeat (setq j (sslength sl))
(setq e0 (ssname sl (setq j (1- j)))
len (Vlax-Get (Vlax-Ename->Vla-Object e0) 'Length )
l (cons len l)
)
)
(setq l (apply '+ l)
ll (rtos (- lene l) 2 2)
txt (mktext "tmp" (strcat (rtos lene 2 2) "-" (rtos l 2 2) "=" ll) pc (* 1e3 (getvar "dimtxt")))
)
)
(mktext "tmp" (rtos lene 2 2) pc (* 1e3 (getvar "dimtxt")))
)
)
) 轻轻飘过 本帖最后由 tengte 于 2014-4-22 17:32 编辑
问题和要求未描述清楚!
直线与多段线怎样的位置关系?什么样的需要考虑?都没有说清楚。 直线必须与多段线完全重叠才考虑吗? 实在没啥难度,闪过…… xyp1964 发表于 2014-4-22 18:37 static/image/common/back.gif
实在没啥难度,闪过……
没难度,看看高手的杰作,让初学者学习一下 就是扣去那4红3蓝后的总长?
选取时可会有其他的背景图元干扰 给出算式:
xyp1964 发表于 2014-4-22 23:22 static/image/common/back.gif
给出算式:
给人的感觉是取得多线的长度,取得各多线的顶点,然后排序,再选择得对应的直线,取得直线的长度,然后两数相减,得差值。具体怎样,实在想不起来