Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
15 replies to this topic

#1 ttmt_jses

ttmt_jses

    biết vẽ circle

  • Members
  • PipPip
  • 31 Bài viết
Điểm đánh giá: 2 (bình thường)

Đã gửi 16 May 2012 - 03:28 PM

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

#2 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 16 May 2012 - 03:57 PM

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????
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#3 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 16 May 2012 - 08:00 PM

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

* 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.


#4 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3805 (đỉnh cao)

Đã gửi 16 May 2012 - 08:01 PM

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

#5 ttmt_jses

ttmt_jses

    biết vẽ circle

  • Members
  • PipPip
  • 31 Bài viết
Điểm đánh giá: 2 (bình thường)

Đã gửi 17 May 2012 - 07:51 AM

Cảm ơn bạn Doan Van Ha rất nhiều,cái lisp đó đã đúng yêu cầu của mình.khâm phục,khâm phục.....
  • 0

#6 ttmt_jses

ttmt_jses

    biết vẽ circle

  • Members
  • PipPip
  • 31 Bài viết
Điểm đánh giá: 2 (bình thường)

Đã gửi 17 May 2012 - 03:05 PM

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

#7 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 17 May 2012 - 03:31 PM

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ũ.
  • 1

* 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.


#8 ttmt_jses

ttmt_jses

    biết vẽ circle

  • Members
  • PipPip
  • 31 Bài viết
Điểm đánh giá: 2 (bình thường)

Đã gửi 17 May 2012 - 03:44 PM

Cuối cùng thì cũng được ,cảm ơn nhiều nhé.có like this rồi đó.
  • 0

#9 minhcuty

minhcuty

    biết vẽ line

  • Members
  • PipPip
  • 22 Bài viết
Điểm đánh giá: 4 (bình thường)

Đã gửi 17 May 2012 - 04:03 PM

lisp của Doan Van Ha hay quá!thz bn nhiều :lol: :lol:
  • 0

#10 HUNGENG

HUNGENG

    biết pan

  • Members
  • Pip
  • 8 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 11 July 2013 - 01:11 PM

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ũ.


  • 0

#11 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 11 July 2013 - 05:01 PM

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))))))
 

  • 1

* 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.


#12 HUNGENG

HUNGENG

    biết pan

  • Members
  • Pip
  • 8 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 12 July 2013 - 01:55 PM

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.c...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))))))
 

  • 0

#13 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 12 July 2013 - 02:23 PM

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.c...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.


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


#14 HUNGENG

HUNGENG

    biết pan

  • Members
  • Pip
  • 8 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 12 July 2013 - 02:59 PM

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.


  • 0

#15 trieubb

trieubb

    biết vẽ ellipse

  • Members
  • PipPip
  • 59 Bài viết
Điểm đánh giá: 6 (bình thường)

Đã gửi 17 September 2013 - 10:26 AM

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


  • 0

#16 monavamonava

monavamonava

    biết vẽ ellipse

  • Members
  • PipPip
  • 50 Bài viết
Điểm đánh giá: -1 (bình thường)

Đã gửi 14 June 2015 - 08:09 AM

Mình có một vấn đề khác là giờ đổi thống kê gốc giữa các đoạn thẳng thành thống kê góc giữa các đoạn thẳng. Các bác có thể giúp không?


  • 0