Chuyển đến nội dung
Diễn đàn CADViet
Đỗ Minh Quang

[Trợ Giúp] Viết Lisp Tính Cao Độ Ga Dựa Vào Mặt Bằng Tim, Bề Rộng Đường

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

Em chuyên ngành về giao thông, mong muốn được các anh (chị) PRO viết giúp e chương trình LSP có nội dung như sau:

Số liệu có: - 1 đoạn thẳng tim đường, cao độ 2 đầu đoạn thẳng (dạng text)

                 - Bề rộng mặt đường, hè đường, chiều cao hè, độ dốc đường, độ dốc hè.

                 - Ga nằm trên đoạn đường, cách tim đường 1 khoảng cố định (trên đường hoặc trên hè)

Nội dung thực hiện: 

  1. Píck điểm đầu và điểm cuối tuyến lấy độ dài

 2. Pick text đầu và text cuối để lấy cao độ tại 2 đầu , tính ra độ dốc của đoạn tuyến

 3. Khai báo bề rộng mặt đường, hè đường, dốc mặt, dốc hè đường, cao bó vỉa

 4. chọn vị trí hố ga cần tính cao độ

 5. xuất cao độ ga ra Block ATT tại vị trí ga đó khi pick vào vị trí ga

 

Em xin chân thành cảm ơn các thầy viết lisp ạ!

Đây là file cad minh họa đính kèm ạ

http://www.cadviet.com/upfiles/7/159871_drawing2_2.dwg

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

Giản lược thế, khó hình dung quá, mà có ai đào tạo gì đâu mà thầy với chả tớ

1. Đường tim màu đỏ lúc nào cũng đứt đoạn à (hay là cả Tim là 1 Polyline dài ngoằng có cả cong, cả thẳng, cần đoạn nào thì Pick điểm trên nó); Tim đó lúc nào cũng bị "là phẳng" (làm đồng phẳng rồi à) bắt buộc nhập thủ công cao độ đầu + cuối sao.

2. Hố ga cần tính là Tâm của hai đường chéo cái hình chữ nhật trắng ấy à, Hố ga có trước chỉ xác định cao độ rồi Insert ATT tại đúng vị trí đó, hay Pick vào đâu thì insert hố ga và ATT vào đấy

3. ATT đó đâu?

4. Nội suy cao độ hố ga theo phương án nào: đơn giản nhất là: nội sung tuyến tính (nội suy 1 chiều, theo phương của đoạn thẳng TIM màu đỏ); cách này bắt buộc các thông số sau bảo đảm: Tim màu đỏ là 1 đoạn thẳng (hoặc 1 phần đoạn thẳng) không chứa đoạn cong; hố ga bất kỳ cùng thuộc 1 đường gióng Vuông góc với tim luôn sẽ có cao độ nội suy bằng nhau;

còn nếu có cách nội suy khác thì đề nghị làm rõ thêm

 

Chủ thớt nên cho file kết quả đê, và cả cách tính nữa nhé

 

 

chu y : LISP HOAT DONG SAI KHI PICK VI TRI HO GA NAM NGOAI GIOI HAN DOAN THANG DUONG TIM
(defun c:thunghiem( / caodocuoi caododau dodoc dt duong_tim kqnoisuy L obj p p0 tongL)
(vl-load-com)
(defun dxf (n ent) (cdr(assoc n ent)))
(defun get_cao_do(flag / caodo num)
(princ "\nChon cao do diem")
(setq num
(cond
((and (setq caodo (car(entsel (acet-str-format "\nNhap cao do diem thu %1" flag))))
(member (type (setq num (read (dxf 1 (entget caodo))))) '(REAL INT)))
num)
((getreal (acet-str-format "\nNhap cao do diem thu %1" flag)))
(T (princ "\nBan chua chon duoc cao do"))))
num)

(if (and
(setq duong_tim (entsel"/nChon duong thang tam"))
(if (wcmatch (dxf 0 (entget (car duong_tim))) "*LINE") (setq dt (car duong_tim)))
(setq obj (vlax-ename->vla-object dt))
(setq caododau (get_cao_do 1))
(setq caodocuoi (get_cao_do 2))
)
(while (setq p (getpoint "\nNhap toa do ho ga"))
(setq dodoc (* 100 (/ (- caodocuoi caododau) (setq tongL (vlax-curve-getdistatparam obj (vlax-curve-getendparam obj))))))
(setq L (vlax-curve-getdistatpoint obj (setq p0 (vlax-curve-getclosestpointto obj p))))
(setq kqnoisuy (+ caododau (* (/ L tongL) (- caodocuoi caododau))))
(entmakex
(list
(cons 0 "TEXT")
'(100 . "AcDbEntity")
'(100 . "AcDbText")
(cons 10 p)
(cons 8 "caodo_hoga")
(cons 11 p)
(cons 1 (acet-str-format "Do doc %1 ; Cos HG: %2" dodoc kqnoisuy))
(cons 40 (* 0.01 tongL))
'(71 . 0)
'(72 . 0)
'(73 . 0)))
))
(princ))

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

×