本帖最后由 WhoCanSay 于 2016-6-1 16:03 编辑
测试命令的呀(IntersLwpolylineRay (car(entsel)) (getpoint) (getpoint))
- ;;[功能] 直线与圆的交点 By Highflybird
- (defun IntersLineCircle (p1 p2 cp r / p0 d n s)
- (setq n (mapcar '- p2 p1) ;_ 新投影面的法向量
- P1 (trans p1 0 n) ;_ P1坐标转换到新投影面n
- cp (trans cp 0 n) ;_ CP坐标转换到新投影面n
- p0 (list (car p1) (cadr p1) (caddr cp)) ;_ P0在新投影面坐标
- )
- (cond
- ((equal r (setq d (distance cp p0))) ;_ 直线和园相切
- (list (trans p0 n 0))
- )
- ((< d r) ;_ 相交
- (setq s (sqrt (- (* r r) (* d d))))
- (list
- (trans (list (car p1) (cadr p1) (- (caddr cp) s)) n 0) ;_ J1坐标
- (trans (list (car p1) (cadr p1) (+ (caddr cp) s)) n 0) ;_ J2坐标
- )
- )
- )
- )
- ;;[功能] 射线与线、圆、弧、多段线的交点
- (defun C:w1 (/ CP E EN P1 P10 P11 P2 PT PYP R)
- (setq e (car (entsel)))
- (setq p1 (getpoint))
- (setq p2 (mapcar '+ p1 (list 0 10 0))) ;竖直射线
- (setq en (entget e))
- (setq Pyp (cdr (assoc 0 en)))
- (cond ((equal Pyp "ARC")
- (setq cp (cdr (assoc 10 en)))
- (setq R (cdr (assoc 40 en)))
- (IntersArcRay p1 p2 cp r e)
- )
- ((equal Pyp "LINE")
- (setq p10 (cdr (assoc 10 en)))
- (setq p11 (cdr (assoc 11 en)))
- (setq p10 (IntersPointRay p10 p11 p1 p2))
- (cond (p10 (list p10)))
- )
- ((equal Pyp "CIRCLE")
- (setq cp (cdr (assoc 10 en)))
- (setq R (cdr (assoc 40 en)))
- (IntersPointRay p10 p11 p1 p2)
- )
- ((equal Pyp "LWPOLYLINE")
- (IntersLwpolylineRay e p1 p2)
- )
- )
- )
|