01c autolisp dcl

4
©t đt t đt 2012 2012 t t 2012 © 2012 © t đ t đ © t đ t t đ t 2012 © 2012 © 1 6. Hp thoi DCL Ngôn ngDCL dùng để to các hp thoi. So vi cách giao tiếp trên dòng lnh, hp thoi có nhiu ưu đim như: Nhp liu thun tin, Giao din thân thin hơn… Các hp thoi và các biến cđược điu khin bng AutoLISP Các nút điu khin trên hp thoi gi là các tile. Các tile này có thđược kết hp theo nhóm subasembly, sp xếp trong 1 dòng hoc ct (cluster). Các tile trong nhóm assembly được gi là children. 6.1. Thiết kế hp thoi DCL Hp thoi được tchc theo cu trúc cây, vi phn gc là tile có tên dialog, định nghĩa bn thân hp thoi, tiếp đến là các tile, các cluster, subassembly… Hp thoi được định nghĩa qua file văn bn ASCII, viết theo cú pháp ca ngôn ngDCL. File cha định nghĩa các tile, cluster, subassembly, cách spxếp và độ lnca chúng đượclưu trong file có phnmrng *.DCL. sp xếp độ ln ca chúng được lưu trong file phn mrng .DCL. Mt file DCL có thcha nhiu hp thoi. Lưu ý DCL phân bit chhoa và chthường. Để xem trước kết quthiết kế hp thoi, chn Tools / Interface tools / Preview DCL Cú pháp chung để khai báo 1 tile có dng: name : item1 [ : item2 …] name – tên tile mi { attribute1 = value1; item – tile đã định nghĩa trước attribute2 = value2; (ACAD hoc tđ/nghĩa) … } value – giá trca thuc tính 6.1. Thiết kế hp thoi DCL (2) Để tham chiếu ti tile (đưa tile vào trong cluster hoc hp thoi) có thsdng mt trong 2 cú pháp sau: name; hoc : name { attribute = value; } trong đó name là tên tile đã định nghĩa Vi cú pháp thnht, tt ccác thuc tính ca tile được ginguyên theo định nghĩa. Cu trúc th2 cho phép thêm hoc sa đổi các thuc tính ca tile. Lưu ý rng cú pháp này cháp dng cho tile đơn (không áp dng cho nhóm subassembly) Chú thích bt đầu bng // Các tile hot động có sn button – các nút n như Ok, Cancel… image_button – nút n, nhưng trên nó thhin nh(ACAD slide) edit_box –hp văn bn, dùng để nhp dliu popup_list – danh sách thu gn (pulldown) list_box hp danh sách (nếu danh sách chn vượt quá gii hn ca box này, thanh trượt – scrollbar sxut hin) radio_button – nút chn radio (dùng chn 1 trong sít các la chn đã định trước) toggle – nút kim (check) slider – thanh trượt, dùng chn giá trnm trong vùng cho trước Các cluster dialog – gom các tile, cluster, subassembly để to hp thoi row – gom các tile thành hàng boxed_row – gom các tile thành hàng và vđường bao quanh column – gom các tile thành ct boxed_column – gom các tile thành ct và vđường bao quanh radio_row – gom các nút radio thành nhóm (sp xếp theo hàng) boxed_radio_row – như trên nhưng to thêm đường vin quanh radio_column – gom các nút radio thành nhóm (sp xếp theo ct) boxed_radio_column – như trên nhưng thêm đường vin quanh Các tile trang trí image - hin thhình nh lên hp thoi. Khác vi image_button có thnhn tác động tngười dùng như mt nút n, image chhin hình nh mà không nhn mt tác động nào. text - hin thvăn bn lên hp thoi. Khác vi text_box để nhp dliu text chhin thdliu mà thôi dliu, text chhin thdliu thôi. spacer – bình thường khong cách gia các tile được tđộng tính toán, space dùng để thay đổi li các khong cách này theo ý người thiết kế hp thoi.

Upload: thao-phan

Post on 30-Nov-2015

114 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: 01c Autolisp Dcl

© 

