Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
bach1212

[Yêu cầu] Lisp thống kê cao độ ga và cống

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

Trước tiên là 2file đính kèm thể hiện yêu cầu:

file cad: http://www.cadviet.com/upfiles/3/40304_binh_do_tnm.rar

file excel: http://www.cadviet.com/upfiles/3/40304_thong_ke_cao_do_ga_tnm.rar

Mình làm thống kê thoát nước hạ tầng. Ngồi nhập cao độ từng ga một vào excel thấy mất công quá.

Nên mình muốn nhờ các bạn giỏi về viết lisp viết giúp mình 1 lisp lập được bảng thống kê cao độ như sau:

Trên bản vẽ có các text đã ghi chú rõ là: Tên ga - cao độ đỉnh ga - và cao độ đáy cống

Lisp sẽ đưa ra các lựa chọn: (Chỉ cần pick vào các text trên bản vẽ theo đúng thứ tự lisp sẽ tự lập được bảng với các cột và hàng như trong bản excel đính kèm)

1. Pick lần 1: Chọn tên ga: pick vào text "tên ga"

2. Pick lần 2: Chọn H1: pick vào text " cao độ đỉnh ga"

3. Pick lần 3: Chọn H2: pick vào text "cao độ đáy cống"

Sau đó hết 1 lượt 3 lần pick trên, lisp sẽ liên tục lập bảng tự động quay vòng lần 2, lần 3........cho đến khi người vẽ kết thúc lệnh.

Sau đó kết quả sẽ được xuất sang file đuôi .txt hoặc tốt nhất là file excel như đính kèm

Mong được các mọi người giúp đỡ vì mình không biết viết lisp. Thanks!

  • 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

Mình không có nhiều thời gian lắm nên lisp chưa được hoàn chỉnh tuyệt đối.

Nhưng bạn chứ dùng thử, có ý kiến gì báo lại mình sẽ khắc phục.

Khi nào có nhiều thời gian hơn, mình sẽ sửa nó 1 cách hoàn thiện

(lisp này còn nông dân lắm)

Sau khi lisp lập ra 1 bảng trong cad, bạn có thể dùng c2e.lsp trên cadviet có để chuyển sang excel bạn nhé

Mọi code lisp được lấy từ Cadviet - tôi chỉ là người xào nấu một chút thôi

 

;-----------------Lap bang thong ke ga ----------------------------
; Free lisp code from CADViet  - edit by Mathan
(defun C:LBHG (/ TX TY kcach)
(setq diem (getpoint "\Chon vi tri lap bang... "))
(setq kcach (getreal "\Khoang cach cac text trong bang... "))
(prompt "\nBan can pick tung text theo thu tu Ten ho ga; cao do day va cao do dinh ga: ")
(setq dem 1 sdt 1)
(setq ss null)
(while (/= ss nil)
(if (= dem 1)
	(progn
	(setq ss (car (entsel "\nDS> Ten ho ga: ")))
(setq noidung (cdr (assoc 1 (entget ss))))
(setq diem1 (list (car diem) (- (cadr diem) (* sdt kcach))))
(command "TEXT" diem1 "" "" noidung)
))   
(if (= dem 2)
	(progn
(setq ss (car (entsel "\nDS> Cao do day: ")))
(setq noidung (cdr (assoc 1 (entget ss))))  
(setq diem2 (list (+ (* 2 kcach) (car diem)) (- (cadr diem) (* (- sdt 1) kcach))))
(command "TEXT" diem2 "" "" noidung)
))  
(if (= dem 3)
	(progn
(setq ss (car (entsel "\nDS> Cao do dinh: ")))
(setq noidung (cdr (assoc 1 (entget ss)))) 
(setq diem3 (list (+ (* 4 kcach) (car diem)) (- (cadr diem) (* (- sdt 2) kcach))))
  (command "TEXT" diem3 "" "" noidung)
  (setq dem 0)
))  
(setq dem (+ 1 dem))
(setq sdt (+ 1 sdt))
(princ)
)
)

