Đến nội dung


Hình ảnh

Đo kích thước nhiều line


  • Please log in to reply
17 replies to this topic

#1 thenhan28

thenhan28

    biết zoom

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

Đã gửi 19 January 2011 - 03:49 PM

Xin chào các pro, do đặc thù công việc của em là bóc tách khối lượng van, đường ống ... từ bản vẽ. Khi tính khối lượng ống thì hơi phê vì nó có nhiều nhánh, ngồi đo từng đoạn rồi cộng lại mất rất nhiều thời gian
Như những file vẽ hệ thống sprinkler có hàng ngàn đoạn 2-3m (không giống nhau).
Xin hỏi có cách nào clock các line lại rồi dùng 1 lệnh để đo kích thước tổng của nó được không?
Giống ta vẽ chử M chẳng hạn thì có 4 line, tổng chiều dài 4 line đó bằng 1 hoặc 2 lệnh?
  • 1

#2 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 19 January 2011 - 07:58 PM

1 lệnh cũng được, nhiều lệnh cũng được, trên diễn đàn có lisp để bạn là việc này rồi mà.Bạn chịu khó search nhé.Trường hợp của bạn có thể dùng lệnh nối các line liền nhau lại thành 1 Pline, khi đó khối lượng công việc giảm đi nhiều
Còn đây là 1 lisp tính tổng chiều dài các đoạn được chọn.