© tđ

ttđt

2012 

2012 

đtđt2012 ©

 2012 ©

 tđtđ© 

© tđ

ttđt

2012 ©

2012 ©

1

6. Hộp thoại DCLNgôn ngữ DCL dùng để tạo các hộp thoại. So với cách giao tiếp trên dòng lệnh, hộp thoại có nhiều ưu điểm như: Nhập liệu thuận tiện, Giao diện thân thiện hơn…

Các hộp thoại và các biến cố được điều khiển bằng AutoLISP

Các nút điều khiển trên hộp thoại gọi là các tile.

Các tile này có thể được kết hợp theo nhóm subasembly, sắp xếp trong 1 dòng hoặc cột (cluster).

Các tile trong nhóm assembly được gọi là children.

6.1. Thiết kế hộp thoại DCL

Hộp thoại được tổ chức theo cấu trúc cây, với phần gốc là tile có tên dialog, định nghĩa bản thân hộp thoại, tiếp đến là các tile, các cluster, subassembly…Hộp thoại được định nghĩa qua file văn bản ASCII, viết theo cú pháp của ngôn ngữ DCL. File chứa định nghĩa các tile, cluster, subassembly, cách sắp xếp và độ lớn của chúng được lưu trong file có phần mở rộng *.DCL.sắp xếp và độ lớn của chúng được lưu trong file có phần mở rộng .DCL. Một file DCL có thể chứa nhiều hộp thoại. Lưu ý DCL phân biệt chữ hoa và chữ thường.Để xem trước kết quả thiết kế hộp thoại, chọn Tools / Interface tools / Preview DCL Cú pháp chung để khai báo 1 tile có dạng:

name : item1 [ : item2 …] name – tên tile mới

{ attribute1 = value1; item – tile đã định nghĩa trướcattribute2 = value2; (ACAD hoặc tự đ/nghĩa)… } value – giá trị của thuộc tính

6.1. Thiết kế hộp thoại DCL (2)

Để tham chiếu tới tile (đưa tile vào trong cluster hoặc hộp thoại) có thể sử dụng một trong 2 cú pháp sau:name; hoặc: name {

attribute = value;;…} trong đó name là tên tile đã định nghĩa

Với cú pháp thứ nhất, tất cả các thuộc tính của tile được giữ nguyên theo định nghĩa.Cấu trúc thứ 2 cho phép thêm hoặc sửa đổi các thuộc tính của tile. Lưu ý rằng cú pháp này chỉ áp dụng cho tile đơn (không áp dụng cho nhóm subassembly)Chú thích bắt đầu bằng //

Các tile hoạt động có sẵn

button – các nút ấn như Ok, Cancel…

image_button – nút ấn, nhưng trên nó thể hiện ảnh(ACAD slide) edit_box – hộp văn bản, dùng để nhập dữ liệu

popup_list – danh sách thu gọn (pulldown)list_box – hộp danh sách (nếu danh sách chọn vượt quá giới hạn

của box này, thanh trượt – scrollbar sẽ xuất hiện)radio_button – nút chọn radio (dùng chọn 1 trong số ít các lựa

chọn đã định trước)toggle – nút kiểm (check)slider – thanh trượt, dùng chọn giá trị nằm trong vùng cho trước

Các cluster

dialog – gom các tile, cluster, subassembly để tạo hộp thoại

row – gom các tile thành hàngboxed_row – gom các tile thành hàng và vẽ đường bao quanh

column – gom các tile thành cộtboxed_column – gom các tile thành cột và vẽ đường bao quanhradio_row – gom các nút radio thành nhóm (sắp xếp theo hàng)

boxed_radio_row – như trên nhưng tạo thêm đường viền quanhradio_column – gom các nút radio thành nhóm (sắp xếp theo cột)boxed_radio_column – như trên nhưng thêm đường viền quanh

Các tile trang trí

image - hiển thị hình ảnh lên hộp thoại. Khác với image_buttoncó thể nhận tác động từ người dùng như một nút ấn, imagechỉ hiện hình ảnh mà không nhận một tác động nào.