Mong giúp được bạn một chút

  • Like 1
  • 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

Mình không có nhiều thời gian lắm nên lisp chưa được hoàn chỉnh tuyệt đối.

Nhưng bạn chứ dùng thử, có ý kiến gì báo lại mình sẽ khắc phục.

Khi nào có nhiều thời gian hơn, mình sẽ sửa nó 1 cách hoàn thiện

(lisp này còn nông dân lắm)

Sau khi lisp lập ra 1 bảng trong cad, bạn có thể dùng c2e.lsp trên cadviet có để chuyển sang excel bạn nhé

Mọi code lisp được lấy từ Cadviet - tôi chỉ là người xào nấu một chút thôi


;-----------------Lap bang thong ke ga ----------------------------
; Free lisp code from CADViet  - edit by Mathan
(defun C:LBHG (/ TX TY kcach)
(setq diem (getpoint "\Chon vi tri lap bang... "))
(setq kcach (getreal "\Khoang cach cac text trong bang... "))
(prompt "\nBan can pick tung text theo thu tu Ten ho ga; cao do day va cao do dinh ga: ")
(setq dem 1 sdt 1)
(setq ss null)
(while (/= ss nil)
(if (= dem 1)
(progn
(setq ss (car (entsel "\nDS> Ten ho ga: ")))
(setq noidung (cdr (assoc 1 (entget ss))))
(setq diem1 (list (car diem) (- (cadr diem) (* sdt kcach))))
(command "TEXT" diem1 "" "" noidung)
))  
(if (= dem 2)
(progn
(setq ss (car (entsel "\nDS> Cao do day: ")))
(setq noidung (cdr (assoc 1 (entget ss))))  
(setq diem2 (list (+ (* 2 kcach) (car diem)) (- (cadr diem) (* (- sdt 1) kcach))))
(command "TEXT" diem2 "" "" noidung)
))  
(if (= dem 3)
(progn
(setq ss (car (entsel "\nDS> Cao do dinh: ")))
(setq noidung (cdr (assoc 1 (entget ss))))
(setq diem3 (list (+ (* 4 kcach) (car diem)) (- (cadr diem) (* (- sdt 2) kcach))))
  (command "TEXT" diem3 "" "" noidung)
  (setq dem 0)
))  
(setq dem (+ 1 dem))
(setq sdt (+ 1 sdt))
(princ)
)
)

Mong giúp được bạn một chút

Cám ơn bạn nhé. Chàng nông dân của bạn về cơ bản đã giúp mình có thể thực hiện công việc nhanh chóng hơn nhiều roài.

Mình đã sửa đi 1 chút dòng nhắc lệnh thứ 2 là lựa chọn cao độ đỉnh ga trước, đáy ga sau để cho đúng yêu cầu.

Nếu bạn có thời gian có thể chau chuốt lisp này như thế này được không:

- Bảng lập ra trên cad sẽ đẹp được như bảng này: http://www.cadviet.com/upfiles/3/40304_binh_do_tnm_1.rar

- Nên bỏ qua bước: chọn khoảng cách các text trong bảng, thay vào đó lisp sẽ tự động căn chỉnh bảng với khoảng cách giữa các hàng và cột như trong bảng trên. Hiện tại khoảng cách giữa các hàng là rất xa nhau.

- Thêm 1 lựa chọn: chọn chiều cao chữ cho text xuất ra trong bảng.

Nếu có thời gian hơn nữa bạn xử lý yêu cầu này giúp mình nữa nhé: http://www.cadviet.com/forum/index.php?showtopic=60191&pid=183421&st=0entry183421

Thanks U 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

Cám ơn bạn nhé. Chàng nông dân của bạn về cơ bản đã giúp mình có thể thực hiện công việc nhanh chóng hơn nhiều roài.

