找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: hewb

[求助] [求助]:如何用程序修改字符串中的一个用鼠标指定的字符,

[复制链接]
发表于 2004-9-22 18:20:15 | 显示全部楼层
惭愧,被批评还在用R14。
因为单位好多人都在用,我得为大家写程序。所以也在用了。2004也在用。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-9-23 14:05:17 | 显示全部楼层
JUSTIFYTEXT 是什么版本的cad命令?抑或是et的?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-9-24 09:26:16 | 显示全部楼层
我在各位高手的基础上对程序进行了改进,用于R14版本。功能如下,各位继续完善吧。

;;;V040901新增功能
;;;   1、可以直接从屏幕上点取要修改的字符,然后输入新的字符就自动完成修改。
;;;   2、下个版本将增加对%%特殊字符及双字节汉字的支持。

;;;V040921新增功能
;;;   1、增加对%%特殊字符的支持,但对上下标有时选不到上下标的字符,对加圈字符无效。
;;;   2、增加对双字节字符包括汉字的支持。
;;;   3、修正了有时会选取后面字符的错误。
;;;   4、下个版本将增加亮显程序取得的字符的功能。

  1. ;;;       =======================================
  2. ;;;       |         屏幕文字自动修改软件        |
  3. ;;;       |          Update: 04.09.21           |
  4. ;;;       =======================================


  5. (defun chgterr (s)
  6.   (if (/= s "命令被取消")                ; If an error (such as CTRL-C) occurs
  7.     (princ (strcat "\n错误: " s))        ; while this command is active...
  8.   )
  9.   (setvar "CMDECHO" 0)
  10.   (command "undo" "e")
  11.   (setq p nil)                                ; Free selection set
  12.   (setq *error* olderr)                        ; Restore old *error* handler
  13.   (princ)
  14. )


  15. ;;;主程序

  16. (defun C:PMGZ (/          olderr *error* oldEcho           sel
  17.                pt          ent             el                text           ent1
  18.                el1          LOOP             cnt        new_char   ch
  19.                step          cnt1             chh        cch           pdhz
  20.               )


  21.   (command "undo" "be")
  22.   (setq        olderr        *error*                        ; Initialize variables
  23.         *error*        chgterr
  24.   )

  25.   (setvar "CMDECHO" 0)
  26.   (command "ucs" "w")
  27.   (if (setq sel (entsel "\n点取要修改的字符<退出>:"))
  28.     (progn
  29.       (setq pt        (cadr sel)
  30.             ent        (car sel)
  31.       )
  32.       (if (= (cdr (assoc 0 (setq el (entget ent)))) "TEXT")
  33.         (progn
  34.           (setq text (cdr (assoc 1 el)))
  35.           (entmake el)
  36.           (setq        ent1 (entlast)
  37.                 el1  (entget ent1)
  38.           )


  39. ;;;如果不是左对齐方式,改为左对齐方式(FOR R14)          
  40.           (setq dq1 (setq dqb1 (assoc 72 el1)))
  41.           (setq dq2 (setq dqb2 (assoc 73 el1)))
  42.           (if (/= dq1 0)
  43.             (progn
  44.               (setq p11 (assoc 11 el1))        ;p11---对齐点表
  45.               (setq p11b '(0.0 0.0 0.0)) ;p11b---对齐点坐标
  46.               (setq el1 (subst (cons 11 p11b) p11 el1)) ;置换对齐点表
  47.               (setq dq 0)                ;设定对齐方式为左侧对齐
  48.               (setq el1 (subst (cons 72 dq) dqb1 el1)) ;置换对齐方式表
  49.               (if (/= dq2 0)
  50.                 (setq el1 (subst (cons 73 dq) dqb2 el1))
  51.               )                                ;置换对齐方式表
  52.               (entmod el1)                ;更新字符串表
  53.             )
  54.           )
  55. ;;;R2004版改变字符对齐方式为左对齐。
  56. ;;;      (if (or (/= (cdr (assoc 72 el1)) 0)
  57. ;;;         (/= (cdr (assoc 73 el1)) 0)
  58. ;;;          )
  59. ;;;        (command "justifytext" ent1 "" "l")
  60. ;;;        )

  61.           (setq        cnt 1
  62.                 LOOP T
  63.           )
  64.           (setq el1 (entget ent1))
  65.           (while (and LOOP (<= cnt (strlen text)))


  66.             (if        (wcmatch (substr text cnt 5) "%%*")
  67.               (if (wcmatch (substr text cnt 5) "%%[0-9][0-9][0-9]")
  68.                 (setq step 5)
  69.                 (setq step 3)
  70.               )                                ;endif
  71.               (setq step 1)
  72.             )                                ;endif
  73.             (if        (= (substr text cnt 1) " ")
  74.               (progn
  75.                 (setq cnt1 1)
  76.                 (while (= (substr text (+ cnt cnt1) 1) " ")
  77.                   (setq step cnt1)
  78.                   (setq cnt1 (1+ cnt1))
  79.                 )
  80.               )
  81.             )
  82.             (setq ch (substr text cnt step))
  83.             (if        (= step 5)
  84.               (progn
  85.                 (setq chh ch)
  86.                 (setq cch (substr text cnt 4))
  87.                 (setq ch (substr text (+ cnt 4) 1))

  88.               )
  89.             )

  90.             (if        (= step 3)
  91.               (progn
  92.                 (setq chh ch)
  93.                 (setq cch (substr text cnt 2))
  94.                 (setq ch (substr text (+ cnt 2) 1))
  95.               )
  96.             )
  97.             (setq pdhz (ascii ch))
  98.             (if        (> pdhz 127)
  99.               (progn
  100.                 (setq step 2)
  101.                 (setq ch (substr text cnt step))
  102.                 ;(setq chh ch)
  103.               )
  104.                 ;(setq chh ch)
  105.             )
  106.             (setq cnt (+ cnt (1- step)))
  107.             (entmod (setq el1 (subst (cons 1 (substr text 1 cnt))
  108.                                      (assoc 1 el1)
  109.                                      el1
  110.                               )
  111.                     )
  112.             )
  113.             (if        (setq xx (CheckWidth ent1 pt))
  114.               (progn

  115.                 (entdel ent1)
  116.                 (if (or (= step 5) (= step 3))
  117.                   (progn
  118.                     (setq
  119.                       new_char (getstring T
  120.                                           (strcat "\n请输入新的字符 ["
  121.                                                   chh
  122.                                                   "<--"
  123.                                                   ch
  124.                                                   "]:"
  125.                                                  )
  126.                                )
  127.                     )
  128.                     (if        (/= new_char "")
  129.                       (setq new_char (strcat cch new_char))
  130.                     )
  131.                   )
  132.                   (setq
  133.                     new_char (getstring
  134.                                T
  135.                                (strcat "\n请输入新的字符 [" ch "]:")
  136.                              )
  137.                   )
  138.                 )
  139.                 (if (/= new_char "")
  140.                   (entmod
  141.                     (subst
  142.                       (cons 1
  143.                             (strcat (substr text 1 (- cnt step))
  144.                                     new_char
  145.                                     (substr text (1+ cnt))
  146.                             )
  147.                       )
  148.                       (assoc 1 el)
  149.                       el
  150.                     )
  151.                   )
  152.                 )
  153.                 (setq LOOP nil)
  154.               )
  155.             )                                ;endif
  156.             (setq cnt (1+ cnt))
  157.           )
  158.         )                                ;progn
  159.         (alert "所选实体类型不是“TEXT”!")
  160.       )                                        ;endif
  161.     )                                        ;progn
  162.     (princ "\nNo object selected!")
  163.   )                                        ;endif

  164.   (setq *error* olderr)                        ; Restore old *error* handler
  165.   (command "undo" "e")


  166. )

  167. ;;----------------------------------------
  168. (defun CheckWidth (textent selpt / );ll ur hbox)
  169.   (command "ucs" "Object" textent)
  170.   (setq selpt (trans selpt 0 1))
  171.   (setq        ll   (car (textbox (entget textent)))
  172.         ur   (cadr (textbox (entget textent)))
  173.         wid  (abs (- (car ur) (car ll)))
  174.         wid1 (abs (- (car selpt) (car ll)))
  175.         hbox (/ (PickBoxSize) 2.0)
  176.   )
  177.   (command "ucs" "p")
  178.   (if (> wid (- wid1 hbox))
  179.     T
  180.     nil
  181.   )
  182. )

  183. ;;----------------------------------------

  184. (defun PickBoxSize (/ SS VS PB SWP SHP AR WSD PPDU BOX)
  185.   (setq        SS   (getvar "SCREENSIZE")        ; screen size in pixels
  186.         VS   (getvar "VIEWSIZE")        ; screen height in drawing units
  187.         PB   (getvar "pickbox")                ; get current pickbox size
  188.         SWP  (car SS)                        ; width of screen in pixels
  189.         SHP  (cadr SS)                        ; height of screen in pixels
  190.         AR   (/ SWP SHP)                ; aspect ratio width/height
  191.         WSD  (* VS AR)                        ; width of screen dwg units = ratio timesheight
  192.         PPDU (/ WSD SWP)                ; pixels per drawing unit
  193.         BOX  (/ (* VS (* 2 PB)) SHP)        ; drawing units per pixel
  194.   )
  195. )


  196. ;;;V040901新增功能
  197. ;;;   1、可以直接从屏幕上点取要修改的字符,然后输入新的字符就自动完成修改。
  198. ;;;   2、下个版本将增加对%%特殊字符及双字节汉字的支持。

  199. ;;;V040921新增功能
  200. ;;;   1、增加对%%特殊字符的支持,但对上下标有时选不到上下标的字符,对加圈字符无效。
  201. ;;;   2、增加对双字节字符包括汉字的支持。
  202. ;;;   3、修正了有时会选取后面字符的错误。
  203. ;;;   4、下个版本将增加亮显程序取得的字符功能。



