CAD二次開發(fā)之圖形數(shù)據(jù)庫_第1頁
CAD二次開發(fā)之圖形數(shù)據(jù)庫_第2頁
CAD二次開發(fā)之圖形數(shù)據(jù)庫_第3頁
CAD二次開發(fā)之圖形數(shù)據(jù)庫_第4頁
CAD二次開發(fā)之圖形數(shù)據(jù)庫_第5頁
已閱讀5頁,還剩29頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、第第9章章 訪問和修改圖形數(shù)據(jù)庫訪問和修改圖形數(shù)據(jù)庫 9.1 9.1 獲取圖元的名字獲取圖元的名字 AutoCADAutoCAD的圖形是由多個(gè)圖形對(duì)象組成的,最基本的圖形是由多個(gè)圖形對(duì)象組成的,最基本的圖形對(duì)象稱作圖元。圖元之間是以鏈表的形式存儲(chǔ)的圖形對(duì)象稱作圖元。圖元之間是以鏈表的形式存儲(chǔ)的。每個(gè)圖元都有一個(gè)用的。每個(gè)圖元都有一個(gè)用1616進(jìn)制表示的唯一的名字。進(jìn)制表示的唯一的名字。 entnextentnext函數(shù)可以獲取圖形庫第一個(gè)圖元的名字或函數(shù)可以獲取圖形庫第一個(gè)圖元的名字或指定圖元的下一個(gè)圖元的名字。指定圖元的下一個(gè)圖元的名字。 entlastentlast函數(shù)可以獲取圖形庫最后一

