日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

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

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

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

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

在Autodesk官方網(wǎng)站技術(shù)支持知識(shí)庫(kù)查詢(xún),其中關(guān)于多行文字的背景遮罩邊界偏移因子默認(rèn)值修改的問(wèn)題(問(wèn)題ID號(hào)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.”意為在背景遮罩對(duì)話(huà)框中,邊界偏移因子的默認(rèn)值為1.5,在當(dāng)前的AutoCAD版本中,該默認(rèn)值是不能修改的。

所以寫(xiě)了此程序

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

我加上了詳細(xì)注解,覺(jué)得有用的話(huà)拿去吧.

注意:單行文本轉(zhuǎn)多行文本時(shí)文本寬度的計(jì)算要選取適當(dāng)系數(shù)

bg_mask.lsp

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

;這個(gè)lisp程序的作用是,將單行文本轉(zhuǎn)換為多行文本,為多行文本設(shè)置背景遮罩

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

;s1選擇集名稱(chēng),i m n 計(jì)數(shù)器,addlist增加的組碼

;entname 圖元名,nlist 圖元數(shù)據(jù),tid 圖元標(biāo)志(若為T(mén)EXT則表示為單行文本),tt 文本,th文本高度

;pt 文本基點(diǎn),tang 文本旋轉(zhuǎn)角度,ttlen 文本大致長(zhǎng)度,tstr 相對(duì)坐標(biāo)形式的多行文本的另一點(diǎn)

(defun c:bg()

;首先要對(duì)圖形進(jìn)行一些設(shè)置,否則將會(huì)影響程序的使用。在程序結(jié)束前將會(huì)恢復(fù)這些設(shè)置!

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

(setvar "OSMODE" 16384)??;關(guān)閉對(duì)象捕捉

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

(setvar "ANGDIR" 0)???;設(shè)置為逆時(shí)針?lè)较?/p>

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

(setvar "ANGBASE" 0)???;設(shè)置方向的基準(zhǔn)角度為東

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

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

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

(progn ?????;構(gòu)造失敗,恢復(fù)設(shè)置退出

(setvar "OSMODE" sysosnap)??;恢復(fù)對(duì)象捕捉設(shè)置

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

(setvar "ANGBASE" sysabase)??;恢復(fù)方向的基準(zhǔn)角度

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

(exit)????;退出

)

)

(setq i 0 m 0 n 0)????;設(shè)置計(jì)數(shù)器,m為轉(zhuǎn)換單行文本個(gè)數(shù),n為多行文本個(gè)數(shù)

(repeat (sslength s1)

(setq entname (ssname s1 i))

(setq nlist (entget entname))

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

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

(progn

(setq m (1+ m))????;計(jì)數(shù)器

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

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

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

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

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

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

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

(setq tlen (sqrt (+ (* th? th) (* twid twid))))??;計(jì)算多行文本對(duì)角線(xiàn)的長(zhǎng)度

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

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

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

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

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

(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為背景的透明度,目前版本無(wú)法使用,系統(tǒng)會(huì)自動(dòng)增加該組碼

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

(progn

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

(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))?????;計(jì)數(shù)器

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

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

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

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

(progn

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

(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)??;恢復(fù)對(duì)象捕捉設(shè)置

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

(setvar "ANGBASE" sysabase)??;恢復(fù)方向的基準(zhǔn)角度

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

(prompt (strcat "轉(zhuǎn)換單行文本" (itoa m) "個(gè),多行文本" (itoa n) "個(gè)。請(qǐng)驗(yàn)證是否正確!"))

)

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

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專(zhuān)家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

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

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。