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

[Yêu Cầu] Lisp thống kê đoạn thẳng

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

Lâu rồi không post nên post sai quy định và bị xóa,giờ post lai mong mọi người thông cảm

Chả là mình có 1 bản vẽ mà trong đó có rất nhiều đoạn thẳng mình cần thống kê chiều dài.Nếu làm thủ công thì mất thời gian quá.Mình muốn các bạn viết giùm mình cái lisp thống kê tất cả các đoạn thẳng có trong bản vẽ và in bảng thống kê đó ra file excel theo cách sau:

File excel gồm 3 cột:

- Cột 1 : Chiều dài

- Cột 2 : Số lượng

- Cột 3 : Layer

Các đoạn thẳng của mình chỉ đơn giản là line,và chỉ cần chiều dài bằng nhau và cùng 1 layer là được xem như nhau.( các đối tượng đều nằm trong không gian 3D).

Mình đang cần gấp,rất mong các bạn giú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

Lâu rồi không post nên post sai quy định và bị xóa,giờ post lai mong mọi người thông cảm

Chả là mình có 1 bản vẽ mà trong đó có rất nhiều đoạn thẳng mình cần thống kê chiều dài.Nếu làm thủ công thì mất thời gian quá.Mình muốn các bạn viết giùm mình cái lisp thống kê tất cả các đoạn thẳng có trong bản vẽ và in bảng thống kê đó ra file excel theo cách sau:

File excel gồm 3 cột:

- Cột 1 : Chiều dài

- Cột 2 : Số lượng

- Cột 3 : Layer

Các đoạn thẳng của mình chỉ đơn giản là line,và chỉ cần chiều dài bằng nhau và cùng 1 layer là được xem như nhau.( các đối tượng đều nằm trong không gian 3D).

Mình đang cần gấp,rất mong các bạn giúp đỡ.

Hề hề hề,

Mặc dù bạn đã phải post lại yêu cầu, song nó vẫn chưa đúng theo quy định,

Hãy gửi một bản vẽ chứa các line cần thống kê và một file excel kết quả mà bạn muốn có lên nhé.

Các yêu cầu của bạn chưa thật rõ ràng, số lượng ở đây là số lượng của các đoạn thẳng có cùng chiều dài hay có cùng layer hay là phải cùng cả hai???

Tại sao bạn không thống kê chỉ các đoạn thẳng rồi sau đó dùng lọc trong excel để giải quyết yêu cầu của bạn sẽ đơn giản hơn nhiều????

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âu rồi không post nên post sai quy định và bị xóa,giờ post lai mong mọi người thông cảm

Chả là mình có 1 bản vẽ mà trong đó có rất nhiều đoạn thẳng mình cần thống kê chiều dài.Nếu làm thủ công thì mất thời gian quá.Mình muốn các bạn viết giùm mình cái lisp thống kê tất cả các đoạn thẳng có trong bản vẽ và in bảng thống kê đó ra file excel theo cách sau:

File excel gồm 3 cột:

- Cột 1 : Chiều dài

- Cột 2 : Số lượng

- Cột 3 : Layer

Các đoạn thẳng của mình chỉ đơn giản là line,và chỉ cần chiều dài bằng nhau và cùng 1 layer là được xem như nhau.( các đối tượng đều nằm trong không gian 3D).

Mình đang cần gấp,rất mong các bạn giúp đỡ.

Đây bạn ơi! Lisp thống kê các đoạn thẳng và xuất ra file.

;Doan Van Ha - CADViet.com - Ngay 16/5/2012
;Muc dich: nhom cac doi tuong Line cung Length va cung Layer, sau do xuat ra file.
(defun C:HA( / entlst lst fn pw)
(princ "\nChon cac doi tuong Line can xuat ra file...")
(setq entlst (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget (list (cons 0 "LINE")))))))
(foreach ent entlst
;  (setq lst (cons (list (cdr (assoc 8 (entget ent))) (distance (cdr (assoc 10 (entget ent))) (cdr (assoc 11 (entget ent))))) lst)))
 (setq lst (cons (list (cdr (assoc 8 (entget ent))) (atof (rtos (distance (cdr (assoc 10 (entget ent))) (cdr (assoc 11 (entget ent)))) 2 4))) lst)))