;; free lisp from cadviet.com @Bommak
(defun add_mline ()
(foreach e_record_sub e_record
(cond ((= 10 (car e_record_sub))
(setq pt1 (cdr e_record_sub)
mline_len 0.0
)
)
((= 11 (car e_record_sub))
(setq pt2 (cdr e_record_sub)
mline_len (+ mline_len (distance pt2 pt1))
pt1 pt2
)
)
)
)
(setq tot_len (+ tot_len mline_len))
(ssdel e_name ss)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



(defun WriteRes(kq / OK e data)
(setq OK nil)
(while (not OK)
(setq e (car (entsel "\tChon text ghi ket qua:")))
(if (CheckObj e "TEXT") (setq OK T) (princ "\nDoi tuong chon khong phai text"))
)
(entmod (subst (cons 1 (rtos kq 2 2)) (assoc 1 (setq data (entget e))) data))
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun C:tg2a (/ tot_len ss e_name e_record e_type)
(setq tot_len 0.0)
(setq ss (ssget))
(if (null ss)
(exit)
)
(while (> (sslength ss) 0)
(setq e_name (ssname ss 0))
(setq e_record (entget e_name))
(setq e_type (cdr (assoc '0 e_record)))
(cond ((wcmatch e_type "LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE")
(command "lengthen" e_name "")
(setq tot_len (+ tot_len (getvar "PERIMETER")))
(ssdel e_name ss)
)
((wcmatch e_type "MLINE") (add_mline))
(e_type (ssdel e_name ss))
)
)
;De dong nay neu muon cong them gia tri vao kq
;(setq tot_len (+ tot_len (getreal "\nGia tri cong them : ")))
(writeres tot_len)
)

  • 2

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#3 thenhan28

thenhan28

    biết zoom

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

Đã gửi 20 January 2011 - 02:00 PM

mình hơi gà vụ lisp này lắm, load nó vào cad rồi dùng lệnh gì để kích hoạt vậy bạn
tới đoạn "chon tẽt ghi ket quả" thì po tay không biết làm tiếp thế nào
  • 0

#4 18011985

18011985

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 255 Bài viết
Điểm đánh giá: 61 (tàm tạm)

Đã gửi 20 January 2011 - 02:51 PM

Bùm bùm em xin đưa ra 1 lsp có trên diễn đàn để tính chiều dài các thể loại
(defun Length1(e) (vlax-curve-getDistAtParam e (vlax-curve-getEndParam e)))
;;;--------------------------------------------------------------------
(defun C:TL( / ss L e)
(setq
ss (ssget (list (cons 0 "LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE")))
L 0.0
)
(vl-load-com)
(while (setq e (ssname ss 0))
(setq L (+ L (length1 e)))
(ssdel e ss)
)
(alert (strcat "Total length = " (rtos L)))
)

Tên lệnh TL
  • 4
Trăng 16 trăng tròn
Em 16 bụng ... như trăng

Hướng dẫn sử dụng diễn đàn:
Để cảm ơn hay bài viết có ích: Ấn dấu + cuối bài.
Không vừa lòng hay bài spam: Ấn dấu - cuối bài.

#5 thenhan28

thenhan28

    biết zoom

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

Đã gửi 20 January 2011 - 05:03 PM

Bùm bùm em xin đưa ra 1 lsp có trên diễn đàn để tính chiều dài các thể loại

(defun Length1(e) (vlax-curve-getDistAtParam e (vlax-curve-getEndParam e)))
;;;--------------------------------------------------------------------
(defun C:TL( / ss L e)
(setq
ss (ssget (list (cons 0 "LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE")))
L 0.0
)
(vl-load-com)
(while (setq e (ssname ss 0))
(setq L (+ L (length1 e)))
(ssdel e ss)
)
(alert (strcat "Total length = " (rtos L)))
)

Tên lệnh TL

Cái này nhanh gọn. Thanks
  • -1

#6 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 20 January 2011 - 07:03 PM

mình hơi gà vụ lisp này lắm, load nó vào cad rồi dùng lệnh gì để kích hoạt vậy bạn
tới đoạn "chon tẽt ghi ket quả" thì po tay không biết làm tiếp thế nào

Lisp đầu tiền mình post lệnh là tg2a, bạn có thể điều chỉnh nó thành lệnh theo ý bạn (lệnh của lisp hiển thị trên tên file lúc bạn download về đấy).Lisp tg2a có thể tính chiều dài tất cả đối tượng có thuộc tính Length và Mline (do bác Hoành viết hàm tính Mline, bạn Bommak phát triển)
Trong quá trình thực hiện,đến phần chọn text ghi kết quả thì bạn chọn vào 1 text bất kỳ để nó ghi tổng kết quả đo được ra đó.Mình cũng thấy ngạc nhiên vì không hiểu với câu "chọn text ghi kết quả" thì bạn thấy khó hiểu ở chỗ nào ^^>. Mình cũng hok hiểu bạn chưa rõ lệnh để chạy mà mần răng có thể ra được dòng thông báo đó :)
Lisp dưới bác 18011985 post là do anh ssg viết, cũng có tác dụng tương tự nhưng báo kquả trên hộp thoại alert, và không tính được với Mline

P/S : Để sử dụng lisp và thay đổi lệnh, bạn nên đọc phần Hướng dẫn sử dụng lisp (trong mục Autolisp), đừng dùng cái gì mà bạn không hiểu chút nào về nó :)
  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#7 hoanghiepdao

hoanghiepdao

    Chưa sử dụng CAD

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

Đã gửi 01 March 2011 - 11:30 PM

em cũng thao tác giống bác thenhan va cũng tới câu hỏi " chon text" thi cũng chẳng thể nào làm được cả, mà em cũng làm theo bác ketxu là chọn một text để nó ghi kích thước vào nhưng cũng không được, bác ketxu chỉ bảo chi tiết giùm, thank bác nhiều!!!!!!!!!!
  • -1

#8 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 02 March 2011 - 07:31 AM

"chẳng thể nào làm được cả" tức là sao ?? Bạn nhớ là TEXT chứ khôn gphải MTEXT nhé
  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#9 tski259

tski259

    biết vẽ pline

  • Members
  • PipPip
  • 66 Bài viết
Điểm đánh giá: 10 (tàm tạm)

Đã gửi 02 March 2011 - 07:40 AM

"chẳng thể nào làm được cả" tức là sao ?? Bạn nhớ là TEXT chứ khôn gphải MTEXT nhé

Hic.Cái này mình đã chế lisp trên diễn đàn rồi mà.Mấy lisp ở trên còn có mấy hạn chế.Lisp mình đưa đây có thể đo được ở bản vẽ tỉ lệ bất kì và ghi kết quả ra text luôn này.
;-----------------------tinh chieu dai duong thang theo ti le hien hanh ( tt )----------------------------
(defun Length1(e) (vlax-curve-getDistAtParam e (vlax-curve-getEndParam e)))
;;;--------------------------------------------------------------------
(defun C:TT( / ss L e)
(setq
ss (ssget (list (cons 0 "LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE")))
L 0.0
k (getvar "dimlfac")
)
(vl-load-com)
(while (setq e (ssname ss 0))
(setq L (+ L (length1 e)))
(ssdel e ss)
)
(setq L1 (* k L))
(progn
(setq p (getpoint "\n Chon diem nhap ket qua" ))
(command "text" p 2.5 "0" (rtos L1 2 2))
)
)
(ssdel e ss)
)
(princ)
)

