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

Lisp chạy một lúc thì chạy sai

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

Tôi viết một cái lisp để để chỉnh sửa nhiều bản vẽ giống nhau.

Sau khi chạy khoảng vài chục hoặc hơn 100 bản, nó bắt đầu trở chứng. Một số lệnh chọn đối tượng không chạy nữa. Tôi không hiểu vì lý do gì? Hình như nó không giải phóng được bộ nhớ hay sao ấy. Khi xảy ra sự cố sai, Tôi kiểm tra thấy các dòng chọn đối tượng màu đỏ không có tác dụng

(defun dxf( name n)

(cdr (assoc n (entget name)))

)

 

(defun rakhoimau( / ss kt)

(setq kt nil)

(setq ss (ssget "x" '((0 . "insert") (2 . "mau"))))

(if ss (progn

(command "_.explode" (ssname ss 0))

(setq kt T)

))

kt

)

 

(defun chensdcd( p / P1 P2)

(SETQ P1 (MAPCAR '+ P '(233.0 3.0 0.0)) P2 (MAPCAR '+ p '(338.0 117.0 0.0)))

(command "_.layer" "off" "ddhsb" "")

(command "_.erase" "c" p1 p2 "")

(command "_.layer" "on" "ddhsb" "")

(command "_.insert" "sodochidan" p1 "" "" "")

)

 

(defun chuyenchu1( p / p1 p2 p3 ss)

(setq p1 (mapcar '+ p '(378.0 118.0)) p2 (mapcar '+ p '(615.0 137.0)) p3 (mapcar '+ p '(523.0 118.0)))

(command "_.zoom" "w" p1 p2)

(setq ss (ssget "w" p1 p2 '((8 . "ddhsb"))))

(if ss (command "_.move" ss "" p1 p3))

(setq ss nil)

)

(defun chuyenchu2( p / p1 p2 p3 ss ss1 ss2)

(setq p1 (mapcar '+ p '(6.0 434.0)) p2 (mapcar '+ p '(164.0 494.0)))

(command "_.zoom" "w" p1 p2)

(setq p1 (mapcar '+ p '(11.0 465.0)) p2 (mapcar '+ p '(160.0 466.0)))

(setq ss1 (ssget "c" p1 p2 '((0 . "text"))))

(setq p1 (mapcar '+ p '(11.0 473.0)) p2 (mapcar '+ p '(160.0 474.0)))

(setq ss2 (ssget "c" p1 p2 '((0 . "text"))))

(if ss1 (command "_.move" ss1 "" '(0 0 0) '(0 8 0)))

(if ss2 (command "_.move" ss2 "" '(0 8 0) '(0 0 0)))

(setq p1 (mapcar '+ p '(11.0 481.0)) p2 (mapcar '+ p '(160.0 482.0)))

(setq ss (ssget "c" p1 p2 '((0 . "text"))))

(if ss (command "_.erase" ss ""))

 

(setq p1 (mapcar '+ p '(7.0 440.0)) p2 (mapcar '+ p '(149.0 474.0)))

(setq ss (ssget "c" p1 p2 '((0 . "text"))))

(if ss (command "_.move" ss "" '(0 0 0) '(0 8 0)))

(setq ss nil ss1 nil ss2 nil)

)

 

(defun chuyenchu3( p / p1 p2 p3 ss ss1 ss2)

(setq p1 (mapcar '+ p '(6.0 434.0)) p2 (mapcar '+ p '(164.0 494.0)))

(command "_.zoom" "w" p1 p2)

(setq p1 (mapcar '+ p '(11.0 441.0)) p2 (mapcar '+ p '(160.0 442.0)))

(setq ss1 (ssget "c" p1 p2 '((0 . "text"))))

(if ss1 (progn

(setq p1 (mapcar '+ p '(11.0 457.0)) p2 (mapcar '+ p '(160.0 458.0)))

(setq ss1 (ssget "c" p1 p2 '((0 . "text"))))

(setq p1 (mapcar '+ p '(11.0 465.0)) p2 (mapcar '+ p '(160.0 466.0)))

(setq ss2 (ssget "c" p1 p2 '((0 . "text"))))

(if ss1 (command "_.move" ss1 "" '(0 0 0) '(0 8 0)))

(if ss2 (command "_.move" ss2 "" '(0 8 0) '(0 0 0)))

(setq p1 (mapcar '+ p '(11.0 473.0)) p2 (mapcar '+ p '(160.0 474.0)))

(setq ss (ssget "c" p1 p2 '((0 . "text"))))

(if ss (command "_.erase" ss ""))

(setq ss nil ss1 nil ss2 nil)

) (chuyenchu2 p))

)

 

(defun C:XLTTN( / ss n p kt)

(setvar "osmode" 0)

(setq kt (RAKHOIMAU))

(print kt)

(setq ss (ssget "x" '((0 . "lwpolyline") (8 . "ddhsb") (41 . 2))))

(if ss (progn

(setq n (ssname ss 0))

(setq p (dxf n 10) p (list (- (car p) 806) (cadr p) 0.0))

(CHENSDCD p)

(chuyenchu1 p)

(if kt (chuyenchu2 p) (chuyenchu3 p))

(setq ss nil)

))

)

Đây là các file bản vẽ : Tôi chưa up bản vẽ lên được

Bạn nào biết vì lý do gì xin chỉ giúp cho

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

Xin để ý bạn về hàm ssget:

Hàm ssget chỉ nhặt được những đối tượng nằm trong giới hạn thể hiện trên màn hình vẽ của CAD. Nếu đối tượng hoặc các tham số bạn cung cấp để khoanh vùng nhặt đối tượng nằm ngoài giới hạn trên thì hàm không nhặt được.

Bạn nên dùng thêm câu lệnh Zoom để đưa phần cần nhặt thể hiện lên màn hình hoặc chắc nhất là zoom extents một cái và nhớ là tắt truy bắt điểm.

 

Chúc thành cô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
Xin để ý bạn về hàm ssget:

Hàm ssget chỉ nhặt được những đối tượng nằm trong giới hạn thể hiện trên màn hình vẽ của CAD. Nếu đối tượng hoặc các tham số bạn cung cấp để khoanh vùng nhặt đối tượng nằm ngoài giới hạn trên thì hàm không nhặt được.

Bạn nên dùng thêm câu lệnh Zoom để đưa phần cần nhặt thể hiện lên màn hình hoặc chắc nhất là zoom extents một cái và nhớ là tắt truy bắt điểm.

 

Chúc thành công.

Điều này thì tôi cũng biết và tôi đã zoom nó về trong màn hình rồi. Cũng với cái file đó, khi nó bị lỗi chỉ còn cách thoát cad rôi vào lại, chạy ngay thì nó vẫn bình thường, chỉ sau một lúc nó mới lại bị sai. Tôi nghĩ do vần đề về bộ nhớ của cad nhưng tôi chưa biết hàm nào xử lý việc này

Đây là file bản vẽ gốc chưa xử lý : http://www.cadviet.com/upfiles/goc.dwg

Đây là file chạy đúng : http://www.cadviet.com/upfiles/dung.dwg

Đây là file đã chạy sai : http://www.cadviet.com/upfiles/sai.dwg

Đây là file phụ cần cho lúc chạy : http://www.cadviet.com/upfiles/sodochidan.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

Cám ơn các bạn đã quan tâm. Sau khi chạy trên máy khác thì nó vẫn chạy tốt. Mình nghĩ nó bị virus và sau khi diệt virus, nó đã chạy tốt

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  

×