马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本帖最后由 digouyou 于 2018-2-26 13:19 编辑
各位大牛,大家好。在画图的时候有时候为了筛选有特殊参数或属性的图形有两种方式如下图:过滤器和快速选择。
在vlisp程序中可以通过command命令来进行调用: 但是这种调用,只能弹出类似上面插图的话框,无法将一些属性及要求添加进去
比如说:以上例子中的快速选择,想在整个图形中选取块,块的名称为abc。但是实际执行后只能弹出对话框,相应的属性及其他并没有改变。如下图:
现在有编程需要:在一个图元较多的图形中,快速搜索到名称为TKA[0-4]正则匹配的插入的块,并将返回的结果设为一个选择集,且此过程中不能弹出对话框,全部按照预设的参数在后台执行。
现在是通过一个效率比较低(low)的代码实现,搜索的时间过长代码如下:
(defunsearch_tukuang( / myacad mydoc myms n myblock tuyuan tuxing_list tuyuan_leixintuyuan_leituming tuyuan_leixin)
(setqmyacad(vlax-get-acad-object))
(setq mydoc(vla-get-ActiveDocumentmyacad))
(setq myms(vla-get-ModelSpacemydoc))
(setq n 0)
(repeat (vla-get-count myms)
(setqmyblock(vla-item myms n))
(setqtuyuan(vlax-vla-object->ename myblock))
(setqtuxing_list(entget tuyuan))
(setqtuyuan_leixin(cdr(assoc 0 tuxing_list)))
(setqtuyuan_leituming(cdr(assoc 2 tuxing_list)))
(if (= tuyuan_leixin"INSERT" )
(progn
(if(wcmatch tuyuan_leituming"TKA[0-4]\(*\)*")
(setq tukuang_zuobiao(cons (cdr(assoc 10tuxing_list)) tukuang_zuobiao))
(princ)
)
)
(progn
(princ)
)
)
(setqn(+ n 1))
)
)
现在希望通过fi或者qselect来实现,效率比较高一些。
搜索了不少的资料,发现有一种方式为:sendkeys方法操作内置命令窗体
其中提供了源代码如下:
示例2:
操作qselect内置窗体代替qselect 命令快速选择0层所有图元
(defun c:test()
(Vlax-Invoke-Method (Vlax-Get (Vlax-Get-Acad-Object) 'ActiveDocument)'SendCommand (car (list "Qselect "
(Vlax-Invoke-Method (Vlax-Get-Or-Create-Object "WScript.Shell") 'Sendkeys "%p{DOWN}{Enter}"))))
)
在vlisp编辑器中测试的时候可以使用,但是不知道其中的原理,不知道怎么改写。现求助有经验的各位。如果可以的话尽量提供源码,多添加一些例子,感激不尽。[sell=50]如果能完美解决,豆不够的话,可微信我,小红包伺候。[/sell]
|