明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3220|回复: 12

[已解决]LISP中能用让命令行提示输入一个数同时鼠标变成选择图元时的小方块可以选择

  [复制链接]
发表于 2007-11-29 13:00 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2007-12-5 18:16:26 编辑

[已解决]LISP中能用让命令行提示输入一个数同时鼠标变成选择图元时的小方块可以选择图元?[br]我是想实现以下功能:如果输入一个数值,将该值赋给a,如果选择一个图块,将块属性值赋给a。
以下代码虽能实现这个功能,但需要输入一次Xz,能否实现即可以输入一个数,也可以同时读取块属性值?
请前辈们指点,谢谢!
  1. (initget "Xz  ")
  2. (setq a (getreal "\n输入起点坐标 [或选择实体读取坐标(X)]<X>:"))
  3. (if (or (= a "Xz") (null a))
  4.   (progn
  5.     (dzb);调用dzb的程序,获取图层属性值。
  6.     (setq a pit)
  7.   )
  8. )
发表于 2007-11-30 23:35 | 显示全部楼层
这个,莫非真不能解决么?
发表于 2007-12-1 02:30 | 显示全部楼层

参见
(while (/= (type aa) 'LIST)
(initget 2 "S")
(setq aa (getpoint "\n设置(S)/选择基准点:"))
(cond ((= (type aa) 'STR)     
 () 
      )
      ((= (type aa) 'list)
        (setq py (cadr aa))
      )
      (T (exit))

)
)

 楼主| 发表于 2007-12-1 09:39 | 显示全部楼层
感谢楼上指点,我根据您的提示写出如下代码,
  1. (defun c:dzb (/ s1 ent ent1)
  2.   (initget 3)
  3.   (setq s1 (entsel "\n输入数值/选择需要读取数值的块或文字:"))
  4.   (cond ((= (setq xxx (type s1)) ;|'INT|; 'STR) (setq s1 (read s1)))
  5. (t
  6.   (progn
  7.     );progn
  8. );t
  9.   );cond
  10. )
如果选择块,没有问题,但如果输入数值,通过监视得出的xxx始终为nil,这也就导致程序异常中断。
initget是可以定义关键字,但怎么定关键字变成所有的实数(或者整数)?
发表于 2007-12-1 19:59 | 显示全部楼层

你应该用(initget 128)

发表于 2007-12-1 21:15 | 显示全部楼层

(initget 128)

监视s1就是nil,怎么回事?

 楼主| 发表于 2007-12-2 14:44 | 显示全部楼层

原来entsel只支持识别关键字,不支持控制位的值,也就是(initget [bits] [string])中的bits对entsel不起作用。

倒是明白了为什么s1是nil,但是还没有解决问题。

发表于 2007-12-3 17:54 | 显示全部楼层

你查一查grread这个函数

当输入字母和鼠标点击的时候

你跳出循环就可以了

程序就不写了 算法给你

(setq go T)

(while go

  (setq tmp(grread T))

  (cond

    ((= tmp xxx)

       (setq go nil)

    )

    ((= tmp xxx)

       (setq go nil)

    )

  )

)

如果得到一点

可以用getcorner获取对角点

然后用ssget框选即可判断选择的图元

发表于 2007-12-3 17:56 | 显示全部楼层

另外

你可以调用

entselp

这个函数自动选取图元

发表于 2007-12-3 19:19 | 显示全部楼层
(initget 128)
(setq a (getpoint  "\n输入起点坐标 [或选择实体读取坐标]"))
(cond
   (  (null a) );;无效输入
   (  (and (= 'LIST (type a));;得到点
              (setq b (ssget a));;点到实体
      ) 
      (setq b (ssname b 0) )
      (setq a (通过实体b获取块属性))
 )
   (  (= 'STR (type a));;输入字符串
      (setq a (read a))
      (if (or(=  'INT (type a))
              (= 'REAL (type a))
         )
         nil;;为数字,结果已在a中
         (setq a nil);;其它字串,无效
   )
   (t (setq a nil));;其它情况,无效
)
     
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-14 18:41 , Processed in 0.153716 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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