Hướng Phát Triển

Một phần của tài liệu NGHIÊN CỨUCHUYỂN đổi PHẦN mềm GRASS từ nền UNIX lên WINDOWS (Trang 152 - 157)

Trong thời gian vừa qua, chúng em đã đặt được cái nền cơ bản, tạo nền tảng vững chắc

để phát triển tiếp sau này. Với khối lượng mã nguồn đã chuyển được, chương trình cĩ thể được phát triển tiếp, chuyển đổi nhiều hơn nữa các chức năng mạnh mẽ của GRASS5, phần mềm mà đến bây giờ đã được phát triển đến phiên bản 5.7, một cách trọn vẹn.

KHOA CNTT Ờ

ĐH KHTN

Tài Liu Tham Kho

Albrecht, J. : GTZ-handbook GRASS. Vechta, Germany, 1992 Hoặc xem tại địa chỉ sau:

http://www.laum.uni-hannover.de/iln/grass/

Byars, B.W., Clamons, S.F. : GRASS 4.2 Reference Manual. Waco, U.S.A, 1997 Hoặc xem tại địa chỉ sau:

http://www.baylor.edu/~grass/

Fox, J. : RIM database system. Installers manual. University of Washington, 1989

Fox, J. : RIM database system. Users manual. University of Washington, 1989

Harmon, V., Shapiro, M. : GRASS tutorial: Image processing. CERL, Champaign, Illinois, 1992

Jensen, J. R. : Introductory Digital Image Processing: A remote sensing perspective. Second Edition. New Jersey, 1996

Larson, M., Shapiro, M., Tweddale, S. : Performing map calculations on GRASS data :

r.mapcalc programming tutorial. CERL, Champaign, Illinois, 1991 Hoặc xem tại địa chỉ sau:

http://www.laum.uni-hannover.de/iln/grass/

Lillesand, Th. M., Kiefer, R. W. : Remote sensing and image interpretation. New York, 1994.

Neidig, C.A., Gerdes, D., Kos, Ch. : GRASS 4.0 map digitizing manual: v.digit. CERL, Champaign, Illinois, 1991.

Neteler, M. : Das GRASS Handbuch. Ein problemorientierter Leitfaden. 3. Auflage, Hannover, Germany, 1998.

Phiên bản trước cĩ tại:

http://www.laum.uni-hannover.de/iln/grass/handbuch/

Shapiro, M., Westerveld, J. : GRASS programmer's manual. CERL, Champaign, Illinois, 1991.

Shapiro, M., Westerveld, J. : GRASS user's manual. CERL, Champaign, Illinois, 1991.

KHOA CNTT Ờ

ĐH KHTN

Ph Lc

Mt s k thut chuyn đổi

Kỹ thuật ReDirect Output Stream

Kỹ thuật này dùng để chuyển hướng lại output, thay vì xuất ra dịng stdout, chúng ta sẽ

chuyển hướng sang một ListBox. Sử dụng kỹ thuật này chủ yếu để bắt lấy output của các hàm printf(..), fprintf(..), tạo dễ dàng cho việc xử lý.

Chi tiết của kỹ thuật này, xem trong mã nguồn chương trình.

Kỹ thuật xử lý PAD của GRASS

Khi tạo hay xử lý trên cửa sổ XWindow thì GRASS cĩ sử dụng xâu liên kết đơi PAD...(cấu trúc xâu PAD và các xử lý trên xâu đĩ được định nghĩa độc lập trong 2 file pad.h và pad.c trong thư mục device/lib)

Khi cần thao tác trên cửa sổ XWindow, các hàm R_xxx_Pad sẽđược gọi.

Các hàm R_xxx_Pad này sẽ thực hiện bằng cách gửi sự kiện cùng với tham số dữ liệu kèm theo sự kiện đĩ vào file fifo.1a, khi đĩ, bộ xử lý command (thread) sẽ đĩn lấy sự

kiện và dữ liệu kèm theo này để xử lý bằng cách gọi lại các hàm PAD chuẩn đã được

