用 ssget f 选择,然后 inters 求交点,最后对求得的交点按曲线排序

- (defun c:tt (/ e sp ep ss ssl i sp1 ep1 pl pts)
- (if (setq e (car (entsel "\npick line: ")))
- (progn
- (setq sp (vlax-curve-getstartpoint e)
- ep (vlax-curve-getendpoint e)
- )
- (if (setq ss (ssget "_F" (list sp ep)))
- (progn
- (setq ssl (sslength ss)
- i -1
- )
- (repeat ssl
- (setq ent (ssname ss (setq i (1+ i)))
- sp1 (vlax-curve-getstartpoint ent)
- ep1 (vlax-curve-getendpoint ent)
- )
- (setq pl (cons (inters sp ep sp1 ep1 nil) pl))
- )
- (setq
- pts (mapcar
- 'cadr
- (vl-sort
- (mapcar
- '(lambda (x)
- (list (vlax-curve-getparamatpoint
- e
- (vlax-curve-getclosestpointto e x)
- )
- x
- )
- )
- (vl-remove nil pl)
- )
- '(lambda (x1 x2)
- (< (car x1) (car x2))
- )
- )
- )
- )
- )
- )
- )
- )
- (princ pts)
- (princ)
- )
|