thaihoa123 0 Báo cáo bài đăng Đã đăng Tháng 9 11, 2010 em định viết LSP in tự động nhưng chưa có cách nào để in theo thứ tư từ trái qua phải được mà chỉ in theo thứ tự chọn Block, bác giúp em với nhé Link file đã làm: http://www.cadviet.com/upfiles/3/in.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
TRUNGNGAMY 91 Báo cáo bài đăng Đã đăng Tháng 9 11, 2010 em định viết LSP in tự động nhưng chưa có cách nào để in theo thứ tư từ trái qua phải được mà chỉ in theo thứ tự chọn Block, bác giúp em với nhéLink file đã làm: http://www.cadviet.com/upfiles/3/in.lsp Bạn lập danh sách gồm hoành độ điểm chèn và ename của cái block. VD : '((30 ename1) (10 ename2) (20 ename3)) sd hàm (vl-sort ((30 ename1) (10 ename2) (20 ename3)) (function (lambda (e1 e2) (< (car e1) (car e2))))) để sắp xếp theo phần tử thứ nhất bạn sẽ đc ((10 ename1) (20 ename2) (30 ename3)). Duyệt qua ds này để in ename1, ename2, ename3 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
thaihoa123 0 Báo cáo bài đăng Đã đăng Tháng 9 12, 2010 Bạn lập danh sách gồm hoành độ điểm chèn và ename của cái block. VD : '((30 ename1) (10 ename2) (20 ename3)) sd hàm (vl-sort ((30 ename1) (10 ename2) (20 ename3)) (function (lambda (e1 e2) (< (car e1) (car e2))))) để sắp xếp theo phần tử thứ nhất bạn sẽ đc ((10 ename1) (20 ename2) (30 ename3)). Duyệt qua ds này để in ename1, ename2, ename3 e đã làm theo cách này nhưng không được (vì làm mò và thử dần thôi), nếu được bác chèn luôn đoạn lệnh đó vào file giúp e nhé. (ví dụ file cần in: http://www.cadviet.com/upfiles/3/a.dwg) 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
TRUNGNGAMY 91 Báo cáo bài đăng Đã đăng Tháng 9 12, 2010 e đã làm theo cách này nhưng không được (vì làm mò và thử dần thôi), nếu được bác chèn luôn đoạn lệnh đó vào file giúp e nhé.(ví dụ file cần in: http://www.cadviet.com/upfiles/3/a.dwg) Mình kg down đc cái file của bạn và trong đoạn lisp của bạn mình cũng kg quen cách dùng các hàm VL nên mình chỉ viết giúp bạn đoạn lisp tạo và sắp xếp các block theo hoành độ điểm chèn (ở đây mình nghĩ điểm chèn các block của bạn sẽ tăng dần theo hoành độ) (defun dxf( name n) (cdr (assoc n (entget name))) ) (defun haminBlock( e) (prompt "\nBan dang in block") (print e) ) (defun c:inBL( / ss n e p ListB dx) (setq ss (ssget '((0 . "INSERT")))) (setq n 0 listB nil) (while (< n (sslength ss)) (setq e (ssname ss n)) (setq p (dxf e 10) dx (car p)) (setq listB (append listB (list (list dx e)))) (setq n (1+ n)) ) (setq listB (vl-sort ListB (function (lambda (e1 e2) (< (car e1) (car e2)))))) (foreach n ListB (haminBlock (cadr n))) ) Bạn chỉ cần viết thêm hàm in block theo ename của nó thay vào hàm haminBlock là được 1 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
Tue_NV 3915 Báo cáo bài đăng Đã đăng Tháng 9 12, 2010 e đã làm theo cách này nhưng không được (vì làm mò và thử dần thôi), nếu được bác chèn luôn đoạn lệnh đó vào file giúp e nhé.(ví dụ file cần in: http://www.cadviet.com/upfiles/3/a.dwg) Tue_NV không download file bạn về được Bạn có thể làm theo ý của bác TrungNgaMy hoặc làm theo cách này : 1. Bạn nên thêm và thay dòng này trong code của bạn : Thay dòng : (setq ss (ssget '((0 . "INSERT")))) bằng dòng này : (setq Blockname (cdr(assoc 2 (entget (car(entsel "\nPick chon Block mau :")))))) (setq ss (ssget (list (cons 0 "INSERT") (cons 2 Blockname) ) ) ) -> Chạy Code Command: q Pick chän vïng chøa c¸c ®èi tîng cÇn in Pick chon Block mau : -> Pick chon Block mau Select objects: f -> gõ f -> Kéo 1 đường từ trái qua phải cắt Block rồi enter Lisp sẽ thực hiện việc in từ trái qua phải như ý của bạn Nếu mà bạn chọn kiểu cắt từ phải qua trái -> Lisp sẽ in theo thứ tự từ phải qua trái Nếu mà bạn chọn kiểu cắt từ trên xuống dưới -> Lisp sẽ in theo thứ tự từ trên xuống dưới, Nếu mà bạn chọn kiểu cắt từ dưới lên trên -> Lisp sẽ in theo thứ tự từ dưới lên trên Chúc thành công. 2 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
thaihoa123 0 Báo cáo bài đăng Đã đăng Tháng 9 12, 2010 Mình kg down đc cái file của bạn và trong đoạn lisp của bạn mình cũng kg quen cách dùng các hàm VL nên mình chỉ viết giúp bạn đoạn lisp tạo và sắp xếp các block theo hoành độ điểm chèn (ở đây mình nghĩ điểm chèn các block của bạn sẽ tăng dần theo hoành độ) (defun dxf( name n) (cdr (assoc n (entget name))) ) (defun haminBlock( e) (prompt "\nBan dang in block") (print e) ) (defun c:inBL( / ss n e p ListB dx) (setq ss (ssget '((0 . "INSERT")))) (setq n 0 listB nil) (while (< n (sslength ss)) (setq e (ssname ss n)) (setq p (dxf e 10) dx (car p)) (setq listB (append listB (list (list dx e)))) (setq n (1+ n)) ) (setq listB (vl-sort ListB (function (lambda (e1 e2) (< (car e1) (car e2)))))) (foreach n ListB (haminBlock (cadr n))) ) Bạn chỉ cần viết thêm hàm in block theo ename của nó thay vào hàm haminBlock là được e Đã thử theo hướng dẫn (không biết làm đã đúng chưa) nhưng chỉ in theo thứ tự chọn, nhờ bác xem giúp Link file LSP: http://www.cadviet.com/upfiles/3/in_1.lsp Link file Cad: http://www.cadviet.com/upfiles/3/in.dwg 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
TRUNGNGAMY 91 Báo cáo bài đăng Đã đăng Tháng 9 12, 2010 e Đã thử theo hướng dẫn (không biết làm đã đúng chưa) nhưng chỉ in theo thứ tự chọn, nhờ bác xem giúpLink file LSP: http://www.cadviet.com/upfiles/3/in_1.lsp Link file Cad: http://www.cadviet.com/upfiles/3/in.dwg Mình vẫn kg down đc file của bạn. Theo mình nghĩ đoạn lisp mình viết cũng khá đơn giản và dễ hiểu. Nếu đúng là các block của bạn có điểm insert tăng đần theo trục X thì nó sẽ đc sắp xếp lại từ trái qua phải, bạn chỉ cần thêm dòng (print ListB) trước và sau dòng (setq listB (vl-sort ListB (function (lambda (e1 e2) (< (car e1) (car e2))))))sẽ thấy. nhưng nếu các điểm insert kg đảm bảo tăng dần theo trục X thì bạn phải chọn tiêu chuẩn khác làm căn cứ để sắp xếp (ví dụ tâm hay điểm extmax, hoặc extmin của các thực thể trong block, cái này xác định hơi khó một tý) Mình thấy trên DĐ có rất nhiều lisp in hàng loạt, bạn xem thử TH của bạn đã có chưa, đỡ mất công suy nghĩ 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