明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: szmaicy

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

    [复制链接]
发表于 2011-1-6 12:07:46 | 显示全部楼层
真是好东西
发表于 2011-1-7 16:07:14 | 显示全部楼层
本帖最后由 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

使用道具 举报

 楼主| 发表于 2011-1-7 16:14:21 | 显示全部楼层
回复 redcat 的帖子

灰常好
发表于 2011-1-7 16:37:55 | 显示全部楼层
我下了,可是不知道如何用?如何加载?望详细些,谢谢!
 楼主| 发表于 2011-1-7 16:41:59 | 显示全部楼层
本帖最后由 szmaicy 于 2011-1-7 16:46 编辑

回复 szmaicy 的帖子

;修改版,向飞诗学习
(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 "") tt order_lst
           )
           (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-7 17:06:34 | 显示全部楼层
顶麦工,不错
发表于 2011-1-8 14:44:13 | 显示全部楼层
这个很好用,和信的一样,简化迷你的,很强呀,可以自己做面板了
发表于 2011-1-8 22:29:48 | 显示全部楼层
这个.....友情顶帖
发表于 2011-1-9 08:16:43 | 显示全部楼层
谢谢分享!好好学习
发表于 2011-1-10 08:55:57 | 显示全部楼层
本帖最后由 qcw911 于 2011-1-10 08:58 编辑

自定义的lisp也好用
        (list "画    梁" "hf")
用ap添加了 hf的lisp
(defun c:hf()
      ..........
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-12-24 20:41 , Processed in 0.201056 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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