định nghĩa ở trên như create_pad(), find_pad() v.v... để thực hiện và trả kết quả xử lý

được về (bằng cách ghi vào file fifo.1b).

PAD chẳng qua là một xâu kép như sau: pad1 <=> pad2 <=> pad3 <=> ...<=> pad n

KHOA CNTT Ờ

ĐH KHTN

Mỗi PAD cĩ một tên định danh riêng, và một danh sách liên kết ITEM

Mỗi danh sách liên kết ITEM lại nắm giữ một xâu LIST, mỗi phần tử LIST cĩ giá trị

riêng.

Bởi vậy, thường hay cĩ câu sau đây:

"...duyệt hết các Item của Pad này " "...duyệt hết các List của Item này "

Ởđây, xâu này bắt đầu bằng biến con trỏ tồn cục "padlist" trong file pad.c Và pad được khởi tạo ban đầu create_pad("").

Hàm create_pad (char *name) :

Để tạo ra một PAD mới cĩ tên là name, rồi gắn nĩ vào đầu xâu pad_mới <=> pad1 <=> pad2 <=> ...<=> pad n

Hàm find_pad (char *name) :

Trả về con trỏđến một phần tử pad cĩ tên là name trong xâu, nếu cĩ.

Sự Kiện PAD_GET_ITEM:

Để lấy giá trị của tồn bộ danh sách LIST trong ITEM của PAD hiện tại (currentPad). Cụ thể là sau khi gửi sự kiện PAD_GET_ITEM với tham số là tên của Item (chẳng hạn như là "cur_w" )

KHOA CNTT Ờ

ĐH KHTN

_send_ident(PAD_GET_ITEM); //gi s kin

_send_text("cur_w"); //gi tiếp tham s là tên ca Item.

_get_char(&result); // ghi thc s vào file và nhn li kết qu

... // Tới đây thì thread chạy ngầm bên kia của chúng ta // sẽ bắt lấy và xử lý Sự Kiện này

RECTEXT(text, text_size); /* đọc lên tham sốđược kèm theo:

tên của Item, cụ thểởđây là chuỗi "cur_w" */ if (curpad == NULL){ // nếu khơng tồn tại Pad hiện tại

RESULT(NO_CUR_PAD); // thì trả về kết quả error break;

}

item = find_item(curpad, text); // tìm trong danh sach Items

// của current pad items cĩ tên là // text if (item == NULL) { RESULT(NO_ITEM); // nếu khơng tìm thấy thì // trả về kết quả error break; }

RESULT(OK); // đã tìm thấy Item cĩ tên như thế, //trả về kết quả OK trước!

for (list = item->list; list != NULL; list = list->next) //duyệt List if (*list->value) //của Item vừa tìm thấy

SENDTEXT(list->value); // ghi liên tục vào file chuỗi // danh sách các giá trị của List SENDTEXT(""); // kết thúc bằng ký hiệu rỗng ""

/* Tới đây thì kết thúc Thread bắt sự kiện này */

...

if (result == OK) // nếu mà kết quả trả về là OK

get_list(list, count); // ly lên danh sách giá tr ca List va được // ghi vào hi nãy trên ....

D_New_Window(name, top, bottom, left, right):

KHOA CNTT Ờ

ĐH KHTN

Hàm này dùng để tạo ra một pad mới cĩ tên là "full_screen", sau đĩ chọn nĩ là Pad hiện hành, sau đĩ, thiết lập giá trị ITEM cĩ tên "d_win" của nĩ các giá trị top, bottom, right, left của cửa sổ cần tạo. Sau đĩ, gọi hàm D_Show_Window để show ra màn hình...

Các hàm khác đều tương tựẦ.

HẾT

Một phần của tài liệu NGHIÊN CỨUCHUYỂN đổi PHẦN mềm GRASS từ nền UNIX lên WINDOWS (Trang 152 - 157)

Tải bản đầy đủ (PDF)

(157 trang)