lisp求圆弧直线延长的交点,两条线的交点,曲线交点

  • A+
所属分类:CAD二次开发

都知道通过手动画图延长线的时候要选择延长对象,在选择延长到那个对象。要是前面是空是无法延长的。在用代码编程的时候也一样,需要两个对象才能确定是否两条线有关系,

直接上菜,亲测可用,支持圆弧直线延长得到的交点,支持两对象本来就相交,直接得到交点

;lsp求圆弧直接延长的交点,线上交点,不支持样条曲线延长。你懂的
(defun c:t2 ()
(vl-load-com)
(setvar "osmode" 0);关闭捕捉,结束请自己加打开捕捉
(setq line_Z(vlax-ename->vla-object (car (entsel "\n选要延长对象: ")))
CAR_H (vlax-ename->vla-object (car (entsel "\n选边界对象: ")))
)

(setq i_point(vlax-invoke line_Z 'IntersectWith CAR_H 1));交点

(if i_point
(progn
(princ i_point)
(princ "相交:huojibk.com")
(command "CIRCLE" i_point 1);交点上画圆验证
)
(progn
(princ "不相交:huojibk.com")
)
)
)

复制

如果边界线是个整圆,延长线在里面一头和圆相交,直接取表里面的第一个不延长相交坐标即可,因为圆和直线延长有两个点。

代码2结果都一样,如果需要准确判断哪个点是你需要的,就要判断第一对象的点和交点哪个最近哪个远

(defun c:t3 ()
(vl-load-com)
(setq ent1 (vlax-ename->vla-object (car (entsel "延长对象 : ")))
ent2 (vlax-ename->vla-object (car (entsel "边界对象2: ")))
)
(setq jiao_d (vlax-safearray->list
(vlax-variant-value
(vla-IntersectWith ent1 ent2 acExtendBoth))))

(princ jiao_d )
(setq jx1(list (nth 3 jiao_d) (nth 4 jiao_d)));
(princ jx1 )

)

复制

 

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: