Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Đăng nhập để thực hiện theo  
huuhieu148

Xin lisp xuất cao độ dạng text khi pick trên bình đồ

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

anpha3    2

1.Độ chênh cao của các đường đồng mức là như nhau Bác Bình ạ.

2.Cao độ đầu tuyến và cuối tuyến có đoạn chênh cao lên dần và cũng có đoạn xuống dần vì là đồi mà bác.Như vậy nếu chênh cao từ điểm thấp lên điểm cao có cao độ giữa 2 điểm thấp đến điểm cuối cao và từ cao xuống thấp thì có cao độ tại điểm thấp.

Nhờ Bác Bình và các bác giúp đỡ Cám ơn Các Bác.

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.123

1.Độ chênh cao của các đường đồng mức là như nhau Bác Bình ạ.

2.Cao độ đầu tuyến và cuối tuyến có đoạn chênh cao lên dần và cũng có đoạn xuống dần vì là đồi mà bác.Như vậy nếu chênh cao từ điểm thấp lên điểm cao có cao độ giữa 2 điểm thấp đến điểm cuối cao và từ cao xuống thấp thì có cao độ tại điểm thấp.

Nhờ Bác Bình và các bác giúp đỡ Cám ơn Các Bác.

Hề hề hề

Không biết cái này có phải cái bạn cần hay không ??? Mình viết theo suy đoán của mình, nếu chỗ nào chưa đúng ý bạn thì hãy post lên nhé mình sẽ chỉnh sửa nếu được.



(defun c:nspt (/ pl plst enlst ptlst ptlst1 par n0 n1 a1 a2 b0 b fn f stt dis elev i i1)
(vl-load-com)
(setq pl (car (entsel "\n Chon polyline xac dinh tuyen"))
         plst (acet-geom-vertex-list pl)
         enlst (acet-ss-to-list (ssget "f" plst (list (cons 0 "*line") (cons 8 "-1,-2") (cons 62 8))))
         ptlst (list)
         plst1 (list)
)
(foreach p plst
       (setq par (vlax-curve-getparamatpoint  pl p)
                ptlst (append ptlst (list (list par p)))
                n0 (length ptlst1)
       )
)
(foreach en enlst
      (setq p (car (acet-geom-intersectwith pl en 0))
                par (vlax-curve-getparamatpoint  pl p)
                ptlst (append ptlst (list (list par p)))
      )
)
(setq ptlst (vl-sort ptlst '(lambda (x y) (< (car x) (car y))))
         n1 (length ptlst)
         a1 (getreal "\n Nhap gia tri cao do dau tuyen: ")
         a2 (getreal "\n Nhap gia tri cao do cuoi tuyen: ")
         b (getreal "\n Nhap gia tri chenh cao giua cac duong dong muc: ")
         b0 10  i 0 i1 0 
)
(if (/= b nil) (setq b0 B) (setq b b0))
(setq fn (getfiled "Select a File" "" "csv" 1)
         f (open fn "w") )
(while (< i n1) 
       (setq STT (itoa (1+ i)))
       (setq dis  (rtos (if (> i 0) 
           (- (vlax-curve-getdistatparam pl (car (nth i ptlst))) (vlax-curve-getdistatparam pl (car (nth (1- i) ptlst))))  0) 2 2 )
       )
       (setq elev  (rtos (cond
           ((= (car (nth i ptlst)) 0) a1)
           ((= (car (nth i ptlst)) (car (last ptlst))) a2)
           ((/= (car (nth i ptlst)) (fix (car (nth i ptlst)))) ( if (> a2 a1) (* b (+ (fix (/ a1 B)) i1)) (* b (- (fix (/ a1 B)) i1))) )
           ((= (car (nth i ptlst)) (fix (car (nth i ptlst)))) 
                 (setq  i1 (1- i1))
                 (if (> a2 a1) (+ (atof elev) (* b (/ 
                     (- (vlax-curve-getdistatparam pl (car (nth i ptlst))) (vlax-curve-getdistatparam pl (car (nth (1- i) ptlst))))
                     (- (vlax-curve-getdistatparam pl (car (nth (1+ i) ptlst))) (vlax-curve-getdistatparam pl (car (nth (1- i) ptlst))))  )))
                                      (- (atof elev) (* b (/
                     (- (vlax-curve-getdistatparam pl (car (nth i ptlst))) (vlax-curve-getdistatparam pl (car (nth (1- i) ptlst))))
                     (- (vlax-curve-getdistatparam pl (car (nth (1+ i) ptlst))) (vlax-curve-getdistatparam pl (car (nth (1- i) ptlst))))  )))
                 ))   ) 2 2)
       )
       (setq txt (strcat STT (chr 44) dis (chr 44) elev) i (1+ i) i1 (1+ i1) )
       (princ (strcat  "\n" txt))
       (write-line txt f)
)

(close f)
(princ)        


)

Bạn lưu ý khi sử dụng lisp này như sau:

1/- Lisp chỉ chạy đúng khi các đường đồng mức chỉ cắt tuyến tại một điểm. (tức là tuyến sẽ chỉ có một chiều đi lên cao dần hay đi xuống thấp dần).

2/- Chiếu của pline tuyến phải được vẽ đúng với tên gọi của điểm đầu và cuối tuyến (tức là điểm dầu tuyến phải là điểm bắt đầy vẽ pline tuyến)

3/- Để giảm thiểu việc nhầm lẫn các điểm cặt của pline tuyến và đường đồng mức, (do trên bản vẽ có nhiều loại đường pline khác mà không phải là đường đồng mức) mình đã sử dụng bộ lọc khi chọn đường đồng mức theo layer và màu của các đường đồng mức. Vì thế nếu bản vẽ bạn sử dụng không bố trí các đường đồng mức đúng trên các layer "-1" và "-2' cũng như không có màu là 8 thì lisp sẽ không lấy được các giao điểm của tuyến với đường đồng mức. Vì thế bạn cần sửa lại đôi chút trong bộ lọc này cho phù hợp. Code của bộ lọc là dòng này:

(list (cons 0 "*line") (cons 8 "-1,-2") (cons 62 8)) trong đó "-1,-2" là tên các layer chứa dường đồng mức trên bản vẽ bạn gửi và số 8 là tên màu của đường đồng mức trên bản vẽ đó.

Bạn dựa vào đó để điều chỉnh bộ lọc này cho phù hợp với bản vẽ bạn sử dụng.

 

Chúc bạn vui.

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.123

Cảm ơn Bác Bình đã giúp em. Nhưng lisp này em sử dụng chỉ lấy được 11 điểm còn lại là không lấy được tiếp Bác Ạ Bác Xem lại giúp em nhé.http://www.cadviet.c...866_gui_bac.rar

Hề hề hề,

Vấn đê của bạn mình chưa rõ lắm nhưng có nhẽ do khi chạy lisp bạn không zoom màn hình để nhìn thấy hết tuyến mà bạn để màn hình chỉ thấy tuyến đến khoảng điểm cắt số 13 thì phải. Xem trên file kết quả thì thấy điểm thứ 13 có cao độ là cuối cùng (972) rồi.

Mình đã chạy trên file bản vẽ bạn gửi thì ra đủ 55 điểm như file kết quả đình kèm.

Do vậy bạn hãy thử lại và lưu ý trước khi chạy lisp, nên zoom màn hình sao cho thấy toàn tuyến và không thay đổi màn hình trong quá trình chạy lisp (nhất là khi bạn muốn xem cao độ tại đầu và cuối tuyến để nhập thông số vào lisp. Điều này nên xem trước và ghi ra giấy để khỏi nhầm)

bạn cũng co thể thử làm như sau:

Thêm dòng code (command "zoom" "e") vào đàu chương trình, phía dưới dòng (vl-load-com)

Thêm dòng code (command "zoom" "p') vào cuối chương trình, bên trên dòng code (princ)

 

Đây là file kết quả mình chạy ra:

http://www.cadviet.com/upfiles/3/5194_98866_gui_bac.rar

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.123

Hề hề hề,

Bạn dùng thử cái này coi đã ưng ý chưa nhé.

http://www.cadviet.com/upfiles/3/5194_noisuypointtrenbinhdo.lsp

 

Chúc bạn vui và lưu ý lần sau nên suy nghĩ cẩn thận trước khi yêu cầu để tránh việc phải làm đi làm lại thế này.

  • 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
phamthanhbinh    3.123

Bác Bình ơi Góc nhỏ thì đúng còn góc lớn thì sai Bác ạhttp://www.cadviet.c...ac_sua_giup.rar

Hề hề hề,

Chả có gì sai ở đây cả. Chỉ tại bạn không chịu định nghĩa cho rõ vấn đề một lúc mà cứ mỗi lần lại són ra một tí mà thôi. Việc mình phải đoán mò và tự định nghĩa cho mình tất nhiên không thể đúng hoàn toàn theo ý bạn được. Kể cả lần sửa này, mình cũng không hẳn tin là đã đoán đúng ý bạn. Bạn nên rút kinh nghiệm về cách trình bày vấn đề của mình sao cho người khác không phải đoán ý bạn nữa. Càng trình bày rõ ý mình càng tốt. Còn nếu bạn vẫn tiếp tục bắt người khác phải đoán mò ý bạn thì chắc chắn bạn sẽ khó có được kết quả như ý.

Đây cũng là lần cuối cùng mình sửa cái lisp này. Nếu nó vẫn chưa như ý bạn thì có hai cách:

1/- Bạn hãy nghiên cứu để có thể tự sửa cho đúng ý bạn.

2/- Hãy chờ đó, có thể sẽ có người khác giúp bạn cái lisp tốt hơn.

Mình không muốn bàn thêm về nó nữa, bởi không muốn đoán mò thêm và cũng không thích cách làm việc của bạn.

http://www.cadviet.com/upfiles/3/5194_noisuypointtrenbinhdo_1.lsp

Chúc bạn vui và hy vọng không cần sửa gì thêm.

  • 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
kute9x    0

Mình sử dụng nova, sau khi xuất toạ độ = lệnh cdtep, dùng lưới tam giác và chạy ra được đường đồng mức rồi, kiểm tra cao độ = lệnh CDTN đúng rồi .

 

Bây giờ nhờ anh em viết cho đoạn lisp pick vào 1 điểm nào đó trên bình đồ thì xuất ra cao độ ở dạng text ngay vị trí đó

Cám ơn các bác trước nhá.

tại sao không dùng lệnh CDTN gõ T, sau đó chọn ON, pick vào binh đồ text cao độ tự nhiên sẽ hiện lên trên bản vẽ mà

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
vuongvjpnd    2

cái này bạn nhờ bất cứ 1 (kỹ sư cầu đường đang làm đồ án tốt nghiệp) nào cũng chơi đc bằng Topo tuốt !

Nhanh, gọn, .... nhẹ.....đầu, Lisp làm gì bác ơi !

Lưu ý: nếu bạn nhờ viết lisp thì chỉ nhờ đến đoạn tính khoảng cách giữa các cọc thôi, cao độ lấy đúng chẳn cao độ đồng mức mà !

dùng TOPO thì lệnh là gì vậy bác, ý em là copy 1 điểm rồi dán vào vùng lưới tam giác ý, sao cho nó nhận cao độ!!!!!!

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  

×