明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2625|回复: 13

[求助]怎樣通過LISP以點型式單選圖元?

  [复制链接]
发表于 2004-3-31 08:58:00 | 显示全部楼层 |阅读模式
怎樣通過LISP以點型式單選圖元?如果有選到偉回1,沒有圖元傳回0,萬分感謝!


                                         我想通過某函數(格式如:function( point /))的型式通過某點抓取圖元,如果沒有圖元則傳回0,如果有則傳回1.


                         通過(setq ll(command ".select" pp "")) 卻無論怎樣都傳回NIL,


                         通過(entsel pp)卻是“bad argument type!”,實在沒辦法啦。


請各位高手賜教。謝謝!
发表于 2004-3-31 09:37:00 | 显示全部楼层
ENTSEL 为了对一个对象进行操作,AutoLISP 应用程序必须获取它的图元名称,以便调用图元数据或选择集函数。本节详细说明两个函数 entsel 和 nentsel,它们不仅返回图元名称,而且返回应用程序需要的其他信息。
这两个函数都要求 AutoCAD 用户通过在图形屏幕上交互地拾取点来选择对象。所有其他图元名称函数都能获取图元,即使该图元在屏幕上不可见或是位于冻结图层上。entsel 函数提示用户通过在图形屏幕上拾取点来选择对象,entsel 返回图元名称和选定点的值。一些图元操作需要用来选定对象的点的信息。例如 AutoCAD 命令集中的 BREAK、TRIM 和 EXTEND。关于 nentsel 函数的详细说明请参见图元上下文和坐标转换数据。如果在调用这些函数之前调用了 initget,则它们可以接受关键字。 entnext 函数获取后续图元的名称。如果不带参数地调用 entnext,则返回图形数据库中第一个图元的名称。如果参数是当前图形中某个图元的名称,entnext 返回紧随其后的图元名称。
下列代码示例了配合使用 ssadd 和 entnext 来创建选择集的方法,并为已有的选择集添加内容。 (setq e1 (entnext))
(if (not e1) ;将第一个图元名称赋给 e1
(princ "\n图形中没有图元。")
(progn
(setq ss (ssadd)) ;将一个空选择集赋给 ss
(ssadd e1 ss) ;返回添加了 e1 的选择集 ss
(setq e2 (entnext e1)) ;获取紧随 e1 的图元
(ssadd e2 ss) ;向选择集 ss 中添加 e2
) ) entlast 函数获取数据库中最新图元的名称。最新图元是最近创建的主图元。所以调用 entlast 可以获取一个刚刚通过调用 command
所创建的图元的名称。
可以将由 entnext 返回的图元名指定给传至该函数的同名变量。这样就可以用一个图元名变量来“遍历”整个数据库,如下所示: (setq one_ent (entnext)) ;获取第一个图元的名称 (while one_ent
.
. ;处理新图元
.
(setq one_ent (entnext one_ent)) ) ;现在,one_ent 的值是 nil
 楼主| 发表于 2004-3-31 09:50:00 | 显示全部楼层
謝謝,不過我的意思是新編寫一個function,此function有我所有的功能。再幫我想想辦法吧。
发表于 2004-3-31 10:16:00 | 显示全部楼层
(ssget "c" pp pp)
发表于 2004-3-31 12:44:00 | 显示全部楼层
是这样子吗 (defun c:gg ()
(setq ss (entsel))
(if ss
(setq cc 1)
(setq cc 0)
)
)
发表于 2004-3-31 15:57:00 | 显示全部楼层
这样吧! (defun c:gg ()
(setq pp (getpoint))
(setq ss (ssget "c" pp pp))
(if ss
(setq cc 1)
(setq cc 0)
)
)
发表于 2004-3-31 17:48:00 | 显示全部楼层
不明白楼主,(entsel "选择对象...")到底有什么问题,这样都不行?有现成的,要自己写一个做什么?跟AUTODESK公司叫板?


你说的错误只是你使用错误了,不是函数本身有问题。。。仔细看看帮助中的介绍,entsel的参数是什么类型,不是随便代一个参数进去就可以的
发表于 2004-3-31 18:36:00 | 显示全部楼层
雅明发表于2004-3-31 15:57:00这样吧! (defun c:gg () (setq pp (getpoint)) (setq ss (ssget \"c\" pp pp)) (if ss (setq cc 1) (setq cc 0) ))

阁下是不是以前在统赢公司工作,现在自己在开发。
发表于 2004-3-31 18:44:00 | 显示全部楼层
还用entsel不行么?


(if (entsel) 1 0)
 楼主| 发表于 2004-4-1 15:33:00 | 显示全部楼层
謝謝,不過可能是我沒說清楚,是這樣的:


  我想移動光標(不需CLICK),當光標移至某圖元上方時就顯示此圖元相關資料,


光標移開時,相應資料自動消失。


  我想用(grread T)的方式取得光標點,然後將此圖元資料自動顯示出來。(無需點擊圖元),哥們所說都需選取圖元。


  哥們再想想辦法吧。謝謝!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-10-1 17:28 , Processed in 0.176245 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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