thenhan28 0 Báo cáo bài đăng Đã đăng Tháng 1 19, 2011 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 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
ketxu 2.977 Báo cáo bài đăng Đã đăng Tháng 1 19, 2011 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 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
thenhan28 0 Báo cáo bài đăng Đã đăng Tháng 1 20, 2011 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 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
18011985 62 Báo cáo bài đăng Đã đăng Tháng 1 20, 2011 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 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
thenhan28 0 Báo cáo bài đăng Đã đăng Tháng 1 20, 2011 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 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
ketxu 2.977 Báo cáo bài đăng Đã đăng Tháng 1 20, 2011 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ạntớ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 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
hoanghiepdao 1 Báo cáo bài đăng Đã đăng Tháng 3 1, 2011 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 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
ketxu 2.977 Báo cáo bài đăng Đã đăng Tháng 3 2, 2011 "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 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
tski259 10 Báo cáo bài đăng Đã đăng Tháng 3 2, 2011 "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. 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
hornmale89 0 Báo cáo bài đăng Đã đăng Tháng 3 4, 2011 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.com/cadtips/5054_Tinh_tong_chieu_dai_theo_tung_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. 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
xuanhaoxd 2 Báo cáo bài đăng Đã đăng Tháng 4 18, 2011 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. 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
tinya1225 36 Báo cáo bài đăng Đã đăng Tháng 4 22, 2011 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. 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
hoquangvinh 7 Báo cáo bài đăng Đã đăng Tháng 8 7, 2013 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 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
phamthanhbinh 3.145 Báo cáo bài đăng Đã đăng Tháng 8 7, 2013 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 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
hoquangvinh 7 Báo cáo bài đăng Đã đăng Tháng 8 8, 2013 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 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
phamthanhbinh 3.145 Báo cáo bài đăng Đã đăng Tháng 8 8, 2013 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.com/upfiles/3/5194_thuchoi.lsp (defun checkobj (e / ) (setq typ (cdr (assoc 10 (entget e)))) typ ) 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
hoquangvinh 7 Báo cáo bài đăng Đã đăng Tháng 8 8, 2013 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.com/upfiles/3/5194_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.com/upfiles/3/50811_tg2a.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
hoquangvinh 7 Báo cáo bài đăng Đã đăng Tháng 8 30, 2013 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 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