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

Nhờ các bác 1 lisp

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

Có một việc muốn nhờ các bác giúp hộ. Tôi muốn dùng một lisp xuất thông số chiều dài các đường line sang excel, các đường line chọn bằng phương pháp quét cửa sổ chứ không kích chọn từng line. Trên diễn đàn tôi thấy có lisp của bác PhamThanhBinh: 5194_ghisolieuchieudai.lsp nhưng không thể tải về được, có lisp BTK.lsp nhưng phải kich chọn từng line và có cả phần xuất ra bảng in trong CAD nên tôi không ưng ý lắm. Dùng lệnh Dataextraction thì lại lâu quá. Bác nào có lòng tốt cho tôi 1 lisp để xuất thẳng dữ liệu (Chỉ cần chiều dài) sang excel hoặc up lại cho tôi  lisp 5194_ghisolieuchieudai.lsp của bác PhamThanhBinh cũng quá được. Xin cảm ơn các bác nhiều   :)

  • Vote giảm 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

Nói thật là mình đang luyện nên rất "ngứa ngáy" muốn viết lisp, nhưng với cái yêu cầu của bạn vậy thì chăng biết phải bắt đầu từ đâu ???

Quét chọn đối tượng, xong rồi xuất qua 1 cục vậy sao ?! Ko cần biết đầu lòng nào là của body nào sao ?! :D :D :D

 

p/s: cái này có vẻ dễ ăn, bạn nêu ró ràng tí mình phang cho :D :D :D

  • 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

Nói thật là mình đang luyện nên rất "ngứa ngáy" muốn viết lisp, nhưng với cái yêu cầu của bạn vậy thì chăng biết phải bắt đầu từ đâu ???

Quét chọn đối tượng, xong rồi xuất qua 1 cục vậy sao ?! Ko cần biết đầu lòng nào là của body nào sao ?! :D :D :D

 

p/s: cái này có vẻ dễ ăn, bạn nêu ró ràng tí mình phang cho :D :D :D

