Ngô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ắpxếpvàđộlớncủa chúngđượclưu trong file có phầnmở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ước
attribute2 = value2; (ACAD hoặc tự đ/nghĩa)
} value – giá trịcủa thuộc tính
4 trang |
Chia sẻ: luyenbuizn | Lượt xem: 1384 | Lượt tải: 0
Nội dung tài liệu Hộp thoại DCL, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
©
©
tđ
t
tđ
t
20
12
20
12
đ
t
đ
t
20
12
©
20
12
©
tđtđ
©
©
tđ
t
tđ
t
20
12
©
20
12
©
1
6. Hộp thoại DCL
Ngô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.
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ước
attribute2 = 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àng
boxed_row – gom các tile thành hàng và vẽ đường bao quanh
column – gom các tile thành cột
boxed_column – gom các tile thành cột và vẽ đường bao quanh
radio_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 quanh
radio_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_button
có thể nhận tác động từ người dùng như một nút ấn, image
chỉ 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ôi , .
spacer – bình thường khoảng cách giữa các tile được tự động tính
toá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.
©
©
tđ
t
tđ
t
20
12
20
12
đ
t
đ
t
20
12
©
20
12
©
tđtđ
©
©
tđ
t
tđ
t
20
12
©
20
12
©
2
Thuộc tính của tile
action – 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ường
label – 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ự để …
đặ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ách
nhau 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ây
dialog
image_button
row
boxed_column
popup_list
list_box
edit_box
toggle
toggle
boxed_column
radio_button
radio_button
radio_button
radio_button
toggle
toggle
toggle
row
image
button
button
button
DCL code
InputData : 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 0co or = ;
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 {: e t_ ox
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ọn
key = “allren”;
}
Ví dụ - DCL code
: toggle {
label = “Góm nhóm các nét vẽ”;
value = “1”; // mặc định chọn
key = “group”;
}
} // kết thúc cột thứ nhất
b d l { // ộ hứ 2: oxe _co umn c t t
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
}
©
©
tđ
t
tđ
t
20
12
20
12
đ
t
đ
t
20
12
©
20
12
©
tđtđ
©
©
tđ
t
tđ
t
20
12
©
20
12
©
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 t t c c t
: 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 code
mesys11 : 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ại
Hà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à ả ề NILu t n c ng, m tr v , ngược ạ , m tr v .
Đặ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_tile
Hà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_tile
Hà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 tile
Hà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ự.
©
©
tđ
t
tđ
t
20
12
20
12
đ
t
đ
t
20
12
©
20
12
©
tđtđ
©
©
tđ
t
tđ
t
20
12
©
20
12
©
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ách
ope – 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 list_
ind – 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ách
Hà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”
(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 ảnh
Hà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:
(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”)) _
(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ùng
chữ 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”)) _
(start_image “img1”)
(fill_image 0 0 w h color)
(end_image)
Hàm (slide_image x1 y1 width height sldname) gắn ảnh
AutoCAD 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 được
lưu trong thư viện ảnh thì sldname sẽ phải được viết dưới dạng
libname(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.
Các file đính kèm theo tài liệu này:
- 01c_autolisp_dcl_7638.pdf