(setq lst (LM:ListOccurrences lst))
(setq fn (getfiled "Chon file de xuat ket qua" "" "xls" 1))
(setq pw (open fn "w"))
(write-line (strcat "Chieu dai" "\t" "So luong" "\t" "Layer") pw)
(foreach n lst
 (write-line (strcat (vl-prin1-to-string (cadr (car n))) "\t" (itoa (cdr n)) "\t" (car (car n))) pw))
(close pw) )
(defun LM:ListOccurrences (lst)	;Thank Lee Mac
(if lst
 (cons
  (cons (car lst) (- (length lst) (length (vl-remove (car lst) (cdr lst)))))
  (LM:ListOccurrences (vl-remove (car lst) (cdr lst))))))

P/S: sửa lúc 15h30 ngày 17/5/2012

  • Vote tăng 5

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âu rồi không post nên post sai quy định và bị xóa,giờ post lai mong mọi người thông cảm

Chả là mình có 1 bản vẽ mà trong đó có rất nhiều đoạn thẳng mình cần thống kê chiều dài.Nếu làm thủ công thì mất thời gian quá.Mình muốn các bạn viết giùm mình cái lisp thống kê tất cả các đoạn thẳng có trong bản vẽ và in bảng thống kê đó ra file excel theo cách sau:

File excel gồm 3 cột:

- Cột 1 : Chiều dài

- Cột 2 : Số lượng

- Cột 3 : Layer

Các đoạn thẳng của mình chỉ đơn giản là line,và chỉ cần chiều dài bằng nhau và cùng 1 layer là được xem như nhau.( các đối tượng đều nằm trong không gian 3D).

Mình đang cần gấp,rất mong các bạn giúp đỡ.

Bạn nghiên cứu thêm về lệnh dataextraction nhé. Lệnh này đáp ứng được yêu cầu của bạn

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ình hình là mình sử dụng cái lisp thống kê này cho bản vẽ 2D thì ok,nhưng nếu xài cho bản vẽ trong không gian 3D thì gặp chút rắc rối.Nhiều đoạn thẳng như nhau( cùng chiều dài và cùng layer) không được gom chung mà lại chia ra nhiều loại( theo mình nghĩ là lien quan đến các góc trong không gian 3D).Như vậy minh phải tốn thêm nhiều thời gian bên excel để lọc lại nữa.Không biết có cách nào khắc phục điều này không,mong bác Doan Van Ha và các bạn giúp mì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

Tình hình là mình sử dụng cái lisp thống kê này cho bản vẽ 2D thì ok,nhưng nếu xài cho bản vẽ trong không gian 3D thì gặp chút rắc rối.Nhiều đoạn thẳng như nhau( cùng chiều dài và cùng layer) không được gom chung mà lại chia ra nhiều loại( theo mình nghĩ là lien quan đến các góc trong không gian 3D).Như vậy minh phải tốn thêm nhiều thời gian bên excel để lọc lại nữa.Không biết có cách nào khắc phục điều này không,mong bác Doan Van Ha và các bạn giúp mình.

Hình như lỗi này là do "khâm phuc! khâm phục!" mà không tick "Like This" đấy!

Đùa tí. Đã sửa cho bạn. Vẫn Link cũ.

  • 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

Bạn có thể sửa lisp này dung được cho cả line, pline, spline? Thanks a lot

Hình như lỗi này là do "khâm phuc! khâm phục!" mà không tick "Like This" đấy!
Đùa tí. Đã sửa cho bạn. Vẫn Link 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

Sửa cho bạn đây. Lisp có thể dùng cho Line, Polyline, Lwpolyline, Spline.

 