论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-9-24 20:12:55 | 显示全部楼层
以下代码中,应该能实现亮显所选文字了
[PHP]
;;;       =======================================
;;;       |         屏幕文字自动修改软件        |
;;;       |          Update: 04.09.21           |
;;;       =======================================


(defun chgterr (s)
  (if (/= s "命令被取消")                ; If an error (such as CTRL-C) occurs
    (princ (strcat "\n错误: " s))        ; while this command is active...
  )
  (setvar "CMDECHO" 0)
  (command "undo" "e")
  (setq p nil)                                ; Free selection set
  (setq *error* olderr)                        ; Restore old *error* handler
  (princ)
)


;;;主程序

(defun C:PMGZ (/          olderr *error* oldEcho           sel
               pt          ent             el                text           ent1
               el1          LOOP             cnt        new_char   ch
               step          cnt1             chh        cch           pdhz
              )


  (command "undo" "be")
  (setq        olderr        *error*                        ; Initialize variables
        *error*        chgterr
  )

  (setvar "CMDECHO" 0)
  (command "ucs" "w")
  (if (setq sel (entsel "\n点取要修改的字符<退出>:"))
    (progn
      (setq pt        (cadr sel)
            ent        (car sel)
      )
      (if (= (cdr (assoc 0 (setq el (entget ent)))) "TEXT")
        (progn
          (setq text (cdr (assoc 1 el)))
          (entmake el)
          (setq        ent1 (entlast)
                el1  (entget ent1)
          )


;;;如果不是左对齐方式,改为左对齐方式(FOR R14)          
          (setq dq1 (setq dqb1 (assoc 72 el1)))
          (setq dq2 (setq dqb2 (assoc 73 el1)))
          (if (/= dq1 0)
            (progn
              (setq p11 (assoc 11 el1))        ;p11---对齐点表
              (setq p11b '(0.0 0.0 0.0)) ;p11b---对齐点坐标
              (setq el1 (subst (cons 11 p11b) p11 el1)) ;置换对齐点表
              (setq dq 0)                ;设定对齐方式为左侧对齐
              (setq el1 (subst (cons 72 dq) dqb1 el1)) ;置换对齐方式表
              (if (/= dq2 0)
                (setq el1 (subst (cons 73 dq) dqb2 el1))
              )                                ;置换对齐方式表
              (entmod el1)                ;更新字符串表
            )
          )
;;;R2004版改变字符对齐方式为左对齐。
;;;      (if (or (/= (cdr (assoc 72 el1)) 0)
;;;         (/= (cdr (assoc 73 el1)) 0)
;;;          )
;;;        (command "justifytext" ent1 "" "l")
;;;        )

          (setq        cnt 1
                LOOP T
          )
          (setq el1 (entget ent1))
          (while (and LOOP (<= cnt (strlen text)))
            (if        (wcmatch (substr text cnt 5) "%%*")
              (if (wcmatch (substr text cnt 5) "%%[0-9][0-9][0-9]")
                (setq step 5)
                (setq step 3)
              )                                ;endif
              (setq step 1)
            )                                ;endif
            (if        (= (substr text cnt 1) " ")
              (progn
                (setq cnt1 1)
                (while (= (substr text (+ cnt cnt1) 1) " ")
                  (setq step cnt1)
                  (setq cnt1 (1+ cnt1))
                )
              )
            )
            (setq ch (substr text cnt step))
            (if        (= step 5)
              (progn
                (setq chh ch)
                (setq cch (substr text cnt 4))
                (setq ch (substr text (+ cnt 4) 1))

              )
            )

            (if        (= step 3)
              (progn
                (setq chh ch)
                (setq cch (substr text cnt 2))
                (setq ch (substr text (+ cnt 2) 1))
              )
            )
            (setq pdhz (ascii ch))
            (if        (> pdhz 127)
              (progn
                (setq step 2)
                (setq ch (substr text cnt step))
                                        ;(setq chh ch)
              )
                                        ;(setq chh ch)
            )
            (setq cnt (+ cnt (1- step)))
            (entmod (setq el1 (subst (cons 1 (substr text 1 cnt))
                                     (assoc 1 el1)
                                     el1
                              )
                    )
            )
            (redraw (cdr(assoc -1 el)) 3)
            (if        (setq xx (CheckWidth ent1 pt))
              (progn

                (entdel ent1)
                (if (or (= step 5) (= step 3))
                  (progn
                    (setq
                      new_char (getstring T
                                          (strcat "\n请输入新的字符 ["
                                                  chh
                                                  "<--"
                                                  ch
                                                  "]:"
                                                 )
                               )
                    )
                    (if        (/= new_char "")
                      (setq new_char (strcat cch new_char))
                    )
                  )
                  (setq
                    new_char (getstring
                               T
                               (strcat "\n请输入新的字符 [" ch "]:")
                             )
                  )
                )
                (if (/= new_char "")
                  (entmod
                    (subst
                      (cons 1
                            (strcat (substr text 1 (- cnt step))
                                    new_char
                                    (substr text (1+ cnt))
                            )
                      )
                      (assoc 1 el)
                      el
                    )
                  )
                )
                (setq LOOP nil)
              )
            )                                ;endif
            (setq cnt (1+ cnt))
          )
        )                                ;progn
        (alert "所选实体类型不是“TEXT”!")
      )                                        ;endif
    )                                        ;progn
    (princ "\nNo object selected!")
  )                                        ;endif

  (setq *error* olderr)                        ; Restore old *error* handler
  (command "undo" "e")
  (princ)
)

;;----------------------------------------
(defun CheckWidth (textent selpt /)        ;ll ur hbox)
  (command "ucs" "Object" textent)
  (setq selpt (trans selpt 0 1))
  (setq        ll   (car (textbox (entget textent)))
        ur   (cadr (textbox (entget textent)))
        wid  (abs (- (car ur) (car ll)))
        wid1 (abs (- (car selpt) (car ll)))
        hbox (/ (PickBoxSize) 2.0)
  )
  (command "ucs" "p")
  (if (> wid (- wid1 hbox))
    T
    nil
  )
)

