Kingma 发表于 2022-7-6 07:24:52

交点

我有两个对象,第一个*(*thx到L.Mac和M.Ribar)编码为:
 
第二个对象是线条:
 
该线平行于Z轴。椭圆是一个3d对象。直线和椭圆之间(总是)有一个交点。我需要这一点。我试过一些东西,但没有成功。
 
欢迎提出建议。
 
提前谢谢!

marko_ribar 发表于 2022-7-6 07:46:32

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

Kingma 发表于 2022-7-6 07:58:30

好的,我整理出了我想要使用的代码。它工作良好:
(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))
 
它不起作用。也许我忘记了一件小事,或者只是我的方式。

Kingma 发表于 2022-7-6 08:11:42

当然,代码:
(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)

marko_ribar 发表于 2022-7-6 08:24:02

 
在使用(vlax ename->vla object l1)转换l1和使用相同方法转换ell后,使用:
(setq i45 (vlax-invoke l1 'intersectwith ell acextendnone))M.R。
当然,您必须首先使用(vl load com)启用vla函数

Kingma 发表于 2022-7-6 08:30:48

 
谢谢你,马科,现在很好!
页: [1]
查看完整版本: 交点