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

[Nhờ chỉnh sửa] Lỗi lisp

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

Các bác cho em hỏi đoạn code sau em copy từng dòng vào cad để chạy thì ok, nhưng khi copy toàn bộ paste cùng lúc thì lại báo lỗi:

error: bad function: (<Entity name: 7efab0c8> (65.7159 19.2102 0.0))

(setq blockmau (entsel "\nChon Block mau:"))
(setq nhomtenblockmau (assoc 2 (entget (car blockmau))))
(setq Blkname (cdr nhomtenblockmau))
(setq doituong (cdr (last (tblsearch "Block" Blkname))))
(setq doituongcon (entnext doituong))
(setq DXFdoituongcon (entget doituongcon))

Em hỏi thêm nữa là đoạn code sau tại sao chạy lại bị lỗi: error: bad argument type: lentityp nil sau khi kết thúc lệnh while nhỉ

(defun C:fff()
(setq blockmau (entsel "\nChon Block mau:"))
(setq nhomtenblockmau (assoc 2 (entget (car blockmau))))
(setq Blkname (cdr nhomtenblockmau))
(setq doituong (cdr (last (tblsearch "Block" Blkname))))
(setq doituongcon (entnext doituong))
(setq DXFdoituongcon (entget doituongcon))
(princ "\n")
(setq DXFdoituong (entget doituong))
(princ "\n†††††††††††††††††††††††Bang ma DXF cua doi tuong nhu sau:")
(foreach tungphantu DXFdoituong
(princ "\n")
(princ tungphantu)
)
(princ "\n")
(princ "\n†††††††††††††††††††††††Bang ma DXF cua doi tuong nhu sau:")
(foreach tungphantu DXFdoituongcon
(princ "\n")
(princ tungphantu)
)
(while (/= doituongcon nil)
(setq doituongcon (entnext doituongcon))
(setq DXFdoituongcon (entget doituongcon))
(princ "\n")
(princ "\n†††††††††††††††††††††††Bang ma DXF cua doi tuong nhu sau:")
(foreach tungphantu DXFdoituongcon
 (princ "\n")
 (princ tungphantu)
)
)
(princ)
)

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

Các bác cho em hỏi đoạn code sau em copy từng dòng vào cad để chạy thì ok, nhưng khi copy toàn bộ paste cùng lúc thì lại báo lỗi:

error: bad function: (<Entity name: 7efab0c8> (65.7159 19.2102 0.0))

Theo Chiron, khi bạn copy từng dòng lệnh, bạn sẽ nhập từng yêu cầu của dòng lệnh đó rồi mới copy paste dòng tiếp theo. Còn khi bạn copy toàn bộ rồi paste thì dòng lệnh thứ 2 sẽ là tham số đầu vào của dòng lệnh thứ nhất... và tiếp tục. CAD không thể hiểu các tham số này, thế là báo lỗi. Để khắc phục, bạn nên hoàn tất các đoạn code trên thành 1 chương trình rồi hãy chạy thử, nhập tham số vào rồi phải có xử lý tham số đó như thế nào nữa. Khi đó CAD sẽ hiểu và chờ bạn nhập tham số rồi mới thực hiện dòng lệnh tiếp theo.

Hi vọng đúng ý bạn cần.

  • 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

Các bác cho em hỏi đoạn code sau em copy từng dòng vào cad để chạy thì ok, nhưng khi copy toàn bộ paste cùng lúc thì lại báo lỗi:

error: bad function: (<Entity name: 7efab0c8> (65.7159 19.2102 0.0))

...

Em hỏi thêm nữa là đoạn code sau tại sao chạy lại bị lỗi: error: bad argument type: lentityp nil sau khi kết thúc lệnh while nhỉ

...

1. Lisp1: Bạn Chiron đã nói đúng. Bạn có thể khắc phục bằng cách lồng các dòng code vào nhau.

2. Lisp2: lỗi trên là: Hàm yêu cầu 1 đối số là Entity nhưng đã cung cấp một kiểu dữ liệu khác. Lý do nằm ở đoạn code dưới đây:

(while (/= doituongcon nil)

(setq doituongcon (entnext doituongcon))

(setq DXFdoituongcon (entget doituongcon))

Khi while thì doituongcon khác nil, nhưng tiếp theo sau đó thì doituongcon có thể nil, nên entget của nó sẽ lỗi, trong khi hàm entget y/c đối số là entity.

  • 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

Em hiểu rồi, nhờ các bác sửa giúp em đoạn code này nhé

Bạn thay dòng :

 

(while (/= doituongcon nil)

(setq doituongcon (entnext doituongcon))

(setq DXFdoituongcon (entget doituongcon))

....

Thành dòng

 

(while (/= doituongcon nil)

(setq doituongcon (entnext doituongcon))

(if doituongcon (setq DXFdoituongcon (entget doituongcon)))

......

  • 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

Hoặc đảo ngược thứ tự 2 dòng dưới đây trong while:

(setq doituongcon (entnext doituongcon))

(setq DXFdoituongcon (entget doituongcon))

  • 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

Thật độc đáo. Thanks bác

Code đã sửa:

(defun C:dtc()
(setq blockmau (entsel "\nChon Block mau:"))
(setq nhomtenblockmau (assoc 2 (entget (car blockmau))))
(setq Blkname (cdr nhomtenblockmau))
(setq doituong (cdr (last (tblsearch "Block" Blkname))))
(setq doituongcon (entnext doituong))
(setq DXFdoituongcon (entget doituongcon))
(princ "\n")
(setq DXFdoituong (entget doituong))
(princ "\n†††††††††††††††††††††††Bang ma DXF cua doi tuong nhu sau:")
(foreach tungphantu DXFdoituong
   (princ "\n")
   (princ tungphantu)
)
(while (/= doituongcon nil)
  	 (setq DXFdoituongcon (entget doituongcon))
  	 (setq doituongcon (entnext doituongcon))
  	 (princ "\n")
  	 (princ "\n†††††††††††††††††††††††Bang ma DXF cua doi tuong nhu sau:")
  	 (foreach tungphantu DXFdoituongcon
  		 (princ "\n")
  		 (princ tungphantu)
  	 )
)    
(princ)
)

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


×