随便搞了一下,不要悬赏,避让不好搞,您自己琢磨吧
 - (defun c:test1 (/ ss1 n en ent lst1a lst1b ss2 lst2 lst3 m p pa pb pc)
- (prompt "\n选择定位线:")
- (setq ss1 (ssget '((0 . "line"))))
- (repeat (setq n (sslength ss1))
- (setq en (ssname ss1 (setq n (1- n)))
- ent (entget en)
- )
- (if (equal (car (cdr (assoc 10 ent)))
- (car (cdr (assoc 11 ent)))
- 1e-6
- )
- (setq lst1a (cons en lst1a))
- (setq lst1b (cons en lst1b))
- )
- )
- (prompt "\n选择标示物:")
- (setq ss2 (ssget '((0 . "*line,point,circle,arc"))))
- (repeat (setq n (sslength ss2))
- (setq en (ssname ss2 (setq n (1- n)))
- ent (entget en)
- )
- (cond ((member (cdr (assoc 0 ent)) '("POINT" "CIRCLE"))
- (setq lst2 (cons (cdr (assoc 10 ent)) lst2))
- )
- ((member (cdr (assoc 0 ent)) '("LINE" "ARC"))
- (setq lst2 (cons (vlax-curve-getstartpoint en) lst2))
- (setq lst2 (cons (vlax-curve-getendpoint en) lst2))
- )
- ((member (cdr (assoc 0 ent)) '("LWPOLYLINE" "POLYLINE"))
- (setq m (vlax-curve-getendParam en))
- (while (>= m 0)
- (setq lst2 (cons (vlax-curve-getpointatparam en m) lst2)
- m (1- m)
- )
- )
- )
- )
- )
- (while lst2
- (setq p (car lst2)
- lst (cdr lst2)
- lst3 (cons p lst3)
- )
- (if lst2
- (setq lst2 (vl-remove-if '(lambda (x) (equal p x 1e-6)) lst2))
- )
- )
- (setq lst3 (vl-sort lst3
- '(lambda (p1 p2)
- (if (equal (car p1) (car p2) 1e-6)
- (< (cadr p1) (cadr p2))
- (< (car p1) (car p2))
- )
- )
- )
- )
- (foreach n lst3
- (setq
- lst2 (mapcar
- '(lambda (x) (list n (vlax-curve-getclosestpointto x n t)))
- lst1a
- )
- lst2 (vl-sort lst2
- '(lambda (p1 p2)
- (< (distance (car p1) (cadr p1))
- (distance (car p2) (cadr p2))
- )
- )
- )
- )
- (setq p (car lst2)
- pa (car p)
- pb (cadr p)
- pc (polar pa (* 0.5 pi) 500)
- )
- (command "dimlinear" pa pb pc)
- (setq
- lst2 (mapcar
- '(lambda (x) (list n (vlax-curve-getclosestpointto x n t)))
- lst1b
- )
- lst2 (vl-sort lst2
- '(lambda (p1 p2)
- (< (distance (car p1) (cadr p1))
- (distance (car p2) (cadr p2))
- )
- )
- )
- )
- (setq p (car lst2)
- pa (car p)
- pb (cadr p)
- pc (polar pa 0 500)
- )
- (command "dimlinear" pa pb pc)
- )
- )
|