明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 64621|回复: 153

[资源] 简单的自定面板函数

    [复制链接]
发表于 2011-1-3 22:54 | 显示全部楼层 |阅读模式
本帖最后由 szmaicy 于 2011-6-10 11:05 编辑


;修改版,向飞诗学习
(defun c:xxx ()
  (mai_make_panel
    (list
      (list "梁"
            (list "画    梁" "circle") ;(list  按钮标签  运行的命令)
            (list "单线变梁" "mini_line_to_beam")
            (list "筏板梁倒角" "mini_foundation_beam")
            (list "修补梁柱" "mini_fix_beam")
            (list "修补双线" "mini_fix_dline")
            (list "框选修补线" "mini_fix_line")
      ) ;_ 结束list
      (list "柱"
            (list " + 型柱" "mini_c_column")
            (list " L 型柱" "mini_l_column")
            (list " T 型柱" "mini_t_column")
            (list " ○ 型柱" "mini_O_column")
            (list " □ 型柱" "mini_r_column")
            (list "轴线布柱" "mini_axis_column")
            (list "填 充 柱" "mini_fill_column")
            (list "墙体填充" "mini_fill_wall")
            (list "转PKPM GS柱" "mini_pline_to_beam")
            (list "多线变柱" "mini_pline_to_column")
      ) ;_ 结束list
    ) ;_ 结束list
  ) ;_ 结束mai_mak_panel
  (princ)
)


(defun mai_make_panel ( menulist / n num_nobut num_button nn nnn menuname val_lst add_dclrow tt order_lst in num_image)
  (defun add_dclrow ( dstr / ) (if dstr (setq val_lst (cons dstr val_lst))))
  (setq menuname (strcat (vl-filename-mktemp) "temp_pannel.dcl"))
  (add_dclrow "curbutton:button{width=10;vertical_margin=none;vertical_margin=none;}")
  (add_dclrow "curimage:image{width=10;height=0.2;vertical_margin=none;vertical_margin=none;}")
  (add_dclrow "curpanel:dialog{label=\"迷你自定义面板\";alignment=centered;vertical_margin=none;horizontal_margin=none;")
  (add_dclrow ":row{")
  (setq len (apply 'max (mapcar 'length menulist))
        order_lst (apply 'append (mapcar 'cdr menulist))
        num_button 0
        num_nobut 0
        in 0
        num_image 0
  )
  (foreach nn menulist
        (setq in 0)
        (add_dclrow (strcat " : boxed_column{label=\"" (car nn) "\";vertical_margin=none; horizontal_margin=none;"))
        (foreach nnn (cdr nn)
           (setq num_button (1+ num_button)
                 in (1+ in)
                 num_image (1+ num_image)
                 tt (car nnn)
                 tt (if tt tt "")
           )
           (add_dclrow (strcat ":curbutton{label=\"" tt "\";key=\"but" (itoa num_button) "\";}"))
           (if (= 4 in)
               (progn (add_dclrow (strcat ":curimage{key=\"ima" (itoa num_image) "\";color=18;}"))
                      (setq in 0)
               )
           )
        )
        (repeat (- len (length nn))
           (setq num_nobut (1+ num_nobut)
                 in (1+ in)
                 num_image (1+ num_image)
           )
           (add_dclrow (strcat " : curbutton{key=\"butno" (itoa num_nobut) "\";color=-2;}"))
           (if (= 4 in)
               (progn (add_dclrow (strcat ":curimage{key=\"ima" (itoa num_image) "\";}"))
                      (setq in 0)
               )
           )
        )
        (add_dclrow "spacer;}")
  )
   (add_dclrow "}:button{label=\"关闭\";key=\"cancel\";is_cancel=true;width=10;fixed_width=true;alignment=centered;}}")
   (vl-file-delete menuname)
   (setq nn (open menuname "w"))
   (foreach n (reverse val_lst) (write-line n nn))
   (close nn)
   (setq nnn (load_dialog menuname))
   (if (not (new_dialog "curpanel" nnn)) (exit))
   (setq n 0)
   (repeat num_nobut (mode_tile (strcat "butno" (itoa num_nobut)) 1) (setq num_nobut (1- num_nobut)))
  (foreach nn menulist
        (foreach nnn (cdr nn)
           (setq n (1+ n)
                 tt (car nnn)
                 tt (if tt tt "")
           )
           (if (= tt "")
               (mode_tile (strcat "but" (itoa n)) 1)
               (action_tile (strcat "but" (itoa n)) (strcat "\(done_dialog " (itoa n) "\)"))
           )
        )
  )
   (setq nn (start_dialog))
   (unload_dialog nnn)
   (vl-file-delete menuname)
  (if (> nn 0)
       (progn (setq tt (cadr (nth (1- nn) order_lst)))
              (princ "\n")
              (if (= (eval (read (strcat "(type c:" tt ")"))) 'SUBR)
                  (eval (read (strcat "(c:" tt ")")))
                  (vl-cmdf tt)
              )
       )
   )
)

