AutoCAD顧問
還沒有註冊嗎...即日起免費註冊,所有最完整的AutoCAD討論、教學及資源都在論壇裡喔~
[討論]分享變更文字高度LISP(2版) Oo-2-110 [討論]分享變更文字高度LISP(2版) Ia15010 [討論]分享變更文字高度LISP(2版) Ziao1510 [討論]分享變更文字高度LISP(2版) BPl3tjj [討論]分享變更文字高度LISP(2版) Uos15010 [討論]分享變更文字高度LISP(2版) Uos15011

[討論]分享變更文字高度LISP(2版)

向下

[討論]分享變更文字高度LISP(2版) Empty [討論]分享變更文字高度LISP(2版)

發表 由 devinchou 于 2016-06-02, 23:51

各位前輩們好!
小弟又上來分享自己寫的小東西了!
這次是變更文字高度的LISP,
可以依指示的圖層(單一圖層或多圖層),
或直接選取文字,
進而改變文字的高度!
以下為代碼:
代碼:
 ; 本程式為文字高度變更輔助小工具
 ; 支援軟體版本("AutoCAD")
 ; 設計者:Devin,Chou
 ; 版權所有,歡迎使用
 ; Rev.2(2016/06/02)
 ; 進版說明: 1.新增-物件選取判斷式:[全選(A)/單一圖層(S)/多圖層(M)]
