Chuyển đến nội dung
Diễn đàn CADViet
tuan_thietkedien

Xin góp ý lisp vẽ khung

Các bài được khuyến nghị

Chào buổi sáng.

 

Mình đang định viết 1 cái lisp với ý tưởng như file đính kèm.

 

http://www.cadviet.com/upfiles/ve_khung.dwg

 

Mình đã thấy và hiểu cái lisp vẽ nhà của bác ssq rồi nhưng khi muốn làm cái lisp ở trên thì không biết thay đổi thế nào.

 

Mong mọi người góp ý phải làm sao. Ví dụ khi vẽ chiều 4000 thì cứ 1000 sẽ vẽ 1 pline nằm ngang. Mình thích dùng polyline hơn là line. Khung màu magenta số 6, linetype continuos, lineweight 0.09mm. text cao 500 nằm ngay tâm có linweight 0.2mm, width factory 0.8. Khi mình nhập point thì tự động vẽ khung xuống cách 1 đoạn là 1000.

 

Đây là đoạn lisp vẽ nhà của bác ssq

 

;;;----------------------------------------------------------------

(defun BatDauVe() (setq OldOs (getvar "osmode")) (setvar "osmode" 0))

;;;----------------------------------------------------------------

(defun KetThucVe() (setvar "osmode" OldOs) (princ))

;;;----------------------------------------------------------------

(defun NhapSoLieu()

(setq

Rong (getreal "\nChieu rong: ")

Cao (getreal "\nChieu cao: ")

CaoChop (getreal "\nChieu cao chop: ")

DiemChuan (getpoint "\nDiem chuan: ")

)

)

;;;----------------------------------------------------------------

(defun VeNha ( W H1 H2 p1 / p2 p3 p4 p5 OldOs)

(setq

p2 (polar p1 0.0 W)

p3 (polar p2 (/ pi 2) H1)

p4 (polar p3 pi W)

p5 (list (+ (car p4) (/ W 2)) (+ (cadr p4) H2))

)

(BatDauVe)

(command "pline" p1 p2 p3 p4 "c")

(command "pline" p3 p5 p4 "")

(KetThucVe)

)

;;;----------------------------------------------------------------

(defun C:NHA (/ Rong Cao CaoChop DiemChuan)

(NhapSoLieu)

(VeNha Rong Cao CaoChop DiemChuan)

)

;;;----------------------------------------------------------------

 

Xin cám ơn.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Chào buổi sáng

 

Xin cám ơn.

Chào bạn tuan_thietkedien,

Bạn có thể tham khảo file lisp này. Đây là file lisp tôi dựa trên cái lisp của bác SSg thôi chứ không có gì phức tạp cả. Nếu bạn thường xuyên phải làm việc với lisp thì có lẽ bạn nên học kỹ hơn. Trong file lisp của tôi chỉ thực hiện những việc chính căn cứ vào yêu cầu cụ thể như bạn đã nêu. Bạn có thể sửa lại để dùng theo ý bạn.

Để bạn dễ hình dung mình xin giải thích đơn giản như sau:

1/- Phần chính là lệnh vẽ khung với mã lệnh là KHG

2/- Trong đó gồm các phần con là: nhaplieu, ve khung, nhaptext, và doimau

3/- Phần nhập liệu yêu cầu bạn nhập các số liệu chính là chiêu rộng W, chiều cao H1 và độ cao một ô H2. Sau đó chọn điểm đặt khung.

4/- Phần vekhung bao gồm các việc :

Xác định tọa độ các điểm cần vẽ và điểm đặt text căn cứ theo số liệu đã nhập ở phần nhập liệu.

Thực hiện vẽ khung theo các điểm đã xác định dùng lệnh pline. Để xác định độ dày pline bạn thay đổi biến hệ thống Plinewid bằng hàm setvar trong hàm con batđauve. ( Ở đây mình đặt là 0.25 chứ không phải 0.09 như ý bạn). Cũng có thể đặt màu cho pline ở đây nhưng mình chưa biết làm.

kêt thúc việc vẽ khung bằng hàm ketthucve.

