墙脚哥 发表于 2016-8-7 18:18:24

请高手完善超级文字编辑的图层功能

在论坛上找到一个超级文字编辑的源码,本人非常喜欢,在此对作者无私的分享表示感谢!但使用过程发现插件的图层功能无法使用(比如原文字图层为0层,用超级文字编辑修改为图层2或者其他图层,但确认退出后还是0层),估计源码不全或者是存在哪些错漏,希望各位高手能出手相助,把源码完善。在此表示感谢!





dabingrain 发表于 2016-8-7 18:18:25

看看是否满意

dabingrain 发表于 2016-8-8 10:43:19

;;; 自定义UnDo范围
;;(princ "\n修改文字已加载,启动命令ed.")
(defun EF:UNDOBegin ()
(setvar "CMDECHO" 0)
(command "_.undo" "_group")
(princ)
)
;;; end defun
(defun EF:UNDOEnd ()
(setvar "CMDECHO" 0)
(command "_.undo" "_end")
(princ)
)
;;; end defun
(defun C:ed (/ dcl_id1 oba ob1 obn obt ptn otxt txt sty styno lay cyn layno
                                                        hig wid ang col cnu etlst style layer
                                                )
(graphscr)
(EF:UNDOBegin)
(setq olderr *error*)
(defun *error* (msg)
    (princ "\n*ERROR*...")
    (princ msg)
    (princ)
)                                     ; end defun error.
(defun set_color (conm / costr)
    (defun map_color (ckey mno)
      (start_image ckey)
      (fill_image 0 0 (DimX_tile ckey) (DimY_tile ckey) mno)
      (end_image)
    )                                     ; end defun
    (cond
      ((= 0 conm)
                                (setq costr "Byblock")
      )
      ((= 1 conm)
                                (setq costr "Red")
      )
      ((= 2 conm)
                                (setq costr "Yellow")
      )
      ((= 3 conm)
                                (setq costr "Green")
      )
      ((= 4 conm)
                                (setq costr "Cyan")
      )
      ((= 5 conm)
                                (setq costr "Bule")
      )
      ((= 6 conm)
                                (setq costr "Magenta")
      )
      ((= 7 conm)
                                (setq costr "color")
      )
      ((= 256 conm)
                                (setq costr "Bylayer")
      )
      (t
                                (setq costr "")
      )
    )                                     ; end cond
    (cond
      ((= 0 col)
                                (map_color "col" 7)
      )
      ((= 256 col)
                                (map_color "col" (cdr (assoc 62 (tblsearch "layer" lay))))
      )
      (t
                                (map_color "col" conm)
      )
    )                                     ; end cond
    (if (= 256 conm)
      (set_tile "cnu" (strcat "<" (itoa (cdr (assoc 62 (tblsearch "layer"
                                                                                                                                                                                                                               lay
                                                                                                                                                                                                                       )
                                                                                                                                                                               )
                                                                                                                                                                )
                                                                                                                                        ) ">" costr
                                                                                        )
      )
      (set_tile "cnu" (strcat "<" (itoa conm) ">" costr))
    )                                     ; end if
               
               
)                                     ; end set_color
(defun map_keylist (key keylst)      ; set popuplist
    (start_list key)
    (mapcar
      'add_list
      keylst
    )
    (end_list)
)                                     ; end map
(defun layer_get_all (/ lay layer layname)
    (setq layer nil                     ; All layer
                        lay (tblnext "LAYER" T)
    )
    (while (/= lay nil)
      (setq layname (cdr (assoc 2 lay))
                                layer (cons layname layer)
      )
      (setq lay (tblnext "LAYER"))
    )
    (setq layer (ACAD_Strlsort layer))
    layer                             ; all layer.
               
               
)                                     ; end defun
(defun style_get_all (/ sty style sty_list)
    (setq sty_list nil
                        sty (tblnext "style" t)
    )
    (setq style (cdr (assoc 2 sty)))
    (while style
      (if (/= "" style)
                                (setq sty_list (append
                                                                                               sty_list
                                                                                               (list style)
                                                                                       )
                                )
      )
      (setq sty (tblnext "style"))
      (setq style (cdr (assoc 2 sty)))
    )                                     ; end while]
    (setq sty_list (ACAD_Strlsort sty_list))
    sty_list
)                                     ; end defun
(defun set_error (str)
    (set_tile "error" str)
)                                     ; end defun
(defun sub_mtext (color entlist / ei newlist)
    (setq ei 0
                        newlist nil
    )
    (while (< ei (length entlist))
      (setq newlist (cons (nth ei entlist) newlist))
      (if (= 8 (car (nth ei entlist)))
                                (setq newlist (cons (cons 62 color) newlist))
      )                                     ; end if
      (setq ei (1+ ei))
    )                                     ; end while
    (reverse newlist)
)                                     ; end defun
(setq ob1 (entsel "\n选择要修改的任何文本:"))
(SETQ obn (car ob1)
                ptn (car (cdr ob1))
)
(setq obt (car (nentselp ptn)))
(setq oba (cdr (assoc 0 (entget obt))))
(if (or
                                (= oba "TEXT")
                                (= oba "MTEXT")
                                (= oba "ATTRIB")
      )
    (setq otxt (cdr (assoc 1 (entget obt))))
)                                     ; end if
(if (= oba "ATTDEF")
    (setq otxt (cdr (assoc 2 (entget obt))))
)                                     ; end if
(if otxt
    (progn
      (setq sty (cdr (assoc 7 (entget obt)))
                                lay (cdr (assoc 8 (entget obn)))
                                hig (cdr (assoc 40 (entget obt)))
                                wid (cdr (assoc 41 (entget obt)))
                                ang (cdr (assoc 50 (entget obt)))
      )                                     ; end setq
      (if (or
                                                (= oba "TEXT")
                                                (= oba "MTEXT")
                                                (= oba "ATTRIB")
                                        )
                                (setq col (cdr (assoc 62 (entget obt))))
                                (setq col (cdr (assoc 62 (entget obn))))
      )                                     ; end if
      (setq ang (* 180 (/ ang pi)))
      (if (null col)
                                (progn
                                        (setq cyn 0)
                                        (setq col 256)
                                )
                                (setq cyn 1)
      )
      (setq style (style_get_all))
      (setq layer (layer_get_all))
      (setq styno (- (length style) (length (member sty style))))
      (setq layno (- (length layer) (length (member lay layer))))
                       
                        (setq dclname
                                (cond
                                        ((setq tempname (vl-filename-mktemp "tt-dcl-tmp.dcl") filen (open tempname "w"))
                                                (foreach stream
                                                        '(
                                                               "\n"
                                                               "文字修改:dialog {\n"
                                                               "        label = \"文字编辑...\";\n"
                                                               "        : boxed_radio_column {\n"
                                                               "                label = \"超级文字编辑...\";\n"
                                                               "                : edit_box {\n"
                                                               "                        label= \"文字:\";\n"
                                                               "                        key = \"text\";\n"
                                                               "                        edit_width = 50;\n"
                                                               
                                                               "                }\n"
                                                               "                : row {\n"
                                                               "                        : popup_list {\n"
                                                               "                                label=\"样式\";\n"
                                                               "                                key = \"sty\";\n"
                                                               "                                edit_width = 13;\n"
                                                               "                                fixed_width = true;\n"
                                                               "                        }\n"
                                                               "                        : edit_box {\n"
                                                               "                                label=\"高度\";\n"
                                                               "                                key = \"hig\";\n"
                                                               "                                edit_width = 7;\n"
                                                               "                                fixed_width = true;\n"
                                                               "                        }\n"
                                                               "                        : edit_box {\n"
                                                               "                                label=\"宽度\";\n"
                                                               "                                key = \"wid\";\n"
                                                               "                                edit_width = 7;\n"
                                                               "                                fixed_width = true;\n"
                                                               "                        }\n"
                                                               "                }\n"
                                                               "                : row {\n"
                                                               "                        : popup_list {\n"
                                                               "                                label=\"图层\";\n"
                                                               "                                key = \"lay\";\n"
                                                               "                                edit_width = 13;\n"
                                                               "                                fixed_width = true;\n"
                                                               "                        }\n"
                                                               "                        : image_button {\n"
                                                               "                                key = \"col\";\n"
                                                               "                                width= 4;\n"
                                                               "                                aspect_ratio = 0.75;\n"
                                                               "                                fixed_width = true;\n"
                                                               "                        }\n"
                                                               "                        : text_part {\n"
                                                               "                                key = \"cnu\";\n"
                                                               "                                width= 12;\n"
                                                               "                                fixed_width = true;\n"
                                                               "                        }\n"
                                                               "                        : edit_box {\n"
                                                               "                                label=\"角度\";\n"
                                                               "                                key = \"ang\";\n"
                                                               "                                edit_width = 7;\n"
                                                               "                                fixed_width = true;\n"
                                                               "                        }\n"
                                                               "                }\n"
                                                               "                spacer_1;\n"
                                                               "        }\n"
                                                               "        : row {\n"
                                                               "                alignment = right;\n"
                                                               "                : spacer {\n"
                                                               "                        width = 1;\n"
                                                               "                        fixed_width = true;\n"
                                                               "                        }\n"
                                                               "                ok_cancel;\n"
                                                               "        }\n"
                                                               "        errtile;\n"
                                                               "}\n"
                                                       )
                                                        (princ stream filen)
                                                )
                                                (close filen)
                                                tempname
                                        )))
                       
      (setq dcl_id1 (load_dialog dclname))
      (if (not (new_dialog "文字修改" dcl_id1))
                                (exit)
      )
      (set_color col)
      (set_tile "text" otxt)
      (set_tile "hig" (rtos hig 2 2))
      (set_tile "wid" (rtos wid 2 2))
      (set_tile "ang" (rtos ang 2 2))
      (mode_tile "text" 2)
      (map_keylist "sty" style)
      (set_tile "sty" (itoa styno))
      (map_keylist "lay" layer)
      (set_tile "lay" (itoa layno))
      (action_tile "text" "(setq txt $value)")
      (action_tile "sty" "(setq styno (atoi $value))")
      (action_tile "hig" "(setq hig (distof $value))(if (>= 0 hig)(progn (mode_tile \"hig\" 3)(mode_tile \"hig\" 2)(set_error \"Input error ! \"))(set_error \"\"))")
      (action_tile "wid" "(setq wid (distof $value))(if (>= 0 wid)(progn (mode_tile \"wid\" 3)(mode_tile \"wid\" 2)(set_error \"Input error ! \"))(set_error \"\"))")
      (action_tile "lay" "(setq layno (atoi $value))")
      (action_tile "col" "(if (setq cnu (ACAD_ColorDlg col))(progn (setq col cnu)(set_color col)))")
      (action_tile "ang" "(setq ang (distof $value))")
      (action_tile "accept" "(done_dialog 1)")
      (action_tile "cancel" "(done_dialog 0)")
                       
      (if (= 1 (start_dialog))
                                (if txt
                                        (progn
                                                (setq sty (nth styno style))
                                                (setq lay (nth layno layer))
                                                (setq ang (* (/ ang 180) pi))
                                                (setq etlst (entget obt))
                                                (if (= oba "ATTDEF")
                                                        (setq etlst (subst
                                                                                                                (cons 2 txt)
                                                                                                                (assoc 2 etlst)
                                                                                                                etlst
                                                                                                        )
                                                        )
                                                        (setq etlst (subst
                                                                                                                (cons 1 txt)
                                                                                                                (assoc 1 etlst)
                                                                                                                etlst
                                                                                                        )
                                                        )
                                                ); end if
                                                (setq etlst (subst
                                                                                                        (cons 7 sty)
                                                                                                        (assoc 7 etlst)
                                                                                                        etlst
                                                                                                )
                                                )
                                                (setq etlst (subst
                                                                                                        (cons 40 hig)
                                                                                                        (assoc 40 etlst)
                                                                                                        etlst
                                                                                                )
                                                )
                                                (setq etlst (subst
                                                                                                        (cons 41 wid)
                                                                                                        (assoc 41 etlst)
                                                                                                        etlst
                                                                                                )
                                                )
                                                (setq etlst (subst
                                                                                                        (cons 50 ang)
                                                                                                        (assoc 50 etlst)
                                                                                                        etlst
                                                                                                )
                                                )
                                                (setq etlst (subst
                                                                                                        (cons 8 lay)
                                                                                                        (assoc 8 etlst)
                                                                                                        etlst
                                                                                                )
                                                )
                                               
                                                (if (= 1 cyn)
                                                        (setq etlst (subst
                                                                                                                (cons 62 col)
                                                                                                                (assoc 62 etlst)
                                                                                                                etlst
                                                                                                        )
                                                        )
                                                        (if (= "MTEXT" oba)
                                                                (setq etlst (sub_mtext col etlst))
                                                                (setq etlst (cons (cons 62 col) etlst))
                                                        )                             ; end if
                                                )                             ; end if
                                                (entmod etlst)
                                                (entupd obt)
                                                (entupd obn)
                                        )
                                )                             ; end if
      )                                     ; end if
      (if (= 11 (start_dialog))
                                (Command "_help")
      )
    )                                     ; end progn
)                                     ; end if
(setq *error* olderr)
(EF:UNDOEnd)
(princ)
(unload_dialog dcl_id1)
(vl-file-delete dclname)
)
;;; end defun

dabingrain 发表于 2016-8-8 10:44:33

代码太多,来个文本文件

墙脚哥 发表于 2016-8-8 20:15:37

dabingrain 发表于 2016-8-8 10:46 static/image/common/back.gif
看看是否满意

非常不错,感谢感谢!!!!!!!!!

engineerlzk 发表于 2016-9-25 18:18:35

非常好的工具,感谢dabingrain修正

迷失1786 发表于 2017-8-28 15:52:45

路过,支持楼主

enn09 发表于 2017-8-31 09:20:42

非常好用,感谢分享~

myhobby76 发表于 2018-8-19 04:13:52

dear nice
learning

山南水北 发表于 2018-9-14 15:59:57

怎么启动啊?大神?超级感谢1
页: [1] 2 3 4
查看完整版本: 请高手完善超级文字编辑的图层功能