Mình đã sửa đi 1 chút dòng nhắc lệnh thứ 2 là lựa chọn cao độ đỉnh ga trước, đáy ga sau để cho đúng yêu cầu.

Nếu bạn có thời gian có thể chau chuốt lisp này như thế này được không:

- Bảng lập ra trên cad sẽ đẹp được như bảng này: http://www.cadviet.c...nh_do_tnm_1.rar

- Nên bỏ qua bước: chọn khoảng cách các text trong bảng, thay vào đó lisp sẽ tự động căn chỉnh bảng với khoảng cách giữa các hàng và cột như trong bảng trên. Hiện tại khoảng cách giữa các hàng là rất xa nhau.

- Thêm 1 lựa chọn: chọn chiều cao chữ cho text xuất ra trong bảng.

Nếu có thời gian hơn nữa bạn xử lý yêu cầu này giúp mình nữa nhé: http://www.cadviet.c...=0

Thanks U nhé

Hề hề hề,

Đẹp hay không thì chửa biết. Nhưng nếu cứ theo yêu cầu như bạn nói thì hãy chịu khó tự sửa như sau:

1/- Thay "\Khoang cach cac text trong bang... " bằng "\n Nhap chieu cao text trong bang: "

2/- Thay (list (car diem) (- (cadr diem) (* sdt kcach))) bằng (list (car diem) (- (cadr diem) (* 3 sdt kcach)))

3/- Thay (list (+ (* 2 kcach) (car diem)) (- (cadr diem) (* (- sdt 1) kcach))) bằng (list (+ (* 2 6 kcach) (car diem)) (- (cadr diem) (* 3 (- sdt 1) kcach)))

4/- Thay (list (+ (* 4 kcach) (car diem)) (- (cadr diem) (* (- sdt 2) kcach))) bẳng (list (+ (* 4 6.5 kcach) (car diem)) (- (cadr diem) (* 3 (- sdt 2) kcach)))

 

 

 

Nếu thay vậy mà bạn vẫn chưa ưng thì có thể dựa vào đó mà gia giảm các hệ số cho nó sướng con mắt phải, đỏ con mắt trái nghen.

bạn nên so sánh giữa cái chưa thay và cái thay để biết cách lựa chọn hệ số cho phù hợp.

Hãy tự cứu mình trước khi trời cứu,

Hề hề hề,

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ác bach1212 có cái lisp lập bảng tọa độ ngon rùi, nên mình mượn lại biến tấu chút thì cái vụ nhập hố ga của bạn cũng tạm ổn rùi đấy

Bạn chạy lại bằng code lisp này xem nhé.

Nếu bảng chưa đẹp, đúng như bác phamthanhbinh nói, nên thêm mắm muối vào nữa cho vừa khẩu vị từng người.

Lưu ý rằng: free code lisp from CADViet - em chỉ xào nấu chút thui

 