本帖子中包含更多资源

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

x

点评

酷毙  发表于 2011-1-4 11:53

评分

参与人数 13明经币 +8 金钱 +240 收起 理由
kucha007 + 1
pzweng + 3 很给力!
ucuc2003 + 1
zctao1966 + 1 很给力!
chlh_jd + 1 + 15
qjchen + 1 + 30 赞一个!
l64631778 + 20 老迈好流b啊
仲文玉 + 30 支持老迈!!
xyz2009xyz + 20 呵呵,借用了,感谢一下!
redcat + 20 原创内容

查看全部评分

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

本帖被以下淘专辑推荐:

发表于 2011-1-7 16:07 | 显示全部楼层
本帖最后由 redcat 于 2011-3-7 15:24 编辑

在老迈的基础上修改了一下:主要是文件生成和删除2个函数(请麦工不要生气,呵呵^_^)
  1. ;;用户可自己修改界面
  2. (defun c:xxx ()
  3.   (mai_make_panel
  4.     (list
  5.       (list "梁"
  6.       (list "画    梁" "circle") ;(list  按钮标签  运行的命令)
  7.       (list "单线变梁" "mini_line_to_beam")
  8.       (list "筏板梁倒角" "mini_foundation_beam")
  9.       (list "修补梁柱" "mini_fix_beam")
  10.       (list "修补双线" "mini_fix_dline")
  11.       (list "框选修补线" "mini_fix_line")
  12.       ) ;_ 结束list
  13.       (list "柱"
  14.       (list " + 型柱" "mini_c_column")
  15.       (list " L 型柱" "mini_l_column")
  16.       (list " T 型柱" "mini_t_column")
  17.       (list " ○ 型柱" "mini_O_column")
  18.       (list " □ 型柱" "mini_r_column")
  19.       (list "轴线布柱" "mini_axis_column")
  20.       (list "填 充 柱" "mini_fill_column")
  21.       (list "墙体填充" "mini_fill_wall")
  22.       (list "转PKPM GS柱" "mini_pline_to_beam")
  23.       (list "多线变柱" "mini_pline_to_column")
  24.       ) ;_ 结束list
  25.     ) ;_ 结束list
  26.   ) ;_ 结束mai_make_panel
  27.   (princ)
  28. ) ;_ 结束defun

  29. (defun mai_make_panel (menulist / m n nn nnn menuname val_lst tt order_lst)

  30.   (defun add_dclrow (dstr)
  31.     (if  dstr
  32.       (setq val_lst (cons dstr val_lst))
  33.     ) ;_ 结束if
  34.   ) ;_ 结束defun

  35.   (add_dclrow "curbutton : button{width=10;vertical_margin=none;vertical_margin=none;}")
  36.   (add_dclrow
  37.     "curpanel : dialog{label=\"迷你工具箱\";alignment=centered;vertical_margin=none;horizontal_margin=none;"
  38.   ) ;_ 结束add_dclrow
  39.   (add_dclrow ":row{")
  40.   (setq  len    (apply 'max (mapcar 'length menulist))
  41.   order_lst (apply 'append (mapcar 'cdr menulist))
  42.   n    0
  43.   m    0
  44.   ) ;_ 结束setq
  45.   (foreach nn menulist
  46.     (add_dclrow
  47.       (strcat " : boxed_column{label=\"" (car nn) "\";vertical_margin=none; horizontal_margin=none;")
  48.     ) ;添加列表框
  49.     (foreach nnn (cdr nn)
  50.       (setq n  (1+ n)
  51.       tt (car nnn)
  52.       tt (if tt
  53.      tt
  54.      ""
  55.          ) ;_ 结束if
  56.       ) ;_ 结束setq
  57.       (add_dclrow (strcat " : curbutton{key=\"but" (vl-princ-to-string n) "\";label=\"" tt "\";}"))
  58.     ) ;添加列表框中的按钮
  59.     (repeat (- len (length nn))
  60.       (setq m (1+ m))
  61.       (add_dclrow (strcat " : curbutton{key=\"butno" (vl-princ-to-string m) "\";}"))
  62.     ) ;按列补齐列表框中的按钮
  63.     (add_dclrow "}")
  64.   ) ;_ 结束foreach

  65.   (add_dclrow
  66.     "}:button{label=\"关闭\";key=\"cancel\";is_cancel=true;width=10;fixed_width=true;alignment=centered;}}"
  67.   )


  68.   (setq menuname (vl-filename-mktemp "temp_pannel.dcl"))
  69.   (setq nn (open menuname "w"))
  70.   (foreach n (reverse val_lst) (write-line n nn))
  71.   (close nn)
  72.   (setq nnn (load_dialog menuname))
  73.   (vl-file-delete menuname)

  74.   (if (not (new_dialog "curpanel" nnn))
  75.     (exit)
  76.   ) ;_ 结束if
  77.   (setq n 0)
  78.   (repeat m (mode_tile (strcat "butno" (vl-princ-to-string m)) 1) (setq m (1- m))) ;禁用补齐列表框中的按钮
  79.   (foreach nn menulist
  80.     (foreach nnn (cdr nn)
  81.       (setq n  (1+ n)
  82.       tt (car nnn) ;tt order_lst
  83.       tt (if tt
  84.      tt
  85.      ""
  86.          ) ;_ 结束if
  87.       ) ;_ 结束setq
  88.       (if (= tt "")
  89.   (mode_tile (strcat "but" (vl-princ-to-string n)) 1)
  90.   (action_tile
  91.     (strcat "but" (vl-princ-to-string n))
  92.     (strcat "(done_dialog " (vl-princ-to-string n) ")")
  93.   ) ;_ 结束action_tile
  94.       ) ;_ 结束if
  95.     ) ;_ 结束foreach
  96.   ) ;_ 结束foreach

  97.   (setq nn (start_dialog))
  98.   (unload_dialog nnn)


  99.   (if (> nn 0)
  100.     (progn (setq tt (cadr (nth (1- nn) order_lst))) ;取点击按钮的值(这个很关键)
  101.      (if (= (eval (read (strcat "(type c:" tt ")"))) 'SUBR)
  102.        (progn (princ "\n")
  103.         (eval (read (strcat "(c:" tt ")")))
  104.        ) ;_ 结束progn
  105.        (progn
  106.          (princ "\n")
  107.          (vla-SendCommand (vla-get-ActiveDocument(vlax-get-acad-object)) (strcat tt "\n"))
  108.        ) ;_ 结束progn
  109.      ) ;_ 结束if
  110.     ) ;_ 结束progn
  111.   ) ;_ 结束if
  112. ) ;_ 结束defun

