找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3528|回复: 23

[讨论]:Lisp中关键字的“一触即发”

[复制链接]

已领礼包: 593个

财富等级: 财运亨通

发表于 2004-9-22 12:07:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
写的非常简单,目的是写出一个格式

  1. ;;一触即发功能简单演示
  2. (defun c:test (/ tf tf1 p1 p2 mod)
  3.   (setq tf t)
  4.   (while tf
  5.     (if        (not tf1)
  6.       (princ "\n[L - 绘制直线 / C - 绘制园 /E - exit]<L>: ")
  7.     )
  8.     (setq mod (grread nil 10 0))
  9.     (cond
  10.       ((and (= (car mod) 2)
  11.             (= (strcase (chr (cadr mod))) "L")
  12.        )
  13.        (if (setq p1 (getpoint "\nStart Point: ")
  14.                  p2 (getpoint p1 "\nEnd Point: ")
  15.            )
  16.          (entmake (list        '(0 . "line")
  17.                         '(100 . "acdbentity")
  18.                         '(100 . "Acdbline")
  19.                         (cons 10 p1)
  20.                         (cons 11 p2)
  21.                   )
  22.          )
  23.        )
  24.       )
  25.       ((and (= (car mod) 2)
  26.             (= (strcase (chr (cadr mod))) "C")
  27.        )
  28.        (if (and        (setq p1 (getpoint "\nCenter point: "))
  29.                 (setq p2 (getpoint p1 "\nRadius: "))
  30.            )
  31.          (entmake (list        '(0 . "circle")
  32.                         '(100 . "acdbentity")
  33.                         '(100 . "acdbcircle")
  34.                         (cons 10 p1)
  35.                         (cons 40 (distance p1 p2))
  36.                   )
  37.          )
  38.        )
  39.       )
  40.       (t
  41.        (setq tf nil)
  42.       )

  43.     )
  44.   )
  45. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-9-22 12:59:54 | 显示全部楼层
请教一下这个用来干什么的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 444个

财富等级: 日进斗金

发表于 2004-9-22 14:42:02 | 显示全部楼层
有点象天正建筑5、6。但是AutoCAD自身的平台并不提供这样的功能。用多了,会在ACAD上迷糊的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-9-22 15:50:50 | 显示全部楼层
意义不大,把简单问题复杂化了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2004-9-22 16:05:39 | 显示全部楼层
习惯问题,只是作为一种Lisp实现的探讨

  1. ;|
  2. “一触即发”开关演示一
  3. 命令:chtxth
  4. 对不同比例画图很方便的解决方法、
  5. 修改字高或者根据比例缩放原有字高
  6. |;
  7. (vl-load-com)
  8. (defun c:chtxth        (/ tf1 high e val doc el mod oh sl ss)
  9.   (vla-startundomark
  10.     (setq doc (vla-get-activedocument (vlax-get-acad-object)))
  11.   )
  12.   (while (progn
  13.            (prompt "\n请选取要修改字高的文字<退出>:")
  14.            (setq ss (ssget '((0 . "*text"))))
  15.          )
  16.     (if        ss
  17.       (progn
  18.         [color=blue](if (not tf1)
  19.           (setq tf1 1)
  20.         )
  21.         (princ (strcat "\n请输入选项[A: "
  22.                        (if (= tf1 1)
  23.                          "实际字高]<变比>: "
  24.                          "变比]<实际字高>: "
  25.                        )
  26.                )
  27.         )
  28.         (setq mod (grread nil 10 0))
  29.         (if (and (or (equal mod '(2 97))
  30.                      (equal mod '(2 83))
  31.                  )
  32.                  (= tf1 1)
  33.             )
  34.           (setq tf1 2) ;_ 第一次变化
  35.           (setq tf1 1) ;_ 第二次变化
  36.         )[/color]
  37.         (initget 6)
  38.         (setq val (getreal (strcat "\n请输入文字"
  39.                                    (if (= tf1 1)
  40.                                      "缩放比例"
  41.                                      "新字高"
  42.                                    )
  43.                                    (if #val_txth
  44.                                      (strcat "<"
  45.                                              (rtos #val_txth 2 1)
  46.                                              ">"
  47.                                      )
  48.                                      ""
  49.                                    )
  50.                                    ":"
  51.                            )
  52.                   )
  53.         ) ;_ end setq
  54.         (if (not val)
  55.           (setq val #val_txth)
  56.           (setq #val_txth val)
  57.         )
  58.         (setq sl (sslength ss))
  59.         (while (> sl 0)
  60.           (setq        e    (ssname ss (setq sl (1- sl)))
  61.                 el   (entget e)
  62.                 high (cdr (setq oh (assoc 40 el)))
  63.           ) ;_end setq
  64.           (entmod (subst (cons 40
  65.                                (if (= tf1 1)
  66.                                  (* high val)
  67.                                  val
  68.                                )
  69.                          )
  70.                          oh
  71.                          el
  72.                   ) ;_ end subst
  73.           ) ;_ end entmod
  74.         ) ;_ end while
  75.       ) ;_ end progn
  76.     ) ;_ end if
  77.   ) ;_ end while
  78.   (vla-endundomark doc)
  79.   (princ)
  80. ) ;_ end defun
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-9-22 18:34:05 | 显示全部楼层
看君一个贴,胜编几回程,呵呵,受益非浅,终于知道了grread的新用法。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-9-22 19:10:22 | 显示全部楼层
呵呵!昨天还问过这样的问题,eachy斑竹只说了个grread. 查了下函数表也不太明白!现在好了,可以好好研究研究了!:)

另: 再问个问题, 同样的道理能否自定义一个热键组合键来一触即发呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1915个

财富等级: 堆金积玉

发表于 2004-9-22 19:35:14 | 显示全部楼层
对于熟练的人可以大大加快绘图的速度
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-9-22 22:19:09 | 显示全部楼层
5贴:文字缩放比例和实际字高在转换输入方式的时候默认值会串,宜设成两个变量
另外就本例而言,我觉得如wkai以前写过的用加前后缀的方法似乎更快捷
如:输入500表示实际字高,输入x1.5表示缩放1。5倍数,在程序中判断用户是使用实际字高还是相对比例。

马上写一个例子:[php]
;; 命令 c:chtth = 快速改字高-------------------------------lxx.2004.9
(defun chtth (ss / nh i e ent)
  (princ "\n字高改为(加前缀\"x\"表示改比例)<缺省值:")(princ h)
  (initget 128)
  (setq nh (getdist ">:")
        h  (if nh nh h)
        i -1)
  (while (setq e (ssname ss (setq i (1+ i))))
    (setq ent (entget e))
    (if (and (= 'STR (type h))(wcmatch h "x*,X*")) ;'
        (setq h (* (cdr(assoc 40 ent)) (distof (substr h 2))));;按比例修改的字高作为下次的默认值.
    )
    (entmod (subst (cons 40 h)(assoc 40 ent)ent))
  )
  (princ)
)
(defun c:chtth ( / ss h)
  (if (not h)(setq h 500));;初始默认值.
  (while (and (princ "\n选择文字:")
              (setq ss (ssget '((0 . "*TEXT"))))
         )
    (chtth ss)
  )(princ)
)[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

 楼主| 发表于 2004-9-22 23:18:47 | 显示全部楼层
最初由 梦断江南 发布
[B]5贴:文字缩放比例和实际字高在转换输入方式的时候默认值会串,宜设成两个变量
另外就本例而言,我觉得如wkai以前写过的用加前后缀的方法似乎更快捷
如:输入500表示实际字高,输入x1.5表示缩放1。5倍数,在程序中... [/B]

呵呵,你倒把程序当真了,为了这个标题,一时没有找到合适的程序,就在工具箱里面临时抓了一个。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-9-22 23:55:24 | 显示全部楼层
如果说我认真,那并不在于对字高处理这个程序的编写上,而是想通过这个程序对grread的使用效率进行一下思考,也算对得上ea兄的主题的。

我觉得grread一键触发的特性最有效的发挥就是处理单个关键字,以及有前缀的响应, 同时处理对关键字或取点的响应,动态
如下例程序结构同时处理带前缀的关键字,单个关键字,动态和取点

(princ "\n加前缀x-缩放 / 加前缀c-改颜色/d-合并/取点-.../.....")
(setq k (grread T 4 2))
(cond
  (如果是x,(setq  sc (getdist)) ,处理字高)
  (如果是c, (setq  c (getdint)),处理颜色)
  (如果是d,处理合并) ;;单个关键字,少一次回车
  ....
  (如果是取点,。。。进行相应处理)
  (如果是跟踪,动态效果处理)
)

如果要用grread,那就要达到用别的函数无法或难以实现的程度(如本例),这样才能体现它的自身优势。否则用别的函数也能做到(甚至更简洁),那只是个选择问题,一般来说,这种情况下我宁愿用别的函数,尽量不用、少用grread。呵呵,个人习惯而已。大家可畅所欲言
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2004-9-23 00:26:45 | 显示全部楼层
最初由 梦断江南 发布
[B]如:输入500表示实际字高,输入x1.5表示缩放1。5倍数,在程序中... [/B]


其实我很早就这么写了(还不是斑猪时)
说者无心,听者有意,很多人是不会注意的:)

至于grread,真是习惯问题,我习惯用空格键,一不小心,程序就退出了.(有的用有的不用,不是很好)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-9-23 01:40:13 | 显示全部楼层
江南,AEO,GRREAD在某些领域还是有一定优势的,比如理正建筑中的画墙线用热键切换墙线的对齐方式等等,感觉挺不错的,如果能充分利用后果不堪设想
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-9-23 03:24:46 | 显示全部楼层
sn,我也没有否定grread啊,我说的处理单个关键字就是你说的切换效果
需要说明的是,如果是单向进程方式的切换(线性),它的效果不明显(可用其它的程序结构、方式来做,而且效果未必逊于gr),作为回朔效果的切换(非线性)它就有优势(其实优势就是每次切换少一个回车)。
我说的回朔效果,举例:将影响实体生成的变量放到一个表里面,切换的时候更改表的内容,然后每次变更都根据变化的表进行重新生成实体(或部分实体)的操作,也就是一个动态调整的效果(实际上我们经常利用gr来做的动态效果就是不断回朔--删除、重建的过程),这种情况下运用grread,是有它的优势的。而且切换的次数越多,切换的方式越多,gr就越是体现出它的优势。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-9-23 09:48:45 | 显示全部楼层
哈哈哈,建议斑主将此贴置顶。
全是几个斑主在此讨论,相当于政治局常委会级别的。
看后受益匪浅。在此我收回说过的“将简单问题复杂化了”的话。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-15 05:14 , Processed in 0.511729 second(s), 59 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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