Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
9 replies to this topic

#1 soluuhuong2903

soluuhuong2903

    biết vẽ rectang

  • Members
  • PipPip
  • 87 Bài viết
Điểm đánh giá: 22 (tàm tạm)

Đã gửi 01 August 2012 - 08:04 PM

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.c...rawing1_1_1.dwg
  • 0

#2 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 01 August 2012 - 11:14 PM


(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

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#3 soluuhuong2903

soluuhuong2903

    biết vẽ rectang

  • Members
  • PipPip
  • 87 Bài viết
Điểm đánh giá: 22 (tàm tạm)

Đã gửi 02 August 2012 - 07:50 AM

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 đỡ.
  • 0

#4 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5448 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 02 August 2012 - 09:01 AM

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

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#5 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 02 August 2012 - 09:11 AM

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

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#6 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5448 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 02 August 2012 - 09:38 AM

@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?
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#7 soluuhuong2903

soluuhuong2903

    biết vẽ rectang

  • Members
  • PipPip
  • 87 Bài viết
Điểm đánh giá: 22 (tàm tạm)

Đã gửi 02 August 2012 - 10:00 AM

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.
  • 0

#8 tien2005

tien2005

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 257 Bài viết
Điểm đánh giá: 94 (tàm tạm)

Đã gửi 03 August 2012 - 03:04 PM

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
  • 0

#9 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5448 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 03 August 2012 - 05:10 PM

Up file lisp của bạn lên xem sao hè.
  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#10 tien2005

tien2005

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 257 Bài viết
Điểm đánh giá: 94 (tàm tạm)

Đã gửi 06 August 2012 - 12:08 PM

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
  • 0