明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5094|回复: 15

使用sssetfirst遇到的问题

  [复制链接]
发表于 2006-3-17 00:20:00 | 显示全部楼层 |阅读模式

最近使用sssetfirst函数,发现一个奇怪的问题,我写了一个如下的程序

(defun test()

 (setq ss1 (ssget))

(sssetfirst nil ss1)

执行程序后,必须在图面上再用鼠标点选一下才会出现ss1所决定的范围,可是如果直接在command line输入(sssetfirst nil ss1),不需用鼠标点选,就会直接出现ss1的范围,请问这是什么原因?要如何才能避免多一道鼠标点选的动作?

发表于 2017-8-17 09:43:01 | 显示全部楼层
(setq ss1 (ssget))
替换成
(if (cadr (ssgetfirst))
    (progn (sssetfirst) (setq ss1 (ssget "_P")))
    (setq ss1 (ssget))
  )
回复 支持 1 反对 0

使用道具 举报

发表于 2006-3-17 07:52:00 | 显示全部楼层
(sssetfirst nil ss1)改成(sssetfirst ss1 ss1)
 楼主| 发表于 2006-3-17 10:03:00 | 显示全部楼层

情况似乎没有改善,我的作法为先选定一个区域的图形,然后在command line执行(test),这时我必须在绘图区域上使用鼠标点一下,刚刚选择的图形才会出现,

 

 

我主要的目的是要作选择集筛选的工作,例如把一个选择集的特定大小的方形挑选并标示出来,原先打算使用Quick Select功能,选择特定面积大小,可是每次还要先计算面积,使用起来不大方便,所以决定自己写个程序来作判断,可是在程序最后一行,使用(sssetfirst nil ss1),竟会造成必须先在图面上click一下,ss1才会被标示出来,我认为这一个click动作相当多余,可是却不知如何避免,所以请各位高手指点迷津,谢谢!

发表于 2006-3-17 10:49:00 | 显示全部楼层
起先没明白你的意思
  1. (defun c:test ()
  2.   (setq ss1 (ssget "x" '((0 . "CIRCLE")))) ;_加上你需要过滤的条件
  3.   (sssetfirst nil ss1)
  4.   (princ)
  5. )
发表于 2006-3-17 16:19:00 | 显示全部楼层

建议先执行(setq ss1 (ssget))

然后定义

(defun test()

(sssetfirst nil ss1)

不过你的"点一下"到底是一个什么样的过程?很难想象

发表于 2007-8-18 19:13:00 | 显示全部楼层

当你选择成功时,不要按空格或回车,若取消按ESC,否则就是你这样的情况

发表于 2007-8-19 09:49:00 | 显示全部楼层

(defun test()

 (setq ss1 (ssget))

(sssetfirst nil ss1)

)

还真是这样,我执行的结果也是要点一下.有意思.不过我也不知道原因

发表于 2007-8-22 10:34:00 | 显示全部楼层
我也得出同样的结论,不解...
发表于 2011-7-9 20:51:46 | 显示全部楼层
我也出现这样的情况,在过虑好的选集如 SS , 正常情况下(sssetfirst nil ss)

ss选集的图元亮显并显示夹点,但有些时候不会马上显示,需要用鼠标在绘图区点下才显示

出来,不知怎么回事?

发表于 2011-7-9 21:28:20 | 显示全部楼层
在(sssetfirst nil ss1)  后面加上
    (sssetfirst nil)就ok了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-20 02:39 , Processed in 0.286221 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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