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ù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

4、元的名字。記錄的是同一圖元的名字。【例【例9-19-1】繪制】繪制下下圖所示的圖所示的4 4個帶有中心線的螺紋孔。個帶有中心線的螺紋孔。要求首先獲取中心線的螺紋孔的圖元名,然后復制這要求首先獲取中心線的螺紋孔的圖元名,然后復制這些指定名字的圖元。些指定名字的圖元。 以下表達式首先生成了兩條中心線和以下表達式首先生成了兩條中心線和1 1個螺紋孔。個螺紋孔。在生成這些圖元的同時獲取并保存了這些圖元的名字在生成這些圖元的同時獲取并保存了這些圖元的名字為為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) 以下表達式調用以下表達式調用AutoCADAutoCAD的的copycopy命令,復制命令,復制3 3個帶個帶有有中心線的螺紋孔。中心線的螺紋孔。(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所示圖形的命令。插入點所示圖形的命令。插入點p0、直徑、直徑d、寬度、寬度b和和h作為繪制該圖形時交互輸入的參數(shù)。該例的主要目的是示作為繪制該圖形時交互輸入的參數(shù)。該例的主要目的是示范如何利用圖元名實現(xiàn)范如何利用圖元名實現(xiàn)AutoCAD的圖形編輯和填充剖面線。的圖形編輯和填充剖面線。 a ba b(defun c:keyway()(defun c:keyway()(setq pc (getpoint (setq pc (getpoint 輸入定位點:輸入定位點: )(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是圓上一點,將用于修剪該圓是圓上一點,將用于修剪該圓(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等點確定被剪邊和剪去哪一段等點確定被剪邊和剪去哪一段(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)建圖元表,可以實現(xiàn)編輯或生成圖元。等信息。通過修改或創(chuàng)建圖元表,可以實現(xiàn)編輯或生成圖元。9.2.1 9.2.1 獲取圖元表獲取圖元表 例如輸入下面例如輸入下面3 3個表達式:個表達式:(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或在控制臺或在控制臺 _$ 提示下鍵入提示下鍵入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);模型空間標識;模型空間標識 (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) ;定位點坐標;定位點坐標 (40 . 5.0)(40 . 5.0);文本字高;文本字高 (1 . ABCDE)(1 . ABCDE);文本內容;文本內容 (50 . 0.0) (50 . 0.0);文本的旋轉角度;文本的旋轉角度 (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);左下角點對齊方式;左下角點對齊方式 (11 0.0 0.0 0.0)(11 0.0 0.0 0.0);輔助的定位點坐標;輔助的定位點坐標 (210 0.0 0.0 1.0)(210 0.0 0.0 1.0);厚度方向;厚度方向 (100 . AcDbText) (100 . AcDbText) ;AutoCADAutoCAD文本文本 (73 . 0)(73 . 0);不垂直書寫;不垂直書寫 ) )對圖元表的補充說明:對圖元表的補充說明:(1 1)圖元表的每個元素還是表,子表的第一個元素是具有一定)圖元表的

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

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

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

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

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

23、的XYZXYZ坐標。坐標。(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)構造一個新的點對子表,例如(構造一個新的點對子表,例如(40 . 3.5)。)。(assoc 40 elist)返回返回elist表內的點對子表,例如(表內的點對子表,例如(40 . 5.0)。)。subst函數(shù)用函數(shù)用新子表,例如(新子表,例如(

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

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

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);得到第一個圖元的名字;得到第一個圖元的名字(while e (while e ;當;當e e有定義時做以下運算有定義時做以下運算(setq el(entget e)(setq el(entget e);

27、得到第一個圖元的圖元表;得到第一個圖元的圖元表(if (= TEXT (cdr (assoc 0 el) (if (= TEXT (cdr (assoc 0 el) (progn (progn ;如果圖元的類型為;如果圖元的類型為TEXTTEXT時做以下運算時做以下運算(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方式對齊方式對齊(setq el(subst (cons 72 0) (assoc 72 el) el)(setq el(subst (cons 72 0) (assoc 72 el) el);忽略;忽略第二個定位點第二個定位點) )(entmod el)(entmod el);更新圖形數(shù)據(jù)庫的;更新圖形數(shù)據(jù)庫的elel圖元表圖元表) ) )(setq e(entnext e)(setq e(entnext e);令;令e e等于等于e e的下一個圖元名的下一個圖元名) )(princ)(princ);靜默退出;靜默退出) )9.3 9.3 選擇集選擇

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

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

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

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

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

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

35、稱,例如Selection set: 1,否則返回,否則返回nilnil。 以下是調用該函數(shù)的一些表達式。以下是調用該函數(shù)的一些表達式。 (setq s1 (ssget (2 2)(setq s1 (ssget (2 2);創(chuàng)建一個選擇集,如果存在一;創(chuàng)建一個選擇集,如果存在一個通過點個通過點(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)建一個選擇集,它的成員是所有整體在對角點個

36、選擇集,它的成員是所有整體在對角點(0,0)(0,0)和和(10,10)(10,10)窗口內窗口內的圖元,如果成功則將選擇集的名字賦給變量的圖元,如果成功則將選擇集的名字賦給變量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)是過濾表,該選擇集的成員是當前作是過濾表,該選擇集的成員是當前作業(yè)中所有藍色的直線,如果成功將選擇集的名字賦給變量業(yè)中所有藍色的直線,如果成功將選擇集的名字賦給變量s3s3 (set

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

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

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

40、的序號為零。 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);以交互方式得到一個選擇集;以交互方式得到一個選擇集(setq n 0) (setq n 0) ;序號的初值為;序號的初值為0 0(repeat (sslength s

41、1)(repeat (sslength s1);重復執(zhí)行,執(zhí)行的次數(shù)等于所選對象的個數(shù);重復執(zhí)行,執(zhí)行的次數(shù)等于所選對象的個數(shù) (setq e(ssname s1 n)(setq e(ssname s1 n);得到選擇集內第;得到選擇集內第n n個對象的圖元名個對象的圖元名(setq el(entget e)(setq el(entget e);得到這個對象的圖元表;得到這個對象的圖元表(if (= TEXT (cdr (assoc 0 el)(if (= TEXT (cdr (assoc 0 el);判斷這個對象是否為;判斷這個對象是否為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);用新字高替;用新字高替換圖元表的原字高點換圖元表的原字高點表表(if (= 3 (cdr (assoc 72 el) (if (= 3 (cdr (assoc 72 el) ;如果文本為;如果文本為AlignAlign方式對齊方式對齊(setq el(subst (cons 72 0)(assoc 72 el) el)(setq el(subst (cons 72 0)(assoc 72 el) el)

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

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

45、和和VPORTVPORT。若回繞項為。若回繞項為T T,則返回指定種類的第一個符號表,若該項為,則返回指定種類的第一個符號表,若該項為nilnil或缺省,則返或缺省,則返回指定種類的當前表符號的下一個符號表?;刂付ǚN類的當前表符號的下一個符號表。 例如返回圖層表,若當前作業(yè)的圖層名依次是例如返回圖層表,若當前作業(yè)的圖層名依次是0、layer1、 layer2layer2和和layer3layer3。 隨時輸入表達式隨時輸入表達式(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)。因為回繞項為。因為回繞項為T T,所以返回當前作業(yè),所以返回當前作業(yè)的第一個圖層表。的第一個圖層表。 接著輸入表達式接著輸入表達式(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)。因為回繞項為因為回繞項為nilnil或缺省,所以返回當前圖層表的下一或缺省,所以返回當前圖層表的下一個圖層表。同樣的操作依次返回個圖層表。同樣的操作依次返回layer2layer2、layer3layer3的圖的圖層表。再輸入這個表達式,將返回層表。再輸入這個表達式,將返回nilnil,因為,因為layer3layer3是是最后的圖層。最后的圖層。 例如返回塊定義表,若當前作業(yè)已定義了名字為例如返回塊定義表,若當前作業(yè)已定義了名字為BOXBOX的圖塊,輸入表達式的圖塊,輸入表達式(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 表的種類表的種類 表名表名) ) 返回指定種類表的圖元名。如果找到,返回符號返回指定種類表的圖元名。如果找到,返回符號表的圖元名。返回的圖元名可以用于表的圖元名。返回的圖元名可以用于entgetentget和和entmod entmod 操作。例如操作。例如(tblobjname layer 0)(tbl

49、objname layer 0),返回名字為,返回名字為0 0的圖層表的圖元名的圖層表的圖元名。 (3 3)(tblsearch (tblsearch 表的種類表的種類 表名表名 設置下一個設置下一個) 返回指定種類和名字的符號表。如果返回指定種類和名字的符號表。如果 設置下一個設置下一個 為為T T,該表將作為定位點,隨后調用,該表將作為定位點,隨后調用tblnexttblnext函數(shù)在不回函數(shù)在不回繞 的 設 置 下 , 就 會 返 回 該 表 的 下 一 個 表 。 例 如繞 的 設 置 下 , 就 會 返 回 該 表 的 下 一 個 表 。 例 如(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為定位點,接著輸入表達式為定位點,接著輸入表達式(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等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論