无码日韩精品一区二区免费_极品尤物一区二区三区_国产在线乱码一区二三区_内射女校花一区二区三区

切換到寬版
  • 廣告投放
  • 稿件投遞
  • 繁體中文
    • 2837閱讀
    • 0回復(fù)

    [轉(zhuǎn)載]AutoCAD擴(kuò)展實(shí)體數(shù)據(jù)的分析與應(yīng)用 [復(fù)制鏈接]

    上一主題 下一主題
    離線HAHA^_^
     
    發(fā)帖
    1381
    光幣
    1268
    光券
    0
    只看樓主 倒序閱讀 樓主  發(fā)表于: 2015-08-26
    引 言 yz [pF  
      AutoCAD作為國(guó)際上最流行的CAD繪圖軟件在國(guó)內(nèi)的應(yīng)用日益廣泛。自11.0版本以后,Autodesk公司在AutoCAD引入了擴(kuò)展實(shí)體數(shù)據(jù)的概念,為廣大用戶提供了更強(qiáng)的二次開發(fā)功能。借助擴(kuò)展實(shí)體數(shù)據(jù),用戶可以很方便地在圖形實(shí)體中按不同的需求分門別類地存取不同的非圖形數(shù)據(jù),如設(shè)計(jì)人員關(guān)心產(chǎn)品的材料、重量,而財(cái)務(wù)人員則關(guān)心產(chǎn)品的成本、價(jià)格等。眾所周知,利用"塊"屬性可以存取非圖形數(shù)據(jù),而且這也是在AutoCAD 11.0版本以前用戶能夠在圖形中存取非圖形數(shù)據(jù)的唯一方法,但現(xiàn)在通過(guò)擴(kuò)展實(shí)體數(shù)據(jù),非圖形數(shù)據(jù)的存取將變得更加靈活、方便。事實(shí)上 ,AutoCAD 12.0 ASE正是利用圖形中位于"ACADASE"圖層的POLYLINE擴(kuò)展實(shí)體數(shù)據(jù)來(lái)保存圖形實(shí)體與外部數(shù)據(jù)庫(kù)之間的連接關(guān)系。本文擬對(duì)AutoCAD 12.0版擴(kuò)展實(shí)體數(shù)據(jù)的結(jié)構(gòu)作詳細(xì)的分析,并結(jié)合實(shí)際應(yīng)用介紹有關(guān)的程序代碼,與各位同仁切磋。 J>X@g;  
      1、擴(kuò)展實(shí)體數(shù)據(jù)的結(jié)構(gòu) x& _Y( bHA  
      AutoCAD擴(kuò)展實(shí)體數(shù)據(jù)是在常規(guī)的圖形數(shù)據(jù)基礎(chǔ)上增加的按一系列分類代碼組合而成的數(shù)據(jù)塊,它與常規(guī)實(shí)體數(shù)據(jù)一起構(gòu)成內(nèi)容更加廣泛的實(shí)體數(shù)據(jù)。由于不同的應(yīng)用場(chǎng)合要求存取不同的數(shù)據(jù),因此擴(kuò)展實(shí)體數(shù)據(jù)按應(yīng)用類型分組,形式如下: 8j Cho  
      (-3 ("AppName" (代碼.數(shù)據(jù)) (…) ) ("AppName"(代碼.數(shù)據(jù)) (…)) (…))) %@QxU-k_  
      其中,-3表示擴(kuò)展數(shù)據(jù)開始; [Or1  
      AppName是最大長(zhǎng)度為31字節(jié)的字符串,為已經(jīng)登記的應(yīng)用類型名; .BxI~d^  
      代碼及對(duì)應(yīng)的數(shù)據(jù)類型見下表: gLMb,buqC  
      舉例如下: Lginps[la  
      ((-1.) (0."TEXT") (5."2F") (67.0) (8."0") (10 172.586 246.388 0.0) (40.32.729) (1."5") (50.0.0) (41.1.0) (51.0.0) (7."STANDARD") (71.0) (72.0) (11 0.0 0.0 0.0) (210 0.0 0.0 1.0) (73.0) (-3 ("DESIGN" (1000."16Mn") (1040.32.45)) ("PRICE" (1040.123.45) (1040.321.54)))) 2dz)rjd O,  
      這是一個(gè)"TEXT"類型的圖形實(shí)體,它包含“DESIGN”和“PRICE”兩個(gè)應(yīng)用類型的擴(kuò)展數(shù)據(jù)。其中,(-1.)…(73.0)是常規(guī)實(shí)體數(shù)據(jù),(-3 (…))就是擴(kuò)展實(shí)體數(shù)據(jù),而擴(kuò)展數(shù)據(jù)中("DESIGN" (1000."16Mn") (1040.32.45))是屬于"DESIGN"應(yīng)用類型的數(shù)據(jù)塊,("PRICE"(1040.123.45) (1040.321.54))則是屬于"PRICE"應(yīng)用類型的數(shù)據(jù)塊。更具體地說(shuō),屬于"DESIGN"應(yīng)用類型的數(shù)據(jù)有兩個(gè),分別是字符串"16Mn"和實(shí)數(shù)"32.45";屬于"PRICE"應(yīng)用類型的數(shù)據(jù)是兩個(gè)實(shí)數(shù),分別是"123.45"和"321.54"。 U*nB= =  
      由此可見,應(yīng)用類型名是存取擴(kuò)展實(shí)體數(shù)據(jù)的主要依據(jù)。在使用前應(yīng)先行登記。應(yīng)用類型名可由用戶任意定義,其最大長(zhǎng)度為31個(gè)字符。登記應(yīng)用類型名的AutoLISP程序代碼如下: )d[n-Si  
      (regapp "AppName") Jk{SlH3'  
      如果登記成功,該應(yīng)用類型名就被增加到APPID符號(hào)表,并保存在圖形文件中。AutoCAD自動(dòng)登記的應(yīng)用類型名為"ACAD"。 H[w';u[%  
      從上面的例子還可以看到,擴(kuò)展實(shí)體數(shù)據(jù)與常規(guī)實(shí)體數(shù)據(jù)有所不同,在擴(kuò)展實(shí)體數(shù)據(jù)塊中,同樣代碼的數(shù)據(jù)可以出現(xiàn)多次,每組數(shù)據(jù)的次序和含義則由應(yīng)用程序自行約定。 D <~UaHfk  
      需要注意的是,AutoCAD分配給每個(gè)圖形實(shí)體的擴(kuò)展數(shù)據(jù)空間最大為16K字節(jié)。下面的函數(shù)可查詢指定圖形實(shí)體的擴(kuò)展數(shù)據(jù)自由空間大小(以字節(jié)為單位): )EMlGM'2q  
      (xdroom entname) jl59;.P  
      下面的函數(shù)可計(jì)算出指定擴(kuò)展數(shù)據(jù)塊的大小(以字節(jié)為單位): l&\y]ZV={  
      (xdsize xdata) IV~)BW leT  
      2、存取擴(kuò)展實(shí)體數(shù)據(jù)的程序設(shè)計(jì) Vu_oxL}  
      在AutoCAD命令中,除AME(高級(jí)造型)、ASE(數(shù)據(jù)庫(kù)管理)命令對(duì)擴(kuò)展實(shí)體數(shù)據(jù)進(jìn)行操作外,其它繪圖命令一般不生成擴(kuò)展實(shí)體數(shù)據(jù)。更多的情況是用戶的AutoLISP或ADS應(yīng)用程序生成、修改和檢索擴(kuò)展實(shí)體數(shù)據(jù)。 xS,F DPA  
      下面列出三段AutoLISP程序代碼,分別對(duì)擴(kuò)展實(shí)體數(shù)據(jù)進(jìn)行檢索、存儲(chǔ)和刪除操作: |HAbZd7PG  
      ;檢索指定的擴(kuò)展實(shí)體數(shù)據(jù) P^o@x,V!&  
      ;entname為有效的圖形實(shí)體名,appname為已登記的應(yīng)用類型名 jR\pYRK  
      ;若檢索成功則以LIST表的形式返回指定的擴(kuò)展數(shù)據(jù),否則返回nil 5[2kk5,  
      ;例如:(getx (entlast) "DESIGN") ;(mNjxA  
      ;返回:((1000."16Mn") (1040.32.45)) p` ~=v4;b  
      (defun getx(entname appname / x0 x1) )h ,v(Rxa  
      (setq appname (strcase appname)) 6b*xhu\  
      (if (= (type entname) 'ENAME) 5_A*I C]  
      (if (tblsearch"APPID"appname) O<fy^[r:`  
      (progn CeU=A9  
      (setq x1 (list appname)) b~ )@e9  
      (if (setq x0 (assoc -3 (entget entname x1))) q1 HJ_y  
      (cdr (assoc appname (cdr x0))) ['>ZC3?"h  
      ) ^coCsV^CW"  
      ) NJJ=ch  
      ) g mWwlkf9  
      ) @GXKqi  
      ) q4X( _t  
      ;存儲(chǔ)或修改指定的擴(kuò)展實(shí)體數(shù)據(jù) kjQW9QJ<  
      ;entname為有效的圖形實(shí)體名,appname為已登記的應(yīng)用類型名 }r18Y6  
      ;xdata為屬于appname應(yīng)用類型的擴(kuò)展數(shù)據(jù)表 U8aVI  
      ;若存儲(chǔ)成功則返回包含指定擴(kuò)展數(shù)據(jù)的實(shí)體數(shù)據(jù)表,否則返回nil Q~.t8g/  
      ;例如:(setx (entlast) "PRICE"((1040.123.45) (1040.321.54))) #P!<u Lc%  
      (defun setx(entname appname xdata / x0 x1) lpPPI+|4N  
      (setq appname(strcase appname)) /7#MJH5b6  
      (if (= (type entname) 'ENAME) 6RIbsy  
      (if (tblsearch "APPID" appname) N, u]2,E  
      (if (setq x0 (entget entname)) z 3[J sE%  
      (progn #Fo#f<b p  
      (setq x1 (list -3 (append (list appname) xdata))) ] 0L=+=w  
      (setq x0 (append (entget entname) (list x1))) /\Cf*cJ  
      (entmod x0) ;4dFL\KU  
      ) kE6/d,  
      ) erv94acq  
      ) VJ h]j (  
      ) pC,Z=+:  
      ) ObZhQ.&  
      ;刪除指定的擴(kuò)展實(shí)體數(shù)據(jù) E"[p_ALdC  
      ;entname為有效的圖形實(shí)體名,appname為已登記的應(yīng)用類型名 h}nS&.  
      ;若刪除成功則返回刪除指定擴(kuò)展數(shù)據(jù)后的實(shí)體數(shù)據(jù)表,否則返回nil byP< 白山市| 仁怀市| 青海省| 育儿| 祁阳县| 普定县| 山阳县| 新干县| 凤庆县| 泽州县| 临邑县| 井研县| 木里| 治多县| 西乌| 象山县| 冕宁县| 鹤山市| 凤翔县| 西丰县| 新平| 浦东新区| 璧山县| 兰溪市| 冷水江市| 长兴县| 淮南市| 湖南省| 宁河县| 东方市| 启东市| 武义县| 淮安市| 西昌市| 体育| 麻栗坡县| 固原市| 兴业县| 龙胜| 满洲里市| 宿州市|