5/- Phần nhập text. Bạn có thể tùy chọn giá trị text cho từng thằng theo ý bạn bằng cách thay đổi giá trịc các biến b, c, d ,e. (Ở đây mình theo mẫu của bạn là 1, 2, 3, 4). Phần chiều cao text mình đã đặt là 500 theo ý bạn, còn độ rộng nét chữ và độ rộng ô chữ mình để như mặc định chứ chưa biết cách thay đổi theo như bạn mô tả. Để mình tìm hiểu thêm rồi mới trả lời được.

6/- Đổi màu đường pline. Có nhiều cách nhưng hiện tại mình xài lệnh change của Autocad. Bạn lưu ý là ở đây mình không chọn theo lớp mà chỉ chọn theo đối tượng pline, vì thế nếu trên bản vẽ của bạn có nhiều pline khác thì nó cũng sẽ bị đổi màu theo pline khung. Nếu bạn thấy chưa phù hợp thì có thể thay đổi lại cách chọn đối tượng.

Thật tình mình mới học về lisp nên chưa rành lắm. Thấy bạn post hôm qua mà chưa có người trả lời nên mình mạo muội trả lời bạn để bạn đỡ sốt ruột. Trên diễn đàn còn nhiều cao thủ lisp lắm, bạn có thể học hỏi thêm rất nhiều từ họ. Nếu lisp này chưa được như ý bạn thì đừng trách mình nhé. mình đã test trên acad2004 thì nó chạy ngon nhưng không biết với cad của bạn có vấn đề gì không.

Bạn down về lưu vào thư mục acad, mở acad, vào tools -> loap application -> chỉ đường tới file-> load -> close.

Gõ lệnh khg vào dòng command rồi sau đó nhập số liệu theo yêu cầu sẽ được kết quả.

 

http://www.cadviet.com/upfiles/Vekhung1.lsp

 

Vì thời gian hơi ngắn nên mình chưa hoàn thiện nó được, rất mong bạn dùng thử rồi cho ý kiến để mình sửa tiếp.

Cám ơn bạn.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Chào bạn tuan_thietkedien,

Bạn có thể tham khảo file lisp này. Đây là file lisp tôi dựa trên cái lisp của bác SSg thôi chứ không có gì phức tạp cả. Nếu bạn thường xuyên phải làm việc với lisp thì có lẽ bạn nên học kỹ hơn. Trong file lisp của tôi chỉ thực hiện những việc chính căn cứ vào yêu cầu cụ thể như bạn đã nêu. Bạn có thể sửa lại để dùng theo ý bạn.

Để bạn dễ hình dung mình xin giải thích đơn giản như sau:

1/- Phần chính là lệnh vẽ khung với mã lệnh là KHG

2/- Trong đó gồm các phần con là: nhaplieu, ve khung, nhaptext, và doimau

3/- Phần nhập liệu yêu cầu bạn nhập các số liệu chính là chiêu rộng W, chiều cao H1 và độ cao một ô H2. Sau đó chọn điểm đặt khung.

4/- Phần vekhung bao gồm các việc :

Xác định tọa độ các điểm cần vẽ và điểm đặt text căn cứ theo số liệu đã nhập ở phần nhập liệu.

Thực hiện vẽ khung theo các điểm đã xác định dùng lệnh pline. Để xác định độ dày pline bạn thay đổi biến hệ thống Plinewid bằng hàm setvar trong hàm con batđauve. ( Ở đây mình đặt là 0.25 chứ không phải 0.09 như ý bạn). Cũng có thể đặt màu cho pline ở đây nhưng mình chưa biết làm.

kêt thúc việc vẽ khung bằng hàm ketthucve.

5/- Phần nhập text. Bạn có thể tùy chọn giá trị text cho từng thằng theo ý bạn bằng cách thay đổi giá trịc các biến b, c, d ,e. (Ở đây mình theo mẫu của bạn là 1, 2, 3, 4). Phần chiều cao text mình đã đặt là 500 theo ý bạn, còn độ rộng nét chữ và độ rộng ô chữ mình để như mặc định chứ chưa biết cách thay đổi theo như bạn mô tả. Để mình tìm hiểu thêm rồi mới trả lời được.

6/- Đổi màu đường pline. Có nhiều cách nhưng hiện tại mình xài lệnh change của Autocad. Bạn lưu ý là ở đây mình không chọn theo lớp mà chỉ chọn theo đối tượng pline, vì thế nếu trên bản vẽ của bạn có nhiều pline khác thì nó cũng sẽ bị đổi màu theo pline khung. Nếu bạn thấy chưa phù hợp thì có thể thay đổi lại cách chọn đối tượng.