2、個(gè),即最新生函數(shù)可以獲取圖形庫最后一個(gè),即最新生成的圖元的名字。成的圖元的名字。 通過通過entnextentnext函數(shù),可以訪問到圖形庫函數(shù),可以訪問到圖形庫的的每一個(gè)圖每一個(gè)圖元。元。 假定本作業(yè)依次繪制了一條直線、一個(gè)圓和一個(gè)圓弧。假定本作業(yè)依次繪制了一條直線、一個(gè)圓和一個(gè)圓弧。(setq e1(entnext)(setq e1(entnext);返回圖形庫第一個(gè)圖元即這條直線;返回圖形庫第一個(gè)圖元即這條直線的圖元名的圖元名,并將其賦給了變量,并將其賦給了變量e1e1。(setq e2(entnext e1)(setq e2(entnext e1);返回圖形庫;返回圖形庫e1e1的下一

3、個(gè)圖元即這的下一個(gè)圖元即這個(gè)圓的圖元名個(gè)圓的圖元名,并將其賦給了變,并將其賦給了變量量e2e2。(setq e3(entnext e2);返回圖形庫;返回圖形庫e2的下一個(gè)圖元即即這個(gè)的下一個(gè)圖元即即這個(gè)圖弧的圖元名圖弧的圖元名,并將其賦給了變量,并將其賦給了變量e3。 (setq e4(entlast)(setq e4(entlast);返回圖形庫最后一個(gè)圖元即這個(gè)圖;返回圖形庫最后一個(gè)圖元即這個(gè)圖弧的圖元名弧的圖元名,并將其賦給了變量,并將其賦給了變量e1e1。 因?yàn)閳A弧既是第因?yàn)閳A弧既是第3 3個(gè)圖元,也是最后一個(gè)圖元,所以個(gè)圖元,也是最后一個(gè)圖元,所以e3e3和和e4e4記錄的是同一圖

4、元的名字。記錄的是同一圖元的名字?!纠纠?-19-1】繪制】繪制下下圖所示的圖所示的4 4個(gè)帶有中心線的螺紋孔。個(gè)帶有中心線的螺紋孔。要求首先獲取中心線的螺紋孔的圖元名,然后復(fù)制這要求首先獲取中心線的螺紋孔的圖元名,然后復(fù)制這些指定名字的圖元。些指定名字的圖元。 以下表達(dá)式首先生成了兩條中心線和以下表達(dá)式首先生成了兩條中心線和1 1個(gè)螺紋孔。個(gè)螺紋孔。在生成這些圖元的同時(shí)獲取并保存了這些圖元的名字在生成這些圖元的同時(shí)獲取并保存了這些圖元的名字為為e1e1、e2e2、e3e3和和e4e4。 (command layer m zhongxin l center )(command layer m

5、 zhongxin l center )(command line -5,0 5,0 )(command line -5,0 5,0 )(setq e1(entlast)(setq e1(entlast)(command line 0,-5 0,5 )(command line 0,-5 0,5 )(setq e2(entlast)(setq e2(entlast)(command layer m cuxian lw 0.3 )(command layer m cuxian lw 0.3 )(command circle 0,0 3)(command circle 0,0 3)(setq e3

6、(entlast)(setq e3(entlast)(command layer m xixian )(command layer m xixian )(command arc -3.5,0 0,3.5 0,-3.5)(command arc -3.5,0 0,3.5 0,-3.5)(setq e4(entlast)(setq e4(entlast) 以下表達(dá)式調(diào)用以下表達(dá)式調(diào)用AutoCADAutoCAD的的copycopy命令,復(fù)制命令,復(fù)制3 3個(gè)帶個(gè)帶有有中心線的螺紋孔。中心線的螺紋孔。(command copy e1 e2 e3 e4 m 0,0 12,0 (command copy

7、 e1 e2 e3 e4 m 0,0 12,0 24,0 36,0 )24,0 36,0 )例例9-2 定義繪制圖定義繪制圖b所示圖形的命令。插入點(diǎn)所示圖形的命令。插入點(diǎn)p0、直徑、直徑d、寬度、寬度b和和h作為繪制該圖形時(shí)交互輸入的參數(shù)。該例的主要目的是示作為繪制該圖形時(shí)交互輸入的參數(shù)。該例的主要目的是示范如何利用圖元名實(shí)現(xiàn)范如何利用圖元名實(shí)現(xiàn)AutoCAD的圖形編輯和填充剖面線。的圖形編輯和填充剖面線。 a ba b(defun c:keyway()(defun c:keyway()(setq pc (getpoint (setq pc (getpoint 輸入定位點(diǎn):輸入定位點(diǎn): )(s

8、etq d (getdist pc (setq d (getdist pc 輸入軸的直徑:輸入軸的直徑:)(setq b (getdist pc (setq b (getdist pc 輸入鍵槽的寬度:輸入鍵槽的寬度:)(setq w (getdist pc (setq w (getdist pc 輸入鍵槽的深度:輸入鍵槽的深度:)(setq r (setq r (* * 0.5 d) 0.5 d)(command circle pc r) (command circle pc r) ;繪制圓;繪制圓(setq e1 (entlast) (setq e1 (entlast) ;將;將entla

9、stentlast返回的該圓的圖元名賦給返回的該圓的圖元名賦給e1e1(setq p0(polar pc 0 r) (setq p0(polar pc 0 r) ;p0p0是圓上一點(diǎn),將用于修剪該圓是圓上一點(diǎn),將用于修剪該圓(setq p1(list (car pc) (+ (cadr pc) (setq p1(list (car pc) (+ (cadr pc) (* * 0.5 b) 0.5 b)(setq p2(list (+ (car pc) (setq p2(list (+ (car pc) (* * 1.2 r) (cadr p1) 1.2 r) (cadr p1)(command

10、 line p1 p2 )(command line p1 p2 )(setq e2 (entlast) (setq e2 (entlast) ;將;將entlastentlast返回的該直線的圖元名賦給返回的該直線的圖元名賦給e2e2(setq p3(list (car pc) (- (cadr pc) (setq p3(list (car pc) (- (cadr pc) (* * 0.5 b) 0.5 b)(setq p4(list (car p2) (cadr p3)(setq p4(list (car p2) (cadr p3)(command line p3 p4 )(comman

11、d line p3 p4 )(setq e3 (entlast) (setq e3 (entlast) ;將;將entlastentlast返回的該直線的圖元名賦給返回的該直線的圖元名賦給e3e3(setq p5(list (+ (car pc) (- r w) (+ (cadr pc) (setq p5(list (+ (car pc) (- r w) (+ (cadr pc) (* * 0.5 0.5 b)b)(setq p6(list (+ (car pc) (- r w) (- (cadr pc) (setq p6(list (+ (car pc) (- r w) (- (cadr p

12、c) (* * 0.5 0.5 b)b)(command line p5 p6 )(command line p5 p6 )(setq e4 (entlast) (setq e4 (entlast) ;將;將entlastentlast返回的該直線的圖元名賦給返回的該直線的圖元名賦給e4e4;e1e1、e2e2等作為剪切邊,等作為剪切邊,p0p0、p1p1等點(diǎn)確定被剪邊和剪去哪一段等點(diǎn)確定被剪邊和剪去哪一段(command trim e1 e2 e3 e4 p0 p1 p2 p3 p4 )(command trim e1 e2 e3 e4 p0 p1 p2 p3 p4 );e1e1、e2e2等

13、作為剖面域的邊界等作為剖面域的邊界繪制剖面線繪制剖面線(command hatch ansi31 2 0 e1 e2 e3 e4 ) (command hatch ansi31 2 0 e1 e2 e3 e4 ) ;) )9.2 9.2 圖元表圖元表 圖元表記錄著圖元的名字、類型、幾何數(shù)據(jù)、圖層、顏色圖元表記錄著圖元的名字、類型、幾何數(shù)據(jù)、圖層、顏色等信息。通過修改或創(chuàng)建圖元表,可以實(shí)現(xiàn)編輯或生成圖元。等信息。通過修改或創(chuàng)建圖元表,可以實(shí)現(xiàn)編輯或生成圖元。9.2.1 9.2.1 獲取圖元表獲取圖元表 例如輸入下面例如輸入下面3 3個(gè)表達(dá)式:個(gè)表達(dá)式:(command text 10,20 5

14、0 ABCDE)(command text 10,20 5 0 ABCDE);書寫文本;書寫文本(setq e(entlast)(setq e(entlast);獲取文本的圖元名,將圖元的名字賦給變量;獲取文本的圖元名,將圖元的名字賦給變量e e。(setq elist(entget e) (setq elist(entget e) ;獲取圖元名字為;獲取圖元名字為e e的圖元表。的圖元表。 在在 Command: 提示下鍵入提示下鍵入!elist或在控制臺(tái)或在控制臺(tái) _$ 提示下鍵入提示下鍵入elist,即可得到以下該圖元的圖元表。,即可得到以下該圖元的圖元表。 (-1 . )(-1 . )

15、;圖元名;圖元名 (0 . TEXT)(0 . TEXT);圖元種類;圖元種類 (330 . )(330 . );軟指針句柄;軟指針句柄 (5 . 19F)(5 . 19F);圖元描述字;圖元描述字 (100 . AcDbEntity)(100 . AcDbEntity);AutoCADAutoCAD圖元圖元 (67 . 0)(67 . 0);模型空間;模型空間 (410 . Model)(410 . Model);模型空間標(biāo)識(shí);模型空間標(biāo)識(shí) (8 . 0) (8 . 0) ;所在圖層名;所在圖層名 (100 . AcDbText) (100 . AcDbText) ;AutoCADAutoC

16、AD文本文本 (10 10.0 20.0 0.0) (10 10.0 20.0 0.0) ;定位點(diǎn)坐標(biāo);定位點(diǎn)坐標(biāo) (40 . 5.0)(40 . 5.0);文本字高;文本字高 (1 . ABCDE)(1 . ABCDE);文本內(nèi)容;文本內(nèi)容 (50 . 0.0) (50 . 0.0);文本的旋轉(zhuǎn)角度;文本的旋轉(zhuǎn)角度 (41 . 1.0)(41 . 1.0);文字的寬度因子;文字的寬度因子 (51 . 0.0)(51 . 0.0);文字的傾斜角度;文字的傾斜角度 (7 . STANDARD)(7 . STANDARD);字樣的名字;字樣的名字 (71 . 0)(71 . 0);正常文本(非左右

17、或上下鏡像的文本);正常文本(非左右或上下鏡像的文本) (72 . 0)(72 . 0);左下角點(diǎn)對(duì)齊方式;左下角點(diǎn)對(duì)齊方式 (11 0.0 0.0 0.0)(11 0.0 0.0 0.0);輔助的定位點(diǎn)坐標(biāo);輔助的定位點(diǎn)坐標(biāo) (210 0.0 0.0 1.0)(210 0.0 0.0 1.0);厚度方向;厚度方向 (100 . AcDbText) (100 . AcDbText) ;AutoCADAutoCAD文本文本 (73 . 0)(73 . 0);不垂直書寫;不垂直書寫 ) )對(duì)圖元表的補(bǔ)充說明:對(duì)圖元表的補(bǔ)充說明:(1 1)圖元表的每個(gè)元素還是表,子表的第一個(gè)元素是具有一定)圖元表的

18、每個(gè)元素還是表,子表的第一個(gè)元素是具有一定含義的整數(shù),其含義與圖元在含義的整數(shù),其含義與圖元在DXFDXF(圖形交換文件)中(圖形交換文件)中實(shí)體代碼實(shí)體代碼的含義相同(詳見的含義相同(詳見AutoCADAutoCAD有關(guān)有關(guān)DXFDXF文件的介紹)。文件的介紹)。(2 2)多數(shù)的子表采用了點(diǎn)對(duì)結(jié)構(gòu),這樣既節(jié)省存儲(chǔ)空間,也可)多數(shù)的子表采用了點(diǎn)對(duì)結(jié)構(gòu),這樣既節(jié)省存儲(chǔ)空間,也可以簡化運(yùn)算,詳見第以簡化運(yùn)算,詳見第2.42.4節(jié)數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)。節(jié)數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)。(3 3)其他種類圖元的圖元表的非幾何信息部份基本相同,幾何)其他種類圖元的圖元表的非幾何信息部份基本相同,幾何信息部份有些差異。信息部份

19、有些差異。9.2.2 9.2.2 對(duì)圖元表的操作對(duì)圖元表的操作 假定假定elistelist是某圖元的圖元表。利用是某圖元的圖元表。利用AutoLISPAutoLISP有關(guān)表處理的有關(guān)表處理的函數(shù)可以修改圖元表。函數(shù)可以修改圖元表。(1 1)了解圖元的種類)了解圖元的種類(cdr (assoc 0 elist)(cdr (assoc 0 elist) 該表達(dá)式的內(nèi)層表達(dá)式中,用該表達(dá)式的內(nèi)層表達(dá)式中,用0 0作為關(guān)鍵字,在作為關(guān)鍵字,在elistelist表中表中尋找相關(guān)的子表,返回有關(guān)圖元種類的子表尋找相關(guān)的子表,返回有關(guān)圖元種類的子表(0 . (0 . 圖元種類圖元種類),由于此表為點(diǎn)對(duì),

20、所以由于此表為點(diǎn)對(duì),所以cdrcdr函數(shù)返回它的第函數(shù)返回它的第2 2個(gè)元素個(gè)元素 圖元種類圖元種類 。若此圖元為直線,則返回若此圖元為直線,則返回LINELINE,若此圖元為單行文本,則返,若此圖元為單行文本,則返回回TEXTTEXT。(2 2)了解圖元所在圖層的名字)了解圖元所在圖層的名字(cdr (assoc 8 elist)(cdr (assoc 8 elist) 該表達(dá)式的內(nèi)層表達(dá)式中,用該表達(dá)式的內(nèi)層表達(dá)式中,用8作為關(guān)鍵字,返回作為關(guān)鍵字,返回elist表中有表中有關(guān)圖層名字的子表關(guān)圖層名字的子表(8 . 圖層名圖層名),由于此表為點(diǎn)對(duì),所以,由于此表為點(diǎn)對(duì),所以cdr函函數(shù)返回

21、它的第數(shù)返回它的第2個(gè)元素個(gè)元素圖層名圖層名。 (3 3)了解圓、圓弧的半徑或單行文本的字高)了解圓、圓弧的半徑或單行文本的字高(cdr (assoc 40 elist)(cdr (assoc 40 elist) 該表達(dá)式的內(nèi)層表達(dá)式中,用該表達(dá)式的內(nèi)層表達(dá)式中,用4040作為關(guān)鍵字,返回作為關(guān)鍵字,返回elistelist表表中有關(guān)圓、圓弧的半徑或單行文本的字高的子表中有關(guān)圓、圓弧的半徑或單行文本的字高的子表(40 . (40 . 數(shù)值數(shù)值) ),由于此表為點(diǎn)對(duì),所以由于此表為點(diǎn)對(duì),所以cdrcdr函數(shù)返回它的第函數(shù)返回它的第2 2個(gè)元素具體的數(shù)值。個(gè)元素具體的數(shù)值。(4 4)了解直線的起點(diǎn)

22、、圓、圓弧的中心或單行文本的定位點(diǎn))了解直線的起點(diǎn)、圓、圓弧的中心或單行文本的定位點(diǎn)(cdr (assoc 10 elist)(cdr (assoc 10 elist) 該表達(dá)式的內(nèi)層表達(dá)式中,用該表達(dá)式的內(nèi)層表達(dá)式中,用1010作為關(guān)鍵字,返回作為關(guān)鍵字,返回elistelist表中表中有關(guān)直線的起點(diǎn)、圓、圓弧的中心或單行文本的定位點(diǎn)的子表有關(guān)直線的起點(diǎn)、圓、圓弧的中心或單行文本的定位點(diǎn)的子表(10 (10 數(shù)值數(shù)值 數(shù)值數(shù)值 數(shù)值數(shù)值) ),注意此表不再是點(diǎn)對(duì),所以,注意此表不再是點(diǎn)對(duì),所以cdrcdr函數(shù)函數(shù)返回去掉它的第返回去掉它的第1 1個(gè)元素之后的子表,即點(diǎn)的個(gè)元素之后的子表,即點(diǎn)

23、的XYZXYZ坐標(biāo)。坐標(biāo)。(5 5)用圓、圓弧的半徑或單行文本的新值取代其老值)用圓、圓弧的半徑或單行文本的新值取代其老值(setq elist (subst (cons 40 h)(assoc 40 elist)elist)(setq elist (subst (cons 40 h)(assoc 40 elist)elist)(cons 40 h)構(gòu)造一個(gè)新的點(diǎn)對(duì)子表,例如(構(gòu)造一個(gè)新的點(diǎn)對(duì)子表,例如(40 . 3.5)。)。(assoc 40 elist)返回返回elist表內(nèi)的點(diǎn)對(duì)子表,例如(表內(nèi)的點(diǎn)對(duì)子表,例如(40 . 5.0)。)。subst函數(shù)用函數(shù)用新子表,例如(新子表,例如(

24、40 . 3.5),替換),替換elist表內(nèi)的老子表(表內(nèi)的老子表(40 . 5.0)。)。最外層的最外層的setq函數(shù)將替換后的賦給了變量函數(shù)將替換后的賦給了變量elist。 (6 6)更新圖形庫的圖元表)更新圖形庫的圖元表(entmod elist)(entmod elist)entmodentmod函數(shù)的功能是更新圖形庫的指定圖元表的圖元,即更新函數(shù)的功能是更新圖形庫的指定圖元表的圖元,即更新了實(shí)際圖形對(duì)象。例如單行文本的字高由了實(shí)際圖形對(duì)象。例如單行文本的字高由5.05.0改變?yōu)楦淖優(yōu)?.53.5。9.2.3 9.2.3 舉例舉例【例【例9-39-3】定義將本作業(yè)所有的單行文本改變?yōu)?/p>

25、指定高度的命令。】定義將本作業(yè)所有的單行文本改變?yōu)橹付ǜ叨鹊拿睢?右圖所示為修改圖形右圖所示為修改圖形數(shù)據(jù)庫內(nèi)單行文本字高數(shù)據(jù)庫內(nèi)單行文本字高的程序流程圖,其中的程序流程圖,其中e1是是用于存放圖元名的變量。用于存放圖元名的變量。單行文本的圖元種類是單行文本的圖元種類是TEXT,用,用MTEXT書寫書寫的是段落文本,它的圖的是段落文本,它的圖元種類是元種類是MTEXT。因此。因此本程序不能修改用本程序不能修改用MTEXT書寫的文本。書寫的文本。開始輸入新的字高h(yuǎn)得到第一個(gè)圖元的名字e1e1的類型是TEXT?用新的字高更新e1的圖元表e1的名字為nil ?令e1為e1的下一個(gè)圖元名結(jié)束否否否否

26、是是是是以下是定義改變本作業(yè)所有單行文本為指定的高度命令的程序以下是定義改變本作業(yè)所有單行文本為指定的高度命令的程序代碼:代碼:(defun c:cth( / h e el)(defun c:cth( / h e el)(setq h(getdist n(setq h(getdist n輸入文本新的字高輸入文本新的字高: ): )(setq e(entnext)(setq e(entnext);得到第一個(gè)圖元的名字;得到第一個(gè)圖元的名字(while e (while e ;當(dāng);當(dāng)e e有定義時(shí)做以下運(yùn)算有定義時(shí)做以下運(yùn)算(setq el(entget e)(setq el(entget e);

27、得到第一個(gè)圖元的圖元表;得到第一個(gè)圖元的圖元表(if (= TEXT (cdr (assoc 0 el) (if (= TEXT (cdr (assoc 0 el) (progn (progn ;如果圖元的類型為;如果圖元的類型為TEXTTEXT時(shí)做以下運(yùn)算時(shí)做以下運(yùn)算(setq el(subst (cons 40 h)(assoc 40 el)el)(setq el(subst (cons 40 h)(assoc 40 el)el);新字高替換圖;新字高替換圖元表的原字高元表的原字高(if (= 3 (cdr (assoc 72 el)(if (= 3 (cdr (assoc 72 el);

28、如果文本為;如果文本為AlignAlign方式對(duì)齊方式對(duì)齊(setq el(subst (cons 72 0) (assoc 72 el) el)(setq el(subst (cons 72 0) (assoc 72 el) el);忽略;忽略第二個(gè)定位點(diǎn)第二個(gè)定位點(diǎn)) )(entmod el)(entmod el);更新圖形數(shù)據(jù)庫的;更新圖形數(shù)據(jù)庫的elel圖元表圖元表) ) )(setq e(entnext e)(setq e(entnext e);令;令e e等于等于e e的下一個(gè)圖元名的下一個(gè)圖元名) )(princ)(princ);靜默退出;靜默退出) )9.3 9.3 選擇集選擇

29、集 選擇集是有名字的一些圖元名的集合,常用于編輯或修改圖選擇集是有名字的一些圖元名的集合,常用于編輯或修改圖形對(duì)象的命令。形對(duì)象的命令。9.3.1 9.3.1 常用的有關(guān)選擇集的函數(shù)常用的有關(guān)選擇集的函數(shù)(1 1)(ssget (ssget 選擇方法選擇方法 點(diǎn)點(diǎn)1 1 點(diǎn)點(diǎn)2 2 點(diǎn)表點(diǎn)表 過濾表過濾表)創(chuàng)建一個(gè)選擇集。有以下一些選擇方法。創(chuàng)建一個(gè)選擇集。有以下一些選擇方法。C C(CrossingCrossing):與點(diǎn)):與點(diǎn)1 1、點(diǎn)、點(diǎn)2 2所確定的窗口相交的那些對(duì)象被所確定的窗口相交的那些對(duì)象被選中。選中。CPCP(CpolygonCpolygon):與點(diǎn)表所確定的多邊形相交的那些

30、對(duì)象被選):與點(diǎn)表所確定的多邊形相交的那些對(duì)象被選中。中。F F(FenceFence):與點(diǎn)表所確定的折線相交的那些對(duì)象被選中。):與點(diǎn)表所確定的折線相交的那些對(duì)象被選中。I I(ImpliedImplied):處于夾?。ǎ禾幱趭A?。℅ripsGrips)狀態(tài)的那些對(duì)象被選中)狀態(tài)的那些對(duì)象被選中L L(LastLast):最新的、最后繪制的那個(gè)圖元被選中。由于在多):最新的、最后繪制的那個(gè)圖元被選中。由于在多文檔環(huán)境下最后繪制的對(duì)象并不一定是可見的,例如,這個(gè)繪文檔環(huán)境下最后繪制的對(duì)象并不一定是可見的,例如,這個(gè)繪圖窗口被最小化或未放置在頂層,這時(shí)使用該選項(xiàng)將返回圖窗口被最小化或未放置在

31、頂層,這時(shí)使用該選項(xiàng)將返回nilnil。P P(PreviousPrevious):上一次創(chuàng)建的選擇集。):上一次創(chuàng)建的選擇集。W W(WindowWindow):整體在點(diǎn)):整體在點(diǎn)1 1、點(diǎn)、點(diǎn)2 2所確定的窗口之內(nèi)的那些對(duì)象所確定的窗口之內(nèi)的那些對(duì)象被選中。被選中。WPWP(WpolygonWpolygon):整體在點(diǎn)表所確定的多邊形之內(nèi)的那些對(duì)象):整體在點(diǎn)表所確定的多邊形之內(nèi)的那些對(duì)象被選中。被選中。X X:整個(gè)數(shù)據(jù)庫,包括被關(guān)閉、被凍結(jié)圖層上的對(duì)象和屏幕之:整個(gè)數(shù)據(jù)庫,包括被關(guān)閉、被凍結(jié)圖層上的對(duì)象和屏幕之外的那些對(duì)象被選中。外的那些對(duì)象被選中。:E:E:通過光標(biāo)拾取框的那些對(duì)象被

32、選中。:通過光標(biāo)拾取框的那些對(duì)象被選中。:N:N:在該函數(shù)的執(zhí)行過程中,為選定對(duì)象調(diào)用:在該函數(shù)的執(zhí)行過程中,為選定對(duì)象調(diào)用ssnamexssnamex函數(shù)獲函數(shù)獲得容器塊和轉(zhuǎn)換矩陣的附加信息。只有通過得容器塊和轉(zhuǎn)換矩陣的附加信息。只有通過WW、CC和點(diǎn)拾取和點(diǎn)拾取選擇方法時(shí),才可以使用這一附加信息。選擇方法時(shí),才可以使用這一附加信息。:S:S:只允許單一選擇集。:只允許單一選擇集。點(diǎn)點(diǎn)1 1、點(diǎn)點(diǎn)2 2、點(diǎn)表點(diǎn)表和和過濾表過濾表是與選擇方法配合使用的。是與選擇方法配合使用的。過濾表過濾表的功能是根據(jù)過濾表描述的條件對(duì)所選的對(duì)象進(jìn)行篩選,的功能是根據(jù)過濾表描述的條件對(duì)所選的對(duì)象進(jìn)行篩選,只保留

33、滿足過濾條件的對(duì)象。過濾表是只保留滿足過濾條件的對(duì)象。過濾表是entgetentget函數(shù)返回的圖元函數(shù)返回的圖元表中的點(diǎn)對(duì),例如表中的點(diǎn)對(duì),例如(0 . LINE)(0 . LINE)、(8 . LAYER1)(8 . LAYER1)、(6 . (6 . center)center)、(62 . 1)(62 . 1),點(diǎn)對(duì)的第,點(diǎn)對(duì)的第1 1個(gè)元素是圖形交換文件中的個(gè)元素是圖形交換文件中的組碼,詳見組碼,詳見AutoCADAutoCAD有關(guān)有關(guān)DXFDXF文件的介紹。文件的介紹。 如果僅提供了一個(gè)點(diǎn),該函數(shù)認(rèn)為用戶通過這個(gè)點(diǎn)來選擇單如果僅提供了一個(gè)點(diǎn),該函數(shù)認(rèn)為用戶通過這個(gè)點(diǎn)來選擇單個(gè)的對(duì)象

34、。如果省略所有的參數(shù),在調(diào)用該函數(shù)時(shí)將出現(xiàn)個(gè)的對(duì)象。如果省略所有的參數(shù),在調(diào)用該函數(shù)時(shí)將出現(xiàn)Select objectsSelect objects: 提示,這用戶以交互方式選擇對(duì)象。在這提示,這用戶以交互方式選擇對(duì)象。在這種情況下,亮顯被選取的對(duì)象。種情況下,亮顯被選取的對(duì)象。 該函數(shù)忽略當(dāng)前設(shè)置的對(duì)象捕捉模式。由于選擇集會(huì)占用臨該函數(shù)忽略當(dāng)前設(shè)置的對(duì)象捕捉模式。由于選擇集會(huì)占用臨時(shí)文件存儲(chǔ)區(qū),所以時(shí)文件存儲(chǔ)區(qū),所以AutoLISPAutoLISP不允許同時(shí)打開不允許同時(shí)打開128128以上的個(gè)選擇以上的個(gè)選擇集。集。 如果成功該函數(shù)返回創(chuàng)建選擇集的名稱,例如如果成功該函數(shù)返回創(chuàng)建選擇集的名

35、稱,例如Selection set: 1,否則返回,否則返回nilnil。 以下是調(diào)用該函數(shù)的一些表達(dá)式。以下是調(diào)用該函數(shù)的一些表達(dá)式。 (setq s1 (ssget (2 2)(setq s1 (ssget (2 2);創(chuàng)建一個(gè)選擇集,如果存在一;創(chuàng)建一個(gè)選擇集,如果存在一個(gè)通過點(diǎn)個(gè)通過點(diǎn)(2,2)(2,2)的圖元,它將被選中并將返回的選擇集的名字賦的圖元,它將被選中并將返回的選擇集的名字賦給變量給變量s1s1 (setq s2 (ssget w (0 0) (10 10) (setq s2 (ssget w (0 0) (10 10);創(chuàng)建一;創(chuàng)建一個(gè)選擇集,它的成員是所有整體在對(duì)角點(diǎn)個(gè)

36、選擇集,它的成員是所有整體在對(duì)角點(diǎn)(0,0)(0,0)和和(10,10)(10,10)窗口內(nèi)窗口內(nèi)的圖元,如果成功則將選擇集的名字賦給變量的圖元,如果成功則將選擇集的名字賦給變量s2s2 (setq s3 (ssget X (0 . LINE) (62 . 5) (setq s3 (ssget X (0 . LINE) (62 . 5) ;(0 . LINE) (62 . 5)(0 . LINE) (62 . 5)是過濾表,該選擇集的成員是當(dāng)前作是過濾表,該選擇集的成員是當(dāng)前作業(yè)中所有藍(lán)色的直線,如果成功將選擇集的名字賦給變量業(yè)中所有藍(lán)色的直線,如果成功將選擇集的名字賦給變量s3s3 (set

37、q s4 (ssget) (setq s4 (ssget);以交互方式創(chuàng)建一個(gè)選擇集。執(zhí)行到;以交互方式創(chuàng)建一個(gè)選擇集。執(zhí)行到該表達(dá)式時(shí),自動(dòng)切換到圖形窗口,出現(xiàn)該表達(dá)式時(shí),自動(dòng)切換到圖形窗口,出現(xiàn)Select objectsSelect objects: 提提示,等待用戶操作。用戶此時(shí)可用各種選擇方法多次選擇,直至示,等待用戶操作。用戶此時(shí)可用各種選擇方法多次選擇,直至用空回車響應(yīng)用空回車響應(yīng)Select objectsSelect objects: 提示。選擇集由交互選擇的這提示。選擇集由交互選擇的這些圖元組成,將選擇集的名字賦給變量些圖元組成,將選擇集的名字賦給變量s4s4(2 2)(e

38、ntsel (entsel 提示信息提示信息) 提示用戶以單點(diǎn)方式選擇單個(gè)對(duì)象。若省略提示信提示用戶以單點(diǎn)方式選擇單個(gè)對(duì)象。若省略提示信息,則提示信息為息,則提示信息為Select objectSelect object: 。返回值為兩個(gè)。返回值為兩個(gè)元素組成的表,第一個(gè)元素是所選的圖元名,第二個(gè)元素組成的表,第一個(gè)元素是所選的圖元名,第二個(gè)元素是用戶選擇對(duì)象時(shí)拾取點(diǎn)在當(dāng)前元素是用戶選擇對(duì)象時(shí)拾取點(diǎn)在當(dāng)前UCSUCS下的坐標(biāo)。下的坐標(biāo)。(3 3)(ssadd (ssadd 圖元名圖元名 選擇集選擇集) 將指定的圖元加入到選擇集。如果調(diào)用該函數(shù)時(shí)無將指定的圖元加入到選擇集。如果調(diào)用該函數(shù)時(shí)無參數(shù)

39、,將創(chuàng)建一個(gè)空選擇集;如果只提供圖元名,將參數(shù),將創(chuàng)建一個(gè)空選擇集;如果只提供圖元名,將創(chuàng)建一個(gè)僅含該圖元的選擇集。創(chuàng)建一個(gè)僅含該圖元的選擇集。(4 4)(ssdel(ssdel圖元名圖元名 選擇集選擇集) ) 從選擇集內(nèi)移去指定的圖元。從選擇集內(nèi)移去指定的圖元。(5 5)(sslength ss)(sslength ss) 返回選擇集的長度,即選擇集內(nèi)圖元的數(shù)量。返回選擇集的長度,即選擇集內(nèi)圖元的數(shù)量。(6 6)(ssname (ssname 選擇集選擇集 序號(hào)序號(hào)) ) 返回選擇集中由序號(hào)指定的那個(gè)圖元名。選返回選擇集中由序號(hào)指定的那個(gè)圖元名。選擇集內(nèi)第一個(gè)元素的序號(hào)為零。擇集內(nèi)第一個(gè)元素

40、的序號(hào)為零。 9.3.2 9.3.2 舉例舉例【例【例9-49-4】 定義將選到的單行文本改變?yōu)橹付ǜ叨鹊拿睢6x將選到的單行文本改變?yōu)橹付ǜ叨鹊拿睢?defun c:csth( / h s1 n e el)(defun c:csth( / h s1 n e el)(setq h(getdist n(setq h(getdist n輸入文本的高度:輸入文本的高度:)(setq s1(ssget)(setq s1(ssget);以交互方式得到一個(gè)選擇集;以交互方式得到一個(gè)選擇集(setq n 0) (setq n 0) ;序號(hào)的初值為;序號(hào)的初值為0 0(repeat (sslength s

41、1)(repeat (sslength s1);重復(fù)執(zhí)行,執(zhí)行的次數(shù)等于所選對(duì)象的個(gè)數(shù);重復(fù)執(zhí)行,執(zhí)行的次數(shù)等于所選對(duì)象的個(gè)數(shù) (setq e(ssname s1 n)(setq e(ssname s1 n);得到選擇集內(nèi)第;得到選擇集內(nèi)第n n個(gè)對(duì)象的圖元名個(gè)對(duì)象的圖元名(setq el(entget e)(setq el(entget e);得到這個(gè)對(duì)象的圖元表;得到這個(gè)對(duì)象的圖元表(if (= TEXT (cdr (assoc 0 el)(if (= TEXT (cdr (assoc 0 el);判斷這個(gè)對(duì)象是否為;判斷這個(gè)對(duì)象是否為TEXTTEXT (progn (progn ;是;是

42、TEXTTEXT(setq el(subst (cons 40 h) (assoc 40 el) el)(setq el(subst (cons 40 h) (assoc 40 el) el);用新字高替;用新字高替換圖元表的原字高點(diǎn)換圖元表的原字高點(diǎn)表表(if (= 3 (cdr (assoc 72 el) (if (= 3 (cdr (assoc 72 el) ;如果文本為;如果文本為AlignAlign方式對(duì)齊方式對(duì)齊(setq el(subst (cons 72 0)(assoc 72 el) el)(setq el(subst (cons 72 0)(assoc 72 el) el)

43、;忽略第二個(gè);忽略第二個(gè)定位點(diǎn)定位點(diǎn)) ) (entmod el) (entmod el) ;更新圖形數(shù)據(jù)庫的;更新圖形數(shù)據(jù)庫的elel圖元表圖元表) ) )(setq n(1+ n) (setq n(1+ n) ;序號(hào);序號(hào)n n的數(shù)量加的數(shù)量加1 1) ) )9.4 9.4 符號(hào)表符號(hào)表 AutoCADAutoCAD的符號(hào)表是指視窗表、線型表、圖層表、字樣表、的符號(hào)表是指視窗表、線型表、圖層表、字樣表、視圖表、用戶坐標(biāo)系表、用戶應(yīng)用程序標(biāo)識(shí)表、尺寸式樣表和塊視圖表、用戶坐標(biāo)系表、用戶應(yīng)用程序標(biāo)識(shí)表、尺寸式樣表和塊記錄表。在某些情況下,僅從圖元表不能了解圖元的全部特性,記錄表。在某些情況下,

44、僅從圖元表不能了解圖元的全部特性,例如當(dāng)圖元的顏色、線型與所在圖層一致時(shí),圖元表中沒有記錄例如當(dāng)圖元的顏色、線型與所在圖層一致時(shí),圖元表中沒有記錄顏色、線型的子表,因此,了解這樣圖元的顏色,就需要訪問圖顏色、線型的子表,因此,了解這樣圖元的顏色,就需要訪問圖層表。層表。9.4.1 9.4.1 符號(hào)表操作函數(shù)符號(hào)表操作函數(shù)(1 1)(tblnext (tblnext 表的種類表的種類 回繞回繞) 表的種類可以是表的種類可以是LAYERLAYER、LTYPELTYPE、VIEWVIEW、STYLESTYLE、BLOCKBLOCK、UCSUCS、APPIDAPPID、DIMSTYLEDIMSTYLE

45、和和VPORTVPORT。若回繞項(xiàng)為。若回繞項(xiàng)為T T,則返回指定種類的第一個(gè)符號(hào)表,若該項(xiàng)為,則返回指定種類的第一個(gè)符號(hào)表,若該項(xiàng)為nilnil或缺省,則返或缺省,則返回指定種類的當(dāng)前表符號(hào)的下一個(gè)符號(hào)表?;刂付ǚN類的當(dāng)前表符號(hào)的下一個(gè)符號(hào)表。 例如返回圖層表,若當(dāng)前作業(yè)的圖層名依次是例如返回圖層表,若當(dāng)前作業(yè)的圖層名依次是0、layer1、 layer2layer2和和layer3layer3。 隨時(shí)輸入表達(dá)式隨時(shí)輸入表達(dá)式(tblnext layer T)(tblnext layer T)都返回都返回(0 . (0 . LAYER) (2 . 0) (70 . 0) (62 . 7) (

46、6 . LAYER) (2 . 0) (70 . 0) (62 . 7) (6 . CONTINUOUS)CONTINUOUS)。因?yàn)榛乩@項(xiàng)為。因?yàn)榛乩@項(xiàng)為T T,所以返回當(dāng)前作業(yè),所以返回當(dāng)前作業(yè)的第一個(gè)圖層表。的第一個(gè)圖層表。 接著輸入表達(dá)式接著輸入表達(dá)式(tblnext layer nil)(tblnext layer nil)或或(tblnext layer)(tblnext layer)返回返回(0 . LAYER) (2 . (0 . LAYER) (2 . layer1) (70 . 0) (62 . 7) (6 . CONTINUOUS)layer1) (70 . 0) (62

47、 . 7) (6 . CONTINUOUS)。因?yàn)榛乩@項(xiàng)為因?yàn)榛乩@項(xiàng)為nilnil或缺省,所以返回當(dāng)前圖層表的下一或缺省,所以返回當(dāng)前圖層表的下一個(gè)圖層表。同樣的操作依次返回個(gè)圖層表。同樣的操作依次返回layer2layer2、layer3layer3的圖的圖層表。再輸入這個(gè)表達(dá)式,將返回層表。再輸入這個(gè)表達(dá)式,將返回nilnil,因?yàn)?,因?yàn)閘ayer3layer3是是最后的圖層。最后的圖層。 例如返回塊定義表,若當(dāng)前作業(yè)已定義了名字為例如返回塊定義表,若當(dāng)前作業(yè)已定義了名字為BOXBOX的圖塊,輸入表達(dá)式的圖塊,輸入表達(dá)式(tblnext block) (tblnext block) 返回返

48、回(0 . BLOCK) (2 . BOX) (70 . 0) (10 9.0 (0 . BLOCK) (2 . BOX) (70 . 0) (10 9.0 2.0 0.0) (-2 . 2.0 0.0) (-2 . )1dca370)(2 2)(tblobjname (tblobjname 表的種類表的種類 表名表名) ) 返回指定種類表的圖元名。如果找到,返回符號(hào)返回指定種類表的圖元名。如果找到,返回符號(hào)表的圖元名。返回的圖元名可以用于表的圖元名。返回的圖元名可以用于entgetentget和和entmod entmod 操作。例如操作。例如(tblobjname layer 0)(tbl

49、objname layer 0),返回名字為,返回名字為0 0的圖層表的圖元名的圖層表的圖元名。 (3 3)(tblsearch (tblsearch 表的種類表的種類 表名表名 設(shè)置下一個(gè)設(shè)置下一個(gè)) 返回指定種類和名字的符號(hào)表。如果返回指定種類和名字的符號(hào)表。如果 設(shè)置下一個(gè)設(shè)置下一個(gè) 為為T T,該表將作為定位點(diǎn),隨后調(diào)用,該表將作為定位點(diǎn),隨后調(diào)用tblnexttblnext函數(shù)在不回函數(shù)在不回繞 的 設(shè) 置 下 , 就 會(huì) 返 回 該 表 的 下 一 個(gè) 表 。 例 如繞 的 設(shè) 置 下 , 就 會(huì) 返 回 該 表 的 下 一 個(gè) 表 。 例 如(tblsearch layer t)

50、 (tblsearch layer t) 返回返回(0 . LAYER) (2 . (0 . LAYER) (2 . layer1) (70 . 0) (62 . 7) (6 . CONTINUOUS)layer1) (70 . 0) (62 . 7) (6 . CONTINUOUS)圖層表,且圖層表,且layer1layer1為定位點(diǎn),接著輸入表達(dá)式為定位點(diǎn),接著輸入表達(dá)式(tblnext (tblnext layer )layer )返回返回(0 . LAYER) (2 . layer2) (70 . (0 . LAYER) (2 . layer2) (70 . 0) (62 . 7) (6 . CONTINUOUS)0) (62 . 7) (6 . CONTINUOUS)圖層表。圖層表。(defun c:ccolor(defun c:ccolor(/ oldcolor new

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論