soluuhuong2903 22 Báo cáo bài đăng Đã đăng Tháng 8 1, 2012 nhờ các bác xem giúp em cái lisp này với.e có sử dụng hàm entmake insert của bác Thaistreetz, nhưng ko hiểu sao khi chạy lisp báo lỗi " error: bad argument type: listp <Entity name: xxxxxxxxxxxxxxx> " và thoát vòng lặp.mong các bác xem qua thử.file bản vẽ và lisp e đính kèm bên dưới. http://www.cadviet.c.../85848_test.lsp http://www.cadviet.com/upfiles/3/85848_drawing1_1_1.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
Thaistreetz 539 Báo cáo bài đăng Đã đăng Tháng 8 1, 2012 (defun MakeInsert (Blkname inspoint scale ang list_att layer color xdata / lst obj i en x ) (setq i -1 en (cdr (last (tblsearch "block" Blkname))) obj (entget en)) (if (= (cdr(assoc 0 obj)) "ATTDEF") (setq lst (list (list (cdr(assoc 10 obj))(cdr(assoc 11 obj))(cdr(assoc 50 obj))(cdr(assoc 8 obj))(cdr(assoc 70 obj))(cdr(assoc 62 obj)) (cdr(assoc 40 obj))(assoc 7 obj)(assoc 71 obj)(assoc 72 obj)(assoc 2 obj))))) (while (setq en (entnext en)) (if (= (cdr(assoc 0 (setq obj(entget en)))) "ATTDEF") (setq lst (cons (list (cdr(assoc 10 obj))(cdr(assoc 11 obj))(cdr(assoc 50 obj))(cdr(assoc 8 obj))(cdr(assoc 70 obj))(cdr(assoc 62 obj)) (cdr(assoc 40 obj))(assoc 7 obj)(assoc 71 obj)(assoc 72 obj)(assoc 2 obj))lst)))) (entmakex(list '(0 . "INSERT")'(100 . "AcDbEntity") (cons 8 (if Layer Layer (getvar "Clayer"))) (cons 62 (if Color Color 256)) '(100 . "AcDbBlockReference")'(66 . 1) (cons 2 Blkname) (cons 10 (trans inspoint 1 0)) (cons 41 scale)(cons 42 scale)(cons 43 scale) (cons 50 Ang) (cons -3 (if xdata (list xdata) nil)))) (if lst (foreach LL (reverse lst) (entmake(list '(0 . "ATTRIB")'(100 . "AcDbEntity")(cons 8 (cadddr LL))(cons 60 (nth 4 LL)) (if (nth 5 LL) (cons 62 (nth 5 LL)) '(62 . 256))'(100 . "AcDbText") (cons 10(mapcar'+(trans inspoint 1 0)(mapcar'(lambda(x)(* scale x))(polar'(0 0 0)(+(angle'(0 0 0)(car LL))ang)(distance'(0 0 0)(car LL)))))) (cons 40 (* scale (nth 6 LL))) (cons 1 (nth (setq i (1+ i))list_att)) (cons 50 (+ ang (caddr LL))) '(41 . 1.0)(nth 7 LL)(nth 8 LL)(nth 9 LL) (if (= 0(cdr (nth 8 LL))(cdr(nth 9 LL)))(cons 11(list 0 0 0)) (cons 11(mapcar'+(trans inspoint 1 0)(mapcar'(lambda(x)(* scale x))(polar'(0 0 0)(+(angle'(0 0 0)(cadr LL))ang)(distance'(0 0 0)(cadr LL))))))) '(100 . "AcDbAttribute")'(280 . 0)(last LL)'(70 . 0)'(280 . 1))))) (cdr (assoc 330 (entget (entmakex (list '(0 . "SEQEND") (cons 8 (if Layer Layer (getvar "Clayer"))))))))) Tại sao bạn không post trực tiếp vào topic của nó mà fải lập topic riêng? 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
soluuhuong2903 22 Báo cáo bài đăng Đã đăng Tháng 8 2, 2012 Cảm ơn Thaistreetz đã góp ý.e sẽ rút kinh nghiệm lần sau.em copy lại entmake insert của bác rồi, nhưng vẫn lỗi đó bác ạ.mong các bác giúp đỡ. 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
Doan Van Ha 3210 Báo cáo bài đăng Đã đăng Tháng 8 2, 2012 1). Hàm của bác Thai chép bị thiếu hàm DXF 2). Bạn save bản vẽ xuống cad đời thấp (VD:2007) để may ra có nhiều người down được để test giùm 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
Thaistreetz 539 Báo cáo bài đăng Đã đăng Tháng 8 2, 2012 Lỗi do thiếu hàm dxf. Bạn copy lại code bên trên hoặc có thể thay dòng cuối cùng bằng dòng này (cdr (assoc 330 (entget (entmakex (list '(0 . "SEQEND") (cons 8 (if Layer Layer (getvar "Clayer"))))))))) 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
Doan Van Ha 3210 Báo cáo bài đăng Đã đăng Tháng 8 2, 2012 @Soluuhuong: tôi đã test trên Block_Att của tôi thì OK (sau khi bác Thai đã sửa lại hàm make). Có thể do bạn nhập list att không đúng chăng: ví dụ số value của att ít hơn số tag? 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
soluuhuong2903 22 Báo cáo bài đăng Đã đăng Tháng 8 2, 2012 cảm ơn 2 bác nhé.sau khi sửa xong chạy ngon rồi.hi.nhưng e vẫn up lại file cad về 2004 cho rõ ràng.chúc diễn đàn ngày càng phát triể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
tien2005 249 Báo cáo bài đăng Đã đăng Tháng 8 3, 2012 Hic, mình thì lại khác: hàm cũ thì chạy OK nhưng hàm mới thì báo khi chạy báo lổi error: too many arguments (cả 2 hàm mình đều không dùng xdata) Các Justify của hàm cũ khi insert không đúng định dạng: TC TR MC MR BC BR 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
Doan Van Ha 3210 Báo cáo bài đăng Đã đăng Tháng 8 3, 2012 Up file lisp của bạn lên xem sao hè. 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
tien2005 249 Báo cáo bài đăng Đã đăng Tháng 8 6, 2012 hehe, mình đã tìm ra nguyên nhân là khi bỏ xdata thì thêm ngoặc ) không đúng vị trí nên lỗi. Các định dạng của text như mình nêu trên vẫn không đú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