Thật tình mình mới học về lisp nên chưa rành lắm. Thấy bạn post hôm qua mà chưa có người trả lời nên mình mạo muội trả lời bạn để bạn đỡ sốt ruột. Trên diễn đàn còn nhiều cao thủ lisp lắm, bạn có thể học hỏi thêm rất nhiều từ họ. Nếu lisp này chưa được như ý bạn thì đừng trách mình nhé. mình đã test trên acad2004 thì nó chạy ngon nhưng không biết với cad của bạn có vấn đề gì không.

Bạn down về lưu vào thư mục acad, mở acad, vào tools -> loap application -> chỉ đường tới file-> load -> close.

Gõ lệnh khg vào dòng command rồi sau đó nhập số liệu theo yêu cầu sẽ được kết quả.

 

http://www.cadviet.com/upfiles/Vekhung1.lsp

 

Vì thời gian hơi ngắn nên mình chưa hoàn thiện nó được, rất mong bạn dùng thử rồi cho ý kiến để mình sửa tiếp.

Cám ơn bạn.

 

Mình đang dùng thử và đang học thêm những dòng lệnh của bạn. Rất cám ơn bạn đã chỉ dẫn. Mình cũng đang dùng Cad2004.

 

Mình thấy bạn quá trời sao, mình là người mới chỉ 2 sao thôi chứng tỏ bạn là thành viên kỳ cựu lắm. Việc lisp đúng hay sai đâu quan trọng đâu bạn, quan trọng là bạn nhiệt tình giúp đỡ là mình rất đội ơn rồi, bạn khách sáo quá. Ngày mai mình nghỉ làm nên thứ 2 mình sẽ liên lạc cho bạn kết quả nha.

 

Chúc bạn và mọi người cuối tuần vui vẻ.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Chào bạn Phamthanhbinh

 

Mình gởi bạn file đã tést lísp với H1 lần lượt là 4000, 3000, 2000, 1000.

 

http://www.cadviet.com/upfiles/TEST.dwg

 

Kết quả có vài chỗ không đúng ý đồ mình lắm. Lineweight chưa thay đổi, Tẽxt chưa nằm ngay tâm, tẽxt ở chế độ MC, tẽxt chưa tự động vẽ theo chiều cao của khung.

 

Mình có chút ý tưởng nhưng không biết rõ về ngôn ngữ lisp nên nhờ bạn xem dùm mình.

 

(defun BatDauVe() (setq OldOs (getvar "osmode")) (setvar "osmode" 0) (SETVAR "PLINEWID" 0.09))

;;;----------------------------------------------------------------

(defun KetThucVe() (setvar "osmode" OldOs) (princ))

;;;----------------------------------------------------------------

(defun NhapSoLieu()

(setq

W (getreal "\nChieu rong: ")

H1 (getreal "\nChieu cao: ")

H2 (getreal "\nChieu cao dong: ")

p1 (getpoint "\nDiem chuan: ")

)

)

;;;----------------------------------------------------------------

(defun VeKhung ( W H1 H2 p1 / p2 p3 p4 p5 p6 OldOs)

(setq

p2 (polar p1 0.0 W)

p3 (polar p2 (/ pi 2) H1)

p4 (polar p3 pi W)

p5 (polar p1 (/ pi 2) H2 )

p6 (polar p5 0.0 W)

t1 (list (+ (car p5) 2300) (+ (cadr p5) 2250))

t1 (list (- H1 500) (/ W 2))

t2 (list (car t1) (- (cadr t1) 1000))

t3 (list (car t1) (- (cadr t1) 2000))

t4 (list (car t1) (- (cadr t1) 3000))

)

(BatDauVe)

(command "pline" p1 p2 p3 p4 "c")

(command "Pline" p5 p6 "")

(setq e2 (entlast))

(command "array" e2 "" "R" 3 1 h2)

(KetThucVe)

)

;;;----------------------------------------------------------------

(defun C:KHG (/ W H1 H2 p1 ss mylist)

(NhapSoLieu)

(VeKhung W H1 H2 p1)

(Nhaptext)

(doimau ss mylist)

 

)

