 - (defun c:DJLX (/ instpd p1 p2 minpt maxpt ss en pl pt)
- (defun instpd (lst / a b c d)
- (mapcar 'set '(a b c d) lst)
- (if (not (apply 'inters (mapcar 'car (list a b c d))))
- (if (equal (angle (car b) (car a)) (cadr a) (* 0.25 pi))
- (list (list (car a) (car b)) (list (car c) (car d)))
- (instpd (list a c b d))
- )
- (instpd (list a c d b))
- )
- )
- (while (and
- (setq p1 (getpoint "\n第一点: "))
- (setq p2 (getcorner p1 "\n对角点: "))
- )
- (mapcar 'set
- '(minpt maxpt)
- (list (mapcar 'min p1 p2) (mapcar 'max p1 p2))
- )
- (setq ss (ssget "c" p1 p2 '((0 . "line,*polyline"))))
- (if ss
- (progn
- (setq pl nil)
- (repeat (setq n (sslength ss))
- (setq en (ssname ss (setq n (1- n))))
- (if (apply 'and
- (mapcar '<=
- minpt
- (setq pt (vlax-curve-getStartPoint
- (vlax-ename->vla-object en)
- )
- )
- maxpt
- )
- )
- (setq pl
- (cons
- (list pt
- (angle pt
- (mapcar '+
- pt
- (vlax-curve-getFirstDeriv
- (vlax-ename->vla-object en)
- (vlax-curve-getStartParam
- (vlax-ename->vla-object en)
- )
- )
- )
- )
- )
- pl
- )
- )
- (setq pl
- (cons
- (list (setq pt (vlax-curve-getEndPoint
- (vlax-ename->vla-object en)
- )
- )
- (angle pt
- (mapcar '+
- pt
- (vlax-curve-getFirstDeriv
- (vlax-ename->vla-object en)
- (vlax-curve-getEndParam
- (vlax-ename->vla-object en)
- )
- )
- )
- )
- )
- pl
- )
- )
- )
- )
- (foreach n (instpd pl)
- (entmake (list '(0 . "line")
- '(62 . 1)
- (cons 10 (car n))
- (cons 11 (cadr n))
- )
- )
- )
- )
- )
- )
- (princ)
- )
各种 方向 都行 |