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

Các bác hướng dẫn cho e cách sử dụng lisp thống kê đoạn thẳng này với. Em không biết sử dụng nó. Em cần thống kê kích thước và số lượng đoan thẳng ra excel. E mới biết vẽ autocad. Em xin cảm ơ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
2 giờ trước, nhunhapro123 đã nói:

Nhờ các bác chỉnh sửa giúp em code này ạ. Lỗi không lặp lại được đối tượng chọn.

TTC.lsp

sửa lại cho bạn có vòng lặp và chạy được còn kết quả theo của bạn

(defun C:TTC ();(D H1 H2 WF TL1 K P1 P2 P3 P4 P5 P6 P7 P8 PT PT1 P9 P10 P11 P12 P13 TTL L)
(SETVAR "cmdecho" 0)
(command "undo" "begin")
(setq LADIN (GETVAR "dimzin"))
(setq LAOS (GETVAR "osmode"))
(setq STY (GETVAR "textstyle"))
(setq D (TBLSEARCH "style" STY))
(setq H1 (CDR (ASSOC 40 D)))
(setq H2 (CDR (ASSOC 42 D)))
(setq WF (CDR (ASSOC 41 D)))
(setq H H2)
;(setq L 0)
(setq TL 1)
(setq TL1 (GETREAL (STRCAT (RTOS TL 2 0) " >: 1/")))
(setq TL TL1)
(setq K 0)
(setq TTL 0)
(SETVAR "dimzin" 0)
(SETVAR "OSMODE" 0)
(setq PT (GETPOINT "\nChon diem xuat bang thong ke: "))
(setq P1 (LIST (+ (CAR PT) (* 6 H)) (CADR PT)))
(setq P2 (LIST (+ (CAR PT) (* 22 H)) (CADR PT)))
(setq P3 (LIST (CAR PT) (- (CADR PT) (* 3 H))))
(setq P4 (LIST (CAR P1) (CADR P3)))
(setq P5 (LIST (CAR P2) (CADR P3)))
(setq P6 (LIST (+ (CAR PT) (* 11 H)) (+ (CADR PT) (* 2 H))))
(setq P7 (LIST (+ (CAR PT) (* 3 H)) (- (CADR PT) (* 1.5 H))))
(setq P8 (LIST (+ (CAR PT) (* 14 H)) (- (CADR PT) (* 1.5 H))))
(command "pline" PT P2 P5 P3 "C")
(command "pline" P1 P4 "")
(command "TEXT" "M" P6 "" "" "BANG THONG KE CHIEU DAI" "")
(command "TEXT" "M" P7 "" "" "STT" "")
(command "TEXT" "M" P8 "" "" "CHIEU DAI" "")
(while (setq E (CAR (ENTSEL "\n Chon doi tuong tinh chieu dai : ")))
(setq K (1+ K))
(setq PT (LIST (CAR P3) (CADR P3)))
(setq P1 (LIST (+ (CAR PT) (* 6 H)) (CADR PT)))
(setq P2 (LIST (+ (CAR PT) (* 22 H)) (CADR PT)))
(setq P3 (LIST (CAR PT) (- (CADR PT) (* 3 H))))
(setq P4 (LIST (CAR P1) (CADR P3)))
(setq P5 (LIST (CAR P2) (CADR P3)))
(setq P7 (LIST (+ (CAR PT) (* 3 H)) (- (CADR PT) (* 1.5 H))))
(setq P8 (LIST (+ (CAR PT) (* 14 H)) (- (CADR PT) (* 1.5 H))))
(setq P9 (LIST (CAR PT) (- (CADR P3) (* 3 H))))
(setq P10 (LIST (CAR P1) (CADR P9)))
(setq P11 (LIST (CAR P2) (CADR P9)))
(setq P12 (LIST (CAR P7) (- (CADR P3) (* 1.5 H))))
(setq P13 (LIST (CAR P8) (CADR P12)))
(setq L (* (LEN E) TL))
(setq TTL (+ L TTL))
(command "pline" PT P2 P5 P3 "C")
(command "pline" P1 P4 "")
(command "TEXT" "M" P7 "" "" (RTOS K 2 0) "")
(command "TEXT" "M" P8 "" "" (RTOS L 2 2) "")
;(setq E (CAR (ENTSEL (STRCAT "\nTong chieu dai = " (RTOS TTL 2 3) ". Chon doi tuong tiep theo..."))))
)
(SETVAR "DIMZIN" LADIN)
(command "pline" P3 P9 P11 P5 "C")
(command "pline" P10 P4 "")
(command "TEXT" "M" P12 "" "" "TONG" "")
(command "TEXT" "M" P13 "" "" (RTOS TTL 2 2) "")
(SETVAR "OSMODE" LAOS)
(command "undo" "end")
  )
;(defun LEN (E))
(defun LEN(E) (vlax-curve-getDistAtParam E (vlax-curve-getEndParam E)))
;(defun WTXT_M (TXT  P / STY D H1 H2 WF H)
;(setq STY (GETVAR "textstyle"))
;(setq D (TBLSEARCH "style" STY))
;(setq H1 (CDR (ASSOC 40 D)))
;(setq H2 (CDR (ASSOC 42 D)))
;(setq WF (CDR (ASSOC 41 D)))
;(setq H H1)
;)

 

  • Like 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
38 phút trước, huunhantvxdts đã nói:

sửa lại cho bạn có vòng lặp và chạy được còn kết quả theo của bạn


