找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 4496|回复: 35

[已解决] 求一个完整简洁的示例

[复制链接]

已领礼包: 3198个

财富等级: 富可敌国

发表于 2014-9-27 23:56:05 | 显示全部楼层 |阅读模式
悬赏20D豆已解决

求一个完整简洁的示例,假如画一个圆,运行命令后首先弹出一个简单的对话框(只有一个选择)选择图层,确定之后绘制这个圆,退出之后,当再次调用此命令时,弹出对话框,此时的图层应为上次选择的那个图层,所以不需要再次选择了,只需要点确定即可,目的是我想了解这种记忆功能是怎样做的, 听别人解释是使用扩展数据或图形词典记录所选择图层名,但是具体的不懂,所以求助!

  1. (setq LAYERS (TABLELAYERS))

获取图层列表
  1.   (defun TABLELAYERS (/ L NM LST)
  2.     (while (setq L (TBLNEXT "LAYER" (NOT L)))
  3.       (if (NOT (WCMATCH (setq NM (CDR (ASSOC 2 L))) "*|*"))
  4.   (setq LST (CONS NM LST))
  5.       )
  6.     )
  7.     (ACAD_STRLSORT LST)
  8.   )


最佳答案

查看完整内容

通用函数编入 Lib.vlx , 已更新
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2014-9-27 23:56:06 | 显示全部楼层
本帖最后由 Free-Lancer 于 2014-9-28 07:47 编辑

通用函数编入 Lib.vlx , 已更新
  1. (if (not $globle_layer)
  2.   (setq $globle_layer (getvar "clayer"))
  3. )
  4. (defun c:tt (/ strl fn id lyrlst)
  5.   (setq        strl   '("layer:dialog {"
  6.                  "label = \"Select Layer\" ;"
  7.                  ":list_box { key = \"lyr\" ;  label = \"Layer\" ;}"
  8.                  "ok_cancel;"
  9.                  "}"
  10.                 )
  11.         fn     (dcl:make strl)
  12.         id     (dcl:load fn "layer")
  13.         lyrlst (fy:table "layer")
  14.   )
  15.   (dcl:listaction "lyr" 'lyrlst '$globle_layer)
  16.   (dcl:accept)
  17.   (if (= 1 (dcl:start id fn)) (setvar "clayer" $globle_layer))
  18.   (princ)
  19. )

点评

大师,才休息几个小时啊,要保重身体呀! 待会测试,谢谢大师!  详情 回复 发表于 2014-9-28 08:08
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

发表于 2014-9-28 00:14:15 | 显示全部楼层
用全局变量

点评

大师,能不能写出这个示例呢?  详情 回复 发表于 2014-9-28 00:17
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 3198个

财富等级: 富可敌国

 楼主| 发表于 2014-9-28 00:17:15 | 显示全部楼层

大师,能不能写出这个示例呢?

点评

(if (not 全局变量层名) (...............) ) (.............) (setlayer e 全局变量层名)  详情 回复 发表于 2014-9-28 00:38
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-9-28 00:38:59 | 显示全部楼层
lucas3 发表于 2014-9-28 00:17
大师,能不能写出这个示例呢?

(if (not 全局变量层名)
    (...............)  ;;选层
)
(.............)
(setlayer e  全局变量层名)

点评

大家都是夜猫子啊 谢谢,但是还是不够详细啊  详情 回复 发表于 2014-9-28 01:03
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 3198个

财富等级: 富可敌国

 楼主| 发表于 2014-9-28 01:03:15 | 显示全部楼层
newer 发表于 2014-9-28 00:38
(if (not 全局变量层名)
    (...............)  ;;选层
)

大家都是夜猫子啊
谢谢,但是还是不够详细啊

点评

你那么聪明,一点即通了。  详情 回复 发表于 2014-9-28 01:07
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-9-28 01:07:01 | 显示全部楼层
lucas3 发表于 2014-9-28 01:03
大家都是夜猫子啊
谢谢,但是还是不够详细啊

你那么聪明,一点即通了。;P

点评

版主取笑我了  详情 回复 发表于 2014-9-28 08:06
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

