- (defun GroupByNum ( lst n / r)
- (if lst
- (cons
- (reverse (repeat n (setq r (cons (car lst) r) lst (cdr lst)) r))
- (GroupByNum lst n)
- )
- )
- )
- (defun ptonline ( pt pt1 pt2 / vec12 vec1p d result )
- (setq vec12 (mapcar '- pt2 pt1))
- (setq vec12 (reverse (cdr (reverse vec12))))
- (setq vec1p (mapcar '- pt pt1))
- (setq vec1p (reverse (cdr (reverse vec1p))))
- (setq vec2p (mapcar '- pt2 pt))
- (setq vec2p (reverse (cdr (reverse vec2p))))
- (setq d (distance '(0.0 0.0) vec12) d1 (distance '(0.0 0.0) vec1p) d2 (distance '(0.0 0.0) vec2p))
- (if (equal d (+ d1 d2) 1e- (setq result T) (setq result nil))
- result
- )
- (defun ptinsideent ( pt ent / msp ptt xlin int k kk tst result )
- (vl-load-com)
- (setq msp (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))))
- (setq ptt (vlax-curve-getclosestpointto ent pt))
- (setq xlin (vla-addxline msp (vlax-3d-point pt) (vlax-3d-point ptt)))
- (setq int (GroupByNum (vlax-invoke (if (eq (type ent) 'ENAME) (vlax-ename->vla-object ent)) 'intersectwith xlin acExtendBoth) 3))
- (setq int (vl-sort int '(lambda (a b) (< (vlax-curve-getparamatpoint xlin a) (vlax-curve-getparamatpoint xlin b)))))
- (setq k 0)
- (while (< (setq k (1+ k)) (length int))
- (if (and (eq (rem k 2) 1) (ptonline pt (nth (- k 1) int) (nth k int))) (setq tst (cons T tst)) (setq tst (cons nil tst)))
- )
- (setq tst (reverse tst))
- (setq k 0)
- (mapcar '(lambda (x) (setq k (1+ k)) (if (eq x T) (setq kk k))) tst)
- (vla-delete xlin)
- (if kk
- (if (eq (rem kk 2) 1) (setq result T) (setq result nil))
- (setq result nil)
- )
- result
- )
- (ptinsideent pt ent) => T or nil
M、 R。 |