Đến nội dung


Hình ảnh
5 stars - based on 24598 reviews
- - - - -

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


  • Please log in to reply
1 reply to this topic

#1 Đỗ Minh Quang

Đỗ Minh Quang

    Chưa sử dụng CAD

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

Đã gửi 31 May 2017 - 11:35 AM

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.c..._drawing2_2.dwg


  • 0

#2 quansla

quansla

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 662 Bài viết
Điểm đánh giá: 231 (khá)

Đã gửi 31 May 2017 - 03:22 PM

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))

  • 0