(defun C:TTC ();(D H1 H2 WF TL1 K P1 P2 P3 P4 P5 P6 P7 P8 PT PT1 P9 P10 P11 P12 P13 TTL L)
(SETVAR "cmdecho" 0)
(command "undo" "begin")
(setq LADIN (GETVAR "dimzin"))
(setq LAOS (GETVAR "osmode"))
(setq STY (GETVAR "textstyle"))
(setq D (TBLSEARCH "style" STY))
(setq H1 (CDR (ASSOC 40 D)))
(setq H2 (CDR (ASSOC 42 D)))
(setq WF (CDR (ASSOC 41 D)))
(setq H H2)
;(setq L 0)
(setq TL 1)
(setq TL1 (GETREAL (STRCAT (RTOS TL 2 0) " >: 1/")))
(setq TL TL1)
(setq K 0)
(setq TTL 0)
(SETVAR "dimzin" 0)
(SETVAR "OSMODE" 0)
(setq PT (GETPOINT "\nChon diem xuat bang thong ke: "))
(setq P1 (LIST (+ (CAR PT) (* 6 H)) (CADR PT)))
(setq P2 (LIST (+ (CAR PT) (* 22 H)) (CADR PT)))
(setq P3 (LIST (CAR PT) (- (CADR PT) (* 3 H))))
(setq P4 (LIST (CAR P1) (CADR P3)))
(setq P5 (LIST (CAR P2) (CADR P3)))
(setq P6 (LIST (+ (CAR PT) (* 11 H)) (+ (CADR PT) (* 2 H))))
(setq P7 (LIST (+ (CAR PT) (* 3 H)) (- (CADR PT) (* 1.5 H))))
(setq P8 (LIST (+ (CAR PT) (* 14 H)) (- (CADR PT) (* 1.5 H))))
(command "pline" PT P2 P5 P3 "C")
(command "pline" P1 P4 "")
(command "TEXT" "M" P6 "" "" "BANG THONG KE CHIEU DAI" "")
(command "TEXT" "M" P7 "" "" "STT" "")
(command "TEXT" "M" P8 "" "" "CHIEU DAI" "")
(while (setq E (CAR (ENTSEL "\n Chon doi tuong tinh chieu dai : ")))
(setq K (1+ K))
(setq PT (LIST (CAR P3) (CADR P3)))
(setq P1 (LIST (+ (CAR PT) (* 6 H)) (CADR PT)))
(setq P2 (LIST (+ (CAR PT) (* 22 H)) (CADR PT)))
(setq P3 (LIST (CAR PT) (- (CADR PT) (* 3 H))))
(setq P4 (LIST (CAR P1) (CADR P3)))
(setq P5 (LIST (CAR P2) (CADR P3)))
(setq P7 (LIST (+ (CAR PT) (* 3 H)) (- (CADR PT) (* 1.5 H))))
(setq P8 (LIST (+ (CAR PT) (* 14 H)) (- (CADR PT) (* 1.5 H))))
(setq P9 (LIST (CAR PT) (- (CADR P3) (* 3 H))))
(setq P10 (LIST (CAR P1) (CADR P9)))
(setq P11 (LIST (CAR P2) (CADR P9)))
(setq P12 (LIST (CAR P7) (- (CADR P3) (* 1.5 H))))
(setq P13 (LIST (CAR P8) (CADR P12)))
(setq L (* (LEN E) TL))
(setq TTL (+ L TTL))
(command "pline" PT P2 P5 P3 "C")
(command "pline" P1 P4 "")
(command "TEXT" "M" P7 "" "" (RTOS K 2 0) "")
(command "TEXT" "M" P8 "" "" (RTOS L 2 2) "")
;(setq E (CAR (ENTSEL (STRCAT "\nTong chieu dai = " (RTOS TTL 2 3) ". Chon doi tuong tiep theo..."))))
)
(SETVAR "DIMZIN" LADIN)
(command "pline" P3 P9 P11 P5 "C")
(command "pline" P10 P4 "")
(command "TEXT" "M" P12 "" "" "TONG" "")
(command "TEXT" "M" P13 "" "" (RTOS TTL 2 2) "")
(SETVAR "OSMODE" LAOS)
(command "undo" "end")
  )
;(defun LEN (E))
(defun LEN(E) (vlax-curve-getDistAtParam E (vlax-curve-getEndParam E)))
;(defun WTXT_M (TXT  P / STY D H1 H2 WF H)
;(setq STY (GETVAR "textstyle"))
;(setq D (TBLSEARCH "style" STY))
;(setq H1 (CDR (ASSOC 40 D)))
;(setq H2 (CDR (ASSOC 42 D)))
;(setq WF (CDR (ASSOC 41 D)))
;(setq H H1)
;)

 

File lisp đã chạy theo đúng ý của Em. Cảm ơn Anh #huunhantvxdts!

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

Chào các bạn. Tôi không biết về Autolisp. Tôi có sưu tầm đc một cái Lisp về thống kê chiều dài và toạ độ. Các cao thủ làm ơn thêm giúp cho tôi tính năng như sau được không? Tôi cảm ơn trước:

1. Thêm toạ độ z vào trong bảng. Trong lisp mới có (x,y)

2. Chọn tất cả các đối tượng như Line, spline, polyline, arc,...Đánh dấu đối tượng đã được chọn. Nếu chọn vào đối tượng đã chọn thì báo đã chọn và ko thống kê lại đối tượng đó.

3. Cho số liệu vào Table trong CAD thay vì kẻ bảng thủ công.

BTK-Thong ke chieu dai cac duong thang va xuat toa do hai dau.lsp

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ể nghiên cứu Dataextraction xem nó giải quyết được khoảng bao nhiêu % yêu cầu trê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

Lisp thống kê rất hay.

Mình muốn nhờ bạn bổ sung viết bảng thống kê, như sau : chọn tên điểm của cạnh 2 đầu, và chọn cạnh ( khi chọn cạnh thì đổi màu ). Thống kê theo bảng vẽ sau.

Cám ơn

thong ke cdai.dwg

  • 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

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

×