Chuyển đến nội dung
Diễn đàn CADViet
qh2qa06

Xin lisp tính độ dốc giữa 2 điểm nằm trên một đường polyline

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

Mình muốn xin lisp tính độ dốc giữa 2 điểm không nằm trên một đường thẳng mà trên một đường polyline có ít nhất 2 cạnh. Chi tiết mình trình bày trong file đính kèm luôn.

Xin cảm ơn! Chúc các bạn ngày nghỉ cuối tuần vui vẻ!http://www.cadviet.com/upfiles/3/64018_tinh_do_doc_giua_2_diem_tren_duong_polyline.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

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

 

(defun c:dd(/ t1 t2 pl dai)
  (setq t1 (car (entsel "\nChon text cao do 1:"))
t2 (car (entsel "\nChon text cao do 2:"))
pl (car (entsel "\nChon polyline:"))
dai (vlax-curve-getDistAtParam pl (vlax-curve-getEndParam pl)))
  (princ (strcat "\nDo doc : " (rtos(/ (- (atof (cdr (assoc 1 (entget t1))))
                            (atof (cdr (assoc 1 (entget t2))))) dai))))
  (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

Anh chỉnh cho em độ dốc được viết vào bản vẽ dưới dạng text và là % được không? VD trong file em đính kèm, độ dốc sẽ được viết vào là 1.41%.

Anh giúp em độ dốc viết vào có 3 số sau dấu phảy, như trên là 1.411% chẳng hạn.

Em cảm ơn ạ!

 

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

 

(defun c:dd(/ t1 t2 pl dai)
  (setq t1 (car (entsel "\nChon text cao do 1:"))
t2 (car (entsel "\nChon text cao do 2:"))
pl (car (entsel "\nChon polyline:"))
dai (vlax-curve-getDistAtParam pl (vlax-curve-getEndParam pl)))
  (princ (strcat "\nDo doc : " (rtos(/ (- (atof (cdr (assoc 1 (entget t1))))
                            (atof (cdr (assoc 1 (entget t2))))) dai))))
  (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

 

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

 

(defun c:dd(/ t1 t2 pl dai)
  (setq t1 (car (entsel "\nChon text cao do 1:"))
t2 (car (entsel "\nChon text cao do 2:"))
pl (car (entsel "\nChon polyline:"))
dai (vlax-curve-getDistAtParam pl (vlax-curve-getEndParam pl)))
  (princ (strcat "\nDo doc : " (rtos(/ (- (atof (cdr (assoc 1 (entget t1))))
                            (atof (cdr (assoc 1 (entget t2))))) dai))))
  (princ)
)

Hề hề hề,

Bác Tot77 có quan tâm tới việc vị trí của các text cao độ không tướng ứng với điểm đầu và điểm cuối của pline không ạ.???

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ạn dùng cái này.

 

(defun c:dd(/ t1 t2 pl dai eg pnt)
  (setq t1 (car (entsel "\nChon text cao do 1:"))
t2 (car (entsel "\nChon text cao do 2:"))
pl (car (entsel "\nChon polyline:"))
pnt (getpoint "\nVi tri dat text:")
eg (entget t1)
dai (vlax-curve-getDistAtParam pl (vlax-curve-getEndParam pl))
  )
  (entmake (list '(0 . "TEXT") (assoc 7 eg) (assoc 72 eg) (assoc 73 eg) (assoc 8 eg)
(assoc 40 eg) (assoc 41 eg) (cons 10 pnt) (cons 11 pnt) (cons 50 0)
(cons 1 (strcat (rtos (* 100 (/ (- (atof (cdr (assoc 1 (entget t1))))
                                (atof (cdr (assoc 1 (entget t2))))) dai)) 2 3) "%"))))
  (princ)
)

Bác Bình nói tôi không hiểu ý bác, ở đây chỉ lấy chiều dài pline thôi, không để ý đến hai đầu, vả lại text mình nhấp chọn từng cái chứ không quét. Lúc đầu cũng định quét nhưng nghĩ nhiều khi user muốn có số âm, nên nhấp chọn là tốt nhất, tuy có hoi nhiều thao tác.

  • 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

hihi cho nhoc quậy ké lsp anh Tot77 luyện tay hen ^^

;; free lisp from cadviet.com
(defun emk_style (MyStyle MyFont)
(entmake (list    (cons 0 "STYLE")    
(cons 100 "AcDbSymbolTableRecord")    
(cons 100 "AcDbTextStyleTableRecord")    
(cons 2 MyStyle)    (cons 3  MyFont)    
(cons 70 0))))
;;;;
(defun RTD (a) (* 180 (/ a PI)))
;;;;
(defun c:dd(/ t1 t2 pl dai pt1 pt2 gocpl pt3 pt4 dodoc old lst_var gocpl)
(setq lst_var '("cmdecho" "clayer" "textstyle"))
(setq old (mapcar 'getvar lst_var))
(setvar "cmdecho" 0)
(cond 
       ((null (tblsearch "style" "Vnavant")) ((emk_style "Vnavant" "VNAVAN.TTF") (setvar "textstyle" "Vnavant")))
	   ((tblsearch "style" "Vnavant") (setvar "textstyle" "Vnavant"))
)
(if (tblsearch "layer" "Do-doc-TK") (setvar "clayer" "Do-doc-TK") (command "-layer" "m" "Do-doc-TK" "c" 1 "" ""))
  (setq t1 (car (entsel "\nChon text cao do 1:"))
          t2 (car (entsel "\nChon text cao do 2:"))
         pl (car (entsel "\nChon polyline:"))
		 pt1 (vlax-curve-getStartPoint pl)
		 pt2 (vlax-curve-getEndPoint pl)
		 gocpl (angle pt1 pt2) 
        dai (vlax-curve-getDistAtParam pl (vlax-curve-getEndParam pl))
		pt3 (polar pt1 gocpl (/ dai 2))
		pt4 (polar pt3 (+ gocpl (/ PI 2)) 2)
		)
  (setq dodoc (rtos (/ (- (atof (cdr (assoc 1 (entget t1)))) (atof (cdr (assoc 1 (entget t2))))) dai) 2 3))
  (command ".text" "m" pt4 1.5 (rtd gocpl) (strcat "i = " dodoc "%"))
(mapcar 'setvar lst_var old)  
                                                                                  
  (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

Nhoc dạo này viết lên tay quá nhỉ !!  :)  :)

Nhưng sở dĩ tôi hỏi chủ thớt về chiều của text cũng là vì muốn biết xem có cần quay text không đó mà, chủ thớt nói nằm ngang thì càng dễ viết.

  • 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

- lên tay gì đâu a, bị Thầy Ket bắt lỗi hoài ^^, nhoc chỉ đi mót, copy past rùi chỉnh lại tí thui mà :)

- text nhoc để vậy thấy đẹp nên làm vậy, chắc bạn đó mún liệt kê độ dốc đâu đó nên để text ngang 

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ạn dùng cái này.

 

(defun c:dd(/ t1 t2 pl dai eg pnt)
  (setq t1 (car (entsel "\nChon text cao do 1:"))
t2 (car (entsel "\nChon text cao do 2:"))
pl (car (entsel "\nChon polyline:"))
pnt (getpoint "\nVi tri dat text:")
eg (entget t1)
dai (vlax-curve-getDistAtParam pl (vlax-curve-getEndParam pl))
  )
  (entmake (list '(0 . "TEXT") (assoc 7 eg) (assoc 72 eg) (assoc 73 eg) (assoc 8 eg)
(assoc 40 eg) (assoc 41 eg) (cons 10 pnt) (cons 11 pnt) (cons 50 0)
(cons 1 (strcat (rtos (* 100 (/ (- (atof (cdr (assoc 1 (entget t1))))
                                (atof (cdr (assoc 1 (entget t2))))) dai)) 2 3) "%"))))
  (princ)
)

Bác Bình nói tôi không hiểu ý bác, ở đây chỉ lấy chiều dài pline thôi, không để ý đến hai đầu, vả lại text mình nhấp chọn từng cái chứ không quét. Lúc đầu cũng định quét nhưng nghĩ nhiều khi user muốn có số âm, nên nhấp chọn là tốt nhất, tuy có hoi nhiều thao tác.

Hề hề hề,

Ý của mình là các text cao độ được chọn có thể không phải là cao độ chính xác của hai điểm đầu và cuối pline mà có thể là của hai điểm nào đó trên pline ( gần hoạc xa hai điểm đầu và cuối pline ) bác ạ. Bởi vì thực tế cũng có thể có trường hợp pline rất dài nhưng chỉ cần tính độ dốc 1 đoạn của pline mà đoạn này đã được xác định bởi hai điểm có sẵn các text cao độ trên bản vẽ.

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

Nếu chủ thớt không đưa file thì tôi cũng phải hỏi lại giống như bác Bình nói, nhưng do có file thì cứ theo file mà làm thôi. Chắc đường pline là đường dẫn cao độ từ điểm đầu này tới điểm đầu kia thôi chứ không có điểm trung gian.

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ề,

Bác Tot77 có quan tâm tới việc vị trí của các text cao độ không tướng ứng với điểm đầu và điểm cuối của pline không ạ.???

Text của em định dạng Left, nằm đúng tại 2 đầu Polyline đấy bác ạ!

Hơn nữa nếu chỉ tìm độ dốc giữa 2 điểm nằm trên PL thì em sẽ vẽ đường PL giữa 2 điểm đó. Làm cả một mặt bằng cả nghìn điểm còn được, vẽ thêm 1 đường PL là chuyện nhỏ :D

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

Nếu chủ thớt không đưa file thì tôi cũng phải hỏi lại giống như bác Bình nói, nhưng do có file thì cứ theo file mà làm thôi. Chắc đường pline là đường dẫn cao độ từ điểm đầu này tới điểm đầu kia thôi chứ không có điểm trung gian.

Em cảm ơn anh! Lisp anh viết sử dụng tốt rồi ạ!

 

Em thiết kế mặt bằng, cần lisp này để tính độ dốc giữa 3 điểm, từ đó khống chế độ dốc.

Dùng lisp này, khi thiết kế mặt bằng với Land sẽ cho một mặt phẳng mượt, không có kiểu, chỗ này no dồn, chỗ kia đói góp.

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

×