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

[Yêu cầu] Lisp tính cao độ khi biết cao độ và độ dốc

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

vantuan18nd    4

Nhờ các bác viết giùm em lisp như sau :

+ pick chọn điểm đã biết cao độ

+ pick chọn độ dốc i% (hoặc nhập độ dốc)

+ chọn điểm cần tìm cao độ

+ Kết quả ghi luôn tại nơi mình pick và có định dạng giống text đã pick ban đầu (Thêm mũi tên chỉ vào điểm đã pick )

Thank nhiều !

  • Vote giảm 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
qh2qa06    0

Em cũng đang muốn xin lisp này nên em không mở topic mới mà post luôn vào đây.

Mẫu muốn xin của em sẽ đính kèm theo và nội dung xin em cũng trình bày luôn trong đó ạ!

Em cảm ơn!http://www.cadviet.com/upfiles/3/64018_tim_cd_khi_biet_do_doc.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
Tot77    501

Bạn tính cao độ trên mặt bằng hay mặt đứng? Trong file có vẻ bạn muốn tính trên mặt bằng, vì trên mặt đứng không cần nhập độ dốc và khoảng cách làm gì.

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

Bạn tính cao độ trên mặt bằng hay mặt đứng? Trong file có vẻ bạn muốn tính trên mặt bằng, vì trên mặt đứng không cần nhập độ dốc và khoảng cách làm gì.

Vâng. Em muốn tính cao độ trên mặt bằng. Em thiết kế nút giao trên mặt bằng 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
Tot77    501

Bạn thử cái này.

Nhấp điểm biết cao độ, chọn text cao độ của điểm đó, nhập độ dốc dạng 0.00... (+ lên - xuống), sau đó nhấp điểm muốn biết độ cao.

 

(defun c:ddo( / a b txt tt1 sole dd1 vt)
  (defun dxf (id v) (cdr (assoc id (entget v))))
  (setq a (getpoint "\nChon diem da biet cao do: ")
txt (car (entsel "\nText cao do tuong ung: "))
tt1 (dxf 1 txt)
sole (if (setq vt (vl-string-search "." tt1)) (- (strlen (substr tt1 vt)) 2) 0)
dd1 (getreal (strcat "\nNhap do doc (+ len; - xuong) <" (rtos (if (not dd) (setq dd 0.01) dd)) ">: ")))
  (if dd1 (setq dd dd1))
  (while (setq b (getpoint a "\nChon diem can tinh cao do: "))
    (entmake (list '(0 . "TEXT") (cons 10 b) (cons 11 b) (cons 40 (dxf 40 txt)) (cons 41 (dxf 41 txt))
  (cons 8 (dxf 8 txt)) (cons 62 (if (dxf 62 txt) (dxf 62 txt) 256))
  (cons 7 (dxf 7 txt)) (cons 72 (dxf 72 txt)) (cons 73 (dxf 73 txt)) '(50 . 0) 
  (cons 1 (rtos (+ (atof (dxf 1 txt)) (* dd (distance a b))) 2 sole))))
  )
  (princ)
)
  • 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
qh2qa06    0

 

Bạn thử cái này.

Nhấp điểm biết cao độ, chọn text cao độ của điểm đó, nhập độ dốc dạng 0.00... (+ lên - xuống), sau đó nhấp điểm muốn biết độ cao.

 

(defun c:ddo( / a b txt tt1 sole dd1 vt)
  (defun dxf (id v) (cdr (assoc id (entget v))))
  (setq a (getpoint "\nChon diem da biet cao do: ")
txt (car (entsel "\nText cao do tuong ung: "))
tt1 (dxf 1 txt)
sole (if (setq vt (vl-string-search "." tt1)) (- (strlen (substr tt1 vt)) 2) 0)
dd1 (getreal (strcat "\nNhap do doc (+ len; - xuong) <" (rtos (if (not dd) (setq dd 0.01) dd)) ">: ")))
  (if dd1 (setq dd dd1))
  (while (setq b (getpoint a "\nChon diem can tinh cao do: "))
    (entmake (list '(0 . "TEXT") (cons 10 b) (cons 11 b) (cons 40 (dxf 40 txt)) (cons 41 (dxf 41 txt))
  (cons 8 (dxf 8 txt)) (cons 62 (if (dxf 62 txt) (dxf 62 txt) 256))
  (cons 7 (dxf 7 txt)) (cons 72 (dxf 72 txt)) (cons 73 (dxf 73 txt)) '(50 . 0) 
  (cons 1 (rtos (+ (atof (dxf 1 txt)) (* dd (distance a b))) 2 sole))))
  )
  (princ)
)