;;;----------------------------------------------------------------

(defun Nhaptext (/ a b c d e f g h i j k l m n o p q r)

(setq b "a"

)

(command " justifytext " text mc “”)

If (= (/ H1 1000) 1 “command "text" t1 500 0.0 b” “”)

If (= (/ H1 1000) 2

“command "text" t1 500 0.0 b”

“command "text" t2 500 0.0 b”

“”)

If (= (/ H1 1000) 3

“command "text" t1 500 0.0 b”

“command "text" t2 500 0.0 b”

“command "text" t3 500 0.0 b”

“”)

If (= (/ H1 1000) 4

“command "text" t1 500 0.0 b”

“command "text" t2 500 0.0 b”

“command "text" t3 500 0.0 b”

“command "text" t4 500 0.0 b”

“”)

)

;;;;------------------------------------------------------------------

(defun doimau (ss mylist)

(setq mylist (list (cons 0 "lwpolyline"))

ss (ssget "x" mylist)

)

(command "change" ss "" "p" "c" 6 "")

)

 

Mình xin giải thích 1 chút về ý tưởng của mình. t1 (list (- H1 500) (/ W 2)), đoạn này mình muốn lấy điểm ngay tâm hình chữ nhật, bởi vì text mình sẽ chuyển sang Midle Center. Phần nhập text thì không cần text 1 2 3 4 nên mình cho tất cả là a. (command " justifytext " text mc “”) câu này lúc chọn đối tượng mình không biết phải ghi thế nào nên tạm ghi là tẽxt. Ở mấy câu dưới mình nghĩ là dùng hàm If nên viết theo suy nghĩ thôi, chắc chắn không đúng cấu trúc.

Do mình còn yếu nên nhờ bạn xem và sửa lại hộ mình nhá.

Cám ơn bạn nhiều nha.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Chào bạn Phamthanhbinh

 

Mình gởi bạn file đã tést lísp với H1 lần lượt là 4000, 3000, 2000, 1000.

 

http://www.cadviet.com/upfiles/TEST.dwg

Cám ơn bạn nhiều nha.

Chào bạn tuan_thietkedien,

Trước hết xin giải thích với bạn một vài điều về cái lisp mình viết:

Như đã nói trong bài trước, lisp của mình chỉ thực hiện theo đúng yêu cầu như bản vẽ bạn đã gửi, đó là với W=5000, H1 = 4000 và H2 là 1000.

Với các kích thước bạn thử với H1=3000 , 2000, 1000 đương nhiên text sẽ bị lệch tâm. Điều này bạn có thể chỉnh sửa lại tọa độ của các điểm đặt text là t1, t2, t3, và t4. Cách tốt nhất bạn có thể cho các tọa độ này liên hệ với kích thước của khung sẽ đảm bảo được tính đối xứng của nó.

Thực tế nếu bạn muốn H2 thay đổi theo H1 cũng hoàn toàn đơn giản. Vì bạn không nói rõ nên trong lisp của mình, mình đã đặt H2 cố định là 1000 (H1/4) và dùng lệnh array với số dòng là ( 4 - 1 ) = 3. Nếu bạn muốn chia thành số ô nhiều hơn có thể đặt lại H2 theo H1 mà

Cũng vì mình chỉ chia 4 ô theo mẫu của bạn nên mình chỉ xác định 4 điểm đặt text là t1, t2, t3, t4. Khi bạn chia chiều cao thành số ô nhiều hơn bạn sẽ phải xác

định nhiều điểm đặt text hơn. Tổng quát nều có n ô bạn sẽ có n text và lệnh array sẽ thực hiện với n-1 dòng.

Về ý tưởng của bạn mình thấy có một số ý kiến như sau:

Tọa độ điểm t1 bạn lấy như vậy là không ổn vì nó chả liên quan gì tới vị trí đặt khung của bạn cả.

Việc sử dụng lệnh Justifytext của bạn mình chưa biết dùng nó ra sao cả để sửa cho bạn. Cú pháp của lệnh này mình chưa nắm được, mong bạn thông cảm.

Về đoạn lisp nhập text của bạn đúng như bạn nói là sai cấu trúc rất lớn. Để sử dụng tốt các hàm điều kiện bạn cần học kỹ thêm mới được. Bạn có thể tham khảo tài liệu về lisp mà mình đã học ở đây:

http://www.cadviet.com/upfiles/Gio_trnh_Autolisp_tu_hoc.doc

Ở tài liệu này, mình tự dịch nên có chỗ nào chưa đúng mong bạn đừng trách. Phần tiếng Anh là nguyên gốc của nó, bạn cò thể tham khảo thêm.

Mình sẽ sửa lại cái lisp của mình theo ý bạn rồi gửi bạn sau nhé.

Chào bạn. chúc bạn thành công.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Chào bạn tuan_thietkedien,

Trước hết xin giải thích với bạn một vài điều về cái lisp mình viết:

Như đã nói trong bài trước, lisp của mình chỉ thực hiện theo đúng yêu cầu như bản vẽ bạn đã gửi, đó là với W=5000, H1 = 4000 và H2 là 1000.

Với các kích thước bạn thử với H1=3000 , 2000, 1000 đương nhiên text sẽ bị lệch tâm. Điều này bạn có thể chỉnh sửa lại tọa độ của các điểm đặt text là t1, t2, t3, và t4. Cách tốt nhất bạn có thể cho các tọa độ này liên hệ với kích thước của khung sẽ đảm bảo được tính đối xứng của nó.

Thực tế nếu bạn muốn H2 thay đổi theo H1 cũng hoàn toàn đơn giản. Vì bạn không nói rõ nên trong lisp của mình, mình đã đặt H2 cố định là 1000 (H1/4) và dùng lệnh array với số dòng là ( 4 - 1 ) = 3. Nếu bạn muốn chia thành số ô nhiều hơn có thể đặt lại H2 theo H1 mà

Cũng vì mình chỉ chia 4 ô theo mẫu của bạn nên mình chỉ xác định 4 điểm đặt text là t1, t2, t3, t4. Khi bạn chia chiều cao thành số ô nhiều hơn bạn sẽ phải xác

định nhiều điểm đặt text hơn. Tổng quát nều có n ô bạn sẽ có n text và lệnh array sẽ thực hiện với n-1 dòng.

Về ý tưởng của bạn mình thấy có một số ý kiến như sau:

Tọa độ điểm t1 bạn lấy như vậy là không ổn vì nó chả liên quan gì tới vị trí đặt khung của bạn cả.

Việc sử dụng lệnh Justifytext của bạn mình chưa biết dùng nó ra sao cả để sửa cho bạn. Cú pháp của lệnh này mình chưa nắm được, mong bạn thông cảm.

Về đoạn lisp nhập text của bạn đúng như bạn nói là sai cấu trúc rất lớn. Để sử dụng tốt các hàm điều kiện bạn cần học kỹ thêm mới được. Bạn có thể tham khảo tài liệu về lisp mà mình đã học ở đây:

http://www.cadviet.com/upfiles/Gio_trnh_Autolisp_tu_hoc.doc

Ở tài liệu này, mình tự dịch nên có chỗ nào chưa đúng mong bạn đừng trách. Phần tiếng Anh là nguyên gốc của nó, bạn cò thể tham khảo thêm.

Mình sẽ sửa lại cái lisp của mình theo ý bạn rồi gửi bạn sau nhé.

Chào bạn. chúc bạn thành công.

 

Chào bạn Phamthanhbinh

 

Hihi..Mình cũng là dân học mót về lisp nên ý tưởng thì có chút ít kiểu đơn giản thôi còn cú pháp thì thua, mong được bạn chỉ giáo thêm. :cheers:

 

Email : tiger19812004@yahoo.co.jp, bạn cho mình xin email nha.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Chào bạn Phamthanhbinh

 

Mình gởi bạn file đã tést lísp với H1 lần lượt là 4000, 3000, 2000, 1000.

 

http://www.cadviet.com/upfiles/TEST.dwg

Chào bạn tuan_thietkedien

Đây là file lisp mình đã sửa lại với mặc định là bạn luôn xài 4 ô trong khung, còn độ cao của các ô như nhau và phải lớn hơn chiều cao text (được mặc định là 500).

Trong lisp này mình đã bỏ phần code doimau pline mà dùng lệnh setvar để đặt màu cho pline luôn. Text được đặt màu là Cyan. Nếu bạn không thích thì đổi thành bylayer.

