在AeccSurfa上调用方法
我希望有人能让我走上正确的方向。我想创建一个命令:1.提示用户选择AECC曲面
2、提示用户选择行
3.调用IntersectPointWithSurface方法,使用直线的起点作为起点,直线的起点和终点作为方向向量。
4、返回点
我尝试过vlisp,但一直出现错误:
; 错误:发生未知异常
; 警告:未知异常时跳过了展开
我想在VBA中尝试一下,看看是否会出现同样的错误。我对VBA太陌生了,甚至都无法开始。任何帮助都将不胜感激。
当做
hippe013 两件事。。。。
你说你用Visual LISP试过这个。。。你能发代码吗?
至于VBA。。。跳过它,除非你已经熟练掌握了它,因为它不再受微软的支持。相反,考虑学习。NET(无论是VB.NET还是C#)。 如果您坚持使用VBA,请考虑以下博客:
VBA相交点与曲面 我确实弄明白了。我将变体作为论据传递给该方法。它需要有一个点的列表形式。ie’(0)
我的工作代码如下:
(defun c:day ()
;Please note that there is not any error trapping
;Load Visual Lisp Extensions
(vl-load-com)
;Prompt User for the Line Object
(setq line-obj (vlax-ename->vla-object (car (entsel "\nSelect Line Object: "))))
;Prompt User for the Surface Object
(setq surface-obj (vlax-ename->vla-object (car (entsel "\nSelect Surface Object: "))))
;Define the Point to Vector function
(defun pnt->vec (p1 p2 / vx vy vz)
(if (equal p1 p2)
(list 0 0 0)
(progn
(setq dist (distance p1 p2))
(setq vx (/ (- (nth 0 p2)(nth 0 p1)) dist))
(setq vy (/ (- (nth 1 p2)(nth 1 p1)) dist))
(setq vz (/ (- (nth 2 p2)(nth 2 p1)) dist))
(list vx vy vz))
)
)
;Return the StartPoint of the Line
(setq p1 (vlax-safearray->list (vlax-variant-value (vla-get-startpoint line-obj))))
;Return the Vector using the Start and End Point of the Line
(setq vec
(pnt->vec
(vlax-safearray->list (vlax-variant-value (vla-get-startpoint line-obj)))
(vlax-safearray->list (vlax-variant-value (vla-get-endpoint line-obj)))
)
)
;Invoke the IntersectPointWithSurface Method
(setq p (vlax-invoke surfobj 'IntersectPointWithSurface p1 vec))
)
好啊因此,在做了一些进一步的测试后,我发现上述代码在Civil 3D 2011上同样有效。然后,我使用了该代码并在Civil 3D 2009上进行了尝试,该方法期望该争论是变体。我没有收到我第一次描述的解卷错误。很抱歉在VBA和中发布此代码。NET论坛,但第一次寻找VBA/。这个谜题的答案。我似乎在使用这段代码时没有得到一致的结果。
当做
Hippe013 我工作时有两种版本,所以我会在周一午休时再次查看。。。同时,要注意(vlax ename->vla object nil):
不确定,但经验表明,我不会在defun名称“pnt->vec”中加一个>,即使*似乎工作正常,通常某些键可以直接插入你的程序,解释器就是不喜欢它们。还有其他人有问题吗? 我同意命令应该很容易输入,一般来说。。。使用时,我通常将“->”留给子函数,如我在这里所示:
http://www.cadtutor.net/forum/showthread.php?57570-Layer Creater Lisp例程问题&p=390543&viewfull=1#post390543
一个内置示例是vlax ename->vla object等。
谢谢你调查此事!
我知道使用(vlax ename->vla object nil)不是一种好的做法。我的代码写得很快,只是为了便于阅读。我注意到代码中没有任何错误捕捉。我通常不会在自己使用的代码中放置错误捕捉。如果我为其他人写文章,我将放置所有必要的错误捕捉,因为该用户将不了解可能导致的潜在错误。我经常为这样一个特定的任务编写代码,然后它就会被扔进代码墓地。
至于在子程序名称中使用“->”。我不知道这会潜在地引起问题。我想,如果内置函数使用它们,我也可以。ie vlax safearray->列表或vlax ename->vla对象。
页:
[1]