Mong như mong mẹ về chợ :D

Em cảm ơn anh! 

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
qh2qa06    0

Trong quá trình dùng lisp ddo em gặp một lỗi gây lệch 0.001. Không lệch nhiều nhưng trên toàn bộ bản vẽ (dài 3000m, 20m/cọc) thì nhìn cực kỳ khó chịu. Em cũng không biết lỗi tại đâu. Em up lên đây nhờ các bác kiểm tra giúp.

Nếu giữ tại đúng vị trí mắt lưới thì bị lệch. Em move để kiểm tra ra 2 vị trí cạnh nhau thì lại không lệch.

 

http://www.cadviet.com/upfiles/3/64018_kiem_tra_lisp_ddo.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
Tot77    501

Thật ra không phải do lsp mà là do 2 cái pline của bạn có chiều dài khác nhau dù rất nhỏ. Bạn cho luprec = 8 rồi nhấp vào từng pline rồi ctr-1 sẽ thấy length khác nhau. Và vì vậy nên khi nhân độ dốc sẽ khác nhau (cũng do vấn đề làm tròn số) dù chỉ 1 mm.

Tôi sửa lại lsp để khử cái vụ chênh nhau 1 chút đó.

 

(defun c:ddo( / a b txt tt1 sole dd1 vt)
  (defun dxf (id v) (cdr (assoc id (entget v))))
  (defun ator (a sl) (atof (rtos a 2 sl)))
  (setq a (getpoint "\nChon diem da biet cao do: ")
       txt (car (entsel "\nText cao do tuong ung: "))
       tt1 (dxf 1 txt)
       sole (if (setq vt (vl-string-search "." tt1)) (- (strlen (substr tt1 vt)) 2) 0)
       dd1 (getreal (strcat "\nNhap do doc (+ len; - xuong) <" (rtos (if (not dd) (setq dd 0.01) dd)) ">: ")))
 (if dd1 (setq dd dd1))
 (while (setq b (getpoint a "\nChon diem can tinh cao do: "))
  (entmake (list '(0 . "TEXT") (cons 10 b) (cons 11 b) (cons 40 (dxf 40 txt)) (cons 41 (dxf 41 txt))
 (cons 8 (dxf 8 txt)) (cons 62 (if (dxf 62 txt) (dxf 62 txt) 256))
 (cons 7 (dxf 7 txt)) (cons 72 (dxf 72 txt)) (cons 73 (dxf 73 txt)) '(50 . 0)
 (cons 1 (rtos (+ (atof (dxf 1 txt)) (ator (* dd (ator (distance a b) sole)) sole)) 2 sole))))
 )
 (princ)
)
  • 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
qh2qa06    0

 

Thật ra không phải do lsp mà là do 2 cái pline của bạn có chiều dài khác nhau dù rất nhỏ. Bạn cho luprec = 8 rồi nhấp vào từng pline rồi ctr-1 sẽ thấy length khác nhau. Và vì vậy nên khi nhân độ dốc sẽ khác nhau (cũng do vấn đề làm tròn số) dù chỉ 1 mm.

Tôi sửa lại lsp để khử cái vụ chênh nhau 1 chút đó.

 

