afeng0712 发表于 2005-1-4 11:51:00

请教飞哥!

如何判断SAFEARRAY的值是NIL??/

meflying 发表于 2005-1-4 13:06:00

(null safearray)


如果是nil,返回T,否则返回nil

afeng0712 发表于 2005-1-4 14:11:00

飞哥,用VLA交出来的点是一变量,变量可求值得变体!



实际上两条线可能不相交,这时求变体的值会出错!所以需要先判断是否往下执行,但他的值是NIL,但是你上面那种判断不行!变体还不是表,(null 变体)始终为NIL!!!

meflying 发表于 2005-1-4 15:40:00

不是很明白你的话,变量就是变体吧,只是不同的说法。。。


把你的程序和你要解决的问题都写上来吧

meflying 发表于 2005-1-4 15:44:00

看看置顶的求交点的帖子,mccad的函数中就有判断是否存在交点情况的语句,可能是你要的吧

afeng0712 发表于 2005-1-5 09:32:00

飞哥,该程序主要解决N条要打断的线被相交的M条线打断,可能存在有两不相交的情况:程序如下: (DEFUN C:BM (/ OC SS SA I J SS1 SSA P0)<BR>       (VL-LOAD-COM)<BR>       (SETQ OC (GETVAR "CMDECHO"))<BR>       (SETVAR "CMDECHO" 0)<BR>       (PROMPT "\n 选择要打断的线条:")<BR>       (SETQ SS (SSGET '((0 . "*LINE,ARC,CIRCLE,ELLIPSE"))))<BR>       (PROMPT "\n 选择与之相交的线条:")<BR>       (SETQ SA (SSGET '((0 . "*LINE,ARC,CIRCLE,ELLIPSE"))))<BR>       (SETQ J 0)<BR>       (WHILE (&lt; J (SSLENGTH SA))<BR>                       (SETQ SSA (VLAX-ENAME-&gt;VLA-OBJECT (SSNAME SA J)))<BR>                       (SETQ I 0)<BR>                       (WHILE (&lt; I (SSLENGTH SS))<BR>                                       (SETQ SS1 (VLAX-ENAME-&gt;VLA-OBJECT (SSNAME SS I)))<BR>                                       (SETQ P0<BR>                                       (VLA-INTERSECTWITH<BR>                                                       SS1<BR>                                                       SSA<BR>                                                       ACEXTENDNONE<BR>                                       )<BR>                                       )<BR>                                       (SETQ P0 (VLAX-VARIANT-VALUE P0))<BR>                                       (SETQ P0 (LIST (VLAX-SAFEARRAY-GET-ELEMENT P0 0)[如果不相交此处会出错,所以得先判断如果不存在交点就跳过下面语句执行下一循环]<BR>                                               (VLAX-SAFEARRAY-GET-ELEMENT P0 1)<BR>                                                       )<BR>                                       )<BR>                                       (SETQ P0 (TRANS P0 0 1))<BR>                                       (SETQ P0 (OSNAP P0 "Int"))<BR>                                       (SETQ SS1 (LIST (SSNAME SS I) P0))<BR>                                       (COMMAND "_BREAK" SS1 "F" P0 "@")<BR>                                       (SETQ SSB (ENTLAST))<BR>                                       (SETQ I (1+ I))<BR>                       )<BR>                       (SETQ J (1+ J))<BR>       )<BR>       (SETVAR "CMDECHO" OC)<BR>       (PRINC)<BR>)

BDYCAD 发表于 2005-1-5 10:04:00

(DEFUN C:BM (/ OC SS SA I J SS1 SSA P0)<BR>       (VL-LOAD-COM)<BR>       (SETQ OC (GETvar "CMDECHO"))<BR>       (SETvar "CMDECHO" 0)<BR>       (PROMPT "\n ??要打?的??:")<BR>       (SETQ SS (SSGET '((0 . "*LINE,ARC,CIRCLE,ELLIPSE"))))<BR>       (PROMPT "\n ??与之相交的??:")<BR>       (SETQ SA (SSGET '((0 . "*LINE,ARC,CIRCLE,ELLIPSE"))))<BR>       (SETQ J 0)<BR>       (WHILE (&lt; J (SSLENGTH SA))<BR>                       (SETQ SSA (VLAX-ENAME-&gt;VLA-OBJECT (SSNAME SA J)))<BR>                       (SETQ I 0)<BR>                       (WHILE (&lt; I (SSLENGTH SS))<BR>                                       (SETQ SS1 (VLAX-ENAME-&gt;VLA-OBJECT (SSNAME SS I)))<BR>                                       (SETQ P0<BR>                                       (VLA-INTERSECTWITH<BR>                                                       SS1<BR>                                                       SSA<BR>                                                       ACEXTENDNONE<BR>                                       )<BR>                                       )<BR>                                       <BR>                                       (if P0 (progn<BR>                                                       (SETQ P0 (VLAX-VARIANT-VALUE P0))<BR>                                       (SETQ P0 (LIST (VLAX-SAFEARRAY-GET-ELEMENT P0 0);[如果不相交此??出?,所以得先判?如果不存在交?就跳?下面?句?行下一循?]<BR>                                               (VLAX-SAFEARRAY-GET-ELEMENT P0 1)<BR>                                                       )<BR>                                       )<BR>                                       (SETQ P0 (TRANS P0 0 1))<BR>                                       (SETQ P0 (OSNAP P0 "Int"))<BR>                                       (SETQ SS1 (LIST (SSNAME SS I) P0))<BR>                                       (COMMAND "_BREAK" SS1 "F" P0 "@")<BR>                                       (SETQ SSB (ENTLAST))))<BR>                                       (SETQ I (1+ I))<BR>                       )<BR>                       (SETQ J (1+ J))<BR>       )<BR>       (SETvar "CMDECHO" OC)<BR>       (PRINC)<BR>)

meflying 发表于 2005-1-5 13:03:00

我5楼不是说了吗?仔细看看吧

xstlf 发表于 2005-1-5 15:00:00

七楼<A name=3609><FONT color=#990000><B>BDYCAD</B></FONT></A>的我试了一下。提示说; 错误: ActiveX 服务器返回错误: 索引无效。这是什么错误呀?

afeng0712 发表于 2005-1-10 10:21:00

问题已处理!用上界可解决!
页: [1]
查看完整版本: 请教飞哥!