Thứ Tư, 21 tháng 7, 2010

Hướng dẩn viết DCL bài mở đầu:

Bạn nên theo dỏi theo tên bài viết tăng từ nhỏ tới lớn thì mới đúng trình tự!


Đến đây phần lisp coi như tạm đủ dùng, về cơ bản thì bây nhiêu đó nắm vững và ứng dụng linh hoạt thì làm được ối chuyện. Phần hổ trợ thêm cho lisp mà gần gủi nhất là hộp thoại: Cái này chủ yếu giải quyết khâu oai và màu mè. Kiến thức này của mình cũng ít nhưng cũng mạnh dạn làm vài bài giúp các bạn có khái niệm cơ bản để có thể tự nghiên cứu chuyên thêm tuỳ vào khả năng của mỗi người.

**Chương trình dùng viết hộp thoại: Tất cả các chương trình soạn thảo văn bản. Mình vẫn dùng notepad. Lưu nó ra định dạng *.DCL là được.
**Trong 1 file *.DCL có thể chứa nhiều hộp thoại trong đó:
-Mở đầu bằng
tenhopthoai : dialog {
label = "noidungtieude";

-Kết thúc bằng
}

-Trong đó:
+ tenhopthoai là tên lisp dùng để gọi hộp thoại này (lưu ý đặt tên khác nhau cho các hộp thoại và viết liên tục không khoảng cách)
+ Noidungtieude là nội dung hiển thị phía trên của hộp thoại (Cái này ưng viết sao cũng được có thể có khoảng cách chủ yếu dùng báo tên hoặc chức năng hộp thoại này. Muốn bỏ trống thì label = " ";

**Số dấu {} trong 1 định nghĩa hộp thoại là bằng nhau.
**Hộp thoại chỉ là cái vỏ còn nội dung bên trong, hoạt động thế nào là do lisp quyết định. Trước tiên cứ thiết kế hộp thoại cho ưng ý cái đã, từ từ tính tới nội dung.
*Mẹo: khi viết xong hộp thoại muốn nghía xem nó như nào mà chưa cần viết lisp để gọi hắn lên thì bạn làm như sau:

-Khởi động cad.
-Vào Tools => Autolisp => Visual lisp editor. Nó khở động lên chương trình.
-Bạn vào File => Open và open cái file *.DCL muốn nghía lên.
-Vào Tools => Inter face tools => Preview DCL Editor. Nó sẽ hiện cái hộp thoại lên cho bạn xem trước.

**Mọi hộp thoại ít nhất phải có 1 nút dùng thoát khỏi hộp thoại mà ko thực hiện chức năng nào như sau.
:button {
label = "Cancel";
key = "Cancel";
is_cancel = true;
}


**Bắt đầu là thủ tục để có 1 nút nhấn cho hộp thoại.

:button {
label = "Ten nut 1";
width = 0;
key = "btn_bieuthuc1";
}


Vậy hộp thoại đơn giản như sau:



tenhopthoai : dialog {
label = "noidungtieude";


:button {
label = "Cancel";
key = "Cancel";
is_cancel = true;
}


}




Hình dáng như sau:

Hộp thoại này chỉ có duy nhất nút thoát khỏi hộp thoại. Kết hợp thêm 1 nút nửa để làm việc khác như sau:




tenhopthoai : dialog {
label = "noidungtieude";


:button {
label = "Ten nut 1";
width = 0;
key = "btn_bieuthuc1";
}

:button {
label = "Cancel";
key = "Cancel";
is_cancel = true;
}


}

Hình dáng như sau:

Khi không nói gì thì các nội dung trong hộp thoại sẽ xếp từ trên xuống dưới. Muốn sắp xếp lại thì dùng 2 cú pháp sắp sếp ( xem bài sau).

Chủ Nhật, 4 tháng 7, 2010

Hướng dẩn viết lisp bài 30:

Bạn nên theo dỏi theo tên bài viết tăng từ nhỏ tới lớn thì mới đúng trình tự!


Đáp án đây. Hy vọng bạn đã hoàn thành giống như sau:

(defun c:vht ()
(command "undo" "be")
(setq luubatdiem (getvar "osmode"))
(setvar "osmode" 0)

(Princ "\nChon cac text :")
(setq tapdoituong (ssget '((0 . "text"))))
(setq diemchuan (getpoint "\nChon diem canh le: "))
(setq thutu 0)
(setq sodoituong (sslength tapdoituong))

(while (< thutu sodoituong)
(setq doituong (ssname tapdoituong thutu))
(setq laynoidung (entget doituong))
(setq diemve (cdr (assoc 10 laynoidung)))

(setq xmoi (car diemchuan))
(setq ymoi (cadr diemve))
(setq diemmoi (list xmoi ymoi))

(command "move" doituong "" diemve diemmoi)
(setq thutu (+ thutu 1))
)
(command "undo" "end")
(setvar "osmode" luubatdiem)
(Princ)
)

**Sau đây mình nói về cách lấy thông tin của đối tượng bằng lisp:
Giả sử rằng bạn có đối tượng (doituong) bạn có được bằng cách nào thì tùy. Muốn lấy thông tin từ nó bạn phải làm việc giống như là mở cửa bước vào trong phòng. Dùng hàm enteget:
(setq laynoidung (entget doituong))
Khi đã vào phòng thì có nhiều thứ để lấy. Mổi thông tin của đối tượng có 1 con số đại diện ví dụ điểm canh lề thứ nhất của text là số 10. Dùng hàm cdr và assoc sẽ lấy được thông tin tương ứng với con số đó.
(setq diemve (cdr (assoc 10 laynoidung)))
Mình sẽ gỏ lại bảng các số đại diện như từ điển bạn cần thông số gì thì vào tra nhé. (Một vài cái hay dùng thôi chứ nhiều lắm mình gỏ không nổi, bạn mua sách về lisp sẽ có bảng này).

CHUNG:
Layer của đối tượng: 8
Kiểu của đối tượng: 0
Màu của đối tượng: 62
Tên dạng đường: 6

TEXT:
Nội dung text: 1
Độ lớn text: 40
Style: 7
Điểm canh lề thứ nhất: 10

BLOCK: (INSERT) Lưu ý block thì trong từ điển của cad là đối tượng INSERT
Tên BLOCK: 2
Điểm chèn: 10
Góc quay: 50
Tỉ lệ theo trục X: 41
Tỉ lệ theo trục Y: 42
Tỉ lệ theo trục Z: 43

LINE:
Điểm đầu: 10
Điểm cuối: 11

CIRCLE:
Tọa độ tâm: 10
Bán kính: 40

PLINE: (LWPOLYLINE)
Độ rộng: 43
Số lượng đỉnh: 90

DIMENSION:
Style: 3

Vậy cách lấy thông tin text như sau:
Nội dung text: (setq noidung (cdr (assoc 1 laynoidung)))
Độ lớn text: (setq dolon (cdr (assoc 40 laynoidung)))
Style: (setq style (cdr (assoc 7 laynoidung)))
Điểm canh lề thứ nhất: (setq diemve (cdr (assoc 10 laynoidung)))