;Doan Van Ha - CADViet.com - Ngay 16/5/2012. Edit 11/7/2013
;Muc dich: nhom cac doi tuong *Line cung Length va cung Layer, sau do xuat ra file.
(defun C:HA( / entlst lst fn pw)
(princ "\nChon cac doi tuong de lay chieu dai can xuat ra file...")
(setq entlst (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget (list (cons 0 "*LINE")))))))
(foreach ent entlst
 (setq lst (cons (list (cdr (assoc 8 (entget ent))) (atof (rtos (vlax-curve-getDistAtParam ent (vlax-curve-getEndParam ent)) 2 4))) lst)))
(setq lst (LM:ListOccurrences lst))
(setq fn (getfiled "Chon file de xuat ket qua" "" "xls" 1))
(setq pw (open fn "w"))
(write-line (strcat "Chieu dai" "\t" "So luong" "\t" "Layer") pw)
(foreach n lst
  (write-line (strcat (vl-prin1-to-string (cadr (car n))) "\t" (itoa (cdr n)) "\t" (car (car n))) pw))
(close pw) )
(defun LM:ListOccurrences (lst) ;Thank Lee Mac
(if lst
  (cons
   (cons (car lst) (- (length lst) (length (vl-remove (car lst) (cdr lst)))))
   (LM:ListOccurrences (vl-remove (car lst) (cdr lst))))))
 
  • 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ảm ơn bạn nhiều. Lisp của bạn hay lắm. Nhưng mình có vài điểm nữa mong bạn giúp đỡ:

1. Bạn có thể cho them tính năng tính chiều dài cho arc nữa không.

2.Trong bảng Excel bạn cho mình thêm 1 cột STT và sẽ tự động đánh số lần lượt theo thứ tự mình chọn đường từ trên xuống dưới

3.Trong mục http://www.cadviet.com/forum/topic/72563-yeu-cau-xin-lisp-copy-move-doi-tuong-roi-xoay/page-2 mình có nhờ mọi người giúp mình sửa 1 cái lisp. Bạn có thể xem giúp mình được không? Cảm ơn bạn nhiều.

 

 

 

 

 

Sửa cho bạn đây. Lisp có thể dùng cho Line, Polyline, Lwpolyline, Spline.

 

;Doan Van Ha - CADViet.com - Ngay 16/5/2012. Edit 11/7/2013
;Muc dich: nhom cac doi tuong *Line cung Length va cung Layer, sau do xuat ra file.
(defun C:HA( / entlst lst fn pw)
(princ "\nChon cac doi tuong de lay chieu dai can xuat ra file...")
(setq entlst (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget (list (cons 0 "*LINE")))))))
(foreach ent entlst
 (setq lst (cons (list (cdr (assoc 8 (entget ent))) (atof (rtos (vlax-curve-getDistAtParam ent (vlax-curve-getEndParam ent)) 2 4))) lst)))
(setq lst (LM:ListOccurrences lst))
(setq fn (getfiled "Chon file de xuat ket qua" "" "xls" 1))
(setq pw (open fn "w"))
(write-line (strcat "Chieu dai" "\t" "So luong" "\t" "Layer") pw)
(foreach n lst
  (write-line (strcat (vl-prin1-to-string (cadr (car n))) "\t" (itoa (cdr n)) "\t" (car (car n))) pw))
(close pw) )
(defun LM:ListOccurrences (lst) ;Thank Lee Mac
(if lst
  (cons
   (cons (car lst) (- (length lst) (length (vl-remove (car lst) (cdr lst)))))
   (LM:ListOccurrences (vl-remove (car lst) (cdr lst))))))
 

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ạn nhiều. Lisp của bạn hay lắm. Nhưng mình có vài điểm nữa mong bạn giúp đỡ:

1. Bạn có thể cho them tính năng tính chiều dài cho arc nữa không.

2.Trong bảng Excel bạn cho mình thêm 1 cột STT và sẽ tự động đánh số lần lượt theo thứ tự mình chọn đường từ trên xuống dưới

3.Trong mục http://www.cadviet.com/forum/topic/72563-yeu-cau-xin-lisp-copy-move-doi-tuong-roi-xoay/page-2 mình có nhờ mọi người giúp mình sửa 1 cái lisp. Bạn có thể xem giúp mình được không? Cảm ơn bạn nhiều.

