Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
14 replies to this topic

#1 qh2qa06

qh2qa06

    biết vẽ pline

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

Đã gửi 20 September 2014 - 11:35 AM

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


  • 0

#2 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 20 September 2014 - 12:34 PM

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

  • 1

#3 qh2qa06

qh2qa06

    biết vẽ pline

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

Đã gửi 20 September 2014 - 01:44 PM

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

  • 0

#4 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 20 September 2014 - 02:57 PM

Text nằm ngang hay theo hướng nào?
  • 0

#5 qh2qa06

qh2qa06

    biết vẽ pline

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

Đã gửi 20 September 2014 - 02:58 PM

Text nằm ngang hay theo hướng nào?

Text nằm ngang anh ạ.


  • 0

#6 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 20 September 2014 - 03:10 PM

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 ạ.???


  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#7 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 20 September 2014 - 03:32 PM

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.


  • 1

#8 nhoclangbat

nhoclangbat

    Edu level: li10

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

Đã gửi 20 September 2014 - 04:03 PM

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


  • 1
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#9 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 20 September 2014 - 04:15 PM

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.


  • 1

#10 nhoclangbat

nhoclangbat

    Edu level: li10

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

Đã gửi 20 September 2014 - 04:27 PM

- 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 


  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#11 Namvanvo

Namvanvo

    Edu level: li5

  • Members
  • PipPipPipPipPip
  • 386 Bài viết
Điểm đánh giá: 42 (tàm tạm)

Đã gửi 20 September 2014 - 04:33 PM

NHÌN lisp các bác mà chóng hết cả mặt  :D


  • 0

#12 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6009 Bài viết
Điểm đánh giá: 3113 (tuyệt vời)

Đã gửi 20 September 2014 - 10:08 PM

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


  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#13 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 21 September 2014 - 11:19 AM

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.


  • 0

#14 qh2qa06

qh2qa06

    biết vẽ pline

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

Đã gửi 22 September 2014 - 12:24 PM

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


  • 0

#15 qh2qa06

qh2qa06

    biết vẽ pline

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

Đã gửi 22 September 2014 - 12:29 PM

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.


  • 0