这个解决方案来自我们沼泽上的一位俄罗斯朋友,不记得是谁了。
- (defun insidep (pt ent / big flag obj1 obj2 obj3 p1 p2 small)
- (vl-load-com)
- (if (and pt ent)
- (progn
- (setq obj1 (vlax-ename->vla-object ent))
- (setq obj2 (car (vlax-invoke obj1 'Offset 0.001))
- obj3 (car (vlax-invoke obj1 'Offset -0.001))
- ) ;_ end of setq
- (if (> (vla-get-area obj2) (vla-get-area obj3))
- (progn
- (set 'big obj2)
- (set 'small obj3)
- ) ;_ end of progn
- (progn
- (set 'big obj3)
- (set 'small obj2)
- ) ;_ end of progn
- ) ;_ end of if
- (setq p1 (vlax-curve-getClosestPointTo big pt)
- p2 (vlax-curve-getClosestPointTo small pt)
- ) ;_ end of setq
- (if (> (distance pt p1) (distance pt p2))
- (setq flag T)
- (setq flag nil)
- ) ;_ end of if
- (mapcar (function (lambda (x)
- (progn
- (vla-delete x)
- (vlax-release-object x)
- ) ;_ end of progn
- ) ;_ end of lambda
- ) ;_ end of function
- (list big small)
- ) ;_ end of mapcar
- ) ;_ end of progn
- ) ;_ end of if
- flag
- )
|