Tất nhiên là nếu phân rõ được chiều dài của từng đoạn theo từng layer thì tốt quá - Nhưng nhờ vậy có tham quá không :( ?

Việc mình làm là cắt nhôm, do vậy thường phải đo trong CAD rồi mới nhập vào excel để tính chiều dài cắt thực tế (Tùy loại thanh nhôm cắt mà có chiều dài cắt khác nhau), nếu dùng thủ công đọc số rồi nhập lại rất dễ mắt đọc 1 số tay gõ 1 số. Do trong bản vẽ mỗi loại nhôm đều đặt 1 layer riêng rồi nên không sợ nhầm cái này sang cái khác.

Như trên đã nói, tuy đã có lisp NTK.lsp trên trang này nhưng do chọn đối tượng bằng cách click nên rất dễ sót. Tôi dùng lệnh Data... thì không bị sót nhưng nhiều thao tác quá (Mất  9 lần click chuột mới ra dc cái bảng excel - Kiểu này chết tiền vì mua chuột mất :wacko:). Bạn thịt giúp mình ca này nếu bạn ở HN xin mời đi cafe luôn, còn nếu ở vùng khác thì hẹn bữa bia vậy - Vì ở xa thì khó gặp lắm  :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

Hồi chiều bận tí việc, giờ mới "trả bài" cho bạn đc đây

Mình ở xa, vui tay thì ấn like là đc rồi :D mà chưa thích thì hãy chỉ ném nhẹ thôi nhé ^^

Cũng là 1 cách để mình học bài mà :D :D :D

 

p/s: Bạn thích pick chọn hay quét chọn là tùy bạn

       Mình lấy sau phẩy 3 số thập phân

       Nếu là line 3d => thì chỉ nhận đc length 2d

 

;;;Lisp xuat chieu dai cac LINE
(defun c:LL(/ ss i ename info len lst fn pw)
;length line
(prompt "\nChon doi tuong *** chu y chi LINE duoc nhan ***")
(setq ss (ssget '((0 . "LINE")))
	  i -1)
(if ss
	(progn
		(repeat (sslength ss)
			(setq ename (ssname ss (setq i (1+ i)))
				  info (entget ename)
				  len (distance (2d_dxf info 10) (2d_dxf info 11))
				  lst (append lst (list (list (+ i 1) len)))
			) 
		) 	;repeat
		(setq fn (getfiled "Chon file de xuat ket qua" "" "csv" 1))
 		(setq pw (open fn "w"))
 		(write-line "TT,Length" pw)
 		(foreach elem lst
  			(write-line (strcat (itoa(car elem)) "," (rtos (cadr elem) 2 3)) pw))
 		(close pw)
 	(princ)
	) 	;progn
)
)	
;========================================================================
(defun 2d_dxf(info pt_code)
(list (cadr (assoc pt_code info)) (caddr (assoc pt_code info)) 0))
  • 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

Em test nó chạy phè phè, chỉ có hiện ra dìng này trên cad mà mục đích là excel nên ko để ý

 

; error: bad argument type: streamp nil

 

Lỗi này là gì vậy bác nhỉ ^^

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

Hàm (while ss sẽ chạy miệt mài vì ss luôn khác nil. Đó là lý do sinh lỗi, khi (ssname ss i) không có. Tiếc là lisp bị lỗi mà bạn vẫn post, hoặc chưa test mà đã post.

  • 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

Rất cảm ơn bạn Hiepttr  :)  - Không biết nút like ở đâu cả đành phải viết vậy.

Còn đây là chút nhận xét hoặc gọi là ném đá cũng được - Chắc chắn là nhẹ rồi vì đá to cầm kg nổi  :(

+ Mình không thấy xuất hiện lỗi ; error: bad argument type: streamp nil nhưng chiều dài đường line quá dài là kết quả sai luôn. VD: line dài 37572 kết quả cho bằng không luôn.

+ Bạn để 2 cột TT và Length khi sang excel là nó dính luôn thành 1 cột - Vẫn lọc được nhưng nếu tách thành 2 cột riêng biệt thì hay hơn.

Riêng về chuyện line quá dài bạn Hiepttr nếu rảnh xem lại lỗi do đâu - Tuy thực tế thanh nhôm mình cắt chưa bao giờ dài đến 6000. 

Xin cảm ơn lần nữa nhé  :D

Hic, thêm 1 lỗi quái dị nữa. Khi đưa bài lên mới thấy bài của bác Doan Van Ha. Mình làm luôn mấy đoạn thẳng đặt theo phương X và phương Y, kết quả đau buồn là tất cả các thanh song song với trục Y đều cho kết quả bằng 0.000  :o

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 bác Doanvanha đã nhắc nhở (đã like ^^), quả là thấy bở nên mình code xong, test 1 vài trường hợp, thấy xuất kết quả >>> tưởng là OK nên mới post :D :D :D 

 

@dunghn: bạn chỉnh excel lại sao cho dấu chấm (.) là dấu thập phân là OK mà, lỗi chỉ là ở chổ bác Ha đã chỉ ra >>> mình đã fix tại chổ cũ

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 bác Doanvanha đã nhắc nhở (đã like ^^), quả là thấy bở nên mình code xong, test 1 vài trường hợp, thấy xuất kết quả >>> tưởng là OK nên mới post :D :D :D

 

@dunghn: bạn chỉnh excel lại sao cho dấu chấm (.) là dấu thập phân là OK mà, lỗi chỉ là ở chổ bác Ha đã chỉ ra >>> mình đã fix tại chổ cũ

 Đổi lại dấu thì cột OK, nhưng những thanh song song với trục Y vẫn bị bằng không. Mình dùng Cad2013, dưới đây là file CAD và kết quả

http://www.cadviet.com/upfiles/3/15530_new_folder.rar

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

Do line của bạn vẽ trong 3D mà lisp thì viết cho 2D. Bạn sửa dòng cuối cùng thành dòng này:

(list (cadr (assoc pt_code info)) (caddr (assoc pt_code info)) (cadddr (assoc pt_code info))))

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

@ Dunghn :  "Đổi lại dấu thì cột OK, nhưng những thanh song song với trục Y vẫn bị bằng không."

Đọc kỹ hướng dẫn sử dụng trước khi dùng.

......

 

p/s: Bạn thích pick chọn hay quét chọn là tùy bạn

       Mình lấy sau phẩy 3 số thập phân

       Nếu là line 3d => thì chỉ nhận đc length 2d

 

 

@ bác Hà : sửa như bác thì k/quả OK rồi, nhưng code hơi bị phức tạp ... và tên hàm (2D...) không phản ánh đúng nội dung.

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

@ Dunghn :  "Đổi lại dấu thì cột OK, nhưng những thanh song song với trục Y vẫn bị bằng không."

Đọc kỹ hướng dẫn sử dụng trước khi dùng.

 

@ bác Hà : sửa như bác thì k/quả OK rồi, nhưng code hơi bị phức tạp ...

Trồng rau trên đất người ta thì đành vậy. Chứ bình thường thì ai nỡ làm vậy. :lol:

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

Do line của bạn vẽ trong 3D mà lisp thì viết cho 2D. Bạn sửa dòng cuối cùng thành dòng này:

(list (cadr (assoc pt_code info)) (caddr (assoc pt_code info)) (cadddr (assoc pt_code info))))

Cám ơn bác, em làm OK rồi

 

@ Dunghn :  "Đổi lại dấu thì cột OK, nhưng những thanh song song với trục Y vẫn bị bằng không."

Đọc kỹ hướng dẫn sử dụng trước khi dùng.

E có nghiên cứu về lisp đâu, cứ nghĩ vẽ trong cùng 1 mặt phẳng thì không sao  :unsure: . Quả thật file mẫu của e luôn để mặt phẳng chuẩn ban đầu là Front vì cũng hay phải dựng 3d thật, đâu biết phải vẽ trong mặt Top mới được coi là 2D.

Lần nữa xin cảm ơn tất cả các bác - Gặp mấy thằng trình còi hơn là là e lại tha hồ thể hiện :D (Nhờ học lỏm từ các bác đấy  :lol: ) 

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  

×