本帖最后由 lgx9612 于 2014-9-10 19:21 编辑
请指正 - (defun inters_lgx (/ bbb ss_lgx point1_lgx point2_lgx ss1_lgx interpoint loop p1_lgx interpoint_list nofit)
- ;;;by:刘国新
- (setq ss_lgx (entsel "\n选择第一条线:"))
- (if ss_lgx
- (progn
- (setq bbb (entget (car ss_lgx)))
- (setq point1_lgx (vlax-curve-getClosestPointTo (vlax-ename->vla-object (car ss_lgx)) (cadr ss_lgx) nil))
- (setq ss1_lgx (entsel "\n选择第二条线:"))
- )
- )
- (if ss1_lgx
- (if (/= (ssmemb (car ss1_lgx) (ssadd (car ss_lgx))) nil)
- (progn
- (setq point2_lgx (vlax-curve-getClosestPointTo (vlax-ename->vla-object (car ss1_lgx)) (cadr ss1_lgx) nil))
- (setq interpoint (inters point1_lgx (polar point1_lgx (+ (angle (cadr ss_lgx) point1_lgx) (* 0.5 pi)) 5.0)
- point2_lgx (polar point2_lgx (+ (angle (cadr ss1_lgx) point2_lgx) (* 0.5 pi)) 5.0) nil))
- (setq interpoint (reverse(cdr (reverse interpoint))))
- (setq loop t)
- (if (/= interpoint nil)
- (if (= (cdr (assoc 0 bbb)) "LWPOLYLINE")
- (while loop
- (if (= (assoc 10 bbb) nil)
- (progn
- (setq loop nil)
- (setq interpoint nil)
- )
- )
- (setq p1_lgx (assoc 10 bbb))
- (if (equal interpoint (cdr p1_lgx) 0.0005)
- (setq loop nil)
- (setq bbb (vl-remove p1_lgx bbb))
- )
- )
- )
- )
- )
- (progn
- (setq bbb (vlax-invoke (vlax-ename->vla-object (car ss_lgx)) 'intersectwith (vlax-ename->vla-object (car ss1_lgx)) 0))
- (if bbb
- (progn
- (repeat (/ (length bbb) 3)
- (setq interpoint_list (cons (list (car bbb)(cadr bbb)) interpoint_list))
- (setq bbb (cdr bbb))
- (setq bbb (cdr bbb))
- (setq bbb (cdr bbb))
- )
- (setq point2_lgx (vlax-curve-getClosestPointTo (vlax-ename->vla-object (car ss1_lgx)) (cadr ss1_lgx) nil))
- (setq interpoint (inters point1_lgx (polar point1_lgx (+ (angle (cadr ss_lgx) point1_lgx) (* 0.5 pi)) 5.0)
- point2_lgx (polar point2_lgx (+ (angle (cadr ss1_lgx) point2_lgx) (* 0.5 pi)) 5.0) nil))
- (setq interpoint (reverse(cdr (reverse interpoint))))
- (if (/= interpoint nil)
- (progn
- (while interpoint_list
- (setq p1_lgx (car interpoint_list))
- (setq interpoint_list (cdr interpoint_list))
- (if (equal interpoint p1_lgx 0.0005)
- (progn
- (setq interpoint_list nil)
- (setq nofit nil)
- )
- (setq nofit 1)
- )
- )
- (if (= nofit 1)
- (setq interpoint nil)
- )
- )
- )
- )
- )
- )
- )
- (princ "选择有误\n")
- )
- (princ)
- interpoint
- )
|