(defun C:thc (/ L_X lc_s lc_m L_s m_lt m_in m_o L_mt L_m
                s_in s_it n_th s_t s_td s_th )
(setvar "cmdecho" 0 )
(initget "A S M" )
(setq L_X
    (getkword
    (strcat "\n字高更新模式[全選(A)/單一圖層(S)/多圖層(M)]<A>:" )))
(if (= L_X nil )
    (setq L_X "A" )) ; if.end
(if (= L_X "S" )
    (setq lc_s 0 )) ; if.end
(if (= L_X "M" )
    (setq lc_m 0 )) ; if.end
(while (= lc_s 0 )
(setq L_s
    (assoc 8
    (entget
    (car
    (entsel "\n請選取要變更字高的圖層(單一圖層):" )))))
(princ "\n圖層:" )(princ (cdr L_s ))
(setq lc_s 1 )) ; while-lc_s.end
(while (= lc_m 0 )
(setq m_lt '() m_in 0 )
(princ "\n請選取要變更字高的圖層(多圖層):" )
(setq m_o (ssget ))
(repeat (sslength m_o )
(setq L_mt
    (assoc 8
    (entget
    (ssname m_o m_in ))))
(princ "\n圖層:" )(princ (cdr L_mt ))
(setq m_lt (cons L_mt m_lt ))
(setq m_in
    (1+ m_in ))) ; repeat.end
(setq L_m
    (cons '(-4 . "<OR")
    (reverse
    (cons '(-4 . "OR>") m_lt ))))
(setq lc_m 1 )) ; while-lc_m.end
(setq s_in 0 s_it 0 )
(setq n_th
    (cons 40 (getreal "\n請輸入新字高:" )))
(princ "\n請選取文字:" )
(if (= L_X "A" )
    (setq s_t
    (ssget
    '((0 . "TEXT"))))) ; if.end
(if (= L_X "S" )
    (setq s_t
    (ssget
    (list '(0 . "TEXT") L_s )))) ; if.end
(if (= L_X "M" )
    (setq s_t
    (ssget
    (cons '(0 . "TEXT") L_m )))) ; if.end
(repeat (sslength s_t )
(setq s_td
    (entget
    (ssname s_t s_in )))
(setq s_in
    (1+ s_in ))
(setq s_th
    (assoc 40 s_td ))
(setq s_td
    (subst n_th s_th s_td ))
(entmod s_td )
(setq s_it
    (1+ s_it ))
) ; repeat
(princ "\n已變更個數:" )(princ (itoa s_it ))(princ "個" )
(prin1)
) ; end
(princ "\nC:thc(2版)")
(prin1)
謝謝各位前輩!!!

2016/12/10影片說明檔來了...



Tiger&蘋果爸 寫到:讚啦!! 謝謝熱心程式分享~< 積分 +1>
[公告]關於團隊成員的回文及貢獻
附件
[討論]分享變更文字高度LISP(2版) Attachment
文字-高度變更.zip 您無權下載這里的附件。(1 Kb) 下載 48 次
devinchou
devinchou
初級會員
初級會員

文章總數 : 49
年齡 : 41
來自 : 基隆
職業 : 鋼筋檢料
愛好 : 寫作.閱讀.烹飪
個性 : 懶小孩一枚
使用年資 : 每天
使用版本 : 2006.2008
積分 : 2
經驗值 : 1968
威望值 : 144
注冊日期 : 2015-02-15
男 天蝎座 蛇

回頂端 向下

[討論]分享變更文字高度LISP(2版) Empty 回復: [討論]分享變更文字高度LISP(2版)

發表 由 Tiger&蘋果爸 于 2016-06-03, 10:43

提供一些淺見與大家分享!
程式思維可以考量使用者操作錯誤時的處置!
例如:請輸入新字高時,使用者誤按enter鍵,程式就跳下一步驟,這樣無法順利執行。

我把這二行改寫
代碼:
(setq n_th
(cons 40 (getreal "\n請輸入新字高:" )))

改為使用者需輸入數值,程式才可往下一步驟執行
代碼:
(while (not (setq n_th1 (getreal "\n請輸入新字高:" )))
(princ "**重新輸入新字高**")
)
(setq n_th (cons 40 n_th1))

不知道有沒有更好的寫法,可以更精簡一點,希望論壇前輩們有空指導交流吧~
PS:另外,可以加入「中斷處理的副程式」喔~
感恩!
害羞

____________________________________________________________________________________
[討論]分享變更文字高度LISP(2版) Oo-2-110 [討論]分享變更文字高度LISP(2版) Ia15010 [討論]分享變更文字高度LISP(2版) Ziao1510 [討論]分享變更文字高度LISP(2版) BPl3tjj
Tiger&蘋果爸
Tiger&蘋果爸
系統管理員
系統管理員

文章總數 : 18370
年齡 : 43
來自 : 台北市文山區
職業 : AutoCAD顧問
愛好 : 蹓狗/戶外活動/拍照
個性 : 幽默/樂觀/善良
使用年資 : 15↑
使用版本 : AutoCAD 2016
經驗值 : 70906
威望值 : 13548
注冊日期 : 2008-04-23
2D基礎函授 2D進階函授 3D基礎函授 https://i.servimg.com/u/f11/19/71/67/71/2d3d10.png2D+3D線上 顧問外掛程式 經典問與答讀者 藍鵲1號
2009聚會勳章 2010聚會勳章 2011聚會勳章 2012聚會勳章 2013勳章-2D基礎 2014聚會勳章 2015聚會勳章 2016聚會勳章 串連貼紙成功 男 水瓶座 兔

http://mypaper.pchome.com.tw/kv1012tiger

回頂端 向下

[討論]分享變更文字高度LISP(2版) Empty 回復: [討論]分享變更文字高度LISP(2版)

發表 由 devinchou 于 2016-06-03, 12:24

感謝蘋果爸!!!
另外我這個程式還有另外一個問題...
以多選方式選擇圖層時...
不小心選到一樣的圖層...
程式不會提出警告...
這一點也是我要再修正的...
devinchou
devinchou
初級會員
初級會員

文章總數 : 49
年齡 : 41
來自 : 基隆
職業 : 鋼筋檢料
愛好 : 寫作.閱讀.烹飪
個性 : 懶小孩一枚
使用年資 : 每天
使用版本 : 2006.2008
積分 : 2
經驗值 : 1968
威望值 : 144
注冊日期 : 2015-02-15
男 天蝎座 蛇

回頂端 向下

[討論]分享變更文字高度LISP(2版) Empty 回復: [討論]分享變更文字高度LISP(2版)

發表 由 yu0678 于 2016-06-06, 19:59

在此分享一些心得。a.如果能在程式執行前段,預設一個變數值(即字高值),當按下鍵盤[Enter]鍵或直接由滑鼠執行[Enter]鍵,就能確認這個字高值。而不必每一次都要由鍵盤輸入字高數字,對繪圖者來說是非常快速又方便,畢竟每一張圖面絕大部分的文字高度都是一致的。b.將預設變數值寫在程式前段,除了方便自己快速更改之外,也讓程式的使用者容易修改。
yu0678
yu0678
中級會員
中級會員

文章總數 : 131
年齡 : 60
來自 : Taipei
職業 : 設計
愛好 : 設計
個性 : 無不良嗜好
使用年資 : 25
使用版本 : 2016
積分 : 8
經驗值 : 3759
威望值 : 476
注冊日期 : 2012-05-30
男 射手座 狗

回頂端 向下

[討論]分享變更文字高度LISP(2版) Empty 回復: [討論]分享變更文字高度LISP(2版)

發表 由 devinchou 于 2016-06-06, 23:09

yu0678 寫到:在此分享一些心得。a.如果能在程式執行前段,預設一個變數值(即字高值),當按下鍵盤[Enter]鍵或直接由滑鼠執行[Enter]鍵,就能確認這個字高值。而不必每一次都要由鍵盤輸入字高數字,對繪圖者來說是非常快速又方便,畢竟每一張圖面絕大部分的文字高度都是一致的。b.將預設變數值寫在程式前段,除了方便自己快速更改之外,也讓程式的使用者容易修改。
謝謝提供意見,
我進版時會把預設值和上一個輸入值,
寫入程式裡的,
感恩呀!!!
devinchou
devinchou
初級會員
初級會員

文章總數 : 49
年齡 : 41
來自 : 基隆
職業 : 鋼筋檢料
愛好 : 寫作.閱讀.烹飪
個性 : 懶小孩一枚
使用年資 : 每天
使用版本 : 2006.2008
積分 : 2
經驗值 : 1968
威望值 : 144
注冊日期 : 2015-02-15
男 天蝎座 蛇

回頂端 向下

[討論]分享變更文字高度LISP(2版) Empty 回復: [討論]分享變更文字高度LISP(2版)

發表 由 devinchou 于 2016-12-10, 22:32

影片說明檔來了...
devinchou
devinchou
初級會員
初級會員

文章總數 : 49
年齡 : 41
來自 : 基隆
職業 : 鋼筋檢料
愛好 : 寫作.閱讀.烹飪
個性 : 懶小孩一枚
使用年資 : 每天
使用版本 : 2006.2008
積分 : 2
經驗值 : 1968
威望值 : 144
注冊日期 : 2015-02-15
男 天蝎座 蛇

回頂端 向下

[討論]分享變更文字高度LISP(2版) Empty 回復: [討論]分享變更文字高度LISP(2版)

發表 由 jackiehover 于 2016-12-26, 12:15

感謝大大分享,非常實用呢。
jackiehover
jackiehover
初級會員
初級會員

文章總數 : 135
年齡 : 33
來自 : 桃園市八德區
職業 : 消防設備、水電設計
愛好 : 上網、遊戲、網拍
個性 : 平易近人
使用年資 : 2014/09至2017/03
使用版本 : 2014、15、16
積分 : 1
經驗值 : 2052
威望值 : 90
注冊日期 : 2015-08-31
藍鵲699號
男 水瓶座 虎

回頂端 向下

[討論]分享變更文字高度LISP(2版) Empty 回復: [討論]分享變更文字高度LISP(2版)

發表 由 shenhung 于 2016-12-31, 18:56

好程式.~!!

由於每張圖的出圖比例不同.所以字高不一.~我自己是在選完文字之後.會順便提示所選文字的目前字高.~~做為變高字高的參考.~
shenhung
shenhung
高級會員
高級會員

文章總數 : 243
年齡 : 52
來自 : 新北市
職業 : 塑膠模具設計.AUTOLISP
愛好 : 音樂
個性 : 隨和
使用年資 : 18年
使用版本 : 2010
積分 : 15
經驗值 : 5641
威望值 : 947
注冊日期 : 2009-06-03
男 摩羯座 馬

回頂端 向下

回頂端


 
這個論壇的權限:
無法 在這個版面回復文章
[討論]分享變更文字高度LISP(2版) Uos15011 [討論]分享變更文字高度LISP(2版) Uos15010 [討論]分享變更文字高度LISP(2版) BPl3tjj [討論]分享變更文字高度LISP(2版) Ziao1510 [討論]分享變更文字高度LISP(2版) Ia15010 [討論]分享變更文字高度LISP(2版) Oo-2-110