ljpnb 发表于 2005-1-28 15:35:00

[求助]有关Visual LISP函数的问题

以下这段子程序是飞老师提供的,关于求两相交曲线交点的程序,由于我对V-lisp不熟,所以对这段程序不能理解,望各位老师们帮忙解答,先谢了!



(defun GetInterPoint (ent1 ent2 / ax_ent_1 ax_ent_2 intpoints points i)<BR>       (setq ax_ent_1 (vlax-ename-&gt;vla-object ent1)               <FONT color=#0909f7>;;ent_1为曲线1的图元名<BR></FONT>                                                       ax_ent_2 (vlax-ename-&gt;vla-object ent2)                                               <FONT color=#3300ff>;;ent_2为曲线2的图元名</FONT><BR>       )<BR>       (setq intpoints (<FONT color=#ff0000>vla-intersectwith</FONT> ax_ent_1 ax_ent_2 <FONT color=#ff0000>acextendnone</FONT>))<BR>       (setq intpoints (vlax-variant-value intpoints))<BR>       (setq i 0)<BR>       (if (&gt; (vlax-safearray-get-u-bound intpoints 1) 0)<BR>                       (repeat (/ (+ 1<BR>                                                                                                       (- (vlax-safearray-get-u-bound intpoints 1)<BR>                                                                                                                               (vlax-safearray-get-l-bound intpoints 1)<BR>                                                                                                       )<BR>                                                                               )<BR>                                                                               3<BR>                                                       )<BR>                                       (setq points (append points (list (list<BR>                                                       (vlax-safearray-get-element intpoints i)<BR>                                                       (vlax-safearray-get-element intpoints (+ i 1))<BR>                                                       (vlax-safearray-get-element intpoints (+ i 2))<BR>                                       )))<BR>                                       )<BR>                                       (setq i (+ 3 i))<BR>                       )<BR>       )<BR>       points<BR>)


以上程序<FONT color=#ff0000>红色部份的函数</FONT>我在帮助文件中查不到,不知道为什么,能否解释一下


        (setq intpoints (<FONT color=#ff0000>vla-intersectwith</FONT> ax_ent_1 ax_ent_2 <FONT color=#ff0000>acextendnone</FONT>))这句起什么作用

lijiao 发表于 2005-1-28 16:03:00

对两个图元求交点。

BDYCAD 发表于 2005-1-28 16:03:00

(setq intpoints (<FONT color=#ff0000>vla-intersectwith</FONT> ax_ent_1 ax_ent_2 <FONT color=#ff0000>acextendnone</FONT>))这句是找出ax_ent_1和 ax_ent_2对象的交点, 是采用<FONT color=#ff0000>acextendnone 有真正的交点的方式. </FONT>

meflying 发表于 2005-1-28 16:28:00

方法:<FONT color=#ff0000>intersectwith,查看帮助文件,怎么使用VLA函数,参考帮助文件中VLISP中的ActiveX部分</FONT>

ljpnb 发表于 2005-1-29 08:34:00

谢谢以上几位老师,<FONT color=#ff0000>参考帮助文件</FONT><FONT color=#000000>我一直在参考,可惜VLISP部份是英文的,英语水平不太好,所以看起来比较吃力。</FONT>


另外我还想问个问题,这句话执行后返回一个这样的值,这个值代表什么,是不是VLA特定格式的一种数据形式?


(setq intpoints (<FONT color=#ff0000>vla-intersectwith</FONT> ax_ent_1 ax_ent_2 <FONT color=#ff0000>acextendnone</FONT>))


返回:#&lt;variant 8197 ...&gt;

meflying 发表于 2005-1-29 12:22:00

是一个VLA变量,你可以使用vlax-variant-value或获得其内容

ljpnb 发表于 2005-1-29 12:29:00

谢谢飞老师指点!不过用vlax-variant-value获得内空也是看不懂,比如运行:


(setq intpoints (vlax-variant-value intpoints))                               返回:               #&lt;safearray...&gt;


嘿嘿,还是看不懂返回值,想学VLISP真是摸不到头脑。。。。。

meflying 发表于 2005-1-29 12:40:00

如果返回的是#&lt;safearray...&gt;,说明是一个表,使用vlax-safearray-&gt;list就可以得到lisp的表了

ljpnb 发表于 2005-1-29 13:26:00

我逐行运行,使用vlax-safearray-&gt;list确实得到一个交点的坐标,多谢飞老师指点!
页: [1]
查看完整版本: [求助]有关Visual LISP函数的问题