1). Sửa trong lisp như sau:

Sửa:

"*LINE"

Thành:

"*LINE,ARC"

2). Câu này mâu thuẫn. Vì các đối tượng đã được nhóm lại theo length+layer nên nhiều khi chọn thứ 1 và thứ 5 nhưng lại cùng nhóm thứ 3.

3). Mình ngại sửa lisp người khác lắm.

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

Ok. Thế bạn có thể tạo cho mình 1 cái lisp như mình đề cập ở trên không cần nhóm cùng chiều dài hay cùng lớp được không? Chẳng hạn bạn làm thống kê về tấm composite nhiều lúc cạnh bằng nhau nhưng góc chưa chắc đã giống nhau nên tấm sẽ khác nhau nên không cần gom lại. Bạn giúp mình nhé. Cảm ơn bạn.

 

 

 

 

1). Sửa trong lisp như sau:

Sửa:

"*LINE"

Thành:

"*LINE,ARC"

2). Câu này mâu thuẫn. Vì các đối tượng đã được nhóm lại theo length+layer nên nhiều khi chọn thứ 1 và thứ 5 nhưng lại cùng nhóm thứ 3.

3). Mình ngại sửa lisp người khác lắm.

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

 

Sửa cho bạn đây. Lisp có thể dùng cho Line, Polyline, Lwpolyline, Spline.

 

;Doan Van Ha - CADViet.com - Ngay 16/5/2012. Edit 11/7/2013
;Muc dich: nhom cac doi tuong *Line cung Length va cung Layer, sau do xuat ra file.
(defun C:HA( / entlst lst fn pw)
(princ "\nChon cac doi tuong de lay chieu dai can xuat ra file...")
(setq entlst (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget (list (cons 0 "*LINE")))))))
(foreach ent entlst
 (setq lst (cons (list (cdr (assoc 8 (entget ent))) (atof (rtos (vlax-curve-getDistAtParam ent (vlax-curve-getEndParam ent)) 2 4))) lst)))
(setq lst (LM:ListOccurrences lst))
(setq fn (getfiled "Chon file de xuat ket qua" "" "xls" 1))
(setq pw (open fn "w"))
(write-line (strcat "Chieu dai" "\t" "So luong" "\t" "Layer") pw)
(foreach n lst
  (write-line (strcat (vl-prin1-to-string (cadr (car n))) "\t" (itoa (cdr n)) "\t" (car (car n))) pw))
(close pw) )
(defun LM:ListOccurrences (lst) ;Thank Lee Mac
(if lst
  (cons
   (cons (car lst) (- (length lst) (length (vl-remove (car lst) (cdr lst)))))
   (LM:ListOccurrences (vl-remove (car lst) (cdr lst))))))
 

Lệnh rất hay bác ạ nhưng bác có thể viết them 1 cái là chỉ cần thống kê chiều dài và tên layer ra luôn bản vẽ và đặt cạnh từng đoạn luôn không bác, thanks bác nhiều.Chờ tin bá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

Ok. Thế bạn có thể tạo cho mình 1 cái lisp như mình đề cập ở trên không cần nhóm cùng chiều dài hay cùng lớp được không? Chẳng hạn bạn làm thống kê về tấm composite nhiều lúc cạnh bằng nhau nhưng góc chưa chắc đã giống nhau nên tấm sẽ khác nhau nên không cần gom lại. Bạn giúp mình nhé. Cảm ơn bạn.

 

 

 

 

1). Sửa trong lisp như sau:

Sửa:

"*LINE"

Thành:

"*LINE,ARC"

2). Câu này mâu thuẫn. Vì các đối tượng đã được nhóm lại theo length+layer nên nhiều khi chọn thứ 1 và thứ 5 nhưng lại cùng nhóm thứ 3.

3). Mình ngại sửa lisp người khác lắm.

Đáp án của bạn đây.

Thực hiện bởi anh #quocmanh04tt

https://drive.google.com/file/d/0B2LetfHDljPGUThCUGJfV3FuWVU/view

  • 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

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


×