;;----------------------------------------

(defun PickBoxSize (/ SS VS PB SWP SHP AR WSD PPDU BOX)
  (setq        SS  (getvar "SCREENSIZE")        ; screen size in pixels
        VS  (getvar "VIEWSIZE")                ; screen height in drawing units
        PB  (getvar "pickbox")                ; get current pickbox size
;;;        SWP  (car SS)                        ; width of screen in pixels
        SHP (cadr SS)                        ; height of screen in pixels
;;;        AR   (/ SWP SHP)                ; aspect ratio width/height
;;;        WSD  (* VS AR)                        ; width of screen dwg units = ratio timesheight
;;;        PPDU (/ WSD SWP)                ; pixels per drawing unit
        BOX (/ (* VS (* 2 PB)) SHP)        ; drawing units per pixel
  )
)


;;;V040901新增功能
;;;   1、可以直接从屏幕上点取要修改的字符,然后输入新的字符就自动完成修改。
;;;   2、下个版本将增加对%%特殊字符及双字节汉字的支持。

;;;V040921新增功能
;;;   1、增加对%%特殊字符的支持,但对上下标有时选不到上下标的字符,对加圈字符无效。
;;;   2、增加对双字节字符包括汉字的支持。
;;;   3、修正了有时会选取后面字符的错误。
;;;   4、下个版本将增加亮显程序取得的字符功能。
;;;----------------------------------------------------------------------------
(PRINC "\n  CHTXT  已加载。以PMGZ启动命令。")
(princ)