Nhớ đưa tỉ lệ hiện hành về cùng tỉ lệ bản vẽ nhé.Có thể tính cho 1 đường hay tổng nhiều đường.
  • 0

#10 hornmale89

hornmale89

    biết pan

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

Đã gửi 04 March 2011 - 01:53 PM

Xin chào các pro, do đặc thù công việc của em là bóc tách khối lượng van, đường ống ... từ bản vẽ. Khi tính khối lượng ống thì hơi phê vì nó có nhiều nhánh, ngồi đo từng đoạn rồi cộng lại mất rất nhiều thời gian
Như những file vẽ hệ thống sprinkler có hàng ngàn đoạn 2-3m (không giống nhau).
Xin hỏi có cách nào clock các line lại rồi dùng 1 lệnh để đo kích thước tổng của nó được không?
Giống ta vẽ chử M chẳng hạn thì có 4 line, tổng chiều dài 4 line đó bằng 1 hoặc 2 lệnh?

Bạn làm cứu hỏa à, bạn sử dụng lisp này: http://www.cadviet.c...ung_layer33/91/
Bạn đưa tất cả các line cần đo kích thước về cùng layer (trên thực tế, nếu người vẽ cẩn thận, các đoạn ống khác nhau sẽ đưa về từng layer khác nhau). Rồi sử dụng lệnh này, có thể xuất sang bảng excel.
  • 0

#11 xuanhaoxd

xuanhaoxd

    biết zoom

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

Đã gửi 18 April 2011 - 04:55 PM

Hic.Cái này mình đã chế lisp trên diễn đàn rồi mà.Mấy lisp ở trên còn có mấy hạn chế.Lisp mình đưa đây có thể đo được ở bản vẽ tỉ lệ bất kì và ghi kết quả ra text luôn này.
;-----------------------tinh chieu dai duong thang theo ti le hien hanh ( tt )----------------------------
(defun Length1(e) (vlax-curve-getDistAtParam e (vlax-curve-getEndParam e)))
;;;--------------------------------------------------------------------
(defun C:TT( / ss L e)
(setq
ss (ssget (list (cons 0 "LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE")))
L 0.0
k (getvar "dimlfac")
)
(vl-load-com)
(while (setq e (ssname ss 0))
(setq L (+ L (length1 e)))
(ssdel e ss)
)
(setq L1 (* k L))
(progn
(setq p (getpoint "\n Chon diem nhap ket qua" ))
(command "text" p 2.5 "0" (rtos L1 2 2))
)
)
(ssdel e ss)
)
(princ)
)

Nhớ đưa tỉ lệ hiện hành về cùng tỉ lệ bản vẽ nhé.Có thể tính cho 1 đường hay tổng nhiều đường.

cho mình hỏi nếu đường ống có bán kính và độ dày khác nhau và có nhiều đoạn giống nhau nằm ở vị trí khác nhau thì thêm code gì ah? xin các anh chỉ giúp.
  • 0

#12 tinya1225

tinya1225

    biết lệnh copy

  • Members
  • PipPipPip
  • 114 Bài viết
Điểm đánh giá: 34 (tàm tạm)

Đã gửi 22 April 2011 - 01:56 PM

Bùm bùm em xin đưa ra 1 lsp có trên diễn đàn để tính chiều dài các thể loại

