版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、IDL 高級培訓(xùn)基礎(chǔ)篇基礎(chǔ)篇 語法基礎(chǔ)1. 變量及其屬性 整型為短整型,注意使用L 變量的屬性是動(dòng)態(tài)改變的 var=5 為整型 var=var*2.0 變?yōu)楦↑c(diǎn) NaN:!VALUES.F_NAN、!VALUES.D_NAN var=!VALUES.F_NAN,則finite(var)=1基礎(chǔ)篇 語法基礎(chǔ)2. 數(shù)組 IDL是面向矩陣的語言,幾乎所有運(yùn)算都可以在數(shù)組上使用。 數(shù)組表達(dá):arrayn,m 表示n列m行(與其他語言有別),按行排列, 0為下標(biāo)起點(diǎn) 數(shù)組引用:arraysubscript,或(array)subscript 下標(biāo)語法:e、e0:e1、e:*、*、array。 array
2、=make_array(10,10,/integer),sub=indgen(12) 合法的下標(biāo)表示:array5,5、array2:3,5、array*,4、array*,5:8、array4,4:*、 arraysub、A1,3,5,7:9 reform():array4,4:*為1列4行(列向量),reform(array4,4:*)則為4列1行(行向量) 常數(shù)的數(shù)組表示:var=5,則var0=5(合法!) 賦值:array2, 4, 6,5=4, 16, 36 where():arraywhere(array lt 0)=-999 數(shù)學(xué)運(yùn)算:與普通變量基本相同。 * 和 / :表示兩
3、個(gè)同維數(shù)數(shù)組對應(yīng)元素運(yùn)算 arr1=indgen(5)+1,arr2=arr1。則:arr1*arr2=1,4,9,16,25,arr1/arr2=1,1,1,1 # 和 #:矩陣運(yùn)算 arr1(n1,m)#arr2(m,n2)=arr(n1,n2),arr1(n,m1)#arr2(m2,n)=arr(m2,m1) 數(shù)組串連:arr1(5,6),arr2(5,2)。則:arr3=arr1,arr2為(5,8) 注意: arr3=arr1,arr2不合法?。ㄒ痪S除外)其他常用函數(shù):array_equal、rebin()、congrid()、expand()、reverse()數(shù)組常用函數(shù):基礎(chǔ)篇
4、 語法基礎(chǔ)基礎(chǔ)篇 語法基礎(chǔ)3. 結(jié)構(gòu) 一種復(fù)合變量,它可以將多種類型的數(shù)據(jù)存儲在一個(gè)變量中,對于表示意義相關(guān)的數(shù)據(jù)、程序間交換數(shù)據(jù)均非常有意義。 類型及定義 命名結(jié)構(gòu):dot=PIXEL ,x:128 ,y:236 ,color:bytarr(3),定義后可使用FIXEL定義其他結(jié)構(gòu) dot1=PIXEL ,x:58 ,y:46 ,color:255,0,255、 dot2=PIXEL ,58 ,46 ,255,0,255、dot3= PIXEL 匿名結(jié)構(gòu):person=name:jack ,id:123456L,定義后無固定結(jié)構(gòu),可任意改變 person=name:jack ,id:1234
5、56L ,phone:123-4567 引用 變量引用:使用變量名或變量在結(jié)構(gòu)中的位置索引。如:dot.x或dot.(0) 數(shù)組變量:s=arr:indgen(10),則s.arr=10將數(shù)組所有元素賦值為10。 結(jié)構(gòu)數(shù)組 定義:dotarr=replicate(PIXEL ,10),或dotarr=replicate(dot ,10) 引用:dotarr1.x=10、dotarr.x=10將所有結(jié)構(gòu)的x賦值為10、dotarr.y=indgen(10) 結(jié)構(gòu)中的變量的類型和(數(shù)組)大小 結(jié)構(gòu)定義后,各變量的數(shù)據(jù)類型以及數(shù)組變量的維數(shù)均不可改變。當(dāng)使用中出現(xiàn)不一致時(shí)向原類型轉(zhuǎn)換,不能轉(zhuǎn)換時(shí)報(bào)錯(cuò)
6、。 var=dot.x*1.0=128.0,為浮點(diǎn),而dot.x=dot仍為整型。 s.arr=-indgen(8)會改變s.arr中前8個(gè)元素的值,而s.arr=-indgen(11)會出錯(cuò)。 結(jié)構(gòu)繼承 dot3d=POINT ,INHERITS PIXEL ,z:0 常用函數(shù) creat_struct()、n_tags()、tag_names()、struct_assign()基礎(chǔ)篇 語法基礎(chǔ)4. 指針 建立動(dòng)態(tài)數(shù)據(jù)結(jié)構(gòu)的有效工具,是實(shí)現(xiàn)IDL面向?qū)ο缶幊毯蚖idget編程的基本要素之一。 IDL 的指針與其他語言的指針有很大的不同,它不是指向存儲的地址而僅僅是一個(gè)輕型的指向一個(gè)堆變量的引
7、用(指針變量)。堆變量可以動(dòng)態(tài)分配(數(shù)據(jù)類型和數(shù)組維數(shù)),這意味著傳遞指針變量就相當(dāng)于傳遞動(dòng)態(tài)數(shù)據(jù)。Pointer ReferencePointer DataPointer in Heap Variables指針基本操作 創(chuàng)建:ptr=ptr_new( initexpr , /allocate_heap , /no_copy ) 釋放:ptr_free ,ptr標(biāo)量數(shù)組結(jié)構(gòu)基礎(chǔ)篇 語法基礎(chǔ) 標(biāo)量指針 創(chuàng)建:v=5.5,p=ptr_new(v) 引用:print , p ,*p;p1=p,*p1=20,print ,*p 數(shù)組指針 創(chuàng)建:arr=findgen(10),p=ptr_new(arr
8、) 引用:print ,(*p)5 結(jié)構(gòu)指針 創(chuàng)建:s=name:joe ,age:40 ,height:180 ,p=ptr_new(s) 引用:print , (*p).name 結(jié)構(gòu)內(nèi)指針 創(chuàng)建:rec=lon:120 ,lat:20 ,data:ptr_new(findgen(2,10) ,p=ptr_new(rec) 引用:* (*p).data=findgen(2,20) 特殊指針 Null指針:nptr=ptr_new(),僅定義一個(gè)指針,并不指向一個(gè)堆變量。引用時(shí)需重新定義指針。 Empty指針:eptr=ptr_new(/allocate_heap),定義一個(gè)指向一個(gè)堆變量的
9、指針,但并未定義變量,引用時(shí)可以直接定義變量 指針釋放 ptr_free ,ptr 相關(guān)函數(shù) ptr_valid():ptr_valid(nptr)=0, ptr_valid(eptr)=1 heap_gc:釋放沒有引用的堆變量 指針數(shù)組 ptrarr( d1, . , d8 , /allocate_heap )基礎(chǔ)篇 編程基礎(chǔ) IDLDE是IDL的集成開發(fā)環(huán)境,可以使用IDL命令進(jìn)行交互式命令運(yùn)行,編寫、調(diào)試、運(yùn)行IDL程序,使用GUI Builer開發(fā)用戶界面,使用項(xiàng)目管理器管理工程項(xiàng)目等。1. IDL程序 批處理:由一系列IDL命令組成,以IDL-batchfile方式運(yùn)行。批處理文件運(yùn)
10、行時(shí)并不編譯,因此使用控制結(jié)構(gòu)時(shí)必須大量使用續(xù)行符($),給書寫、理解造成困難。 主程序:與批處理相似,但以end結(jié)束,以IDL-.run profile方式運(yùn)行。主程序運(yùn)行時(shí)先編譯,因此可以正常使用控制結(jié)構(gòu)。 過程:與主程序相似,但以pro proname開始,以end結(jié)束。以IDL-proname方式運(yùn)行(也可以先運(yùn)行IDL-.compile proname,編譯但不運(yùn)行)。 函數(shù):與過程相似,但以function fnname開始,以end結(jié)束,并以return語句返回一個(gè)IDL變量。以IDL-ret=fnname(para_list)方式運(yùn)行。 在IDL系統(tǒng)中,一個(gè)過程或函數(shù)即為一個(gè)新
11、的IDL命令。 變量作用范圍:批處理和主程序方式的變量為全局變量,可以在IDL開發(fā)環(huán)境中使用。過程和函數(shù)的變量為局部變量,只在過程和函數(shù)運(yùn)行過程中有效。基礎(chǔ)篇 編程基礎(chǔ)2. 參數(shù)傳遞 位置參數(shù):在參數(shù)列表中按位置列出參數(shù)名,嚴(yán)格的順序限制。通常用于必選參數(shù)。 定義:pro batch ,para1 ,para2 ,. 調(diào)用:IDL-batch ,para1 ,para2 , 關(guān)鍵字參數(shù):關(guān)鍵字參數(shù)與位置無關(guān),且可以與位置參數(shù)混合位置。通常放在位置參數(shù)之后,用于可選參數(shù)。 定義:pro batch ,keywordname=keywordsymbol ,. 調(diào)用:IDL-batch ,keywo
12、rdname=keywordsymbol , IDL-batch ,/keywordname 注意:keywordname用于定義,keywordsymbol用于調(diào)用。 引用傳遞和值傳遞:所有變量為引用傳遞,其值會被修改。系統(tǒng)變量、下標(biāo)變量、表達(dá)式和常量均為值傳遞,原變量的值不被修改。 參數(shù)傳遞了嗎?傳遞了什么? n_params():返回位置參數(shù)的個(gè)數(shù) keyword_set():關(guān)鍵字參數(shù)為不為0常量或已定義的引用傳遞時(shí)返回1,否則返回0 arg_present():關(guān)鍵字參數(shù)為引用傳遞時(shí)返回1(無論是否定義),否則返回0 n_elements():關(guān)鍵字參數(shù)未傳遞或未定義返回0,否則返回
13、非0數(shù) 基礎(chǔ)篇 編程基礎(chǔ)3. 錯(cuò)誤處理 on_ioerror:當(dāng)出現(xiàn)I/O錯(cuò)誤時(shí),跳轉(zhuǎn)指定的語句。兩種用途:跳過錯(cuò)誤返回或跳過錯(cuò)誤繼續(xù)。 注意:使用on_ioerror ,null on_error:當(dāng)程序運(yùn)行出錯(cuò)時(shí),并不執(zhí)行一個(gè)新的語句,而是指明IDL應(yīng)該怎樣做。 可以設(shè)置on_error ,1,或在命令行使用retall catch:格式:catch ,error_var。當(dāng)程序執(zhí)行到catch語句時(shí),IDL為改模塊記錄一個(gè)錯(cuò)誤處理語句,并將error_var賦值為0。若程序執(zhí)行出錯(cuò),則給error_var賦值相應(yīng)的錯(cuò)誤碼,然后跳轉(zhuǎn)到catch后第一條語句。注意:使用catch ,/can
14、celError or Exception is GeneratedIs it an I/O error?Is there an error handler defined by the CATCH routine?Is ON_IOERROR routine in use?Handle error as indicated by setting of ON_ERROR routine or use default error handling.Handle error as indicated by ON_IOERROR setting.Handle error with CATCH-defi
15、ned error handler and continue program execution.YesYesYesNoNoNo基礎(chǔ)篇 編程基礎(chǔ)IDL出錯(cuò)處理示意基礎(chǔ)篇 編程基礎(chǔ)4. 編譯與運(yùn)行 批處理:bacthfile,運(yùn)行 主程序:.run,編譯、運(yùn)行 過程和函數(shù):.compile,編譯;-proname,編譯、運(yùn)行。 編譯規(guī)則:(1)編譯到主程序后,編譯停止 (2)編譯到與文件同名的程序模塊時(shí),停止編譯 (3)編譯到文件末尾或適合其他規(guī)則時(shí),停止編譯 自動(dòng)編譯規(guī)則:當(dāng)過程或函數(shù)出現(xiàn)在命令或代碼中時(shí),會自動(dòng)被編譯執(zhí)行。 (1)過程或函數(shù)所在的文件應(yīng)在當(dāng)前工作路徑和 !Path指定的路徑中
16、 (2)過程或函數(shù)名與文件名相同 編譯函數(shù):resolve_routine、resove_all??捎糜诔绦蚰K中。 .sav:IDL-save,編譯后存儲為.sav文件,便于發(fā)布。但版本間不兼容?;A(chǔ)篇 輸入輸出1.常用概念 文件操作:openr,openw,openu,close 邏輯設(shè)備號:199,直接使用 100128,使用get_lun獲取,free_lun釋放 常用函數(shù):dilog_pickfile,findfile,filepath2.文本文件的格式處理 自由格式:readf,printf,strsplit readf中只接收變量引用,不接收值引用 format語法:format
17、=(),括號內(nèi)為格式符及其組合 A:naw,n為重復(fù)次數(shù),w為輸出寬度 I:niw或nIw.m,缺省w=7,特殊用法:i0 F:nfw.d,缺省w=15 X:nX,空格 /:換行符 ::其后的格式不用于最后一項(xiàng)。如每個(gè)輸出項(xiàng)后加一個(gè),時(shí),最后一項(xiàng)不加。 C:c(),表示日期,接受julian日期。有豐富的子集基礎(chǔ)篇 輸入輸出3.二進(jìn)制文件的關(guān)連變量處理 基本命令:readu,writeu 關(guān)聯(lián)變量:大型重復(fù)單元二進(jìn)制文件的有效讀取手段,可以隨機(jī)讀取。 一個(gè)文件可建立多個(gè)關(guān)聯(lián),解決重復(fù)單元不一致的情況。 assoc():result=assoc(unit,array_structure ,off
18、set ,/packed)4.使用與機(jī)器無關(guān)的數(shù)據(jù)格式 IDL 高級培訓(xùn)直接圖形篇直接圖形篇 色彩控制1. 基本概念 顏色構(gòu)成:(r,g,b),每個(gè)顏色值在0255之間,所以IDL可以表現(xiàn)256*256*256種顏色 顏色表:一個(gè)顏色表由一個(gè)3列的數(shù)組構(gòu)成,各列分別表示r、g、b值,通常256行。 索引號:顏色表中的索引位置??梢杂脕慝@得顏色的r、g、b值 8位顯示器和24位顯示器:8位顯示器只能顯示256色,24位則可以顯示256*256*256色2. 索引顏色模式和RGB顏色模式 索引顏色模式:通過顏色表的索引號獲得顏色的r、g、b值,用于8位顯示器。 RGB顏色模式:直接指定顏色的r、g
19、、b值,用于24位顯示器。IDL使用一個(gè)長整數(shù)表示所有顏色的索引號,c=r+g*256L+b*256L*256L。 3. 動(dòng)態(tài)顯示和靜態(tài)顯示 動(dòng)態(tài)顯示:索引模式將索引號與顏色表中的特定位置連接,稱為動(dòng)態(tài)顏色顯示。改變顏色表會影響當(dāng)前索引號所對應(yīng)的顏色。通常,8位顯示是動(dòng)態(tài)顯示 靜態(tài)顯示:RGB模式直接指定顏色本身,稱為靜態(tài)顏色顯示。通常24位顯示是靜態(tài)顯示。直接圖形篇 色彩控制4. device ,decomposed=0|1 decomposed=0:關(guān)閉顏色分解,使用索引顏色模式。適用于8位顯示和24位顯示,但24位時(shí)仍是靜態(tài)顯示。此時(shí),可以使用IDL預(yù)設(shè)的41個(gè)顏色表。 decompos
20、ed=1:IDL缺省模式,打開顏色分解,使用RGB顏色模式。只適用于24位顯示。此時(shí),只能使用長整數(shù)的全索引。5. tvlct ,r ,g ,b ,start ,/get :(RGB模式) tvlct ,r ,g ,b ,/get可以獲取當(dāng)前的顏色表。 tvlct ,r ,g ,b ,start可以加載一個(gè)顏色表到start指定的入口處。6. loadct ,table 加載IDL預(yù)設(shè)的41各顏色表之一7. 創(chuàng)建自己的顏色表 根據(jù)顏色表的原理,可以很容易地創(chuàng)建一個(gè)3*n數(shù)組作為自己的顏色表,用tvlct加載使用。直接圖形篇 坐標(biāo)系 data:數(shù)據(jù)單位(缺?。?dvice:像素單位 normal
21、:歸一化坐標(biāo),x:01,y:01 一般來說,在輸出圖形時(shí),3個(gè)坐標(biāo)系同時(shí)存在并都可以使用。 例:對于一個(gè)一維數(shù)組,在未指定坐標(biāo)系時(shí),IDL會把數(shù)組的下標(biāo)值作為data坐標(biāo)系下x軸的值,數(shù)組的值作為y值畫出曲線。直接圖形篇 2D圖形創(chuàng)建自己的標(biāo)注直接圖形篇 2D圖形多坐標(biāo)系數(shù)據(jù)集顯示畫真正的圓直接圖形篇 2D圖形直接圖形篇 2D圖形在背景上疊加等值線直接圖形篇 2D圖形等值線圖填充中的“黑洞”直接圖形篇 添加文本給圖形加文本標(biāo)注 xyouts ,x ,y ,string ,font= TrueType字體設(shè)置: (1)DEVICE ,SET_FONT=font_str ,/TT_FONT ,輸出
22、時(shí),使用font=-1|0|1 (2)fontfnont_str Windows環(huán)境下TrueType字體設(shè)置: font_str=font*modifier1*modifier2*.modifiern For font weight: THIN, LIGHT, BOLD, HEAVY For font quality: DRAFT, PROOF For font pitch: FIXED, VARIABLE For font angle: ITALIC For strikeout text: STRIKEOUT For underlined text: UNDERLINE 注意:并非所有選項(xiàng)
23、在兩種方式下均合法!直接圖形篇 添加文本 使用漢字:font_str=“中文TrueType字體名稱”device ,set_font=隸書 ,/tt_fontxyouts ,x ,y , ,font=1 使自己的字體成為IDL的系統(tǒng)字體:編輯 RSIIDL54resourcefontsttttfont.map直接圖形篇 3D圖形建立三維坐標(biāo)系 IDL使用變換矩陣與三維空間的點(diǎn)相乘,實(shí)現(xiàn)在二維顯示上模擬三維坐標(biāo)系。該變換矩陣裝入!P.T。實(shí)現(xiàn)時(shí),先裝入正確的變換矩陣,然后在圖形顯示前,保證圖形命令已經(jīng)被變換矩陣乘過。常用方法:(1)帶save關(guān)鍵字的surface命令 surface ,dat
24、a ,/nodata ,/save (2)在surface后,使用surfr命令 surface ,data surfr (3)scale3命令(scale3d:單位立方體) scale3 ,xrange=vector ,yrange=vector ,zrange=vector ,ax=degrees ,az=degrees (4)t3d命令 嚴(yán)格、完整、復(fù)雜的方法直接圖形篇 3D圖形三維散點(diǎn)圖直接圖形篇 3D圖形曲面圖陰影曲面圖圖中色彩變化表示光源的方向直接圖形篇 3D圖形用顏色表現(xiàn)另一個(gè)數(shù)據(jù)集的信息上圖為屬性數(shù)據(jù)集右上、下圖為用顏色表示的屬性分布信息直接圖形篇 3D圖形用彩色圖形疊加表現(xiàn)另
25、一個(gè)數(shù)據(jù)集的信息左圖為屬性數(shù)據(jù)集右圖為用疊加在陰影曲面上的彩色曲面表示屬性分布信息直接圖形篇 3D圖形等值線疊加直接圖形篇 3D圖形三維實(shí)體創(chuàng)建: shade_volume, volume, value, vertex, polygons scale3 image=polyshade( vertex, polygons) tv, image直接圖形篇 圖形定位圖形定位: !p.region=x0,x1,y0,y1(歸一化坐標(biāo)) !p.position=x0,x1,y0,y1(歸一化坐標(biāo)) !x|y|z.margin=p1,p2(字符個(gè)數(shù),會隨charsize改變) 多數(shù)圖形命令中都帶有marg
26、in和position關(guān)鍵字,優(yōu)先級較!變量高圖形位置:指被坐標(biāo)軸包圍的區(qū)域可以使用!X|Y|Z.margin、 !p.position設(shè)置圖形區(qū)域包括圖形標(biāo)題其它注釋的區(qū)域可以使用!P.region設(shè)置圖形邊緣直接圖形篇 圖形組合顯示如何在一個(gè)窗口里顯示多個(gè)具有不同坐標(biāo)系的圖形?(1)position=x0,y0,x1,y1(2)!Multi=p1,p2,p3,p4,p5 p1:頁面上剩余的部分的數(shù)目。通常為0,表示擦除窗口開始輸出 p2:頁面上圖形的列數(shù) p3:頁面上圖形的行數(shù) p4:頁面上Z方向上疊加的數(shù)目 p5:0,按行顯示;1,按列顯示直接圖形篇 圖形組合顯示!Y.omargin=0
27、,4!p.multi=0,2,2,0,0直接圖形篇 圖形組合顯示!Y.omargin=0,4!p.multi=0,2,2,0,0 . . .!p.multi=1,1,2,0,0直接圖形篇 圖形文件讀寫 作為一個(gè)數(shù)據(jù)分析和可視化的工具,IDL支持大量的圖形格式。包括:bmp,geo tiff,interfile, jpeg,pict,png,ppm,srf,tiff,x11 bitmap,xwd。但從v5.4起,不再支持gif。 PNG格式:支持最多4個(gè)通道的8位或16位數(shù)據(jù) 單通道數(shù)據(jù)時(shí),支持調(diào)色板 wirte_png ,filename ,image ,r,g,b:將圖形數(shù)據(jù)寫入PNG文件
28、其中:(1)如果image為2維數(shù)組,并且提供r、g、b值,則轉(zhuǎn)換為byte以8位數(shù)據(jù)寫入,否則轉(zhuǎn)換為16位無符號整數(shù)。 (2)對單通道數(shù)據(jù), r、g、b值必須提供,對多通道數(shù)據(jù), r、g、b值被忽略 ok=query_png(filename ,s):獲取PNG文件的屬性。 其中:ok=0,不是合法的PNG文件。 s為一個(gè)結(jié)構(gòu),包含PNG文件的屬性。若s.has_palette=1,為單通道數(shù)據(jù),否則為多通道數(shù)據(jù)。 image=read_png(filename ,r,g,b):讀出PNG文件的數(shù)據(jù) 其中:r,g,b對單通道數(shù)據(jù),讀出調(diào)色板,否則忽略。 常見用法:write_png ,fil
29、ename ,tvrd(true=1) (作為3通道數(shù)據(jù)寫入) ok=query_png(filename ,s) . . image=read_png(filename) tv image ,/true直接圖形篇 圖像處理 圖像:任何一個(gè)二維數(shù)組都可以視為一幅圖像。 8位圖像:總表示為一個(gè)二維數(shù)組。 24位(真彩色)圖像:總表示為一個(gè)3維數(shù)組,其中一維為3。 m*n*3:隔波段掃描(band-interleaved ,true=3) m*3*n:隔行掃描( row-interleaved ,true=2) 3*m*n:隔象素掃描( pixel-interleaved,true=1) 在8位顯
30、示設(shè)備上,所有數(shù)據(jù)要轉(zhuǎn)換位字節(jié)類型;在24位顯示設(shè)備上,24位圖像的r、g、b值必須轉(zhuǎn)換位字節(jié)類型。直接圖形篇 圖像處理1. 基本操作 顯示:tv和tvscl。兩個(gè)命令幾乎一樣,包括可以使用的關(guān)鍵字。都不刪除當(dāng)前窗口的內(nèi)容。 tvscl:將圖像數(shù)據(jù)調(diào)整為與運(yùn)行時(shí)刻所有可用顏色數(shù)目相同的字節(jié)數(shù)據(jù)。通常用于8位圖像 tv:取圖像數(shù)據(jù)本身,作為字節(jié)數(shù)據(jù)顯示。如果圖像數(shù)據(jù)以整形和更多位數(shù)表示,則被截?cái)嘁赃m合字節(jié)類型。因此,圖形可能會顯示不正確。 在24位設(shè)備上顯示圖像一般方法: device ,decomposed=0 loadct ,ct tvtvscl ,image(8位圖像) tv ,image
31、 ,true=1|2|3(24位圖像))直接圖形篇 圖像處理2. 調(diào)整數(shù)據(jù)為字節(jié)類型并可以使用統(tǒng)一的顏色集 bytscl(image ,min= ,max= ,top=) 如:scaleImage=bytscl(image ,min=5 ,max=30) 3. 改變圖像尺寸 IDL提供了兩個(gè)改變圖像大小的命令:rebin和congrid rebin:新建的圖象的大小必須是原始尺寸的整數(shù)比例。缺省放大時(shí)采用雙線性插值,縮小時(shí)采用鄰近平均法。sample關(guān)鍵字指定最近鄰近采樣法。 congrid:新建的圖象的大小可以是原始尺寸的任意比例。缺省對三維以下數(shù)據(jù)采用最近鄰近采樣法,三維采用線性插值法。i
32、nterp關(guān)鍵字指定線性插值法4. 在窗口中定位圖像 (1) tv ,image ,index:根據(jù)圖像尺寸,從窗口左上角開始計(jì)算位置,逐行至右下角。 (2) tv ,image ,x ,y:指定左下角開始計(jì)算的坐標(biāo)(devic|data|normal)。 利用!d.x_vsize和!d.y_vsize(象素值)計(jì)算歸一化坐標(biāo)以確定圖像位置和大小。5. 從窗口中讀取圖像 8位顯示:image=tvrd() 24位顯示:image=tvrd(true=1) tvrd命令支持讀取指定區(qū)域的圖像直接圖形篇 圖像處理6. 基本圖像處理 上圖:原始圖中圖:hist_equal函數(shù)下圖:adapt_his
33、t_equal函數(shù) 直方圖均衡化:觀察圖像中的象素值分布,往往會發(fā)現(xiàn)象素值分布趨于一個(gè)較狹窄的數(shù)值范圍內(nèi)。如果將象素值分散開,使象素值得每個(gè)子范圍都有與這些象素值大約相同的象素,則該圖像的信息內(nèi)容有可能增加。將象素分布道整個(gè)顏色范圍的過程稱為直方圖均衡化。直接圖形篇 圖像處理 負(fù)片:將原始圖像的顯示色板翻轉(zhuǎn),象素的字節(jié)值不變所得到的圖像。直接圖形篇 圖像處理 消除噪聲:噪聲來自多方面,影響對圖像質(zhì)量。噪聲的一般表現(xiàn)形式是隨機(jī)的具有極端值的象素(黑白噪聲)。 median:計(jì)算相鄰象素的中間值。這樣既可以消除極端值,又不會使大于鄰域的部分圖像邊緣或特征模糊。 平滑:通過將每個(gè)象素值與它周圍相鄰象
34、素值進(jìn)行平均來平滑圖像。稱為均值或核狀平滑。 smooth:在給定的奇數(shù)寬度的范圍內(nèi)通過等加權(quán)值實(shí)現(xiàn)平滑。 convol:使用給定的方形濾波核通過卷積實(shí)現(xiàn)平滑。 暈光蒙片:將原始圖像減去平滑后的圖像。可以定位圖像上的邊緣或象素值突然變化的地方直接圖形篇 圖像處理上圖:smooth,w=5中圖:smooth,w=3下圖:convol,k=1,2,1 2,8,2 1,2,1 邊緣增強(qiáng):通過銳化或微分以增強(qiáng)邊緣。 roberts: sobel: convol:使用給定的方形濾波核通過卷積實(shí)現(xiàn)。直接圖形篇 圖像處理右圖:原始圖像下圖:自左至右依次為roberts、sobel、convol直接圖形篇 圖
35、像處理7. 頻域?yàn)V波 頻域?yàn)V波是圖像 和信號處理的常規(guī)手段??梢杂糜谄交瑘D像、銳化圖像、降低圖像的模糊程度和恢復(fù)圖像。 基本步驟:(1)用快速傅立葉變換(FFT)將圖像從空間域轉(zhuǎn)換為頻率域 (2)將轉(zhuǎn)換后的圖像與一個(gè)頻率濾波器相乘 (3)將濾波后的圖像逆變換轉(zhuǎn)換為空間域 方法:filtered_img=fft( fft(img,-1)*filter ,1) img可以是一維矢量,也可以是二維圖像 filter為濾波器,用于濾波圖像中某些特定頻率的一維矢量和二維數(shù)組。 創(chuàng)建濾波器: 歐氏距離圖(頻率圖像):r=dist(n ,m),n和m與實(shí)際圖像相同 Butterworth頻率濾波器: 低通濾
36、波:filter=1/1+c*(r/r0)2n 高通濾波:filter=1/1+c*(r0/r)2n 其中:c=1.0或0.414(即當(dāng)r=r0時(shí),濾波幅度為0.5或1/sqrt(2)) r0為濾波器截止頻率(實(shí)際中使用象素寬度) n為濾波器階數(shù),通常n=1 通常,低頻項(xiàng)代表圖像的一般形狀,高頻項(xiàng)對應(yīng)圖像的細(xì)節(jié) 直接圖形篇 圖像處理東海海表面溫度圖NOAA12 2000.9.23 20:40左圖:原始圖中圖:低通(w=10)右圖:高通(w=10)直接圖形篇 圖形窗口輸出 IDL支持多種設(shè)備輸出,并可以簡單地在設(shè)備之間切換。 set_plot ,option:option=win|ps|prin
37、ter,大小寫不敏感。 !:當(dāng)前設(shè)備名。 一般用法: cDevName=! set_plot ,printer help ,/device set_plot ,cDevName 常用關(guān)鍵字: close_document:刷新輸出緩沖區(qū)后關(guān)閉圖形文檔,用于從打印機(jī)排出打印頁。 close_file:刷新輸出緩沖區(qū)后關(guān)閉圖形輸出文件。 Filename:當(dāng)輸出為文件時(shí)地文件名,默認(rèn)idl.option landscape:橫向輸出 portrait:縱向輸出,缺省值 xoffset:確定縱向模式下輸出窗口左下角(橫向模式下ps和printer算法不同) yoffset:確定縱向模式下輸出窗口左下
38、角(橫向模式下ps和printer算法不同) xsize:確定輸出窗口寬度 ysize :確定輸出窗口長度 inches:以英寸為單位,缺省為厘米直接圖形篇 圖形窗口輸出 ps 輸出的一般方法: img=tvrd(true=1) set_plot ,ps device, filename= .ps ,color=1 device ,xsize= ,ysize= ,xoffset= ,yoffset= tvscl, img ,/true device, /close_file set_plot ,win printer輸出的一般方法: ok=dialog_printersetup() img=t
39、vrd(true=1) ratio=float(!d.y_vsize)/!d.x_vsize (printer設(shè)備不能自動(dòng)保持縱橫比) set_plot,printer device,get_page_size=spagesize spagesize=spagesize/!d.x_px_cm,!d.x_px_cm device ,xoffset= ,yoffset= tvscl ,img ,/true ,/centimeters ,xsize= ,ysize= *ratio device ,/close_document set_plot ,winIDL 高級培訓(xùn)應(yīng)用程序構(gòu)造篇編程篇 建立、管
40、理應(yīng)用程序 IDL有兩種應(yīng)用程序管理方法:主程序和工程 主程序:建立與程序名同名的 .pro文件,編譯執(zhí)行。 pro test end 在這種方式下,根據(jù)IDL的自動(dòng)編譯規(guī)則,所有被調(diào)用的子程序或者與主程序?qū)懭胪粋€(gè)文件并放置在主程序的上部;或者寫成與子程序同名的 .pro文件,存儲在可搜索的路徑下。(子程序指過程或函數(shù)) 工程:建立若干個(gè) .pro文件,每個(gè)文件不必與任何子程序同名。指定其中一個(gè)過程為主程序,該過程的名字作為工程執(zhí)行時(shí)首先調(diào)用的過程(即 run command)。 在這種方式下,由于程序編寫未必遵守IDL的自動(dòng)編譯規(guī)則,因此在運(yùn)行前必須編譯工程中所有的文件。 分發(fā):將源程序編
41、譯為.sav文件。 主程序方式,需手工編譯、存儲為.sav文件 .compile app_pro resolve_all save, /routines, app_pro ,app_sav 工程方式,設(shè)置工程屬性為形成 .sav文件,使用工程菜單項(xiàng)下的build選項(xiàng)即可。編程篇 應(yīng)用程序結(jié)構(gòu)XMangerWidgetCreationRoutine(TLB)call xmanagerEventHandlerCalling RoutineEvent structureOnly if TLB is destoryed主程序調(diào)用相關(guān)子程序編程篇 主程序結(jié)構(gòu)主程序的一般結(jié)構(gòu): pro app_pro c
42、ompile_opt idl2 create top layout base(TLB) create gui base on TLB (initial application) realize TLB collect user information call xmanager ,/NO_BLOCK endinitial application 該過程可以在主程序里進(jìn)行。但更好的辦法是編寫單獨(dú)的過程,用TLB的notify_realize關(guān)鍵字指定過程名,當(dāng)realize TLB時(shí)執(zhí)行。/NO_BLOCK 使用該關(guān)鍵字,主程序運(yùn)行后,命令行仍然可以使用,主程序自身仍可修改編譯,有利于調(diào)試。co
43、mpile_opt idl2 改變默認(rèn)編譯選項(xiàng),idl2表示defint32和strictarr 編程篇 TLBTLB的三種基本形式 standard TLB: tlb_id=widget_base( group_leader=group $ ,uname=tlb ,title=idl app ) 適用于一般的應(yīng)用程序,可以單獨(dú)運(yùn)行或被調(diào)用。group可以不存在。 modal TLB: tlb_id=widget_base( group_leader=group ,/modal ,uname=tlb ,title=modal app ) 適用于對話框類的應(yīng)用程序,通常不可以單獨(dú)運(yùn)行,只能被調(diào)用
44、。group必須合法。調(diào)用該類程序后,調(diào)用者暫時(shí)掛起,直至該程序返回。 floating TLB: tlb_id=widget_base( group_leader=group ,/floating ,uname=tlb ,title=floating app ) 適用于任務(wù)優(yōu)先類的應(yīng)用程序,通常不可以單獨(dú)運(yùn)行,只能被調(diào)用。group必須合法。調(diào)用該類程序后,調(diào)用者可以繼續(xù)運(yùn)行。該程序總在最前面。編程篇 GUI基本組件容器組件: widget_base:任何GUI組件必須在某BASE組件上實(shí)現(xiàn)。一個(gè)BASE組件可以包含其它的BASE。GUI 組件: widget_draw:圖形窗口,所有的圖形
45、、圖像顯示均在此實(shí)現(xiàn) widget_label:標(biāo)簽,不可編輯的文本,可用于提示、說明 widget_button:按鈕,分為push button、radio button和checkbox。 可用于命令、單選以及多選 widget_text:文本框,可編輯的文本,可用于用戶輸入 widget_slider:滑動(dòng)條,分為水平和垂直,可用于調(diào)整預(yù)設(shè)值 widget_listbox:列表框,用于項(xiàng)目選擇 widget_droplist:下拉列表框 widget_table:表格,可編輯的二維數(shù)據(jù)組件標(biāo)識: 每一個(gè)組件創(chuàng)建時(shí)都會產(chǎn)生一個(gè)id,并且可以指定一個(gè)uname。這些都是以后檢索、操作這個(gè)組
46、件的標(biāo)識。TrueType字體設(shè)置: draw:使用device ,set_font=fnt_str ,/tt_font,輸出時(shí)使用font=1。通常在與用戶交互時(shí)使用。 其它:使用font=fnt_str。通常在創(chuàng)建時(shí)使用編程篇 GUI其他組件Compound Widgets 組合組件是一組完備、自容、可重用的應(yīng)用程序,使用時(shí)與基本組件大致相同,但它們是用IDL編寫的。所有組合組件得名稱都以cw_開始。 組合組件包括一下幾類: Animation(動(dòng)畫) Color Manipulation(顏色操作) Data Entry and Display(數(shù)據(jù)輸入輸出) Image Manipul
47、ation(圖像處理) Orientation(定位操作) User Interface(用戶界面) 組合組件一般目的是擴(kuò)充了相應(yīng)的基本組件的功能。Dialogs 對話框用于用戶界面,可以象組件一樣使用,但它不屬于組件構(gòu)造層次。對話框是modal元素,當(dāng)調(diào)用一個(gè)對話框時(shí),其他界面元素暫時(shí)刮起直至對話框返回。 對話框包括以下幾種: File and Directory Selection:DIALOG_PICKFILE MessageDIALOG_MESSAGE Printing:DIALOG_PRINTJOB、DIALOG_PRINTERSETUP編程篇 GUI的構(gòu)造層次及實(shí)現(xiàn)TLBbaseb
48、asebasebasebaseitemitemitemitemGUI層次:Every GUI element is over BASEGUI實(shí)現(xiàn):指GUI 第一次在屏幕上顯示 widget_control ,tlb ,/realize TLB實(shí)現(xiàn)后,所有層次關(guān)系屬于TLB的組件均實(shí)現(xiàn)??梢允褂胢ap=0關(guān)鍵字使某些子層次暫不顯示。編程篇 xmanagerXmanager提供事件循環(huán)、監(jiān)視并發(fā)送事件至事件處理程序,直至程序結(jié)束。xmanager ,name ,widget_id ,/just_reg ,/no_block ,group_leader=widget_id ,event_handle
49、r=event_pro ,cleanup=cleanup_proname:創(chuàng)建TLB的過程名widget_id:TLB的idjust_reg:登記一個(gè)TLB,但并不進(jìn)入事件循環(huán)no_block:在程序運(yùn)行期間仍然允許IDL環(huán)境可以使用group_leader:指定上一層次的widget_idevent_handler:指定事件處理程序。缺省為name_event 語法:event_pro ,eventcleanup:指定程序退出時(shí)執(zhí)行的程序。若指定,擁有最高優(yōu)先級 語法:clenup_pro ,widget_id程序運(yùn)行了嗎? Result = XREGISTERED( name ,/NO_S
50、HOW )編程篇 事件結(jié)構(gòu)事件 用戶在GUI上的每一個(gè)認(rèn)可的 操作都會產(chǎn)生一個(gè)事件,xmanager將事件信息打包傳給IDL,IDL將事件信息解讀后打包成一個(gè)結(jié)構(gòu)類型的數(shù)據(jù),即事件結(jié)構(gòu),并把這個(gè)事件結(jié)構(gòu)做為唯一的位置參數(shù)發(fā)送給事件處理程序。事件結(jié)構(gòu) 事件結(jié)構(gòu)是一個(gè)命名結(jié)構(gòu)。包括一個(gè)結(jié)構(gòu)名、三個(gè)公共字段和一些個(gè)體字段。 event_type ,id: ,top: ,handler , even_type:標(biāo)識事件類型。 id:長整數(shù),產(chǎn)生事件的標(biāo)識符。 top:長整數(shù), id所表示的組件所在的TLB。 handler:長整數(shù),事件處理程序標(biāo)識符。事實(shí)上,由于事件處理程序總與某一特定的組件相聯(lián)系,
51、該標(biāo)識符就是組件標(biāo)識符。 任何前三個(gè)字段定義與上述意義相同的命名字段,都可以認(rèn)為是IDL的一個(gè)事件結(jié)構(gòu)。編程篇 事件處理事件處理方式 當(dāng)事件發(fā)生時(shí),IDL會從當(dāng)前組件層次開始,逐層向上查找與該事件相關(guān)聯(lián)的事件處理程序。handler字段記錄該組件的標(biāo)識。TLBABFGDECEvent occurs hereEventhandlerTLBABFGDECEvent occurs hereEventhandlerEventhandler , id: G ,top: A ,handler: A , , id: G ,top: A ,handler: F , 編程篇 為組件指定事件處理程序?yàn)榻M件指定事件
52、處理程序 1. 由 xmanager 指定的事件處理程序(通常是TLB)處理所有事件。 2. 使用組件創(chuàng)建時(shí)的關(guān)鍵字event_pro或event_func為每一個(gè)事件單獨(dú)指定一個(gè)處理程序。 注意到:xmanager總會為其直接管理的組件(通常是TLB)指定一個(gè)事件處理程序(而且是一個(gè)過程),因此,該組件的事件處理程序不能用event_pro或event_func指定。編程篇 事件處理程序事件處理程序 事件處理程序可以是過程或函數(shù)。 過程:事件處理完畢后被中止,程序等待下一個(gè)事件。 函數(shù):由于函數(shù)有返回值,如果返回值是一個(gè)結(jié)構(gòu),又恰恰符合IDL事件結(jié)構(gòu)標(biāo)準(zhǔn),則IDL會將這個(gè)返回值做為一個(gè)事件處
53、理。(此乃偽事件,可以用來欺騙IDL) 事件處理程序接受并且只接受一個(gè)位置參數(shù),event事件處理程序基本結(jié)構(gòu)(TLB結(jié)構(gòu))pro app_pro_event ,event uname=widget_info(event.id ,/uname) case uname of TLB_uname: begin if tag_names(event ,/structure_name) eq widget_kill_request ) then begin (some cleanup work) widget_control ,event.top ,/destroy return endif end
54、uname1: begin (do something) end uname2: uname2_event_pro ,event (如果已經(jīng)為uname2組件指定了該事件處理程序,則該行略去) else: endcaseend編程篇 數(shù)據(jù)傳遞 注意到,對于一個(gè)應(yīng)用程序,IDL所做的只是“捕獲”各種組件事件,將事件結(jié)構(gòu)做為唯一的位置參數(shù)傳遞給事件處理程序,因此,無法通過通常的參數(shù)傳遞的方法交換數(shù)據(jù)。 IDL提供了user_value,通過為widget_id“綁定”user_value的方法傳遞數(shù)據(jù)。方法: widget_control ,widget_id ,set_uvalue=value
55、,/NO_COPY 將用戶數(shù)據(jù)綁定到一個(gè)組件 widget_control ,widget_id ,get_uvalue=value ,/NO_COPY 從一個(gè)組件獲取用戶數(shù)據(jù)為TLB綁定用戶數(shù)據(jù) 一般地,在主程序中,xmanager之前,會創(chuàng)建一個(gè)結(jié)構(gòu),該結(jié)構(gòu)的各個(gè)字段是用戶在整個(gè)應(yīng)用程序運(yùn)行期間所需要相互傳遞的數(shù)據(jù)。然后把這個(gè)結(jié)構(gòu)綁定給TLB。 sState= widget_control ,TLB_id ,set_uvalue=sState 當(dāng)事件發(fā)生時(shí),IDL會把事件結(jié)構(gòu)傳遞給事件處理程序,事件處理程序可以通過事件結(jié)構(gòu)的top字段來獲得用戶數(shù)據(jù)。 Widget_control ,eve
56、nt.top ,get_uvalue=sState 注意到,用戶數(shù)據(jù)的傳遞是值引用,這就意味著一旦在事件處理程序里改變了用戶數(shù)據(jù)的值,必須把改變了值的用戶數(shù)據(jù)傳回給top才會使改變了的值在其它事件處理程序里生效。 Widget_control ,event.top ,set_uvalue=sState編程篇 數(shù)據(jù)傳遞有問題發(fā)生 事實(shí)上,sState是一個(gè)局部變量,因此當(dāng)綁定給TLB_ID時(shí),是copy了一份到全局內(nèi)存。而當(dāng)事件處理程序獲得用戶數(shù)據(jù)時(shí),又是從全局內(nèi)存中copy一份到該事件處理程序的局部變量中。于是,一份數(shù)據(jù)就有了3份copy。 指定/NO_COPY關(guān)鍵字,就只使用一份。煩惱: (
57、1)copy一事會給我們帶來煩惱。因?yàn)橐坏﹏o_copy,則當(dāng)前的用戶數(shù)據(jù)變量就不再有效。這意味著返回用戶數(shù)據(jù)的命令應(yīng)該是事件處理程序的最后一行,顯然這是不現(xiàn)實(shí)的。 (2)事實(shí)上,必須返回用戶數(shù)據(jù)才會使修改有效這件事也會給我們帶來煩惱,這要求我們必須時(shí)刻保持警惕!是不是精神會有點(diǎn)緊張?:)編程篇 數(shù)據(jù)傳遞解決的方法 用一個(gè)指針變量可以解決這個(gè)問題! (我們不必等IDL把用戶數(shù)據(jù)copy到全局內(nèi)存,我們有能力自己干!) TLB: sState= pState=ptr_new(sState ,/no_copy) widget_control ,TLB_id ,set_uvalue=pState E
58、H: widget_control ,ebent.top ,get_uvalue=pState 這時(shí),*pState 就是 sState有了指針,我們方便多了! (1)任何修改立即生效,免去返回的煩惱。 (2)由于指針僅僅是“指針”,我們可以在sState里也設(shè)置一些必要的指針,比如數(shù)組指針,這樣又可以免去結(jié)構(gòu)數(shù)據(jù)不能更改數(shù)組維數(shù)的煩惱。編程篇 數(shù)據(jù)傳遞沒有免費(fèi)的午餐! 指針仍然有一個(gè)小小的問題。必須在cleanup里將指針釋放,否則會引起內(nèi)存泄漏。最后 沒有證據(jù)證明傳遞 sState 和 pState 哪一個(gè)更好。 由于用戶數(shù)據(jù)是值傳遞,這就帶給我們可以在愿意的時(shí)候隨便傳遞一個(gè)“什么”給TL
59、B的便利。這時(shí),使用pState未必就比使用sState更方便。你需要ptr_free() ! 再者,太多的 * 仍然帶來麻煩。編程篇 數(shù)據(jù)傳遞widget_list 和 widget_droplist 的 uvalue 通常我們在 list 里放置的是帶有說明性的字符串?dāng)?shù)組,然而一旦進(jìn)入事件循環(huán)我們就再也不會得到這個(gè)數(shù)組,我們只能得到這個(gè)數(shù)組的 index 值,即數(shù)組下標(biāo)。 通過綁定字符串?dāng)?shù)組到 list_id 就可以在需要的時(shí)候仍然得到特定的字符串 TLB: widget_control ,list.id ,set_value = aStr widget_control ,list.id
60、,set_uvalue = aStr EH: index = widget_info( list_id ,/droplist_select ) OR index = widget_info( list_id ,/list_select ) widget_control ,list.id ,get_uvalue = aStr string = aStrindex編程篇 操作組件操作組件分為兩個(gè)部分:獲取組件屬性和設(shè)置組件屬性 widget_info函數(shù)用來獲取組件屬性,widget_control函數(shù)用來設(shè)置組件屬性result=widget_info(widget_id , ) general
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 海南職業(yè)技術(shù)學(xué)院《農(nóng)業(yè)資源與利用區(qū)劃》2023-2024學(xué)年第一學(xué)期期末試卷
- 海南體育職業(yè)技術(shù)學(xué)院《環(huán)境生態(tài)監(jiān)測實(shí)驗(yàn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 海南師范大學(xué)《視聽廣告創(chuàng)意與制作》2023-2024學(xué)年第一學(xué)期期末試卷
- 超星電腦顯示課程設(shè)計(jì)
- 二零二五年夫妻財(cái)產(chǎn)凈身出戶分配執(zhí)行合同3篇
- 藝術(shù)形體采集課程設(shè)計(jì)
- 2025年度新型節(jié)能板房租賃及租賃期滿資產(chǎn)處理合同3篇
- 勞動(dòng)合同法對醫(yī)療衛(wèi)生行業(yè)醫(yī)務(wù)人員的規(guī)制探討
- 2025年度網(wǎng)絡(luò)信息安全責(zé)任協(xié)議范本2篇
- 二零二五年度標(biāo)準(zhǔn)化辦公文檔制作與家政服務(wù)聯(lián)合協(xié)議
- 零星工程(零星用工)簽認(rèn)單
- 浙江省湖州市安吉縣2022年八年級數(shù)學(xué)第一學(xué)期期末達(dá)標(biāo)測試試題含解析
- PE電容焊接工藝評定修訂稿
- 兒牙病例討論
- 35kV線路工程電桿組立工程施工組織方案
- QC成果提高鋼結(jié)構(gòu)焊縫一次合格率
- 森林報(bào)測試題
- 刑法涉及安全生產(chǎn)的16宗罪解讀
- 銅精礦加工費(fèi)簡析
- 機(jī)電拆除專項(xiàng)施工方案
- 平鍵鍵槽的尺寸與公差
評論
0/150
提交評論