Đến nội dung


Hình ảnh
- - - - -

Sửa lisp thể hiện độ dốc (grade và slope)


  • Please log in to reply
1 reply to this topic

#1 thao_tedi

thao_tedi

    biết zoom

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

Đã gửi 25 May 2010 - 06:39 PM

Chào cả nhà.
Em đang thiết kế đường bằng Land desktop 2005. Trong Land không thế hiện độ dốc mặt đường và taluy do đó mấy Cadder phải làm bằng tay. Em có một lisp thể hiện độ dốc taluy bằng lệnh grade cho kết quả ví dụ 3.0:1.0, 2.0/1.0.. Em muốn thêm phần cho cho độ dốc mặt đường bằng lệnh slope cho kết quả độ dốc mặt đường là 1.0%, 4.5% .v.v.
Lisp của em như sau: Em đang mày mò sửa lẹnh slope nhưng vẫn chưa được.

(defun c:grade ()
textsize 0.5
osmode 1
(prompt "\npick points for the grade")
(setq pnt1 (getpoint) pnt2 (getpoint pnt1))
(setq ang1 (angle pnt1 pnt2))
;(setq ang1 (getangle))
(setq tanofang (/ (sin ang1) (cos ang1)))
(if (= tanofang 0) (setq grade1 0.0)
(setq grade1 (/ 1 tanofang))
)
(setq txt1 (strcat (rtos (abs grade1) 2 1) ":1"))
;(setq pnt1 (getpoint "\nPick location for text"))

(setq midpt (list (/ (+ (car pnt1) (car pnt2)) 2) (/ (+ (cadr pnt1) (cadr
pnt2)) 2)))
(setq odist (getvar "textsize"))
(setq ang2 (+ ang1 (/ pi 2)))
(setq osmd (getvar "osmode"))
(setvar "osmode" 0)
(setq inspt (polar midpt ang2 odist))
(command "text" "mc" inspt "" (rtd ang1) txt1) ; middle centre justified
(setvar "osmode" osmd)
(princ)
) ; replace the "c" above with "bc" for bottom centre


(defun rtd (a)
(/ (* a 180.0) pi)
)

(defun c:slope ()
textsize 0.5
osmode 1
(prompt "\npick points for the slope")
(setq pnt1 (getpoint) pnt2 (getpoint pnt1))
(setq ang1 (angle pnt1 pnt2))
;(setq ang1 (getangle))
(setq tanofang (/ (sin ang1) (cos ang1)))
(if (= tanofang 0) (setq slope1 0.0%)
(setq grade1 (/ 1 tanofang))
)
(setq txt1 (strcat (rtos (abs grade1) 2 1) ":1"))
;(setq pnt1 (getpoint "\nPick location for text"))

(setq midpt (list (/ (+ (car pnt1) (car pnt2)) 2) (/ (+ (cadr pnt1) (cadr
pnt2)) 2)))
(setq odist (getvar "textsize"))
(setq ang2 (+ ang1 (/ pi 2)))
(setq osmd (getvar "osmode"))
(setvar "osmode" 0)
(setq inspt (polar midpt ang2 odist))
(command "text" "mc" inspt "" (rtd ang1) txt1) ; middle centre justified
(setvar "osmode" osmd)
(princ)
) ; replace the "c" above with "bc" for bottom centre


(defun rtd (a)
(/ (* a 180.0) pi)
)


Xin chân thành cảm ơn các bác!
  • 0

#2 thao_tedi

thao_tedi

    biết zoom

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

Đã gửi 26 May 2010 - 12:03 PM

Cảm ơn các bác. Em đã mò được rồi.
  • 0