明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 19555|回复: 53

[【风之影】] [源码]智能填写标题栏

    [复制链接]
发表于 2012-2-18 15:34:36 | 显示全部楼层 |阅读模式
本帖最后由 cabinsummer 于 2016-12-24 15:07 编辑



帖子叫智能,其实并不是智能,仅仅是根据属性的定义调用相应的对话框而已,显得有那么一点智能而已。
本程序是我在工作中应用到的程序直接改编而成,不要以为是改编别人的程序,其实原始程序的作者也是风。因为在明经中发帖不好用公司的TITLE,所以把程序稍微改造的有点国标了。由于每个公司的配置并不一样,所以希望读者能够理解程序的原理,自己更改以适合本公司的习惯。附件中有一个压缩包里放了dwg文件,就是本程序的测试文件。
填写标题栏命令:BTL。
签名配置命令:SCFG。
本程序适合每张图里有一个标题栏的情况,如果你的文件含有多个标题栏,那么你需要在程序中加上搜索需要的部分。
在公司里,每个人角色相对固定,所以可以根据实际情况设定签名,我在演示中把每个签名都签上仅仅是演示,实际工作中每个人只该有一个签名。
本程序是人机工程的一个典型实例,用该方法填写标题栏,速度提高不少,当然你还可以进一步的优化,比如直接读取绘图比例等。风一贯奉行“选择”效率优于“填写”的人机工程。
对话框文件名请存成TITLE.DCL,放在搜索路径里。

  1. (defun c:scfg(/ kind list0 list1 DLG_ID result sign_name)
  2.   (setq kind (vl-registry-read "HKEY_CURRENT_USER\\Software\\Freebird" "Role"))
  3.   (setq sign_name (vl-registry-read "HKEY_CURRENT_USER\\Software\\Freebird" "Name"))
  4.   (setq list0 '("设计" "校对" "审核" "工艺" "标准化" "批准"))
  5.   (setq list1 '("AUTHOR" "CHECKER" "AUDITING" "PROCESS" "STANDARDIZATION" "APPROVER"))
  6.   (if (not kind)(setq kind "AUTHOR"))
  7.   (if (or (not sign_name)(= sign_name ""))(setq sign_name "-"))
  8.   (setq DLG_ID (load_dialog "title.dcl"))
  9.   (new_dialog "signconfig" DLG_ID)
  10.   (start_list "item")
  11.   (mapcar 'add_list list0)
  12.   (end_list)
  13.   (set_tile "name" sign_name)
  14.   (set_tile "item" (itoa (vl-position kind list1)))
  15.   (mode_tile "name" 2)
  16.   (action_tile "item" "(setq kind (nth (atoi (get_tile \"item\")) list1))")
  17.   (action_tile "content" "(setq sign_name $value)")
  18.   (action_tile "accept" "(done_dialog 1)(setq result T)")
  19.   (action_tile "cancel" "(done_dialog 0)")
  20.   (start_dialog)
  21.   (unload_dialog DLG_ID)
  22.   (if result
  23.     (progn
  24.       (vl-registry-write "HKEY_CURRENT_USER\\Software\\Freebird" "Role" kind)
  25.       (vl-registry-write "HKEY_CURRENT_USER\\Software\\Freebird" "Name" sign_name)
  26.     )
  27.   )
  28. )
  29. (defun c:btl(/ scl tblock edata ename w1 w2 sitem)
  30.   (setvar "cmdecho" 0)
  31.   (setq scl (getvar "dimscale"))
  32.   (setq tblock (ssget "x" '((0 . "INSERT")(2 . "GBT10609.1"))))
  33.   (setq edata (entget (ssname tblock 0)))
  34.   (setq w1 (cdr (assoc 10 edata)))
  35.   (setq w2 (mapcar '+ w1 (list (* scl -180)(* scl 56) 0)))
  36.   (command ".zoom" "w" w1 w2)
  37.   (while (setq sitem (nentsel))
  38.     (if (and (setq edata (entget (setq ename (car sitem))))(= (cdr (assoc 0 edata)) "ATTRIB"))
  39.       (filltblock (cdr (assoc 2 edata)))
  40.       (alert "选错了!")
  41.     )
  42.   )
  43.   (command ".zoom" "p")
  44. )

  45. (defun filltblock(item / cdate DESCRIPTION MATERIAL HEAT_TREATMENT HARDNESS SURFACE_TREATMENT C_DESCRIPTION C_MATERIAL C_HEAT_TREATMENT C_SURFACE_TREATMENT llist fn DLG_ID str nextname nextdata result)
  46.   (setq cdate (rtos (getvar "cdate") 2 0))
  47.   (setq cdate (strcat (substr cdate 3 2) "-" (substr cdate 5 2) "-" (substr cdate 7 2)))
  48.   (setq DESCRIPTION '("轴" "板" "块" "轴套" "支架" "调整垫" "导向"))
  49.   (setq MATERIAL '("Q235A" "45" "20CrMnTi" "T10A" "40Cr" "38CrMoAl" "Cr12MoV" "20" "20Cr" "65Mn"))
  50.   (setq SCALE '("100:1" "50:1" "20:1" "10:1" "5:1" "4:1" "2:1" "1:1" "1:2" "1:4" "1:5" "1:10" "1:20" "1:50" "1:100"))
  51.   (setq PAGES '("1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12"))
  52.   (setq PAGE '("1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12"))
  53.   (setq llist (eval (read item)))
  54.   (setq DLG_ID (load_dialog "TITLE.DCL"))
  55.   (new_dialog item DLG_ID)
  56.   (start_list "item")
  57.   (mapcar 'add_list llist)
  58.   (end_list)
  59.   (setq str (cdr (assoc 1 edata)))
  60.   (set_tile "content" str)
  61.   (action_tile "item" "(do_item)")
  62.   (action_tile "fname" "(do_fname)")
  63.   (action_tile "scfg" "(do_scfg)")
  64.   (action_tile "content" "(setq str $value)")
  65.   (action_tile "accept" "(done_dialog 1)(setq result T)")
  66.   (action_tile "cancel" "(done_dialog 0)")
  67.   (mode_tile "content" 2)
  68.   (start_dialog)
  69.   (unload_dialog DLG_ID)
  70.   (if result
  71.     (progn
  72.       (entmod (subst (cons 1 str)(assoc 1 edata) edata))
  73.       (entupd ename)
  74.       (if (or (= item "AUTHOR")(= item "CHECKER")(= item "AUDITING")(= item "PROCESS")(= item "STANDARDIZATION")(= item "APPROVER"))
  75.         (progn
  76.           (setq nextname (entnext ename))
  77.           (setq nextdata (entget nextname))
  78.           (entmod (subst (cons 1 cdate)(assoc 1 nextdata) nextdata))
  79.           (entupd nextname)
  80.         )
  81.       )
  82.     )
  83.   )
  84. )

  85. (defun do_fname()
  86.   (if (= (get_tile "fname") "1")
  87.     (progn
  88.       (set_tile "content" (vl-string-subst "" ".dwg" (getvar "dwgname")))
  89.       (setq str (get_tile "content"))
  90.       (mode_tile "content" 1)
  91.     )
  92.     (progn
  93.       (mode_tile "content" 0)
  94.       (mode_tile "content" 2)
  95.     )
  96.   )
  97. )

  98. (defun do_item()
  99.   (setq str (nth (atoi (get_tile "item")) llist))
  100.   (set_tile "content" str)
  101.   (mode_tile "content" 2)
  102. )

  103. (defun do_scfg(/ sign name)
  104.   (if (= (get_tile "scfg") "1")
  105.     (progn
  106.       (if
  107.         (not
  108.           (and
  109.             (setq sign (vl-registry-read "HKEY_CURRENT_USER\\Software\\Freebird" "Role"))
  110.             (setq name (vl-registry-read "HKEY_CURRENT_USER\\Software\\Freebird" "Name"))
  111.           )
  112.         )
  113.         (progn
  114.           (c:scfg)
  115.           (setq sign (vl-registry-read "HKEY_CURRENT_USER\\Software\\Freebird" "Role"))
  116.           (setq name (vl-registry-read "HKEY_CURRENT_USER\\Software\\Freebird" "Name"))
  117.         )
  118.       )
  119.       (if (= sign item)
  120.         (progn
  121.           (set_tile "content" name)
  122.           (setq str (get_tile "content"))
  123.           (mode_tile "content" 1)
  124.         )
  125.       )
  126.     )
  127.     (progn
  128.       (mode_tile "content" 0)
  129.       (mode_tile "content" 2)
  130.     )
  131.   )
  132. )


  1. content:edit_box
  2. {
  3.   key="content";
  4.   allow_accept=true;
  5. }

  6. item:list_box
  7. {
  8.   key="item";
  9.   value=0;
  10.   allow_accept=true;
  11. }

  12. scfg:toggle
  13. {
  14.   label="按配置签名";
  15.   key="scfg";
  16. }

  17. CODE:dialog
  18. {
  19.   label="图号";
  20.   :toggle
  21.   {
  22.     label="按文件名";
  23.     key="fname";
  24.   }
  25.   content;
  26.   ok_cancel;
  27. }

  28. DESCRIPTION:dialog
  29. {
  30.   label="名称";
  31.   spacer;
  32.   item;
  33.   content;
  34.   ok_cancel;
  35. }

  36. MATERIAL:dialog
  37. {
  38.   label="材料";
  39.   spacer;
  40.   item;
  41.   content;
  42.   ok_cancel;
  43. }

  44. AUTHOR:dialog
  45. {
  46.   label="设计";
  47.   scfg;
  48.   content;
  49.   ok_cancel;
  50. }

  51. CHECKER:dialog
  52. {
  53.   label="校对";
  54.   scfg;
  55.   content;
  56.   ok_cancel;
  57. }

  58. APPROVER:dialog
  59. {
  60.   label="批准";
  61.   scfg;
  62.   content;
  63.   ok_cancel;
  64. }

  65. AUDITING:dialog
  66. {
  67.   label="审核";
  68.   scfg;
  69.   content;
  70.   ok_cancel;
  71. }

  72. PROCESS:dialog
  73. {
  74.   label="工艺";
  75.   scfg;
  76.   content;
  77.   ok_cancel;
  78. }

  79. STANDARDIZATION:dialog
  80. {
  81.   label="标准化";
  82.   scfg;
  83.   content;
  84.   ok_cancel;
  85. }

  86. WEIGHT:dialog
  87. {
  88.   label="重量";
  89.   content;
  90.   ok_cancel;
  91. }

  92. SCALE:dialog
  93. {
  94.   label="比例";
  95.   spacer;
  96.   item;
  97.   content;
  98.   ok_cancel;
  99. }

  100. PAGES:dialog
  101. {
  102.   label="页数";
  103.   item;
  104.   content;
  105.   ok_cancel;
  106. }

  107. PAGE:dialog
  108. {
  109.   label="页次";
  110.   item;
  111.   content;
  112.   ok_cancel;
  113. }

  114. signconfig:dialog
  115. {
  116.   label="签名配置";
  117.   item;
  118.   content;
  119.   ok_cancel;
  120. }

本帖子中包含更多资源

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

x

点评

直接下拉列表选择是否更加快捷一点?  发表于 2012-2-18 15:52

评分

参与人数 4明经币 +5 金钱 +45 收起 理由
lohas1118 + 20 赞一个!
langjs + 2
ZZXXQQ + 2 + 15 赞一个!风不仅仅是能说……
yjr111 + 1 + 10 风版辛苦了

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下

本帖被以下淘专辑推荐:

发表于 2019-6-22 18:08:34 | 显示全部楼层
langjs 发表于 2012-2-19 09:33
程序不错,从里边学习了一个东西并用在自己的程序上了。
提个小建议,要是双击标题栏弹出对话框把里边的属 ...

我怎么没在程序里面看到双击弹出对话框的命令?怎么做到的?谢谢。
发表于 2020-9-19 09:42:51 | 显示全部楼层
谢谢分享  下载备用
 楼主| 发表于 2012-2-18 16:01:37 | 显示全部楼层
回yjr111大侠,直接用下拉式列表框不是还要选其中的选项吗?这个和在图形中选一致,倒多了一次选下拉式列表框。每个选项单独调用对话框,直接更新了属性值。而用单一对话框则要填完所有的再确定。我曾经试过用单一对话框的情况,由于对话框中内容较多,则必须加提示文本显示出使用者已经确定过哪些选项。

点评

风版误会了,我的意思是在单一对话框中的编辑框是否使用列表框更快捷一点,毕竟一个单位的人名等基本是固定的,只是一个建议,真需要的话更改一下应该也是方便的  发表于 2012-2-18 17:41
 楼主| 发表于 2012-2-18 17:48:21 | 显示全部楼层
本帖最后由 cabinsummer 于 2012-2-18 17:52 编辑
cabinsummer 发表于 2012-2-18 16:01
回yjr111大侠,直接用下拉式列表框不是还要选其中的选项吗?这个和在图形中选一致,倒多了一次选下拉式列表 ...


大侠,我的程序里就有签名设置啊(命令SCFG),我不可能事先知道使用者的名字,所以这个要由使用者自己决定。只设置一次,保存在注册表里。另外,我在名称、材料、比例、页数等选项中也按习惯添加了列表,就是为了方便使用者。留个编辑框就是为了对付不常用的填写项,不能让使用者为了某个不常用的返回去改程序吧?常用选项可以由使用者在程序里设置,一望便知。

点评

呵呵,外行人说外行话,请勿见怪!  发表于 2012-2-18 17:59
 楼主| 发表于 2012-2-18 18:19:00 | 显示全部楼层
本帖最后由 cabinsummer 于 2012-2-18 20:54 编辑

其实是我的演示图片做的不好,突出了第一次使用“按配置签名”的功能。
如果设置完后,其它图纸再签名时只需勾上复选框即可完成签名。
当然使用者也可以把程序的默认值改为“按配置签名”,图号默认“按文件名”,页数可以直接读取当前目录下的dwg文件数(假定一个文件里只包含一张图),还可以按习惯更改很多其它的默认项。
发表于 2012-2-19 01:48:59 | 显示全部楼层
本程序的dwg测试文件在那里?
 楼主| 发表于 2012-2-19 03:29:08 来自手机 | 显示全部楼层
qjcpj 发表于 2012-2-19 01:48
本程序的dwg测试文件在那里?

下载附件解压缩
发表于 2012-2-19 09:33:23 | 显示全部楼层
程序不错,从里边学习了一个东西并用在自己的程序上了。
提个小建议,要是双击标题栏弹出对话框把里边的属性全部列出来修改是不是效果更好一些?像这样:

最好再有个备份——恢复功能,因为一批图纸的标题栏内容差异不算太大,恢复上一次的备份一般只要修改图号和名称两项就可以了,速度会更快

本帖子中包含更多资源

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

x

点评

如果你的标题栏只有图号和名称不一样的话,就定制只有这两个属性的标题栏,其余的全部做成块中文本。  发表于 2012-2-19 11:28
发表于 2012-2-19 10:24:28 | 显示全部楼层
先给风顶贴!我在小公司上班,用不上,急的时候连图框都不要就直接打出来了。
 楼主| 发表于 2012-2-19 11:02:06 | 显示全部楼层
本帖最后由 cabinsummer 于 2012-2-19 11:12 编辑
langjs 发表于 2012-2-19 09:33
程序不错,从里边学习了一个东西并用在自己的程序上了。
提个小建议,要是双击标题栏弹出对话框把里边的属 ...


CAD本身就有全部属性编辑。但是你没发现,如果十几二十个属性全部出现在一个对话框中,效率能出来吗?需要填写的只是极少一部分。为什么我用智能?就是要根据不同的属性弹出需要的列表框进行选择。“选择”效率远远优于“填写”

点评

增加个备份——恢复功能吧,这样一批图纸中的“审核”“校对”“日期”“批准”“工艺”“标准化”等直接恢复上一次备份的内容,免得一个一个选择录入了。我对属性块操作不熟悉不会弄  发表于 2012-2-19 11:25
我用天河用多了……  发表于 2012-2-19 11:17
发表于 2012-2-19 11:36:55 | 显示全部楼层
风版我恨死清华天河了,它把标题栏做成属性块,把内容存储到字典里边,结果改属性块内容不对,改字典内容也不对,两个都该还是不对,我始终找不到问题的实质,结果风版这么好的程序我用不起来。风版啥事有空帮我研究研究,本人愿意以150明经币相送。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-12-24 02:39 , Processed in 0.195711 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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