text - hiển thị văn bản lên hộp thoại. Khác với text_box để nhập dữ liệu text chỉ hiển thị dữ liệu mà thôidữ liệu, text chỉ hiển thị dữ liệu mà thôi.

spacer – bình thường khoảng cách giữa các tile được tự động tínhtoán, space dùng để thay đổi lại các khoảng cách này theoý người thiết kế hộp thoại.

Page 2: 01c Autolisp Dcl

© 

© tđ

ttđt

2012 

2012 

đtđt2012 ©

 2012 ©

 tđtđ© 

© tđ

ttđt

2012 ©

2012 ©

2

Thuộc tính của tileaction – chuỗi ký tự thể hiện biểu thức AutoLISP (không chứa hàm

command) sẽ thực hiện khi người dùng chọn tile này. alignment – cách dóng các tile theo chiều ngang hoặc dọc trong nhóm

cluster. Giá trị cho alignment gồm các từ khóa: left (mặc định), right, centered (với cột) và top, bottom, centered (với dòng)

color – màu nền của nút ảnh: có thể là số nguyên (1 = đỏ, 2 = vàng… hoặc các từ khóa như dialog_foreground, dialog_background, red (đỏ), blue (xanh dương)…

edit_width – chiều rộng của hộp nhập dữ liệu (số ký tự có thể chứa trong hộp)

height – chiều cao của hộp nhập dữ liệu (số dòng ký tự có thể chứa trong hộp)

is_cancel – giá trị gồm true hoặc false xử lý tác động của phím Esc. Khi là true, nhấn phím Esc sẽ tương ứng với việc chọn tile này.

is_default – tương tự trên nhưng với phím Enter. Các thuộc tính is_cancel và is_default chỉ áp dụng với các button.

Thuộc tính của tile (2)is_enable – true hoặc false: cho phép tile có truy cập được hay không

ngay khi khởi tạo. Có thể thay đổi thuộc tính với hàm mode_tile.key – chuỗi ký tự thể hiện khóa tham chiếu đến tile. Phân biệt chữ

hoa và thườnglabel – chuỗi ký tự thể hiện trên nút button, sau dấu kiểm, nút radio,

tiêu đề nhóm, tiêu đề hộp thoại Thêm dấu & vào trước ký tự đểtiêu đề nhóm, tiêu đề hộp thoại… Thêm dấu & vào trước ký tự đểđặt phím tắt cho tile. Ví dụ: label = “&Hỏi thêm”

list – các lựa chọn sẽ được dùng trong danh sách (list_box, popup_list) ngay khi khởi tạo. Giá trị cho dạng chuỗi ký tự, các lựa chọn cáchnhau bởi chuỗi ký tự “\n”. Ví dụ: list = “Red\nBlue\nGreen”

mnemonic – phím tắt của tile (phải là ký tự thể hiện trong label). Ví dụlabel = “Hỏi thêm”; mnemonic = “H”

value – giá trị (chuỗi ký tự) đặt cho tile khi khởi tạo hộp thoại. Có thể thay đổi bằng hàm set_tile. Ví dụ: value = “1” hoặc value = “0”

width – chiều rộng của tile (đo bằng số ký tự)

Ví dụ - cấu trúc câydialog

image_buttonrow

boxed_columnpopup_listlist_boxedit_boxtoggleggtoggle

boxed_columnradio_buttonradio_buttonradio_buttonradio_buttontoggletoggletoggle

rowimagebuttonbuttonbutton

DCL codeInputData : dialog {

label = “ Nhập thông số “; // tiêu đề hộp thoại: image_button { // định nghĩa hộp hình ảnh minh họa

width = 35;aspect_ration = 2.0;height = 12;

l 0color = 0;key = “hv_image”;allow_accept = true;}

: row { // hàng thứ nhất: boxed_column { // cột thứ nhất trong hàng

label = “Kích thước”; // tiêu đề: popup_list { // các tile trong cột này

key = “kichthuoc”;edit_width = 10;}

Ví dụ - DCL code: list_box {

label = “Mô tả chi tiết”;key = “motachitiet”;width = 4;height = 6;}

di b {: edit_box {label = “Chiều dài”;key = “l”;edit_width = 10;}

: toggle {label = “Ren suốt chiều dài vít”;value = “0”; // mặc định không chọnkey = “allren”;}

Ví dụ - DCL code: toggle {

label = “Góm nhóm các nét vẽ”;value = “1”; // mặc định chọnkey = “group”;}

} // kết thúc cột thứ nhấtb d l { // ộ hứ 2: boxed_column { // cột thứ 2

label = “Vẽ hình chiếu: “;: radio_button {

label = “&1”; key = “hcc”;}

: radio_button {label = “&2”; key = “hcd”;value = “1”; // mặc định chọn}

Page 3: 01c Autolisp Dcl

© 

© tđ

ttđt

2012 

2012 

đtđt2012 ©

 2012 ©

 tđtđ© 

© tđ

ttđt

2012 ©

2012 ©

3

Ví dụ - DCL code(….): toggle {

label = “Vẽ đệm vênh”; key = “demvenh”;value = “0”; // mặc định không chọn}

} // kế hú ộ 2} // kết thúc cột 2: row { // sang dòng 2, gồm các tile đơn đã định nghĩa

mesys11; ok1;cancel1;help1;} // hết row 2

} // kết thúc hộp thoại InputData// Các tile đơn định nghĩa gồm mesys1, ok1, cancel1, help1 xem trang tiếp theo

DCL codemesys11 : image {

width = 8;height = 2;fixed_width = true;color = dialog_background;key = “mesys11”;

cancel1 : button {label = “&Không”;width = 13;fixed_width = true;is_cancel = true;key = “cancel”;

}

ok1 : button {label = “&Vẽ”;width = 13;fixed_width = true;is_default = true;key = “accept”;}

}

help1 : button {label = “&Hỏi thêm”;width = 13;fixed_width = true;alignment = centered;key = “help”;}

6.2. Điều khiển hộp thoạiHàm (load_dialog tênfileDCL) để nạp file DCL vào bộ nhớ. Ví dụ:

(setq dcl_id (load_dialog “vidu110.dcl”))

Gọi hàm (new_dialog tênhộpthoại dcl_id) để gọi hộp thoại có tên chỉ định đã lưu trong file DCL. Ví dụ, hộp thoại tên “InputData”

(new_dialog “InputData” dcl_id)Nế hà h ô hà ả ề T l i hà ả ề NILNếu thành công, hàm trả về T, ngược lại, hàm trả về NIL.

Đặt lại các thông số cho các tile bằng các hàm xử lý tile.Gọi hàm (start_dialog) để hiện hộp thoại. Hàm này hoạt động cho đến khi người dùng chọn tile đã được gán biểu thức AutoLISP chứa hàm done_dialog. Hàm start_dialog trả về giá trị status trong biểu thức gọi hàm done_dialog, còn nếu bỏ qua tham số status, hàm trả về 1 khi người dùng chọn tile được gán is_default = true, 0 khi chọn tile được gán is_cancel = true. Hàm (done_dialog [status]) đóng hộp thoại này, chỉ được gọi trong biểu thức liên quan đến chọn tile – hàm action_tile.

Gọi hàm (unload_dialog dcl_id) để giải phóng hộp thoại.

Các hàm xử lý tile(action_tile key action) - gán các biểu thức cần thiết khi người dùng chọn tile có key đã khai báo trong DCL.

(mode_tile key mode) - thay đổi các đặc tính tile. Hàm luôn trả về giá trị NIL.

(set_tile key value) - đặt lại giá trị value của tile. Trả về giá trị value vừa đặt lại cho tile.ặ ạ

(get_tile key) - lấy giá trị value hiện thời của tile tương ứng. Hàm trả về chuỗi ký tự thể hiện giá trị hiện thời của tile.

Các hàm thao tác với popup_list và list_box gồm: start_list –thực hiện tạo mới, thêm hoặc sửa đổi danh sách, add_list – thêm hoặc thay đổi một thành phần trong danh sách trả về bởi hàm start_list vàend_list – kết thúc các thao tác với danh sách.

Các hàm thao tác với tile ảnh gồm start_image – bắt đầu các thao tác ảnh, vector_image – vẽ đoạn thẳng, fill_image – tô màu vùng tile, slide_image – gắn ảnh lên tile và end_image – kết thúc.

Hàm action_tileHàm (action_tile key action) gán các biểu thức cần thiết khi người dùng chọn tile có key đã khai báo trong DCL.key – khóa tham chiếu (khi định nghĩa tile)action – chuỗi ký tự thể hiện các tác vụ sẽ thực hiện khi chọn tile này.

Ví dụ 1: (action_tile “l” “(setq chieudai (atof (get_tile \”l\”)))”) – sẽ đọc biểu thức do người dùng nhập trong hộp “Chiều dài” – xem hộp thoại 110, kết quả được chuỗi ký tự, sau đó chuyển đổi chuỗi ký tự này thành số thực và gán cho biến chieudai.

Ví dụ 2: (action_tile “kichthuoc” (setq size $value) – sẽ trả về chuỗi ký tự thể hiện thứ tự phần tử đã chọn trong danh sách các kích thước vít tiêu chuẩn hiện trong hộp popup_list: “0” – phần tử đầu, “1” – phần tử thứ 2…

Biểu thức kiểu $X được gọi là callback. Các callback hay dùng gồm $key – trả về giá trị thuộc tính key của tile đã chọn, $value – trả về giá trị value của tile.

mode_tile, set_tile và get_tileHàm (mode_tile key mode) thay đổi các đặc tính tile như cho phép chọn hay không (is_enable), bật tắt hình ảnh của tile...

key – khóa tham chiếu (khi định nghĩa tile)mode – số nguyên, thể hiện đặc tính mới của tile:

0 – cho phép chọn tile (đặt is_enable = true)1 – không cho phép chọn tile (làm tile mờ đi trên hộp thoại)2 – đặt focus tới tile này (tương tự như dùng Tab để chuyển đến)3 – chọn nội dung văn bản trong hộp edit_box. Khi nhập giá trị,

phần nội dung cũ sẽ bị ghi đè lên.4 – bật / tắt hình ảnh trên tile (image, image_button)

Hàm (set_tile key value) thay đổi giá trị value của tile, trả về giá trị value mới.

value – chuỗi ký tự, thể hiện giá trị mới của tileHàm này thường được dùng để đưa các kết quả tính toán lên hộp thoại.Hàm (get_tile key) lấy giá trị value hiện thời của tile, kết quả của hàm là chuỗi ký tự.

Page 4: 01c Autolisp Dcl

© 

© tđ

ttđt

2012 

2012 

đtđt2012 ©

 2012 ©

 tđtđ© 

© tđ

ttđt

2012 ©

2012 ©

4

Các hàm thao tác với popup_list và list_box

Hàm (start_list key [ope [ind]]) tạo mới hoặc sửa đổi danh sáchope – nhận các giá trị 1 (thay đổi nội dung danh sách), 2 (thêm thành phần mới vào danh sách) hoặc mặc định 3 (tạo mới danh sách). Nếu danh sách đã tồn tại và ope được gán giá trị 3 (hoặc bỏ qua), danh sách cũ sẽ bị xóa và thay mới bằng các thành phần ở hàm add listcũ sẽ bị xóa và thay mới bằng các thành phần ở hàm add_listind – số nguyên thể hiện thành phần cần thay đổi. Các thành phần được đánh số từ 0.Hàm (add_list item) thêm hoặc thay đổi thành phần trong danh sách. Hàm này được dùng ngay sau hàm start_list. item – chuỗi ký tự thể hiện thành phần mới của danh sáchHàm (end_list) kết thúc các thao tác với danh sách

Lưu ý: Ba hàm này luôn đi cùng nhau theo thứ tự trên.

Ví dụ về popup_list và list_box; lấy các phần tử trong danh sách AutoLISP và đưa vào popup_list(setq llst (list “red” “blue” “green”))(start_list “popup”) ; tạo danh sách mới có key là popup(mapcar ‘add_list llst) ; chạy hàm add_list với các thành phần của danh sách llst (end_list) ; kết thúc thao tác

; thay thê thành phần “blue” thành “xanh”; thay thê thành phần blue thành xanh(start_list “popup” 1 1) ; “blue” là thành phần thứ 2 trong danh sách(add_list “xanh”)(end_list)

; thêm vào cuối danh sách hai thành phần mới “cyan” và “gray”(start_list “popup” 2) ; ope = 2, tức thêm vào danh sách(add_list “cyan”)(add_list “gray”)(end_list)Kết quả danh sách popup mới sẽ là “red”, “xanh”, “green”, “cyan”, “gray”.

Thao tác với các tile hình ảnhHàm (start_image key) bắt đầu các thao tác với tile hình ảnh có key chỉ định trong hàm. Sau đó để thực hiện các thao tác với hình ảnh sẽ phải gọi các hàm vector_image, fill_image hoặc slide_image.

Hàm (end_image) kết thúc các thao tác với hình ảnh cho tile được gọi bởi hàm start_key.

Để xác định kích thước của tile có thể sử dụng các hàm:Để xác định kích thước của tile có thể sử dụng các hàm:(dimx_tile key): trả về chiều rộng của tile.(dimy_tile key): trả về chiều cao của tile.

Trong đó, key là khóa tham chiếu tới tile cần tìm kích thước

Hàm slide_image chỉ gắn các ảnh slide do AutoCAD tạo ra, được lưu riêng lẻ (*.SLD) hoặc trong file thư viện ảnh (*.SLB).

Ảnh *.SLB được tạo từ các hình ảnh trên bản vẽ bằng lệnh MSLIDE. Các ảnh này được đưa vào thư viện SLB thông qua chương trình SLIDELIB.EXE filename, với filename là tên của file văn bản, chứa nội dung gồm tên các file SLB.

Hàm vector_image

Hàm (vector_image x1 y1 x2 y2 color) vẽ đoạn thẳng từ 2 điểm có tọa độ (x1 y1) và (x2 y2) trên tile với màu có số hiệu color. Ví dụ: Vẽ 2 đường chéo màu đỏ qua các đỉnh của tile có key là “img1”:(setq color 1

w (dimx_tile “img1”)h (dimy tile “img1”))h (dimy_tile img1 ))

(start_image “img1”)(vector_image 0 0 w h color)(vector_image 0 h w 0 color)(end_image)Lưu ý, màu color là số nguyên, tương ứng với số hiệu màu trong AutoCAD: 1 = đỏ, 2 = vàng… hoặc các giá trị sau:

-2 = BGLCOLOR – màu màn hình nền AutoCAD hiện hành-15 = DBGCOLOR – màu nền hộp thoại hiện hành-16 = DFGLCOLOR – màu văn bản trên hộp thoại hiện hành-18 = LINELCOLOR – màu đường viền hộp thoại hiện hành.

Hàm fill_image và slide_image

Hàm (fill_image x1 y1 width height color) tô màu color lên vùngchữ nhật trên tile có đỉnh (x1 y1) và các cạnh có độ lớn width và height. Ví dụ: Tô màu vàng cho toàn bộ tile có key “img1”:(setq color 2

w (dimx_tile “img1”)h (dimy tile “img1”))h (dimy_tile img1 ))

(start_image “img1”)(fill_image 0 0 w h color)(end_image)

Hàm (slide_image x1 y1 width height sldname) gắn ảnhAutoCAD Slide lên vùng chữ nhật trên tile có đỉnh (x1 y1) và các cạnh cóđộ lớn width và height. Tham số sldname là tên file slide sẽ được dùng. Nếu ảnh slide này đượclưu trong thư viện ảnh thì sldname sẽ phải được viết dưới dạnglibname(sldname), với libname là tên file thư viện. Phần mở rộng của file slide hoặc file thư viện không cần kèm phần tên.