Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
soluuhuong2903

[ HỎI ] hàm entmake insert bi lỗi.

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

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

(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?

  • Vote tă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

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

  • Vote tă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

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")))))))))

  • Vote tă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

@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

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

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

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
Đăng nhập để thực hiện theo  

×