kellyyang1 发表于 2004-3-6 19:41:00

如何使用SETXDATA和GETXDATA函数,在LISP中

请教高手,我想在LISP中用上面说的2个函数,可是怎么不行啊,提取的数据就是变体数组不知道怎么搞的还是空的

caojihe 发表于 2020-7-29 21:34:25

本帖最后由 caojihe 于 2020-7-29 22:02 编辑

各位大佬我把一个带有扩展数据的物体vname,转换过来后,检验vname1为什么看不到扩展数据呢?((setq vname1 (entget (vlax-vla-object->ename vname))))

meflying 发表于 2004-3-6 19:47:00

注意查看帮助文件中ActiveX and VBA reference部分,有这两个方法的用法,并结合开发人员手册的ActiveX部分,知道其在VLISP中如何使用,以下程序供参考,


你最好把你的做法放上来,好针对你的问题进行说明,否则只能说,慢慢学吧


(defun c:test( / ss ename vname datatype data)<BR>       (setq ss (ssget))<BR>       (setq ename (ssname ss 0))<BR>       (setq vname (vlax-ename-&gt;vla-object ename))<BR>       (setq datatype (vlax-make-safearray vlax-vbInteger '(0 . 4)))<BR>       (vlax-safearray-fill datatype '(1001 1000 1000 1040 1040))<BR>       (setq data (vlax-make-safearray vlax-vbvariant '(0 . 4)))<BR>       (vlax-safearray-fill data '("hello" "abc" "hello" 12.5 12.6))<BR>       (vla-setxdata vname datatype data)<BR>       (princ)<BR>)

kellyyang1 发表于 2004-3-6 20:14:00

我是那样做了啊!!可是我用GETXDATA函数时怎么提取不出来啊!!(setq xdata (vlax-make-safearray vlax-vbvariant '(0 . 4)))


(setq xdatatype (vlax-make-safearray vlax-vbInteger '(0 . 4)))<BR><BR>(vla-getxdata vname xdatatype xdata)


可是XDATATYPE和XDATA还是空的啊<BR>

meflying 发表于 2004-3-6 20:48:00

仔细看看,一样吗?


你的xdatatype和xdata没有填充值进去,当然是空的了,比较一下我的程序,很容易能明白啊

kellyyang1 发表于 2004-3-7 18:07:00

不是吧???用GETXDATA应该可以提取的啊???怎么还要填充啊??能说的明白点吗》??

meflying 发表于 2004-3-7 18:51:00

你要把XDATA作为扩展数据附着到对象上,可你的XDATA是空的,怎么附着上去????


请问,按你的做法,你觉得你应该给对象附着了什么东西呢?

kellyyang1 发表于 2004-3-9 18:21:00

不是啊!!GATXDATA函数不是可以得到附加在实体上的扩展数据吗??我想选择一实体的时候能得出此实体的扩展数据!!

meflying 发表于 2004-3-9 19:08:00

问题是你还没有把扩展数据附着的对象上,你又怎么取得出来?????


就像你还没赚到钱,可却到处问怎么才能买颗卫星。。。

kellyyang1 发表于 2004-3-9 19:38:00

不是啊!!我不是用SETXDATA函数附加上去过了吗??

meflying 发表于 2004-3-9 20:05:00

不好意思。。。


这样


(vla-getxdata (vlax-ename-&gt;vla-object (car (entsel))) "hello" 'datatype 'data )
页: [1] 2
查看完整版本: 如何使用SETXDATA和GETXDATA函数,在LISP中