[/PHP]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-9-27 14:19:32 | 显示全部楼层
还是试试我的这个程序吧。
是改变颜色,醒目的不得了。


  1. ;;;       =======================================
  2. ;;;       |         屏幕文字自动修改软件        |
  3. ;;;       |          Update: 04.09.24           |
  4. ;;;       =======================================


  5. (defun chgterr (s)
  6.   (if (/= s "命令被取消")                ; If an error (such as CTRL-C) occurs
  7.     (princ (strcat "\n错误: " s))        ; while this command is active...
  8.   )
  9.   (setvar "CMDECHO" 0)
  10.   (command "undo" "e")
  11.   (setq p nil)                                ; Free selection set
  12.   (setq *error* olderr)                        ; Restore old *error* handler
  13.   (princ)
  14. )


  15. ;;;主程序

  16. (defun C:PMGZ (/          olderr *error* oldEcho           sel cloo cllo
  17.                pt          ent             el                text           ent1
  18.                el1          LOOP             cnt        new_char   ch
  19.                step          cnt1             chh        cch           pdhz
  20.               )
  21.   (princ (strcat "\n***屏幕字符自动修改软件V040924  ***"))
  22.   (princ)

  23.   (command "undo" "be")
  24.   (setq        olderr        *error*                        ; Initialize variables
  25.         *error*        chgterr
  26.   )
  27.   (setq ucskg (getvar "ucsicon"))
  28.   (setvar "CMDECHO" 0)
  29.   (command "ucs" "w")
  30.   (if (setq sel (entsel "\n点取要修改的字符<退出>:"))
  31.     (progn
  32.       (setq pt        (cadr sel)
  33.             ent        (car sel)
  34.       )
  35.       (if (= (cdr (assoc 0 (setq el (entget ent)))) "TEXT")
  36.         (progn

  37.           (setq text (cdr (assoc 1 el)))
  38.           (entmake el)
  39.           (setq        ent1 (entlast)
  40.                 el1  (entget ent1)
  41.           )

  42. ;;;测试修改颜色,如何得到随层的颜色号?

  43.           (if (setq cllo (assoc 62 el1))
  44.               (setq cloo (cdr cllo))
  45.                (setq cloo (cdr (assoc 62 (tblsearch "layer" (cdr (assoc 8 el1))))))
  46.            )

  47.   (if clo
  48.     (setq clo clo)
  49.     (setq clo cloo)

  50.   )
  51.             (setq clo (+ 1 clo))
  52.             (if (= clo cloo) (setq clo (+ clo 1)))

  53. (while (or (>= clo 7)(<= clo 0))

  54.             (if (>= clo 7) (setq clo (- clo 7)))
  55.             (if (<= clo 0)(setq clo (+ cloo 1)))
  56.             (if (= clo cloo) (setq clo (+ clo 1)))

  57. )

  58.           (command "change" ent1 "" "p" "c" clo "")



  59.           (setvar "ucsicon" 0)

  60. ;;;如果不是左对齐方式,改为左对齐方式(FOR R14)          
  61.           (setq dq1 (setq dqb1 (assoc 72 el1)))
  62.           (setq dq2 (setq dqb2 (assoc 73 el1)))
  63.           (if (/= dq1 0)
  64.             (progn
  65.               (setq p11 (assoc 11 el1))        ;p11---对齐点表
  66.               (setq p11b '(0.0 0.0 0.0)) ;p11b---对齐点坐标
  67.               (setq el1 (subst (cons 11 p11b) p11 el1)) ;置换对齐点表
  68.               (setq dq 0)                ;设定对齐方式为左侧对齐
  69.               (setq el1 (subst (cons 72 dq) dqb1 el1)) ;置换对齐方式表
  70.               (if (/= dq2 0)
  71.                 (setq el1 (subst (cons 73 dq) dqb2 el1))
  72.               )                                ;置换对齐方式表
  73.               (entmod el1)                ;更新字符串表
  74.             )
  75.           )
  76. ;;;R2004版改变字符对齐方式为左对齐。
  77. ;;;      (if (or (/= (cdr (assoc 72 el1)) 0)
  78. ;;;         (/= (cdr (assoc 73 el1)) 0)
  79. ;;;          )
  80. ;;;        (command "justifytext" ent1 "" "l")
  81. ;;;        )

  82.           (setq        cnt 1
  83.                 LOOP T
  84.           )
  85.           (setq el1 (entget ent1))
  86.           (while (and LOOP (<= cnt (strlen text)))


  87.             (if        (wcmatch (substr text cnt 5) "%%*")
  88.               (if (wcmatch (substr text cnt 5) "%%[0-9][0-9][0-9]")
  89.                 (setq step 5)
  90.                 (setq step 3)
  91.               )                                ;endif
  92.               (setq step 1)
  93.             )                                ;endif
  94.             (if        (= (substr text cnt 1) " ")
  95.               (progn
  96.                 (setq cnt1 1)
  97.                 (while (= (substr text (+ cnt cnt1) 1) " ")
  98.                   (setq step cnt1)
  99.                   (setq cnt1 (1+ cnt1))
  100.                 )
  101.               )
  102.             )
  103.             (setq ch (substr text cnt step))
  104.             (if        (= step 5)
  105.               (progn
  106.                 (setq chh ch)
  107.                 (setq cch (substr text cnt 4))
  108.                 (setq ch (substr text (+ cnt 4) 1))

  109.               )
  110.             )

  111.             (if        (= step 3)
  112.               (progn
  113.                 (setq chh ch)
  114.                 (setq cch (substr text cnt 2))
  115.                 (setq ch (substr text (+ cnt 2) 1))
  116.               )
  117.             )
  118.             (setq pdhz (ascii ch))
  119.             (if        (> pdhz 127)
  120.               (progn
  121.                 (setq step 2)
  122.                 (setq ch (substr text cnt step))
  123.                 ;(setq chh ch)
  124.               )
  125.                 ;(setq chh ch)
  126.             )
  127.             (setq cnt (+ cnt (1- step)))
  128.             (entmod (setq el1 (subst (cons 1 (substr text 1 cnt))
  129.                                      (assoc 1 el1)
  130.                                      el1
  131.                               )
  132.                     )
  133.             )

  134.             (if        (CheckWidth ent1 pt)
  135.               (progn

  136. ;;;将字符串改为右对齐,以保证取得的字符位置不变。
  137.   (setq dq (cdr (setq dqb (assoc 72 el1)))) ; dq---对齐方式;dqb---对齐方式表
  138.   (setq zfang (cdr (assoc 50 el1)))        ;zfang---字符角度
  139.   (setq p11 (assoc 11 el1))                ;p11---对齐点表
  140.   (setq p10b (cdr (setq p10 (assoc 10 el1)))) ;p10---位置点表 ;p10b---位置点坐标
  141.   (setq el1 (subst (cons 11 p10b) p11 el1)) ;用位置点替换对齐点并置换对齐点表
  142.   (setq dq 2)                                ;设定对齐方式为右侧对齐

  143.   (setq el1 (subst (cons 72 dq) dqb el1)) ;置换对齐方式表

  144.   (entmod el1)                                ;更新字符串表

  145.   (setq el1 (entget ent1))                ;由实体名重新获得字符串实体表
  146.   (setq p10b (cdr (setq p10 (assoc 10 el1)))) ;p10b---位置点坐标
  147.   (setq p11b (cdr (setq p11 (assoc 11 el1)))) ;p11b---对齐点坐标
  148.   (setq pl (distance p11b P10b))        ;pl---位置点与对齐点间距离
  149.   (setq p11b (polar p11b zfang pl))        ;得到新的对齐点坐标
  150.   (setq el1 (subst (cons 11 p11b) p11 el1)) ;置换对齐点表
  151.   (entmod el1)               

  152.                 (if (or (= step 5) (= step 3))
  153.                     (setq xszf chh )
  154.                     (setq xszf ch )

  155.                 )
  156.             (entmod (setq el1 (subst (cons 1 xszf)
  157.                                      (assoc 1 el1)
  158.                                      el1
  159.                               )
  160.                     )

  161.             )


  162.                 (setvar "ucsicon" ucskg)
  163. ;                (entdel ent1)
  164.                 (if (or (= step 5) (= step 3))
  165.                   (progn
  166.                     (setq
  167.                       new_char (getstring T
  168.                                           (strcat "\n请输入新的字符 ["
  169.                                                   chh
  170.                                                   "<--"
  171.                                                   ch
  172.                                                   "]:"
  173.                                                  )
  174.                                )
  175.                     )
  176.                     (if        (/= new_char "")
  177.                       (setq new_char (strcat cch new_char))
  178.                     )
  179.                   )
  180.                   (setq
  181.                     new_char (getstring
  182.                                T
  183.                                (strcat "\n请输入新的字符 [" ch "]:")
  184.                              )
  185.                   )
  186.                 )
  187.                 (entdel ent1)

  188.                 (if (/= new_char "")

  189.                   (entmod
  190.                     (subst
  191.                       (cons 1
  192.                             (strcat (substr text 1 (- cnt step))
  193.                                     new_char
  194.                                     (substr text (1+ cnt))
  195.                             )
  196.                       )
  197.                       (assoc 1 el)
  198.                       el
  199.                     )
  200.                   )
  201.                 )
  202.                 (setq LOOP nil)
  203.               )
  204.             )                                ;endif
  205.             (setq cnt (1+ cnt))
  206.           )
  207.         )                                ;progn
  208.         (alert "所选实体类型不是“TEXT”!")
  209.       )                                        ;endif
  210.     )                                        ;progn
  211.     (princ "\nNo object selected!")
  212.   )                                        ;endif


  213.   (setq *error* olderr)                        ; Restore old *error* handler
  214.   (command "undo" "e")

  215.   (princ (strcat "\n***屏幕字符自动修改软件V040924 ***"))
  216. (princ)
  217. )
  218. ;;----------------------------------------
  219. (defun CheckWidth (textent selpt / ll ur hbox)
  220.   (command "ucs" "Object" textent)
  221.   (setq selpt (trans selpt 0 1))
  222.   (setq        ll   (car (textbox (entget textent)))
  223.         ur   (cadr (textbox (entget textent)))
  224.         wid  (abs (- (car ur) (car ll)))
  225.         wid1 (abs (- (car selpt) (car ll)))
  226.         hbox (/ (PickBoxSize) 2.0)
  227.   )
  228.   (command "ucs" "p")
  229.   (if (> wid (- wid1 hbox))
  230.     T
  231.     nil
  232.   )
  233. )


  234. (defun PickBoxSize (/ SS VS PB SWP SHP AR WSD PPDU BOX)
  235.   (setq        SS   (getvar "SCREENSIZE")        ; screen size in pixels
  236.         VS   (getvar "VIEWSIZE")        ; screen height in drawing units
  237.         PB   (getvar "pickbox")                ; get current pickbox size
  238.         SWP  (car SS)                        ; width of screen in pixels
  239.         SHP  (cadr SS)                        ; height of screen in pixels
  240.         AR   (/ SWP SHP)                ; aspect ratio width/height
  241.         WSD  (* VS AR)                        ; width of screen dwg units = ratio timesheight
  242.         PPDU (/ WSD SWP)                ; pixels per drawing unit
  243.         BOX  (/ (* VS (* 2 PB)) SHP)        ; drawing units per pixel
  244.   )
  245. )


  246. ;;;V040901新增程序
  247. ;;;   1、可以直接从屏幕上点取要修改的字符,然后输入新的字符就自动完成修改。
  248. ;;;   2、下个版本将增加对%%特殊字符及双字节汉字的支持。

  249. ;;;V040921新增功能
  250. ;;;   1、增加对%%特殊字符的支持,但对上下标有时选不到上下标的字符,对加圈字符无效。
  251. ;;;   2、增加对双字节字符(包括汉字)的支持。
  252. ;;;   3、修正了有时会选取后面字符的错误。
  253. ;;;   4、程序运行时将坐标系图标关闭,以防止更改坐系时的闪烁现象。
  254. ;;;   5、增加了一步回退功能。
  255. ;;;   6、修正了字符串内包含空格时无法正确得到所需字符的错误。
  256. ;;;   7、下个版本将增加亮显程序取得的字符功能。

  257. ;;;V040924新增功能
  258. ;;;   1、增加亮显程序取得的字符功能。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-9-29 13:42:37 | 显示全部楼层
楼上的朋友,你的程序在我这里既没亮显也没变色,是不是我的机器有问题?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-9-30 11:22:27 | 显示全部楼层
19楼的程序不能亮显
20楼的程序不亮显也不变色
另外: 程序不用那么繁琐吧? VLISP会更简单.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-9-30 20:45:55 | 显示全部楼层
我用了20楼的,很好
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-10-3 08:45:16 | 显示全部楼层
(redraw (cdr(assoc -1 el)) 3) 就是亮显的语句,可能位置不合适?或再增加?在我的机器上运行正常呀?等我回头再试试吧。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-10-5 16:03:15 | 显示全部楼层
  我程序是为R14写的。主要是改色前要将字符改为右对齐并保持位置不变。所以略费了些周折。在2004中只用一句就可以了。
  我在自己的机器上R14用的很正常,真的会变换不同的颜色,很好玩的。但没在更高版本上测试。
  等有时间我会做个FLASH演示给大家看看。
  下个版本将增加对上下标及加圈字符的支持。另外本版本在改变%%字符时只需要改变最后一个字符即可,事实上大多数使用时都是如此。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-10-15 21:57:27 | 显示全部楼层
诸位,能否在此基础上增加对话框功能,即:让选中的字符在对话框里面被选取。如图
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-10-25 09:18:38 | 显示全部楼层
  倒是个好建议,只是我觉得有点“简单问题复杂化了”。我们编程的目的就是加快制图速度,用对话框就慢了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-10-25 11:52:47 | 显示全部楼层
楼上的,我觉得相反,如果按照我说的那个方法,岂不是可以马上改那个字符了吗?看看程序的执行过程:命令,回车,选择(对准位置),键入新内容,回车。ok了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-10-25 21:09:35 | 显示全部楼层
最初由 urljit 发布
[B]诸位,能否在此基础上增加对话框功能,即:让选中的字符在对话框里面被选取。如图 [/B]

如果那个“i”是你自己选中的倒可以,如果是lisp程序选中的,不可能

复20楼

我在2004上可以正常运行
另外我有一个建议,通常在改文字时可能会改的字不止一个字,能否做到让两个字变色?从而被替换 ?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-10-25 21:23:38 | 显示全部楼层
最初由 swaywood 发布
[B]
如果那个“i”是你自己选中的倒可以,如果是lisp程序选中的,不可能

复20?.. [/B]


为什么不可能?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-5-11 00:18 , Processed in 0.455696 second(s), 53 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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