: Ha Van Khanh 3/2003
;
; * Chuong trinh duoc lap bang ngon ngu AUTOLISP.
; Free lisp code from CADViet - Edit by mathan
; ------------------------------------------------------------------------------
(vmon)
(defun C:LBHG (/ 1x 1y a1 2x 2y a2 3x 3y a3 b p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14  p15 p16x p16y p16 p17x p17y p17)
(setvar "cmdecho" 0) 
(initget 7)
(setq osm (getvar "osmode" ))
(setvar "osmode" 0)
(command "-Style" "hoatbif" "hoatbif " "2.5" "" "" "" "" "")
(command "-Layer" "n" "Text" "c" "4" "Text" "")
 (setq p1 (getpoint "\nChon diem dat bang thong ke :"))
 (setq S (getint "\nSo ho ga can thong ke:"))
(setq p2 (polar p1 (/ (* Pi 3) 2) (+ 16 (* 8 S))))
(setq p3 (polar p2 0 91))
(setq p4 (polar p1 0 91))
(setq p5 (polar p1 0 21))
(setq p6 (polar p2 0 21))
(setq p7 (polar p5 0 35))
(setq p8 (polar p6 0 35))
(setq p9 (polar p5 (/ (* Pi 3) 2) 8))
(setq p10 (polar p4 (/ (* Pi 3) 2) 8))
(setq p12 (polar p9 0 35))
(setq p11 (polar p9 0 -10.5))
(setq p13 (polar p1 (/ (* Pi 3) 2) 16))
(setq p14 (polar p4 (/ (* Pi 3) 2) 16))
(setq p15 (polar p7 (/ (* pi 3 ) 2) 4))
(setq p16x (/ (+ (car p5) (car p7)) 2))
(setq p16y (/ (+ (cadr p9) (cadr p13)) 2))
(setq p17x (/ (+ (car p4) (car p7)) 2))
(setq p17y (/ (+ (cadr p9) (cadr p13)) 2))
(setq p16 (list p16x p16y))
(setq p17 (list p17x p17y))
(command "Plinewid" "0.5")
(command "Pline" p1 p2 p3 p4 p1 "")
(command "Line" p5 p6 "")
(command "Line" p12 p8 "")
(command "Line" p9 p10 "")
(command "Line" p13 p14 "")
(command "Array" "l" "" "Rec" S "1" "-8")
(command "text" "j" "mc"  p11 "0"  "Ten Ga"  )
(command "text" "j" "mc"  p15 "0"  "Cao do" )
(command "text" "j" "mc"  p16 "0"  "D" )
(command "text" "j" "mc"  p17 "0"  "Y" )
(setvar "osmode" 1)
;-------------------------------------------------
; Phan chinh
(prompt "\nBan can pick tung text theo thu tu Ten ho ga; cao do dinh va cao do day ga: ")
(setq b 0)
(while (< b s )
(setq b (+ b 1))
(setq ss (car (entsel "\nDS> Ten ho ga: ")))
(setq tenga (cdr (assoc 1 (entget ss))))
(setq ss (car (entsel "\nDS> Cao do dinh: ")))
(setq cddinh (cdr (assoc 1 (entget ss))))
(setq ss (car (entsel "\nDS> Cao do day: ")))
(setq cdday (cdr (assoc 1 (entget ss))))
(setq 1x (/ (+ (car p1) (car p5)) 2))
(setq 1y (- (- (cadr p11) 4) (* 8 B)))
(setq a1 (list 1x 1y))
(setq 2x (/ (+ (car p5) (car p7)) 2))
(setq 2y (- (cadr p16) (* 8 B)))
(setq a2 (list 2x 2y))
(setq 3x (/ (+(car p7) (car p4)) 2))
(setq 3y (- (cadr p17) (* 8 B)))
(setq a3 (list 3x 3y))
(command "text" "j" "mc"  a1  "0"  tenga "" )
(command "text" "j" "mc"  a3  "0"  cddinh "" )
(command "text" "j" "mc"  a2  "0"  cdday "" )
)
)

Bác bach1212 dùng vui vẻ nhé.

Tiện thể cho e mượn code em đồ thêm mấy cái lisp khác nha.

Thank all

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ác bach1212 có cái lisp lập bảng tọa độ ngon rùi, nên mình mượn lại biến tấu chút thì cái vụ nhập hố ga của bạn cũng tạm ổn rùi đấy

Bạn chạy lại bằng code lisp này xem nhé.

Nếu bảng chưa đẹp, đúng như bác phamthanhbinh nói, nên thêm mắm muối vào nữa cho vừa khẩu vị từng người.

Lưu ý rằng: free code lisp from CADViet - em chỉ xào nấu chút thui