回复 支持 1 反对 0

使用道具 举报

发表于 2015-10-9 09:01 | 显示全部楼层
把结束部分的代码修改一下,以支持直接写lisp代码。
原代码:
              (if (= (eval (read (strcat "(type c:" tt ")"))) 'SUBR)
                  (eval (read (strcat "(c:" tt ")")))
                  (vl-cmdf tt )
              )
修改后:
      (if (= (substr tt 1 1)  "(" )
           (eval (read tt))
           (vl-cmdf tt )
       )

改后支持定义表:

    (list
      (list "文本处理"
          ;;(list  按钮标签  运行的命令 ),命令类型分lisp代码和其它命令两种
            (list "单行合并为单行" "(TextsCombine)" )
            (list "单行合并为多行" "(***)")
            (list "单行转多行" "(***)" )
                                    (list "炸开文本" "***")
      )
      (list "数字处理"
            (list "递增复制" "(c:***)")
      )
    )
回复 支持 1 反对 0

使用道具 举报

发表于 2020-1-19 12:55 | 显示全部楼层
xj6019 发表于 2019-12-4 08:18
界面太小了点  字体不够大  谁提示一下   把界面和字体放大一点 改哪里的代码啊?

(add_dclrow "curbutton:button{width=8;vertical_margin=none;vertical_margin=none;}")

8改大些
发表于 2011-1-4 11:53 | 显示全部楼层
好东西啊 这样可以自己定义按钮了
发表于 2011-1-4 12:10 | 显示全部楼层
和信的有一拼,不过信的button带驱动
发表于 2011-1-4 12:10 | 显示全部楼层
好东西,感谢楼主分享!
发表于 2011-1-4 12:53 | 显示全部楼层
谢谢分享,进来学习。
发表于 2011-1-5 09:04 | 显示全部楼层
多谢提供模板。
发表于 2011-1-5 11:38 | 显示全部楼层
繁重的活路中解放出来了
发表于 2011-1-5 20:58 | 显示全部楼层
真牛!
发表于 2011-1-6 09:05 | 显示全部楼层
首先,非常感谢楼主提供的程序,非常好用!
可是有个小问题,在面板中点击“确认”时,会执行“画梁”命令?不知为何,请不吝赐教,谢谢
发表于 2011-1-6 10:30 | 显示全部楼层
把ok让老迈去掉
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-4 06:39 , Processed in 0.218206 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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