guosheyang 发表于 2024-4-22 23:11:52

本帖最后由 guosheyang 于 2024-4-22 23:18 编辑

(setq var
(vlax-make-variant
(vlax-SafeArray-Fill
   (vlax-make-safearray vlax-vbString '(0 . 0))
       '("扩展数据")
   )
)
)    这一句是这样的    似乎扩展数据莫法选

bloodtempt 发表于 2024-4-23 04:17:13

guosheyang 发表于 2024-4-22 23:11
(setq var
(vlax-make-variant
(vlax-SafeArray-Fill


我根据编码10推应该是两层表的构建的都是cdr的数据

你有种再说一遍 发表于 2024-4-23 07:07:25

bloodtempt 发表于 2024-4-23 04:17
我根据编码10推应该是两层表的构建的都是cdr的数据

肯定是两个表啊,但是其实和两个表没有关系,
而是因为桌子并没有把任何东西都去构造索引,
所以不要想着过滤器能啥都过滤.
可能你还是要掌握一点mysql知识才能领悟这些东西

guosheyang 发表于 2024-4-23 08:50:09

bloodtempt 发表于 2024-4-23 04:17
我根据编码10推应该是两层表的构建的都是cdr的数据要不改成这样   
(setq var
(vlax-make-variant
(vlax-SafeArray-Fill
   (vlax-make-safearray vlax-vbstring '(0 . 0) '(0 . 0))
       '(("扩展数据"))
   )
)
)

bloodtempt 发表于 2024-5-5 07:38:52

本帖最后由 bloodtempt 于 2024-6-14 22:43 编辑


筛选扩展数据扩展数据是字符串、数据、三维点、距离、层名,或者是其他附加在对象上得数据,特别是由外部应用程序附加到对象上得数据。扩展数据大小为16KB。通过指定,我们可以为一个特殊的应用程序使用-3组码在筛选表中指定扩展数据来检索扩展数据。例如:,函数acedSSGet()返回一个以指定名字注册的带扩展数据的实体。acedSSGet()不检索每个扩展数据项(组码的范围为1000—2000)。下面程序用于选择所有带有扩展数据的圆(Circle),应用程序为这些扩展数据注册的一个标志符(ID)为“APPNAME”。 eb1.restype=0;//实体类型strcpy(sbuf1,”CIRCLE”);eb1.resval.rstring=sbuf1;//实体为CIRCLEeb1.rbnext=&eb2;eb2.restype=-3;//扩展数据eb2.rbnext=&eb3;eb3.restype=1001;strcpy(sbuf2,”APPNAME”);eb3.resval.rstring=sbuf2;//APPNAME应用程序eb3.rbnext=NULL;//选择注册到APPNAME应用程序中的圆的扩展数据acedSSGet(“X”,NULL,NULL,&eb1,ssname1);如果不止一个应用程序名包含在表中,则acedSSGet()在选择集中所包含实体,必须对所有指定的应用程序都有扩展数据。比如,下面的程序选择带有注册到“APP1”和“APP2”中的扩展数据的圆 Code highlightingproduced by Actipro CodeHighlighter(freeware)http://www.CodeHighlighter.com/--> 1 eb1.restype=0;//实体类型strcpy(sbuf1,”CIRCLE”);eb1.resval.rstring=sbuf1;//圆eb1.rbnext=&eb2; eb2.restype=-3;//扩展数据eb2.rbnext=&eb3;eb3.restype=1001;strcpy(sbuf2,”APP1”);eb2.resval.restring=sbuf2;//应用程序APP1eb2.rbnext=&eb4;eb4.restype=1001;//扩展数据strcpy(sbuf3,”APP2”);eb4.resval.rstring=sbuf3;//应用程序APP2eb4.rbnext=NULL;//选择注册应用程序APP1和APP2的圆扩展数据

acedSSGet(“X”,NULL,NULL,&eb1,ssname1);


(setq app1 (vlax-make-safearray
      vlax-vbInteger
      '(0 . 0)
))
(vlax-SafeArray-Fill app1 (list 1001))
(setq app2 (vlax-make-safearray
      vlax-vbString
      '(0 . 0)
))
(vlax-SafeArray-Fill app2 (list "FrameHandle"))
(setq app3 (vlax-make-safearray
      vlax-vbVariant
      '(0 . 1)
))
(vlax-SafeArray-Fill app3 (list app1 app2))
(setq Filter (list (cons 0 "INSERT") (list -3 (list app3))))
(vla-Select
    ssetObj
    ACSelectionSetAll
    nil
    nil
    (if Filter (List->VarArray (mapcar 'car Filter) vlax-vbInteger))
    (if Filter (List->VarArray (mapcar 'cdr Filter) vlax-vbvariant))
)
TypedValue.TypeCode 属性是一个16位整型数据,它指明 TypedValue.Value 属性的数据类型,可接受的 TypeCode 值取决于 ResultBuffer 实例的使用范围。
创建 ResultBuffer 方法有两种:         1.一种是使用构造函数创建,即在声明 ResultBuffer 时将一个 TypedValue 作用参数传给 ResultBuffer:         2.另一种是使用 ResultBuffer.Add() 方法来添加 TypedValue,可以添加多个TypedValue,但总数据大小不能超过128K:                                                      ResultBuffer resBuf = new ResultBuffer();                                                           resBuf.Add(new TypedValue(1001, "appname"));    //必须放在第一条添加,否则会报错                                                       resBuf.Add(new TypedValue(1000, "作者:王"));                                       注意// resBuf 必须包含 1001 对应的值 就是应用程序名称                                                       ResultBufferresBuf = new ResultBuffer(new TypedValue((int)DxfCode.Text, "我的扩展数据"));

guosheyang 发表于 2024-5-6 08:48:45

bloodtempt 发表于 2024-5-5 07:38
eb1.restype=0;//实体类型 2 strcpy(sbuf1,”CIRCLE”); 3 eb1.resval.rstring=sbuf1; ...

你这个是vla-Select选出来的不?

bloodtempt 发表于 2024-5-6 14:16:48

guosheyang 发表于 2024-5-6 08:48
你这个是vla-Select选出来的不?

不是只是根据arx推出来了使用方法
页: 1 [2]
查看完整版本: vla-select如何利用组码过滤选择扩展数据(-3 (“扩展”))