: Ha Van Khanh 3/2003
;
; * Chuong trinh duoc lap bang ngon ngu AUTOLISP.
; Free lisp code from CADViet - Edit by mathan
; ------------------------------------------------------------------------------
(vmon)
(defun C:LBHG (/ 1x 1y a1 2x 2y a2 3x 3y a3 b p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14  p15 p16x p16y p16 p17x p17y p17)
(setvar "cmdecho" 0)
(initget 7)
(setq osm (getvar "osmode" ))
(setvar "osmode" 0)
(command "-Style" "hoatbif" "hoatbif " "2.5" "" "" "" "" "")
(command "-Layer" "n" "Text" "c" "4" "Text" "")
 (setq p1 (getpoint "\nChon diem dat bang thong ke :"))
 (setq S (getint "\nSo ho ga can thong ke:"))
(setq p2 (polar p1 (/ (* Pi 3) 2) (+ 16 (* 8 S))))
(setq p3 (polar p2 0 91))
(setq p4 (polar p1 0 91))
(setq p5 (polar p1 0 21))
(setq p6 (polar p2 0 21))
(setq p7 (polar p5 0 35))
(setq p8 (polar p6 0 35))
(setq p9 (polar p5 (/ (* Pi 3) 2) 8))
(setq p10 (polar p4 (/ (* Pi 3) 2) 8))
(setq p12 (polar p9 0 35))
(setq p11 (polar p9 0 -10.5))
(setq p13 (polar p1 (/ (* Pi 3) 2) 16))
(setq p14 (polar p4 (/ (* Pi 3) 2) 16))
(setq p15 (polar p7 (/ (* pi 3 ) 2) 4))
(setq p16x (/ (+ (car p5) (car p7)) 2))
(setq p16y (/ (+ (cadr p9) (cadr p13)) 2))
(setq p17x (/ (+ (car p4) (car p7)) 2))
(setq p17y (/ (+ (cadr p9) (cadr p13)) 2))
(setq p16 (list p16x p16y))
(setq p17 (list p17x p17y))
(command "Plinewid" "0.5")
(command "Pline" p1 p2 p3 p4 p1 "")
(command "Line" p5 p6 "")
(command "Line" p12 p8 "")
(command "Line" p9 p10 "")
(command "Line" p13 p14 "")
(command "Array" "l" "" "Rec" S "1" "-8")
(command "text" "j" "mc"  p11 "0"  "Ten Ga"  )
(command "text" "j" "mc"  p15 "0"  "Cao do" )
(command "text" "j" "mc"  p16 "0"  "D" )
(command "text" "j" "mc"  p17 "0"  "Y" )
(setvar "osmode" 1)
;-------------------------------------------------
; Phan chinh
(prompt "\nBan can pick tung text theo thu tu Ten ho ga; cao do dinh va cao do day ga: ")
(setq b 0)
(while (< b s )
(setq b (+ b 1))
(setq ss (car (entsel "\nDS> Ten ho ga: ")))
(setq tenga (cdr (assoc 1 (entget ss))))
(setq ss (car (entsel "\nDS> Cao do dinh: ")))
(setq cddinh (cdr (assoc 1 (entget ss))))
(setq ss (car (entsel "\nDS> Cao do day: ")))
(setq cdday (cdr (assoc 1 (entget ss))))
(setq 1x (/ (+ (car p1) (car p5)) 2))
(setq 1y (- (- (cadr p11) 4) (* 8 B)))
(setq a1 (list 1x 1y))
(setq 2x (/ (+ (car p5) (car p7)) 2))
(setq 2y (- (cadr p16) (* 8 B)))
(setq a2 (list 2x 2y))
(setq 3x (/ (+(car p7) (car p4)) 2))
(setq 3y (- (cadr p17) (* 8 B)))
(setq a3 (list 3x 3y))
(command "text" "j" "mc"  a1  "0"  tenga "" )
(command "text" "j" "mc"  a3  "0"  cddinh "" )
(command "text" "j" "mc"  a2  "0"  cdday "" )
)
)

Bác bach1212 dùng vui vẻ nhé.

Tiện thể cho e mượn code em đồ thêm mấy cái lisp khác nha.