http://www.cadviet.com/upfiles/Vekhung1_1.lsp

 

Việc bạn muốn tùy chọn số ô và nhập text theo số ô mình chưa làm được do chưa thành thạo lắm về lisp, mong bạn thông cảm. Để mình tìm hiểu thêm nếu được sẽ post gửi bạn sau.

Chào bạn và chúc vui vẻ

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Chào bạn Phamthanhbinh

 

Hihi..Mình cũng là dân học mót về lisp nên ý tưởng thì có chút ít kiểu đơn giản thôi còn cú pháp thì thua, mong được bạn chỉ giáo thêm. B)

 

Email : tiger19812004@yahoo.co.jp, bạn cho mình xin email nha.

Chào bạn tuan_thie6tkedien,

Đây là cái củ lisp mình mới đào được.

http://www.cadviet.com/upfiles/Vekhung3.lsp

Hy vọng đúng với yêu cầu của bạn. Khi dùng lisp này bạn lưu ý mấy điểm sau:

1/- Nếu bạn nhập số ô là 1 hay 2 thì lisp sẽ vẫn tạo ra hình một hoặc hai ô nhưng nó sẽ không tự kết thúc chương trình vì bị kẹt ở dòng lệnh Array. Điều này là do lệnh Array yêu cầu số hàng và số cột không được bằng 0 và không đồng thời bằng 1. Vì thế bạn phải gõ enter tiếp cho tới khi thoát khỏi chương trình.

Với số ô >= 3 thì bạn chạy vô tư.

2/- Do mặc định mình để chiều cao text là 500 nên chiều cao ô của bạn phải luôn >500 (Phải nhẩm khi cho chiều cao khung theo số ô).

3/- Mình đang để màu text là Cyan cho nó lòe loẹt. Nếu bạn không thích thì chuyển màu về bylayer ở dòng code (setvar "cecolor" "Cyan")

