明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: cabinsummer

[【风之影】] [源码]明细表,逐步添加程序

  [复制链接]
发表于 2012-4-9 20:43 | 显示全部楼层
cabinsummer 发表于 2012-4-9 20:21
今天再来几个通用函数。说明一下,由于公司内部的块属性不足,所以我添加了扩展数据,所以本程序是属性块和 ...

  1. ;;;提取表中所有图元的某个DXF组码
  2. (defun entlist->dxflist (entlist dxf / dxflist)
  3.   (foreach x entlist (setq dxflist (append dxflist (list (entdxf x dxf)))))
  4.   dxflist
  5. )
  6. ;;修改如下,更精简,效率更高
  7. (defun entlist->dxflist (entlist dxf)
  8.   (mapcar '(lambda (x) (entdxf x dxf)) entlist)
  9.   )

点评

谢谢!  发表于 2012-4-9 20:58
发表于 2012-4-9 21:28 来自手机 | 显示全部楼层
好多子函数呀,如果能整理并介绍下用法,将会使很多人收益。。。。

点评

后期会有说明的。而且还会整理出整个程序的流程供大家参考。  发表于 2012-4-10 20:42
 楼主| 发表于 2012-4-10 20:11 | 显示全部楼层
今天贴出对话框文件label.dcl

  1. Label:dialog
  2. {
  3.   label="Developed by cabinsummer";
  4.   :row
  5.   {
  6.     :boxed_radio_column
  7.     {
  8.       label="TYPE";
  9.       set_reason=1;
  10.       :radio_button
  11.       {
  12.         label="Assembly";
  13.         key="ASM";
  14.       }
  15.       :radio_button
  16.       {
  17.         label="Incl Assy";
  18.         key="IAM";
  19.       }
  20.       :radio_button
  21.       {
  22.         label="Comn Assy";
  23.         key="CAM";
  24.       }
  25.       :radio_button
  26.       {
  27.         label="Detail";
  28.         key="DTL";
  29.       }
  30.       :radio_button
  31.       {
  32.         label="Incl Detail";
  33.         key="IDT";
  34.       }
  35.       :radio_button
  36.       {
  37.         label="Comn Detail";
  38.         key="CMN";
  39.       }
  40.       :radio_button
  41.       {
  42.         label="Annex";
  43.         key="ANX";
  44.       }
  45.       :radio_button
  46.       {
  47.         label="Standard";
  48.         key="STD";
  49.       }
  50.       :radio_button
  51.       {
  52.         label="Purchase";
  53.         key="PUR";
  54.       }
  55.     }
  56.     :boxed_column
  57.     {
  58.       label="Item";
  59.       :edit_box
  60.       {
  61.         key="COM";
  62.         label="Comau Code";
  63.         edit_width=25;
  64.         edit_limit=20;
  65.         allow_accept=true;
  66.       }
  67.       :edit_box
  68.       {
  69.         key="SPL";
  70.         label="Supplier";
  71.         edit_width=25;
  72.         edit_limit=15;
  73.         allow_accept=true;
  74.       }
  75.       :edit_box
  76.       {
  77.         key="DSC";
  78.         label="Description";
  79.         edit_width=25;
  80.         edit_limit=45;
  81.         allow_accept=true;
  82.       }
  83.       :edit_box
  84.       {
  85.         key="CMC";
  86.         label="Commercial Code";
  87.         edit_width=25;
  88.         edit_limit=20;
  89.         allow_accept=true;
  90.       }
  91.       :edit_box
  92.       {
  93.         key="SPC";
  94.         label="Specifications";
  95.         edit_width=25;
  96.         edit_limit=45;
  97.         allow_accept=true;
  98.       }
  99.       :edit_box
  100.       {
  101.         key="AMT";
  102.         label="Amount";
  103.         edit_width=25;
  104.         edit_limit=4;
  105.         allow_accept=true;
  106.       }
  107.       :edit_box
  108.       {
  109.         key="RMK";
  110.         label="Remark";
  111.         edit_width=25;
  112.         edit_limit=45;
  113.         allow_accept=true;
  114.       }
  115.       spacer;
  116.       :row
  117.       {
  118.         :button
  119.         {
  120.           key="CFG";
  121.           label="Config";
  122.           width=8;
  123.         }
  124.         :edit_box
  125.         {
  126.           key="PAR";
  127.           edit_width=25;
  128.           edit_limit=45;
  129.           allow_accept=true;
  130.         }
  131.       }
  132.     }
  133.     :list_box
  134.     {
  135.       label="ITEM_LIB";
  136.       key="LIB";
  137.       width=30;
  138.     }
  139.   }
  140.   :row
  141.   {
  142.     :toggle
  143.     {
  144.       key="CON";
  145.       label="Continue";
  146.       width="10";
  147.     }
  148.     :button
  149.     {
  150.       key="SEL";
  151.       label="Select <";
  152.       width=8;
  153.     }
  154.     :radio_row
  155.     {
  156.       key="SPR_TYP";
  157.       :radio_button
  158.       {
  159.         label="N";
  160.         key="N";
  161.       }
  162.       :radio_button
  163.       {
  164.         label="R";
  165.         key="R";
  166.       }
  167.       :radio_button
  168.       {
  169.         label="C";
  170.         key="C";
  171.       }
  172.       :radio_button
  173.       {
  174.         label="U";
  175.         key="U";
  176.       }
  177.       :radio_button
  178.       {
  179.         label="P";
  180.         key="P";
  181.       }
  182.     }
  183.     ok_cancel;
  184.   }
  185. }

 楼主| 发表于 2012-4-11 18:44 | 显示全部楼层
先把对话框驱动起来,填编辑框确认后生成标号

  1. (defun C:BLN ()
  2.   (defun labelerr (msg)
  3.     (setq *error* syserr syserr nil)
  4.     (setvar "OSMODE" os)
  5.     (setvar "ORTHOMODE" ot)
  6.     (setvar "CLAYER" cl)
  7.     (setq con "0")
  8.     (setvar "DIMLDRBLK" ".")
  9.     (princ)
  10.   )
  11.   (if (not (tblsearch "APPID" "WZ_APP"))(regapp "WZ_APP"))
  12.   (setvar "CMDECHO" 0)
  13.   (setq os (getvar "OSMODE"))
  14.   (setq ot (getvar "ORTHOMODE"))
  15.   (setq cl (getvar "CLAYER"))
  16.   (setvar "DIMLDRBLK" "_dotsmall")
  17.   (setvar "OSMODE" 0)
  18.   (setvar "ORTHOMODE" 0)
  19.   (setvar "CLAYER" "DIM")
  20.   (setq syserr *error*)
  21.   (setq *error* labelerr)
  22.   (setq scl (getvar "dimscale"))
  23.   (setq p0 (getpoint "Please Select Leader Start Point:\n"))
  24.   (setq p1 (getpoint p0 "Please Select Label Position:\n"))
  25.   (do_prog)
  26.   (setvar "OSMODE" os)
  27.   (setvar "ORTHOMODE" ot)
  28.   (setvar "CLAYER" cl)
  29.   (setvar "DIMLDRBLK" ".")
  30.   (princ)
  31. )
  32. (defun do_prog()
  33.   (setq DLG_ID (load_dialog (findfile "WZ_LABEL.DCL")))
  34.   (do_dialog)
  35.   (unload_dialog DLG_ID)
  36.   (if (= TAG 1)
  37.     (progn
  38.       (cond
  39.         ((or (= typ "ASM")(= typ "IAM")(= typ "CAM"))
  40.          ((eval (read (strcat "INS_IAY_0-" ID_SIDE))) p1 com dsc spc amt)
  41.         )
  42.         ((or (= typ "IDT")(= typ "CMN"))
  43.          ((eval (read (strcat "INS_IDT_0-" ID_SIDE))) p1 com amt)
  44.         )
  45.         ((or (= typ "DTL")(= typ "ANX"))
  46.          ((eval (read (strcat "INS_DTL_0-" ID_SIDE))) p1 com dsc amt spr)
  47.         )
  48.         ((= typ "STD")
  49.          ((eval (read (strcat "INS_STD_0-" ID_SIDE))) p1 com dsc (strcat cmc "  " (vl-string-right-trim " " spc)) amt spr)
  50.         )
  51.         ((= typ "PUR")
  52.          ((eval (read (strcat "INS_STD_0-" ID_SIDE))) p1 cmc dsc spl amt spr)
  53.         )
  54.       )
  55.       (label)
  56.       (setq TAG nil)
  57.     )
  58.   )
  59. )
  60. (defun do_dialog ()
  61.   (if (new_dialog "WZ_Label" DLG_ID)
  62.     (progn
  63.       (foreach x '("ASM" "IAM" "CAM" "DTL" "IDT" "CMN" "ANX" "STD" "PUR")(action_tile x "(setq typ $key)(do_list)"))
  64.       (foreach x '("SPL" "CMC" "COM" "DSC" "SPC" "AMT" "RMK" "PAR")(action_tile x "(set (read $key) $value)"))
  65.       (action_tile "accept" "(done_dialog 1)(setq TAG 1)")
  66.       (action_tile "cancel" "(done_dialog 0)")
  67.       (start_dialog)
  68.     )
  69.     (princ "\nCan't display dialog.")
  70.   )
  71. )
  72. (defun label (/ blk)
  73.   (ADD_XDATA (entlast) "WZ_APP" "TYP")
  74.   (ADD_XDATA (entlast) "WZ_APP" typ)
  75.   (ADD_XDATA (entlast) "WZ_APP" "RMK")
  76.   (ADD_XDATA (entlast) "WZ_APP" rmk)
  77.   (setq blk (entlast))
  78.   (BOM_LEADER p0 p1 blk)
  79.   (vlax-put (vlax-ename->vla-object (entlast)) "Annotation" (vlax-ename->vla-object blk))
  80.   (vla-update (vlax-ename->vla-object (entlast)))
  81.   (vla-update (vlax-ename->vla-object blk))
  82. )
  83. (defun do_list ()
  84.   (mtyp typ)
  85.   (if (= typ "DTL")
  86.     (progn
  87.       (if (max_code)(setq com (max_code))(setq com "001"))
  88.       (set_tile "COM" com)
  89.       (mode_tile "COM" 2)
  90.     )
  91.   )
  92.   (foreach x '(spl_list cmc_list com_list dsc_list spc_list rmk_list)(set x nil))
  93.   (foreach x (eval (read (strcat typ "_list"))) (set (car x) (cdr x)))
  94.   (start_list "LIB")
  95.   (cond
  96.     ((= typ "STD")(mapcar 'add_list cmc_list)(mode_tile "CMC" 2))
  97.     ((= typ "PUR")(mapcar 'add_list spl_list)(mode_tile "SPL" 2))
  98.     (T (mapcar 'add_list com_list)(mode_tile "COM" 2))
  99.   )
  100.   (end_list)
  101. )
  102. (defun mtyp (typ)
  103.   (set_tile "AMT" "1")(setq amt "1" spr "N")
  104.   (foreach x '("COM" "SPL" "DSC" "CMC" "SPC" "RMK")(set (read x) "")(set_tile x ""))
  105.   (cond
  106.     ((= typ "ASM")(mkey 0 1 0 1 1 1 1 1))
  107.     ((= typ "IAM")(mkey 0 1 0 1 1 1 1 1))
  108.     ((= typ "CAM")(mkey 0 1 0 1 0 0 1 0))
  109.     ((= typ "DTL")(mkey 0 1 0 1 1 1 1 1))
  110.     ((= typ "IDT")(mkey 0 1 1 1 1 1 1 1))
  111.     ((= typ "CMN")(mkey 0 1 1 1 1 0 1 0))
  112.     ((= typ "ANX")(mkey 0 1 1 0 1 0 1 1))
  113.     ((= typ "STD")(mkey 0 1 0 0 0 1 0 0))
  114.     ((= typ "PUR")(mkey 1 0 0 0 1 0 0 0))
  115.   )
  116. )
  117. (defun mkey (c1 c2 c3 c4 c5 c6 c7 c8)
  118.   (mode_tile "COM" c1)(mode_tile "SPL" c2)(mode_tile "DSC" c3)(mode_tile "CMC" c4)
  119.   (mode_tile "SPC" c5)(mode_tile "RMK" c6)(mode_tile "PAR" c7)(mode_tile "SEL" c8)
  120. )

发表于 2012-4-12 00:43 | 显示全部楼层
风版大作面世了,跟风版和G版学习了好多,动态粗糙度

点评

程序还没有全部贴出,还打算就LSP和EXCEL交互的问题多向大侠请教  发表于 2012-4-12 07:22
发表于 2012-4-12 08:25 | 显示全部楼层
支持楼主提供好工具!
发表于 2012-4-12 09:30 | 显示全部楼层

精神可嘉!
发表于 2012-4-12 10:16 | 显示全部楼层
楼主真是公司的宝贝啊。
不知有关此明细表的程序最终需要实现什么样的功能?
发表于 2012-4-12 12:41 | 显示全部楼层
有点深奥 没有看懂
发表于 2012-4-12 13:00 | 显示全部楼层
本人也在做这方面的程序,仅用属性块不是很方便,在学扩展数据,这块是我的弱项
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-27 01:04 , Processed in 0.389051 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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