Thank all

Hề hề hề,

Bác cho hỏi là cái hàm (vmon) dùng làm cái chi vậ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

1/- Thay "\Khoang cach cac text trong bang..." bằng "\n Nhap chieu cao text trong bang:"

Em thấy cái này không thay đổi được height text, bác phamthanhbinh ah. Text xuất ra vẫn luôn có chiều cao là: 0.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

1/- Thay "\Khoang cach cac text trong bang..." bằng "\n Nhap chieu cao text trong bang:"

Em thấy cái này không thay đổi được height text, bác phamthanhbinh ah. Text xuất ra vẫn luôn có chiều cao là: 0.2

Hề hề hề,

Mình quên bổ sung tham số kcach này vào trong các hàm ghi text. Bạn bổ sung nhé. Tỷ dụ (command "TEXT" diem3 "" "" noidung) sẽ thành (command "TEXT" diem3 kcach "" noidung) và với điều kiện là text style hiện hành có chiều cao text là 0.

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

Hề hề hề,

Mình quên bổ sung tham số kcach này vào trong các hàm ghi text. Bạn bổ sung nhé. Tỷ dụ (command "TEXT" diem3 "" "" noidung) sẽ thành (command "TEXT" diem3 kcach "" noidung) và với điều kiện là text style hiện hành có chiều cao text là 0.

Em thêm như này đúng chưa ah?

;-----------------Lap bang thong ke ga ----------------------------
; Free lisp code from CADViet  - edit by Mathan
(defun C:LBHG (/ TX TY kcach)
(setq diem (getpoint "\Chon vi tri lap bang... "))
(setq kcach (getreal "\n Nhap chieu cao text trong bang: "))
(prompt "\nBan can pick tung text theo thu tu Ten ho ga; cao do day va cao do dinh ga: ")
(setq dem 1 sdt 1)
(setq ss null)
(while (/= ss nil)
(if (= dem 1)
(progn
(setq ss (car (entsel "\nDS> Ten ho ga: ")))
(setq noidung (cdr (assoc 1 (entget ss))))
(setq diem1 (list (car diem) (- (cadr diem) (* sdt kcach))))
(command "TEXT" diem1 kcach "" "" noidung)
))
(if (= dem 2)
(progn
(setq ss (car (entsel "\nDS> Cao do dinh H1: ")))
(setq noidung (cdr (assoc 1 (entget ss))))
(setq diem2 (list (+ (* 2 kcach) (car diem)) (- (cadr diem) (* (- sdt 1) kcach))))
(command "TEXT" diem2 kcach "" "" noidung)
))
(if (= dem 3)
(progn
(setq ss (car (entsel "\nDS> Cao do day H2: ")))
(setq noidung (cdr (assoc 1 (entget ss))))
(setq diem3 (list (+ (* 4 kcach) (car diem)) (- (cadr diem) (* (- sdt 2) kcach))))
  (command "TEXT" diem3 kcach "" "" noidung)
  (setq dem 0)
))
(setq dem (+ 1 dem))
(setq sdt (+ 1 sdt))
(princ)
)
)

 

Nhưng test lại nó không lập được bảng mà báo lỗi thế này:

Ban can pick tung text theo thu tu Ten ho ga; cao do day va cao do dinh ga:

DS> Ten ho ga: Unknown command "LBHG". Press F1 for help.

Unknown command "G16B". Press F1 for help.

 

DS> Cao do dinh H1: Unknown command "LBHG". Press F1 for help.

Unknown command "6.05". Press F1 for help.

 

DS> Cao do day H2: Unknown command "LBHG". Press F1 for help.

Unknown command "4.48". Press F1 for help.

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

Nhờ các cao thủ khắc phục cái lỗi cua líp này với, mình chạy thi nó chỉ xuất ra bảng thống kê mà không ra cao độ tên ge..

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
Đăng nhập để thực hiện theo  

×