4/- Hiện các text mình đánh theo số thứ tự. Trong trường hợp bạn muốn một đoạn text cố định trong tất cả các ô thì nhập text đó vào đoạn mã (itoa :cheers:.

5/- Việc đặt các text riêng biệt cho mỗi ô sẽ khó khăn hơn nhiều vì khi đó phải gán các giá trị text cho các biến và không thể dùng cấu trúc vòng lặp While này nữa. Có lẽ phải dùng các hàm if như bạn đã nghĩ nhưng sẽ trở ngại ở chỗ bạn chưa xác định được số lượng biến. Mình cũng chưa nghĩ ra cách làm cho trường hợp này.

6/- Lisp này mình vẫn chưa xử lý được chiều dày nét chữ và độ rộng chữ như bạn yêu cầu mà chỉ sử dụng font mặc định của Cad.

 

Bạn dùng thử và cho ý kiến nhé. Chúc bạn thành công.

Địa chỉ Email của mình: pt_binh@ yahoo.com

 

Lisp này khắc phục được điểm 1 ở trên. Nó sẽ tự đông thoát chương trình trong mọi trường hợp.

http://www.cadviet.com/upfiles/Vekhung3_1.lsp

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Chào bạn tuan_thie6tkedien,

Đây là cái củ lisp mình mới đào được.

http://www.cadviet.com/upfiles/Vekhung3.lsp

Hy vọng đúng với yêu cầu của bạn. Khi dùng lisp này bạn lưu ý mấy điểm sau:

1/- Nếu bạn nhập số ô là 1 hay 2 thì lisp sẽ vẫn tạo ra hình một hoặc hai ô nhưng nó sẽ không tự kết thúc chương trình vì bị kẹt ở dòng lệnh Array. Điều này là do lệnh Array yêu cầu số hàng và số cột không được bằng 0 và không đồng thời bằng 1. Vì thế bạn phải gõ enter tiếp cho tới khi thoát khỏi chương trình.

Với số ô >= 3 thì bạn chạy vô tư.

2/- Do mặc định mình để chiều cao text là 500 nên chiều cao ô của bạn phải luôn >500 (Phải nhẩm khi cho chiều cao khung theo số ô).

3/- Mình đang để màu text là Cyan cho nó lòe loẹt. Nếu bạn không thích thì chuyển màu về bylayer ở dòng code (setvar "cecolor" "Cyan")

4/- Hiện các text mình đánh theo số thứ tự. Trong trường hợp bạn muốn một đoạn text cố định trong tất cả các ô thì nhập text đó vào đoạn mã (itoa :cheers:.

5/- Việc đặt các text riêng biệt cho mỗi ô sẽ khó khăn hơn nhiều vì khi đó phải gán các giá trị text cho các biến và không thể dùng cấu trúc vòng lặp While này nữa. Có lẽ phải dùng các hàm if như bạn đã nghĩ nhưng sẽ trở ngại ở chỗ bạn chưa xác định được số lượng biến. Mình cũng chưa nghĩ ra cách làm cho trường hợp này.

6/- Lisp này mình vẫn chưa xử lý được chiều dày nét chữ và độ rộng chữ như bạn yêu cầu mà chỉ sử dụng font mặc định của Cad.

 

Bạn dùng thử và cho ý kiến nhé. Chúc bạn thành công.

Địa chỉ Email của mình: pt_binh@ yahoo.com

 

Lisp này khắc phục được điểm 1 ở trên. Nó sẽ tự đông thoát chương trình trong mọi trường hợp.

http://www.cadviet.com/upfiles/Vekhung3_1.lsp

 

Chào bạn Phamthanhbinh

 

Sau khi mình dùng thử và tìm hiểu sẽ nhanh chóng nhắn lại cho bạn nha.

 

Arigatou gozaimashita = Thank.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác
Chào bạn Phamthanhbinh

 

Sau khi mình dùng thử và tìm hiểu sẽ nhanh chóng nhắn lại cho bạn nha.

 

Arigatou gozaimashita = Thank.

Chào bạn tuan_thietkedien,

Đây là lisp trên có bổ sung đoạn code thay đổi width factor của text. Đoạn code bạn gửi mình viết thiếu ở dòng lệnh (setq ss (ssget ' ((0."Text")))) nên nó không chạy được khi đưa vào lisp của mình. Mình đã sửa lại là (setq ss (sssget "x" ' (( 0 . "text")))) thì nó chạy ngon lành.

Mình thay đổi đoạn lisp bạn gửi một chút, bỏ đoạn mã gán chiều cao text, thêm vào đoạn mã để gán lineweight nhưng nó không có tác dụng. Có lẽ mã tương tác 39 là Entity Thickness không phải dùng cho lineweight của text mà bạn mong muốn. Cái lineweight của text mà bạn muốn là mã nào thì mình chịu chết chưa tìm ra được nên mình vẫn để đoạn mã này. Khi bạn tìm được thì chỉ cần thay mã đó vào chỗ mã 39 là xong.

Như vậy theo yêu cầu ban đầu của bạn, mình còn nợ thằng lineweight của text này chưa gỡ được. Mong bạn thông cảm.

http://www.cadviet.com/upfiles/Vekhung3_2.lsp

Bạn dùng thử và cho mình biết ý kiến nếu cần chỉnh sửa gì thêm.

Bạn lưu ý là theo lisp này thì tất cả các text hiện có trên bản vẽ đều bị đổi width factor thành 0.8 chứ không phải chỉ có các text trong khung đâu nhé. Nếu bạn muốn chỉ đổi các text trong khung thì phải làm kiểu khác chứ không dùng lisp này được. Mình đang tìm các biến hệ thống xem có thằng nào chịu trách nhiệm việc này không rồi mới làm được. Bạn chờ nhé.

Cám ơn bạn. Chào bạn và chúc bạn vui.

 

TB: Đoạn lisp mà bạn gửi mình để chuyển màu cho layer , đặt style cho text. Nhưng cũng bị viết sai lệnh ssget như trên và cũng vẫn chưa đặt được thông số chiều dày nét chữ lineweight như bạn muốn. Cái cách này tương tự cái cách dùng đoạn mã Doimau mà mình đã gửi cho bạn lần đầu tiên. Chỉ khác là ở đây đổi màu của layer còn mình thì đổi màu các pline thôi. Do nó loằng ngoằng và phức tạp hơn cách đặt biến hệ thống cecolor nên mình không xài nữa bạn ạ.

Chia sẻ bài đăng này


Liên kết tới bài đăng
Chia sẻ trên các trang web khác

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay

×