日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

cad lisp 背景遮罩_给文字批量添加边界偏移因子为1.1(或其他值)的背景遮罩的源程序(有详细注解)...

發布時間:2025/4/5 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 cad lisp 背景遮罩_给文字批量添加边界偏移因子为1.1(或其他值)的背景遮罩的源程序(有详细注解)... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本帖最后由 作者 于 2007-11-6 9:06:55 編輯

CAD2005以后版本中就有了背景遮罩功能,但其默認值為1.5多數情況下不太合適

在Autodesk官方網站技術支持知識庫查詢,其中關于多行文字的背景遮罩邊界偏移因子默認值修改的問題(問題ID號TS1059918),其解釋為“In the Background Mask dialog box, the default value for the Border Offset factor is 1.5000. In current AutoCAD? releases, it is not possible to define a different default value for this setting.”意為在背景遮罩對話框中,邊界偏移因子的默認值為1.5,在當前的AutoCAD版本中,該默認值是不能修改的。

所以寫了此程序

解決問題的基本思路為:選取文本>若是單行文本,先轉換為多行文本>若多行文本已啟用背景遮罩功能,修改其邊界偏移因子為1.1,填充顏色使用圖形背景顏色;若未啟用,增加該功能,設定其邊界偏移因子為1.1,填充顏色使用圖形背景顏色。

我加上了詳細注解,覺得有用的話拿去吧.

注意:單行文本轉多行文本時文本寬度的計算要選取適當系數

bg_mask.lsp

-----------------------------程序代碼--------------------------------------------

;這個lisp程序的作用是,將單行文本轉換為多行文本,為多行文本設置背景遮罩

;背景遮罩邊界偏移因子為1.1,使用圖形背景顏色填充。

;s1選擇集名稱,i m n 計數器,addlist增加的組碼

;entname 圖元名,nlist 圖元數據,tid 圖元標志(若為TEXT則表示為單行文本),tt 文本,th文本高度

;pt 文本基點,tang 文本旋轉角度,ttlen 文本大致長度,tstr 相對坐標形式的多行文本的另一點

(defun c:bg()

;首先要對圖形進行一些設置,否則將會影響程序的使用。在程序結束前將會恢復這些設置!

(setq sysosnap (getvar "OSMODE"))?;取得對象捕捉設置

(setvar "OSMODE" 16384)??;關閉對象捕捉

(setq sysang (getvar "ANGDIR"))?;取得角度方向(順時針/逆時針)

(setvar "ANGDIR" 0)???;設置為逆時針方向

(setq sysabase (getvar "ANGBASE"))?;取得方向的基準角度

(setvar "ANGBASE" 0)???;設置方向的基準角度為東

(command "ucs" "")???;設置為wcs

(setq s1 (ssget))????;選取單行文本或多行文本,構造非空選擇集

(if (/= s1 nil) (print) ???;構造選擇集成功,繼續

(progn ?????;構造失敗,恢復設置退出

(setvar "OSMODE" sysosnap)??;恢復對象捕捉設置

(setvar "ANGDIR" sysang)??;恢復角度方向

(setvar "ANGBASE" sysabase)??;恢復方向的基準角度

(command "ucs" "p")???;恢復ucs

(exit)????;退出

)

)

(setq i 0 m 0 n 0)????;設置計數器,m為轉換單行文本個數,n為多行文本個數

(repeat (sslength s1)

(setq entname (ssname s1 i))

(setq nlist (entget entname))

(setq tid (cdr (assoc 0 nlist)))??;判斷是單行文本或多行文本

(if (= tid "TEXT") ????;如果是單行文本,先轉換為多行文本

(progn

(setq m (1+ m))????;計數器

(setq tt (cdr (assoc 1 nlist)))??;取得文字

(setq th (cdr (assoc 40 nlist)))??;取得文字高度

(setq pt (cdr (assoc 10 nlist)))??;取得文字插入點

(setq ang (cdr (assoc 50 nlist)))??;取得文字旋轉角度

(setq ttlen (strlen tt))???;取得文字長度

(setq twid (* (* th 0.7) ttlen))??;計算文字寬度,不同字體、CAD版本、圖形,文字高度與寬度關系可能不同,可直接修改系數0.7為適當值

(setq tang (/ (* 180 (+ ang (atan(/ th twid)))) pi))?;計算多行文本對角點的旋轉角度

(setq tlen (sqrt (+ (* th? th) (* twid twid))))??;計算多行文本對角線的長度

(setq tstr (strcat "@" (rtos tlen) "

(setq ang (/ (* ang 180) pi))????;轉換弧度為角度

(command "-mtext" pt "h" th "r" ang tstr tt "")??;在原位置以原角度原高度生成多行文本

(entdel entname)??????;刪除單行文本

(setq entname (entlast))???;取出最近轉換成的多行文本

(setq nlist (entget entname))

(setq addlist (list(cons 45 1.1)))??;背景遮罩邊界偏移因子為1.1

(setq addlist (cons (cons 63 256) addlist));填充顏色使用圖形背景顏色

(setq addlist (cons (cons 90 3) addlist))?;表示使用背景顏色,另外組碼441為背景的透明度,目前版本無法使用,系統會自動增加該組碼

(if (= (assoc 45 nlist) nil) ??;如果多行文本未使用背景遮罩,增加組碼

(progn

(setq nlist (append nlist addlist))?;增加上面3個組碼

(entmod nlist)???;更新顯示

)

(progn?????;如果已使用背景遮罩,直接更改組碼

(setq nlist (subst (cons 45 1.1) (assoc 45 nlist) nlist)) ;作用同上

(setq nlist (subst (cons 63 256) (assoc 63 nlist) nlist))

(setq nlist (subst (cons 90 3) (assoc 90 nlist) nlist))

(entmod nlist)

)

)

)

(progn

(if (= tid "MTEXT") ?????;如果是多行文本

(progn

(setq n (1+ n))?????;計數器

(setq addlist (list(cons 45 1.1)))??;背景遮罩邊界偏移因子為1.1

(setq addlist (cons (cons 63 256) addlist))?;填充顏色使用圖形背景顏色

(setq addlist (cons (cons 90 3) addlist))?;表示使用背景顏色,另外組碼441為背景的透明度,目前版本無法使用,系統會自動增加該組碼

(if (= (assoc 45 nlist) nil) ???;如果多行文本未使用背景遮罩,增加組碼

(progn

(setq nlist (append nlist addlist))?;增加上面3個組碼

(entmod nlist)????;更新顯示

)

(progn?????;如果已使用背景遮罩,直接更改組碼

(setq nlist (subst (cons 45 1.1) (assoc 45 nlist) nlist)) ;作用同上

(setq nlist (subst (cons 63 256) (assoc 63 nlist) nlist))

(setq nlist (subst (cons 90 3) (assoc 90 nlist) nlist))

(entmod nlist)

)

)

)

)

)

)

(setq i (1+ i))

)

(setvar "OSMODE" sysosnap)??;恢復對象捕捉設置

(setvar "ANGDIR" sysang)??;恢復角度方向

(setvar "ANGBASE" sysabase)??;恢復方向的基準角度

(command "ucs" "p")???;恢復ucs

(prompt (strcat "轉換單行文本" (itoa m) "個,多行文本" (itoa n) "個。請驗證是否正確!"))

)

--------------------------------------------------------------------------------------------------

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的cad lisp 背景遮罩_给文字批量添加边界偏移因子为1.1(或其他值)的背景遮罩的源程序(有详细注解)...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。