(defun c:ddo( / a b txt tt1 sole dd1 vt)
  (defun dxf (id v) (cdr (assoc id (entget v))))
  (defun ator (a sl) (atof (rtos a 2 sl)))
  (setq a (getpoint "\nChon diem da biet cao do: ")
       txt (car (entsel "\nText cao do tuong ung: "))
       tt1 (dxf 1 txt)
       sole (if (setq vt (vl-string-search "." tt1)) (- (strlen (substr tt1 vt)) 2) 0)
       dd1 (getreal (strcat "\nNhap do doc (+ len; - xuong) <" (rtos (if (not dd) (setq dd 0.01) dd)) ">: ")))
 (if dd1 (setq dd dd1))
 (while (setq b (getpoint a "\nChon diem can tinh cao do: "))
  (entmake (list '(0 . "TEXT") (cons 10 b) (cons 11 b) (cons 40 (dxf 40 txt)) (cons 41 (dxf 41 txt))
 (cons 8 (dxf 8 txt)) (cons 62 (if (dxf 62 txt) (dxf 62 txt) 256))
 (cons 7 (dxf 7 txt)) (cons 72 (dxf 72 txt)) (cons 73 (dxf 73 txt)) '(50 . 0)
 (cons 1 (rtos (+ (atof (dxf 1 txt)) (ator (* dd (ator (distance a b) sole)) sole)) 2 sole))))
 )
 (princ)
)

Những kiến thức chuyên sâu thế thì em không xử lý được. Lisp  anh sửa cho em dùng không bị lỗi thế rồi.

Em cảm ơn anh!

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
qh2qa06    0

Những kiến thức chuyên sâu thế thì em không xử lý được. Lisp  anh sửa cho em dùng không bị lỗi thế rồi.

Em cảm ơn anh!

 

 

Thật ra không phải do lsp mà là do 2 cái pline của bạn có chiều dài khác nhau dù rất nhỏ. Bạn cho luprec = 8 rồi nhấp vào từng pline rồi ctr-1 sẽ thấy length khác nhau. Và vì vậy nên khi nhân độ dốc sẽ khác nhau (cũng do vấn đề làm tròn số) dù chỉ 1 mm.

Tôi sửa lại lsp để khử cái vụ chênh nhau 1 chút đó.

(defun c:ddo( / a b txt tt1 sole dd1 vt)
  (defun dxf (id v) (cdr (assoc id (entget v))))
  (defun ator (a sl) (atof (rtos a 2 sl)))
  (setq a (getpoint "\nChon diem da biet cao do: ")
       txt (car (entsel "\nText cao do tuong ung: "))
       tt1 (dxf 1 txt)
       sole (if (setq vt (vl-string-search "." tt1)) (- (strlen (substr tt1 vt)) 2) 0)
       dd1 (getreal (strcat "\nNhap do doc (+ len; - xuong) <" (rtos (if (not dd) (setq dd 0.01) dd)) ">: ")))
 (if dd1 (setq dd dd1))
 (while (setq b (getpoint a "\nChon diem can tinh cao do: "))
  (entmake (list '(0 . "TEXT") (cons 10 b) (cons 11 b) (cons 40 (dxf 40 txt)) (cons 41 (dxf 41 txt))
 (cons 8 (dxf 8 txt)) (cons 62 (if (dxf 62 txt) (dxf 62 txt) 256))
 (cons 7 (dxf 7 txt)) (cons 72 (dxf 72 txt)) (cons 73 (dxf 73 txt)) '(50 . 0)
 (cons 1 (rtos (+ (atof (dxf 1 txt)) (ator (* dd (ator (distance a b) sole)) sole)) 2 sole))))
 )
 (princ)
)

 

Em muốn nhờ các chuyên gia, nếu bác Tot77 có vào đây giúp em càng tốt ạ. Lisp trên tính cho 1 điểm. Bây giờ em có nhiều điểm và muốn thiết kế cho một hệ thống lưới các điểm có cùng độ dốc.

Chi tiết em ghi rõ trong file đính kèm ạ. Em cảm ơn nhiều!

 

http://www.cadviet.com/upfiles/6/64018_tinh_cao_do_diem_theo_mat_luoi_cho_mot_nhom_diem.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

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


×