发表于 2014-9-28 03:45:34 | 显示全部楼层
lucas3 发表于 2014-9-28 01:03
大家都是夜猫子啊
谢谢,但是还是不够详细啊

  1. (if (not $globle_layer)
  2.   (setq $globle_layer (getvar "clayer"))
  3. )
  4. (defun c:tt (/ strl fn id lyrlst)
  5.   (setq        strl   '("layer:dialog {"
  6.                  "label = \"Select Layer\" ;"
  7.                  ":list_box { key = \"lyr\" ;  label = \"Layer\" ;}"
  8.                  "ok_cancel;"
  9.                  "}"
  10.                 )
  11.         fn     (dcl:make strl)
  12.         id     (dcl:load fn "layer")
  13.         lyrlst (table "layer")
  14.   )
  15.   (dcl:addlist
  16.     "lyr"
  17.     lyrlst
  18.     (vl-position $globle_layer lyrlst)
  19.   )
  20.   (dcl:listaction "lyr" 'lyrlst '$globle_layer)
  21.   (dcl:accept)
  22.   (dcl:start id fn)
  23.   (princ)
  24. )
  25. (defun dcl:listaction (key lst sym)
  26.   (action_tile
  27.     key
  28.     (strcat "(setq "
  29.             (vl-symbol-name sym)
  30.             " (nth (atoi $value) "
  31.             (vl-symbol-name lst)
  32.             "))"
  33.     )
  34.   )
  35. )
  36. (defun table (name / l nm lst)
  37.   (while (setq l (tblnext name (not l)))
  38.     (if        (setq nm (cdr (assoc 2 l)))
  39.       (setq lst (cons nm lst))
  40.     )
  41.   )
  42.   (acad_strlsort lst)
  43. )

点评

(if (not $globle_layer) (setq $globle_layer (getvar "clayer")) ) (defun c:tt (/ strl fn id lyrlst) (setq strl '("layer:dialog {" "label = \"Select Layer\" ;"  详情 回复 发表于 2014-10-4 19:32
Free-Lancer大师,这个贴子中 http://bbs.mjtd.com/thread-110581-1-1.html 的文字字高,要怎么记忆呢? 对话框中的key是e03, 跟e03有关的只有两句, (set_tile "e03" (rtos (* bi 4) 2 1)) 与 (action_tile "e02  详情 回复 发表于 2014-9-29 08:14
谢谢Free-Lancer大师的教学, 整了一个小时,终于依葫芦画瓢,改好了一个程序! 大师的程序里有一些函数在库里,对我来说增加了点难度,如果带注释的话,可能就不用这么久了…… 还有一个疑问,就是几  详情 回复 发表于 2014-9-28 09:24
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 3198个

财富等级: 富可敌国

 楼主| 发表于 2014-9-28 08:06:30 | 显示全部楼层
newer 发表于 2014-9-28 01:07
你那么聪明,一点即通了。

:L 版主取笑我了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 3198个

财富等级: 富可敌国

 楼主| 发表于 2014-9-28 08:08:09 | 显示全部楼层
Free-Lancer 发表于 2014-9-28 07:38
通用函数编入 Lib.vlx , 已更新

大师,才休息几个小时啊,要保重身体呀!
待会测试,谢谢大师!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 3198个

财富等级: 富可敌国

 楼主| 发表于 2014-9-28 09:24:02 | 显示全部楼层

谢谢Free-Lancer大师的教学, 整了一个小时,终于依葫芦画瓢,改好了一个程序!:victory:
大师的程序里有一些函数在库里,对我来说增加了点难度,如果带注释的话,可能就不用这么久了……

还有一个疑问,就是几个程序都有图层选择的这一功能,会不会这一个程序我选择了图层4, 下一程序打开也是图层4 ?会不会干扰到?如果会,那要怎么避免呢?

点评

封装函数都贴过源码,关键部分也有注释 不经过考验代码也不会封装的  详情 回复 发表于 2014-9-28 14:04
每个程序用自己的全局变量  详情 回复 发表于 2014-9-28 09:49
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-9-28 09:49:14 来自手机 | 显示全部楼层
lucas3 发表于 2014-9-28 09:24
谢谢Free-Lancer大师的教学, 整了一个小时,终于依葫芦画瓢,改好了一个程序!
大师的程序里 ...

每个程序用自己的全局变量

点评

谢谢,就是这个“$globle_layer” 取不同的名字吧  详情 回复 发表于 2014-9-28 10:51
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 3198个

财富等级: 富可敌国

 楼主| 发表于 2014-9-28 10:51:52 | 显示全部楼层
csharp 发表于 2014-9-28 09:49
每个程序用自己的全局变量

谢谢,就是这个“$globle_layer” 取不同的名字吧

点评

换个名字就可以了  详情 回复 发表于 2014-9-28 11:14
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-9-28 11:14:43 来自手机 | 显示全部楼层
本帖最后由 csharp 于 2014-9-28 11:15 编辑
lucas3 发表于 2014-9-28 10:51
谢谢,就是这个“$globle_layer” 取不同的名字吧


换个名字就可以了
$globle_layer1
$globle_layer2
………
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

发表于 2014-9-28 14:04:22 | 显示全部楼层
lucas3 发表于 2014-9-28 09:24
谢谢Free-Lancer大师的教学, 整了一个小时,终于依葫芦画瓢,改好了一个程序!
大师的程序里 ...

封装函数都贴过源码,关键部分也有注释
不经过考验代码也不会封装的

点评

嗯,我是指您回复的这个代码中要是有注释就好了,哈哈,要求有点多了! 好的结果是您的代码起到了立竿见影的效果!非常感谢!  详情 回复 发表于 2014-9-28 16:20
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 01:55 , Processed in 0.518149 second(s), 56 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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