C
cuonghamanh
Guest
Nếu các bạn đã từng vẽ CAD hẳn sẽ thấy nhàm chán bởi một số lệnh cứ phải làm đi làm lại, nhàm chán vô cùng. Thực ra chúng ta hoàn toàn có thể tạo ra những file LISP giúp cho công việc thuận lợi hơn. Tôi xin hướng dẫn để các bạn mới làm quen có thể tự mình tạo được file LISP của riêng mình (các cao thủ có ghé qua xin thứ lỗi cho em múa "dìu" qua mắt thợ nhé!).
Hiện tại các phiên bản cad mới có thêm tiện ích lập trình LISP, tuy nhiên các bạn có thể sử dụng bất kể một trình soạn thảo văn bản nào để tạo file LISP, sau khi tạo xong các bạn lưu file lại dưới dạng đuôi *.LSP là có thể load vào cad để dùng được ngay (theo tôi với các file đơn giản thì tốt nhất là dùng Notepad của Windown cho nhanh!).
Xin đưa ra đây 2 ví dụ cụ thể:
1. Đổi mầu cho đối tượng:
Trong quá trình vẽ, khi muốn đổi mầu một đối tượng, chúng ta có thể dùng lệnh "change", sau đó chọn tùy chọn properties, rồi chọn c (color), rồi chọn số từ 0 đến 255. Với một màu định trước, ta có thể rút ngắn quá trình này lại bằng một dòng lệnh duy nhất:
(defun C:C1 (/ gp) (setq gp (ssget)) (command "change" gp "" "p" "c" "1" "" ))
Xin giải thích một chút để các bạn nắm được như sau:
- Đóng mở ngoặc "()": trong ngôn ngữ LISP, mọi dữ liệu đưa vào đều phải nằm trong ngoặc, mỗi lần mở đóng ngoặc sẽ biểu diễn hoàn trỉnh một chuỗi lệnh. Một nguyên tắc số 1, mở ngoặc bao nhiêu lần thì phải đóng bấy nhiêu lần.
- defun: câu lệnh bắt đầu cho một chuỗi thao tác mới:
- C:C1: ở đây có 2 phần "C:" là phần thể hiện lệnh sẽ được đưa vào từ dòng lệnh command của cad. Sau dấu hai chấm "C1" là ký hiệu mà bạn sẽ gõ để bắt đầu quá trình thao tác tại dòng lệnh Command (lưu ý không được đặt trùng với các lệnh khác của cad để tránh trùng lệnh, rắc rối) - C1 ở đây do mình tự đặt với ý nghĩa là color 1 (màu đỏ), các đối tượng khi dùng lệnh này sẽ được đổi thành màu đỏ.
- (/ gp): đây là phần khai báo biến số, trong phần này chỉ sử dụng 1 biến số cho phần chọn đối tượng là "gp".
- setq: là lệnh gán cho biến số 1 giá trị nào đó.
- ssget: là lệnh cho phép người dùng chọn nhiều đối tượng một lúc.
- (setq gp (ssget)): là một câu lệnh hoàn chỉnh cho phép người dùng chọn 1 nhóm đối tượng và gán nhóm đối tượng đó vào biến số gp (biến này có thể thay đổi tùy ý người dùng, chỉ cần khai báo thống nhất từ đầu - ở đây cho gp là chữ viết tắt của từ group).
- (command "change" gp "" "p" "c" "1" ""): đây là câu lệnh trong đó:
command: lệnh bắt đầu được thực thi;
"change": lệnh cần được thực thi (luôn được đặt trong ngoặc kép);
gp: nhóm đối tượng đã chọn;
"" (dấu đóng mở ngoặc kép): tương ứng với nhấn phím Enter hoặc Space;
"p": chọn tùy chọn properties trong lệnh change;
"c": chọn tùy chọn color trong tùy chọn properties trong lệnh change;
"1": gán màu số 1 (red) cho nhóm đối tượng;
"": tương ứng với nhấn phím Enter hoặc Space - kết thúc lệnh change.
Như vậy chúng ta có 1 lệnh hoàn chỉnh để đổi màu một nhóm đối tượng bất kỳ sang màu số 1 (đỏ). Tương tự như vậy các bạn có thể thay đổi cho các màu tiếp theo (chi việc copy, paste và thay đổi 1 chút), vi dụ:
(defun C:CBL (/ gp) (setq gp (ssget)) (command "change" gp "" "p" "c" "l" "" ));màu theo lớp - by Layer
(defun C:CBB (/ gp) (setq gp (ssget)) (command "change" gp "" "p" "c" "b" "" ));màu theo khối - by Block
(defun C:C2 (/ gp) (setq gp (ssget)) (command "change" gp "" "p" "c" "2" "" ));màu vàng
(defun C:C4 (/ gp) (setq gp (ssget)) (command "change" gp "" "p" "c" "4" "" ));màu xanh nước biển
Sau đó các bạn lưu lại file dưới dạng *.LISP, vậy là đã có file LISP hoàn chỉnh và load vào cad để chạy đươc. Mình gửi kèm file hoàn chình của mình để các bạn tham khảo bên dưới.
Tương tự với lệnh change, các bạn có thể tạo các lệnh thay đổi độ cao (thickness), loại nét (linetyper),..
2. Đưa một nhóm đối tượng đã có vào 1 lớp (có tên đặt trước theo quy ước), nếu lớp này chưa tồn tại thì tạo lớp đó rồi chuyển nhóm đối tượng vào:
Trong quá trình vẽ CAD, để các bản vẽ được thống nhất người vẽ nên đặt tên các lớp một cách thống nhất. Tuy nhiên, mỗi lẫn bắt đầu một bản vẽ mới hoặc đang trong quá trình vẽ, muốn tạo một hệ thống các layer theo đúng quy tắc đã đề ra nhiều khi rất mất công. Để giảm bơt sự nhàm chán này ta có thể dựa vào câu lệnh sau:
(defun C:LTE (/ gp)(setq gp (ssget))
(command "-layer" "m" "Text_140" "c" "140" "Text_140" "")
(command "change" gp "" "p" "la" "Text_140" "")
(command "-layer" "s" "0" "")
)
Thành phần cấu trúc của câu lệnh ko khác gì nhiều so với câu lệnh ở phần một, mình chỉ giải thích sơ qua như sau:
dòng lệnh 1: vẫn là đặt ký tự lệnh, khai báo biến và chọn nhóm đối tượng;
dòng lệnh 2: tạo lớp với tên là Text_140, màu 140;
dòng lệnh 3: đưa nhóm đối tượng đã được chọn vào lớp vừa tạo;
dòng lệnh 4: đặt lớp vẽ mặc định trở lại layer 0.
Có mấy chú ý nho nhỏ sau:
- Dấu trừ (-) nằm trước một số lệnh trong cad ("-layer") cho phép người dùng thao tác lệnh qua dòng lệnh command mà ko phải thông qua hộp hội thoại.
- Tên lớp (Text_140) là tên do mình tư đặt, các bạn có thể thay đổi tùy ý.
- Nếu ko muốn trở về lớp 0 (layer 0) thì xóa bỏ dòng thứ 4.
Có thể tham khảo thêm file của mình đính kèm bên dưới.
Không quá khó để tạo cho mình file LISP để phục vụ công việc được thuận lợi hơn. Chúc các bạn mới tìm hiểu thành công !
Hiện tại các phiên bản cad mới có thêm tiện ích lập trình LISP, tuy nhiên các bạn có thể sử dụng bất kể một trình soạn thảo văn bản nào để tạo file LISP, sau khi tạo xong các bạn lưu file lại dưới dạng đuôi *.LSP là có thể load vào cad để dùng được ngay (theo tôi với các file đơn giản thì tốt nhất là dùng Notepad của Windown cho nhanh!).
Xin đưa ra đây 2 ví dụ cụ thể:
1. Đổi mầu cho đối tượng:
Trong quá trình vẽ, khi muốn đổi mầu một đối tượng, chúng ta có thể dùng lệnh "change", sau đó chọn tùy chọn properties, rồi chọn c (color), rồi chọn số từ 0 đến 255. Với một màu định trước, ta có thể rút ngắn quá trình này lại bằng một dòng lệnh duy nhất:
(defun C:C1 (/ gp) (setq gp (ssget)) (command "change" gp "" "p" "c" "1" "" ))
Xin giải thích một chút để các bạn nắm được như sau:
- Đóng mở ngoặc "()": trong ngôn ngữ LISP, mọi dữ liệu đưa vào đều phải nằm trong ngoặc, mỗi lần mở đóng ngoặc sẽ biểu diễn hoàn trỉnh một chuỗi lệnh. Một nguyên tắc số 1, mở ngoặc bao nhiêu lần thì phải đóng bấy nhiêu lần.
- defun: câu lệnh bắt đầu cho một chuỗi thao tác mới:
- C:C1: ở đây có 2 phần "C:" là phần thể hiện lệnh sẽ được đưa vào từ dòng lệnh command của cad. Sau dấu hai chấm "C1" là ký hiệu mà bạn sẽ gõ để bắt đầu quá trình thao tác tại dòng lệnh Command (lưu ý không được đặt trùng với các lệnh khác của cad để tránh trùng lệnh, rắc rối) - C1 ở đây do mình tự đặt với ý nghĩa là color 1 (màu đỏ), các đối tượng khi dùng lệnh này sẽ được đổi thành màu đỏ.
- (/ gp): đây là phần khai báo biến số, trong phần này chỉ sử dụng 1 biến số cho phần chọn đối tượng là "gp".
- setq: là lệnh gán cho biến số 1 giá trị nào đó.
- ssget: là lệnh cho phép người dùng chọn nhiều đối tượng một lúc.
- (setq gp (ssget)): là một câu lệnh hoàn chỉnh cho phép người dùng chọn 1 nhóm đối tượng và gán nhóm đối tượng đó vào biến số gp (biến này có thể thay đổi tùy ý người dùng, chỉ cần khai báo thống nhất từ đầu - ở đây cho gp là chữ viết tắt của từ group).
- (command "change" gp "" "p" "c" "1" ""): đây là câu lệnh trong đó:
command: lệnh bắt đầu được thực thi;
"change": lệnh cần được thực thi (luôn được đặt trong ngoặc kép);
gp: nhóm đối tượng đã chọn;
"" (dấu đóng mở ngoặc kép): tương ứng với nhấn phím Enter hoặc Space;
"p": chọn tùy chọn properties trong lệnh change;
"c": chọn tùy chọn color trong tùy chọn properties trong lệnh change;
"1": gán màu số 1 (red) cho nhóm đối tượng;
"": tương ứng với nhấn phím Enter hoặc Space - kết thúc lệnh change.
Như vậy chúng ta có 1 lệnh hoàn chỉnh để đổi màu một nhóm đối tượng bất kỳ sang màu số 1 (đỏ). Tương tự như vậy các bạn có thể thay đổi cho các màu tiếp theo (chi việc copy, paste và thay đổi 1 chút), vi dụ:
(defun C:CBL (/ gp) (setq gp (ssget)) (command "change" gp "" "p" "c" "l" "" ));màu theo lớp - by Layer
(defun C:CBB (/ gp) (setq gp (ssget)) (command "change" gp "" "p" "c" "b" "" ));màu theo khối - by Block
(defun C:C2 (/ gp) (setq gp (ssget)) (command "change" gp "" "p" "c" "2" "" ));màu vàng
(defun C:C4 (/ gp) (setq gp (ssget)) (command "change" gp "" "p" "c" "4" "" ));màu xanh nước biển
Sau đó các bạn lưu lại file dưới dạng *.LISP, vậy là đã có file LISP hoàn chỉnh và load vào cad để chạy đươc. Mình gửi kèm file hoàn chình của mình để các bạn tham khảo bên dưới.
Tương tự với lệnh change, các bạn có thể tạo các lệnh thay đổi độ cao (thickness), loại nét (linetyper),..
2. Đưa một nhóm đối tượng đã có vào 1 lớp (có tên đặt trước theo quy ước), nếu lớp này chưa tồn tại thì tạo lớp đó rồi chuyển nhóm đối tượng vào:
Trong quá trình vẽ CAD, để các bản vẽ được thống nhất người vẽ nên đặt tên các lớp một cách thống nhất. Tuy nhiên, mỗi lẫn bắt đầu một bản vẽ mới hoặc đang trong quá trình vẽ, muốn tạo một hệ thống các layer theo đúng quy tắc đã đề ra nhiều khi rất mất công. Để giảm bơt sự nhàm chán này ta có thể dựa vào câu lệnh sau:
(defun C:LTE (/ gp)(setq gp (ssget))
(command "-layer" "m" "Text_140" "c" "140" "Text_140" "")
(command "change" gp "" "p" "la" "Text_140" "")
(command "-layer" "s" "0" "")
)
Thành phần cấu trúc của câu lệnh ko khác gì nhiều so với câu lệnh ở phần một, mình chỉ giải thích sơ qua như sau:
dòng lệnh 1: vẫn là đặt ký tự lệnh, khai báo biến và chọn nhóm đối tượng;
dòng lệnh 2: tạo lớp với tên là Text_140, màu 140;
dòng lệnh 3: đưa nhóm đối tượng đã được chọn vào lớp vừa tạo;
dòng lệnh 4: đặt lớp vẽ mặc định trở lại layer 0.
Có mấy chú ý nho nhỏ sau:
- Dấu trừ (-) nằm trước một số lệnh trong cad ("-layer") cho phép người dùng thao tác lệnh qua dòng lệnh command mà ko phải thông qua hộp hội thoại.
- Tên lớp (Text_140) là tên do mình tư đặt, các bạn có thể thay đổi tùy ý.
- Nếu ko muốn trở về lớp 0 (layer 0) thì xóa bỏ dòng thứ 4.
Có thể tham khảo thêm file của mình đính kèm bên dưới.
Không quá khó để tạo cho mình file LISP để phục vụ công việc được thuận lợi hơn. Chúc các bạn mới tìm hiểu thành công !
File đính kèm
Last edited by a moderator: