明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 15191|回复: 2

[【高飞鸟】] 【DynamicLisp的高级应用】-- 带关键字的SSGET

  [复制链接]
发表于 2013-8-1 01:15 | 显示全部楼层 |阅读模式
还在为你的ssget不能带关键字烦恼么,那么你现在不必烦恼了。
DynamicLisp的新版本里面提供了带关键字的ssget。
下面是几个函数的用法
=============================================================
可定义提示、关键字的SSGET                                       
-------------------------------------------------------------
(HFB_initGet [prompt]                                          
                       [kword]                                          
                       [kwordCallback]                                   
                       [OtherCallback]                                   
                       [RemovePrompt])                                   
输入:                                                       
        <prompt>                                               
        提示字符串。选择时候的提示字符串。可缺省。               
        <kword>                                                       
        关键字.ARX选择关键字定义和一般的关键字有所不同,下划线前
        定义的是关键字下划线后定义的是输入关键字后返回的字符串。
     例如: XCircle XLine_XCircle XLine。可缺省。            
        <kwordCallback>                                               
        回调函数字符串,如不指定,选择关键字后将中断选择直接返回
        关键字字符串。可缺省。                                 
        <OtherCallback>                                               
        如果输入的非关键字,所进行的回调函数名。可缺省。       
        <RemovePrompt>                                               
        为移除所选的某些物体的提示字符串。可缺省。                
说明:                                                        
        所有参数均为可选,但如果指定关键字就必须指定提示字符串.
        选择集使用完,要使用HFB_ssFree (由于我没定义储存列队,记
        得使用完选择集后用HFB_ssFree 释放选择集,否则超过128个选
        择集后将 无法创建)。                                       
输出:如果成功返回T,否则返回nil.                                 
                                                                
-------------------------------------------------------------
(HFB_ssget [sel-method]                                      
                     [pt1 [pt2]]                                       
                     [pt-list]                                         
                     [filter-list])                                    
参数说明与用法及返回值与SSGET相同.                           
使用前需要用HFB_initGet进行设置。如果不进行设置或者无参数调用
HFB_initGet,则与SSGET一致。如有设置,则有些模式可能无效果。
-------------------------------------------------------------
(HFB_ssFree [sel])                                          
输入: [sel] 为选择集,可缺省。                              
说明: 不带参数调用为释放图中所有选择集,包括命名和未命名的。
      sel如果为pickset类型,则释放这个选择集。如果为命名的选
      择集,则这个参数应为字符串。                           
输出: 如果成功返回T,否则返回nil                             
=============================================================

测试样例:
  1. (defun c:test (/ kwordCallback OtherCallback ss)
  2.   (defun kwordCallback (Kword /)                                ;关键字回调函数
  3.     (princ (strcat "\n选择了关键字: " kword))
  4.     (cond
  5.       ( (= kword "XCircle")
  6.         (ssget "x" '((0 . "CIRCLE")))
  7.       )
  8.       ( (= kword "XLine")
  9.         (ssget "x" '((0 . "LINE")))
  10.       )
  11.       (T (princ "\n错误的关键字。"))
  12.     )
  13.   )
  14.   (defun OtherCallback (Kword /)                                ;非关键字回调函数
  15.     (princ (strcat "\n选择了非关键字: " kword))
  16.     kword
  17.   )

  18.   (vl-acad-defun 'kwordCallback)                                ;让lisp函数能被arx调用
  19.   (vl-acad-defun 'OtherCallback)                                ;让lisp函数能被arx调用

  20.   (sssetfirst nil nil)                                          
  21.   (HFB_initGet  "选择对象或[全部圆(XC)/所有直线(XL)]: "                ;选择时的提示
  22.                      "XCircle XLine_XCircle XLine"                        ;关键字       
  23.                  "kwordCallback"                                ;关键字回调函数名
  24.                  "OtherCallback"                                ;非关键字回调函数名
  25.                  "移除物体: "                                        ;移除选择时的提示
  26.   )
  27.   (setq        ss (HFB_SSGet))                                                ;开始自定义关键字选择.
  28.   (cond
  29.     ( (= (type ss) 'STR)
  30.       (princ (strcat "\n你输入了关键字: " ss))
  31.     )       
  32.     ( (= (type ss) 'PICKSET)
  33.       (princ "\n你的选择集是:")
  34.       (princ ss)
  35.       (princ ", 选择集中图元个数是: ")
  36.       (princ (sslength ss))
  37.       (sssetfirst ss ss)
  38.       (HFB_ssFree ss)                                                ;释放选择集
  39.     )
  40.   )
  41.   (princ)
  42. )


评分

参与人数 1明经币 +3 金钱 +30 收起 理由
Gu_xl + 3 + 30 超级给力!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下

本帖被以下淘专辑推荐:

发表于 2013-8-3 00:38 | 显示全部楼层
让lisp能释放选择集是一件很惬意的事
发表于 2018-8-18 16:50 | 显示全部楼层
这是伪码吧,代码不全,运行不了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-25 23:25 , Processed in 1.082847 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表