最初由 xyzjint_cn 发布
[B]我在编程时遇到如下的问题:
在图纸中有一个块(名为风口或其他)
块上有一个点P1,
用程序选取此点后,如何用程序来得到通过该点的块的名称。 [/B]
可以使用XDRX_API的构造过一个点的选择集,得到选择集了,然后得到块实体,然后得到块实体的组码2就是块名了。如果开始用ENTSEL拾取,就更方便了。
xdrx_entsel可以使用过滤的,见下面的用法...
30.xdrx_GetPtSs
功能:构造通过一点的符合过滤要求的实体选择集
调用格式:(xdrx_GetPtSs <pt> [提示字符串] [拾取窗半宽] [英文层名或中文层索引名] [内部数据库选择集编号][过滤表])
说明:1.层名: 可以写作 "abc", "a*", "a??", "*" 等, 省略层名等价于 "*"。
2.内部数据库选择集编号: 该参数为 1 - 10, 将取得的选择集存入xdrx内部数据库中的 ARX 变量,
并将 (ssname) 当前实体指针 i 置 0。
3.过滤表为LISP中的过滤表,如'((8 . "abc")(0 . "line")....),也支持AND,OR,NOT等
4.若过滤表中提供层组码8,则前面的“英文层名或中文索引名”选项不起作用。
返回值:成功返回 选择集, 失败返回 nil。
31. xdrx_entsel
功能:单选符合过滤表条件的实体,LISP 函数(entsel)的增强。并将该实体的(entget)实体数据存入XDRX内部数据库的ARX变量,
供相关函数调用。
调用格式:(xdrx_entsel <提示字符串> [英文层名或中文索引层名] [实体选择项] [SSGET过滤表])
说明:1.若提供SSGET过滤表如'((8 . "a*")(0 . "*line")...),若SSGET过滤表中提供层组码8,则忽略前面的[英文层名或中文索引层名]。
若SSGET过滤表中没有提供层组码8,若前面设置了 [英文层名或中文索引层名],则将英文层面用(cons 8 ename),若中文索引,则求
出中文索引对应的英文层名后,加入SSGET过滤表中。
2.[实体选择项] 值为0,1,2, 若给其他值,函数返回NIL退出。
3.[实体选择项]含义:(不提供,默认为0)
若符合条件的实体不是一个(如有重复实体,或拾取框中范围符合条件的实体多于一个)
0:返回任意一个符合条件的提示和最近捕捉点
1:弹出选项 请选取符合条件的实体/X-退出/Y-确定/<下一个>:
若输入X,则退出函数,返回NIL.
若输入Y,则返回当前亮显的实体名和最近捕捉点
输入回车(或鼠标右键),则循环亮显实体,供用户选择,直到输入Y确认为止。
提示: 允许配合使用函数(initget)。
返回值:成功返回表(图元名 最近捕捉点), 失败返回 nil。
- 示例: 点选图层“轴线”层的LINE实体
- (if (setq e (xdrx_entsel "\n请点选轴线实体<退出>:" "轴线" 0 '((0 . "line"))))
- (progn
- ...
- )
- )
- 或者
- (if (setq e (xdrx_entsel "\n请点选轴线实体<退出>:" "dote" '((0 . "line"))))
- (progn
- ...
- )
- )
- 或者
- (if (setq e (xdrx_entsel "\n请点选轴线实体<退出>:" 0 (list (xdrx_getlyrname "轴线")'(0 . "line")))))
- (progn
- ...
- )
- )
提示:函数xdrx_getlyrname 提取中文索引层名对应的英文层名。索引定义在文件layerdef.dat中。
提示:该函数做完后,可以不提供参数使用xdrx_setenttodb
即:(xdrx_setenttodb)等价于(xdrx_setenttodb (car e))
因为不提供参数,XDRX_SETENTTODB函数将当前内部数据库中的(entget)实体数据放入ARX变量。 |