马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本帖最后由 张和平 于 2013-8-22 16:00 编辑
 - (defun c:tttt( / pl0 pl i pllst overlen)
- (princ "\n>>> 选择主线")
- (setq pl0 (ssname (ssget '((0 . "*POLYLINE"))) 0))
- (princ (cdr (assoc 0 (entget pl0))))
- (princ "\n>>> 选择副线")
- (setq pl (ssget '((0 . "*POLYLINE"))) i 0)
- (repeat (sslength pl)
- (setq pllst (cons (ssname pl i) pllst) i (1+ i))
- )
- (setq overlen (PEACE:PL_OverLen pl0 pllst 10))
- (princ overlen)
- (princ)
- )
- ;;;计算pllst中pline与pl0的重叠长度之和 by peace 2013/08/20
- ;;;pl0=主线图元名 pllst=副线图元名列表 maxd=最大距离,间距小于maxd即认为重合
- ;;;遇相同图元,自动排除
- (defun PEACE:PL_OverLen(pl0 pllst maxd / i j pl0obj ptlst pa pb pc overlen)
- (vl-load-com)
- (if (< maxd 0) (setq maxd 0))
- (cond
- ( ;若pl0不为pline,返回nil
- (and
- (/= (cdr (assoc 0 (entget pl0))) "POLYLINE")
- (/= (cdr (assoc 0 (entget pl0))) "LWPOLYLINE")
- )
- nil
- )
- (
- t
- (setq i 0 pl0obj (vlax-ename->vla-object pl0) overlen 0)
- (repeat (length pllst)
- (if (not (equal pl0 (nth i pllst)))
- (progn
- (setq ptlst (PEACE:Assoc_ItemList 10 (entget (nth i pllst)))
- j 0
- )
- (repeat (1- (length ptlst))
- (setq pa (nth j ptlst)
- pc (nth (1+ j) ptlst)
- pb (mapcar '(lambda(a b) (* 0.5 (+ a b))) pa pc)
- )
- (if (and
- (< (distance pa (vlax-curve-getClosestPointTo pl0obj pa)) maxd)
- (< (distance pb (vlax-curve-getClosestPointTo pl0obj pb)) maxd)
- (< (distance pc (vlax-curve-getClosestPointTo pl0obj pc)) maxd)
- )
- (setq overlen (+ overlen (distance pa pc)))
- )
- (setq j (1+ j))
- )
- )
- )
- (setq i (1+ i))
- )
- )
- )
- overlen
- )
- ;;;获取表(Alist)中索引码(Item)相同的所有元素,并组成一个表(lst)返回
- (defun PEACE:Assoc_ItemList (Item Alist / a lst)
- (while (setq a (assoc Item Alist))
- (setq Alist (cdr (member a Alist)) ;cdr返回list(member a Alist)中除了第一个以外的所有元素的表
- lst (cons (cdr a) lst)
- )
- )
- (reverse lst) ;前面获得的坐标表是倒序的,现在再转换为正序
- )
|