(defun Length1(e) (vlax-curve-getDistAtParam e (vlax-curve-getEndParam e)))
;;;--------------------------------------------------------------------
(defun C:TL( / ss L e)
(setq
ss (ssget (list (cons 0 "LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE")))
L 0.0
)
(vl-load-com)
(while (setq e (ssname ss 0))
(setq L (+ L (length1 e)))
(ssdel e ss)
)
(alert (strcat "Total length = " (rtos L)))
)

Tên lệnh TL

ngon quá. Thanks bạn rùi nhé ^^. cố gắng phát huy nha.
  • 0
Thấy bài có ích thì ấn thật nhiều Thank + các bác nhé^^

#13 hoquangvinh

hoquangvinh

    biết lệnh mirror

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

Đã gửi 07 August 2013 - 02:42 PM

1 lệnh cũng được, nhiều lệnh cũng được, trên diễn đàn có lisp để bạn là việc này rồi mà.Bạn chịu khó search nhé.Trường hợp của bạn có thể dùng lệnh nối các line liền nhau lại thành 1 Pline, khi đó khối lượng công việc giảm đi nhiều
Còn đây là 1 lisp tính tổng chiều dài các đoạn được chọn.

;; free lisp from cadviet.com @Bommak(defun add_mline ()  (foreach e_record_sub	e_record    (cond ((= 10 (car e_record_sub))	   (setq pt1	   (cdr e_record_sub)		 mline_len 0.0	   )	  )	  ((= 11 (car e_record_sub))	   (setq pt2	   (cdr e_record_sub)		 mline_len (+ mline_len (distance pt2 pt1))		 pt1	   pt2	   )	  )    )  )  (setq tot_len (+ tot_len mline_len))  (ssdel e_name ss));;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;(defun WriteRes(kq / OK e data)(setq OK nil)(while (not OK)(setq e (car (entsel "\tChon text ghi ket qua:")))(if (CheckObj e "TEXT") (setq OK T) (princ "\nDoi tuong chon khong phai text")))(entmod (subst (cons 1 (rtos kq 2 2)) (assoc 1 (setq data (entget e))) data))(princ));;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;(defun C:tg2a (/ tot_len ss e_name e_record e_type)  (setq tot_len 0.0)  (setq ss (ssget))  (if (null ss)    (exit)  )  (while (> (sslength ss) 0)    (setq e_name (ssname ss 0))    (setq e_record (entget e_name))    (setq e_type (cdr (assoc '0 e_record)))    (cond ((wcmatch e_type "LINE,ARC,CIRCLE,POLYLINE,LWPOLYLINE,ELLIPSE,SPLINE")	   (command "lengthen" e_name "")	   (setq tot_len (+ tot_len (getvar "PERIMETER")))	   (ssdel e_name ss)	  )	  ((wcmatch e_type "MLINE") (add_mline))	  (e_type (ssdel e_name ss))    )  );De dong nay neu muon cong them gia tri vao kq	;(setq tot_len (+ tot_len (getreal "\nGia tri cong them : ")))  (writeres tot_len))

Mình có dùng cái lipsp này của bạn nhưng cũng đến bước chọn text ghi kết quả là nó cũng bị lỗi. Bạn kia nói không rõ lắm thôi, sau đây là lỗi trên dòng command "ketxu" à:

Command: TG2A
Select objects: 1 found
Select objects: 1 found, 2 total
Select objects:
Current length: 4.91263
Current length: 0.47663   Chon text ghi ket qua:; error: no function
definition: CHECKOBJ
Command:

Nó có tính được chiều dài các đối tượng rồi nhưng đến ghi ra text thì bị lỗi

Bạn xem lại xem có gì sai sót ko vì khi mình dùng lisp TL để tính chiều dài thì ngon lành nhưng nó chỉ tính được có 1 đối tượng mà thôi

Mình search nên giờ mới thấy topic này


  • 0

#14 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 07 August 2013 - 02:53 PM

Mình có dùng cái lipsp này của bạn nhưng cũng đến bước chọn text ghi kết quả là nó cũng bị lỗi. Bạn kia nói không rõ lắm thôi, sau đây là lỗi trên dòng command "ketxu" à:

Command: TG2A
Select objects: 1 found
Select objects: 1 found, 2 total
Select objects:
Current length: 4.91263
Current length: 0.47663   Chon text ghi ket qua:; error: no function
definition: CHECKOBJ
Command:

Nó có tính được chiều dài các đối tượng rồi nhưng đến ghi ra text thì bị lỗi

Bạn xem lại xem có gì sai sót ko vì khi mình dùng lisp TL để tính chiều dài thì ngon lành nhưng nó chỉ tính được có 1 đối tượng mà thôi

Mình search nên giờ mới thấy topic này

Hề hề hề,

Có thể do bạn chép thiếu code nên không có cái hàm con (chekobj ....). Vậy nên lisp nó đứng lại. Bạn có thể xin lại bác ket cái hàm này hoặc tự viết bổ sung là Ok mà.


  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#15 hoquangvinh

hoquangvinh

    biết lệnh mirror

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

Đã gửi 08 August 2013 - 08:49 AM

Hề hề hề,

Có thể do bạn chép thiếu code nên không có cái hàm con (chekobj ....). Vậy nên lisp nó đứng lại. Bạn có thể xin lại bác ket cái hàm này hoặc tự viết bổ sung là Ok mà.

chào anh "hề hề hề"

chắc là bị lỗi gì đó, thật sự là mình chỉ biết down lisp về dùng thôi còn cái hàm con thì mình chịu

thấy lisp nói riêng và CV nói chung rất hay nhưng khả năng mình chịu hổng có làm đc chỉ chịu khó tìm và dùng các tiện ích, các cái hay trên này thôi

giờ phải chờ bác ketxu dọc cái này và xem hộ thôi


  • 0

#16 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 08 August 2013 - 02:55 PM

chào anh "hề hề hề"

chắc là bị lỗi gì đó, thật sự là mình chỉ biết down lisp về dùng thôi còn cái hàm con thì mình chịu

thấy lisp nói riêng và CV nói chung rất hay nhưng khả năng mình chịu hổng có làm đc chỉ chịu khó tìm và dùng các tiện ích, các cái hay trên này thôi

giờ phải chờ bác ketxu dọc cái này và xem hộ thôi

Hề hề hề,

Trong lúc chờ bác ket giải quyết việc riêng, bạn thử chép đoạn code dưới đây về rồi nhét vào dưới cùng của lisp đó. Load lại và chạy thử coi sao nhé.

http://www.cadviet.c...194_thuchoi.lsp

(defun checkobj (e / )
     (setq typ (cdr (assoc 10 (entget e))))
     typ
)

  • 1
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#17 hoquangvinh

hoquangvinh

    biết lệnh mirror

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

Đã gửi 08 August 2013 - 04:31 PM

Hề hề hề,

Trong lúc chờ bác ket giải quyết việc riêng, bạn thử chép đoạn code dưới đây về rồi nhét vào dưới cùng của lisp đó. Load lại và chạy thử coi sao nhé.

http://www.cadviet.c...194_thuchoi.lsp

(defun checkobj (e / )
     (setq typ (cdr (assoc 10 (entget e))))
     typ
)

hình như nó vẫn bị lỗi bác à, vẫn ở bước ghi kết quả ra text:

Command: tg2a
Select objects: 1 found
Select objects: 1 found, 2 total
Select objects:  lengthen
Select an object or [DElta/Percent/Total/DYnamic]:
Current length: 1.94325
Select an object or [DElta/Percent/Total/DYnamic]:
Command: lengthen
Select an object or [DElta/Percent/Total/DYnamic]:
Current length: 0.28855
Select an object or [DElta/Percent/Total/DYnamic]:
Command:    Chon text ghi ket qua:; error: too many arguments

mình gửi kèm cả lisp luôn đây

http://www.cadviet.c.../50811_tg2a.lsp


  • 0

#18 hoquangvinh

hoquangvinh

    biết lệnh mirror

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

Đã gửi 30 August 2013 - 08:00 AM

tình hình là chờ bác ketxu mãi mà vẫn ko thấy

hic chắc là phải nhờ bác mới giải đc bài này thôi


  • 0