交点
我有两个对象,第一个*(*thx到L.Mac和M.Ribar)编码为:第二个对象是线条:
该线平行于Z轴。椭圆是一个3d对象。直线和椭圆之间(总是)有一个交点。我需要这一点。我试过一些东西,但没有成功。
欢迎提出建议。
提前谢谢! Kingma,在您的示例中,您使用了我的代码(defun ellipse3dpt(centpt endpt1 endpt2)(我忘了本地化zd,所以应该是(defun ellipse3dpt(centpt endpt1 endpt2/zd)…)然后用(_3deliple hp44 p2701 hoogp)调用了李函数。。。您必须决定要使用的代码,对于使用的代码,您应该为我的创建调用(ellipse3dpt hp44 p2701 hoogp),为Lee的创建调用(3delipse3dpt hp44 p2701 hoogp)。。。对于两个曲线对象的交点,我建议您研究这个示例:
http://www.cadtutor.net/forum/showthread.php?73279-实体交点
或者这个:
http://www.cadtutor.net/forum/showthread.php?73133-给定方位角和高度角测量到物体的距离
M、 R。
顺便提一下
当你想引用某人的留言时,你应该使用
;当你想发布代码时,你应该使用
Your code 好的,我整理出了我想要使用的代码。它工作良好:
(defun _3DEllipse ( cen minp majp )
(entmake
(list
'(0 . "ELLIPSE")
'(100 . "AcDbEntity")
'(100 . "AcDbEllipse")
(cons 010 cen)
(cons 011 (mapcar '- majp cen))
(cons 040 (/ (distance minp cen) (distance majp cen)))
(cons 210 (v^v (mapcar '- minp cen) (mapcar '- majp cen)))
)
)
)
;; Vector Cross Product-Lee Mac
;; Args: u,v - vectors in R^3
(defun v^v ( u v )
(list
(- (* (cadr u) (caddr v)) (* (cadr v) (caddr u)))
(- (* (carv) (caddr u)) (* (caru) (caddr v)))
(- (* (caru) (cadrv)) (* (carv) (cadru)))
)
)
(_3DEllipse (trans hp44 1 0) (trans p2701 1 0) (trans hoogp 1 0))
(_3DEllipse hp44 p2701 hoogp)
另一个对象是线:
(setq hoogte75 (* hoogte 0.75))
(setq hp45 (list (car p45) (cadr p45) (- (caddr p45) hoogte75)))
(command "line" p45 hp45 "")
我想要这些物体的交点。存储为变量。
所以我想我必须首先选择这样的椭圆:
(setq ell (entlast)) ; im not sure this is the right way
(setq ell (vlax-ename->vla-object ell)) ; converting
线路相同:
(setq l1 (entlast))
(setq l1 (vlax-ename->vla-object l1))
然后:
(setq i45 (vlax-invoke <VLA-Object l1> 'intersectwith <VLA-Object ell> acextendnone))
它不起作用。也许我忘记了一件小事,或者只是我的方式。 当然,代码:
(setq ell (entlast))
(setq ell (vlax-ename->vla-object ell))
紧随其后:
(defun _3DEllipse ( cen minp majp )
(entmake
(list
'(0 . "ELLIPSE")
'(100 . "AcDbEntity")
'(100 . "AcDbEllipse")
(cons 010 cen)
(cons 011 (mapcar '- majp cen))
(cons 040 (/ (distance minp cen) (distance majp cen)))
(cons 210 (v^v (mapcar '- minp cen) (mapcar '- majp cen)))
)
)
)
;; Vector Cross Product-Lee Mac
;; Args: u,v - vectors in R^3
(defun v^v ( u v )
(list
(- (* (cadr u) (caddr v)) (* (cadr v) (caddr u)))
(- (* (carv) (caddr u)) (* (caru) (caddr v)))
(- (* (caru) (cadrv)) (* (carv) (cadru)))
)
)
(_3DEllipse (trans hp44 1 0) (trans p2701 1 0) (trans hoogp 1 0))
(_3DEllipse hp44 p2701 hoogp)
在使用(vlax ename->vla object l1)转换l1和使用相同方法转换ell后,使用:
(setq i45 (vlax-invoke l1 'intersectwith ell acextendnone))M.R。
当然,您必须首先使用(vl load com)启用vla函数
谢谢你,马科,现在很好!
页:
[1]