Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
bach1212

[Yêu cầu] Lisp lập bảng các thông số kỹ thuật của đường cong tròn (Dùng cho giao thông)

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

Một đường cong tròn thường có các thông số kỹ thuật là: góc ngoặt chuyển hướng tại đỉnh A, bán kính R, chiều dài đường cong K, độ dài đoạn tiếp tuyến T, độ dài đoạn phân giác P

Em thường phải thống kê các đường cong tại các nút giao ngã 3, ngã tư đường nên Em muốn nhờ các bác giúp e viết lisp lập được bảng các thông số trên như file đính kèm:http://www.cadviet.c...4_nutgiaohl.rar

Chúc các bác vui 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

Mình viết tạm cho bạn thế này thôi. ngại viết code lập bảng lắm.

Khi dùng, Chọn xong đường tròn sẽ thấy báo kết quả ở dòng command. nhấn tiếp Ctrl+V là được (không cần fải copy từ command nhá). Cũng không khác việc lập bảng là mấy..

(defun c:ytc (/ SetClipBoardText ytc-g i a r en ent)
(defun SetClipBoardText (text / htmlfile result ) ; By XShrimp
(if (= 'STR (type text))
(progn
(setq htmlfile (vlax-create-object "htmlfile")
result (vlax-invoke(vlax-get(vlax-get htmlfile'ParentWindow)'ClipBoardData)'SetData "Text" text ))
(vlax-release-object htmlfile) text)))
(defun ytc-g (goc / gd gp gs )
(setq Gd (fix Goc)
Gp (fix (* (- Goc Gd) 60))
Gs (* (- (* (- Goc Gd) 60) Gp) 60))
(strcat (if (< Gd 10) (strcat "0" (rtos Gd 2 0)) (rtos Gd 2 0)) "d"
(if (< Gp 10) (strcat "0" (rtos Gp 2 0)) (rtos Gp 2 0)) "'"
(if (< Gs 9.5) (strcat "0" (rtos Gs 2 0)) (rtos Gs 2 0)) "''"))
(and
(setq i (getint "nhap ten duong cong (nhap so):"))
(setq i (itoa i))
(not (while (not (and (setq en (car (entsel "\n chon duong can lay yeu to cong:\n")))
(wcmatch (cdr (assoc 0 (setq ent (entget en)))) "ARC")))))
(setq a (* (vlax-get-property (vlax-ename->vla-object en) 'TotalAngle) 0.5))
(SetClipBoardText (princ (strcat "A" i " = " (ytc-g (+ (/ (* (- pi a a) 180.) pi) 0.00002))
"\nR" i " = " (rtos (setq R (cdr (assoc 40 ent)))) "m"
"\nT" i " = " (rtos (/ (* R (sin a)) (cos a)) 2 2) "m"
"\nP" i " = " (rtos (- (/ R (cos a)) R) 2 2) "m"
"\nK" i " = " (rtos (vlax-curve-getDistAtParam en (vlax-curve-getEndParam en)) 2 2) "m"))))
(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

Mình viết tạm cho bạn thế này thôi. ngại viết code lập bảng lắm.

Khi dùng, Chọn xong đường tròn thì nhấn tiếp Ctrl+V là được. Cũng không khác việc lập bảng là mấy..

(defun c:ytc (/ SetClipBoardText ytc-g i a r en ent)
(defun SetClipBoardText (text / htmlfile result ) ; By XShrimp
(if (= 'STR (type text))
(progn
(setq htmlfile (vlax-create-object "htmlfile")
result (vlax-invoke(vlax-get(vlax-get htmlfile'ParentWindow)'ClipBoardData)'SetData "Text" text ))
(vlax-release-object htmlfile) text)))
(defun ytc-g (goc / gd gp gs )
(setq Gd (fix Goc)
Gp (fix (* (- Goc Gd) 60))
Gs (* (- (* (- Goc Gd) 60) Gp) 60))
(strcat (if (< Gd 10) (strcat "0" (rtos Gd 2 0)) (rtos Gd 2 0)) "d"
(if (< Gp 10) (strcat "0" (rtos Gp 2 0)) (rtos Gp 2 0)) "'"
(if (< Gs 9.5) (strcat "0" (rtos Gs 2 0)) (rtos Gs 2 0)) "''"))
(and
(setq i (getint "nhap ten duong cong (nhap so):"))
(setq i (itoa i))
(not (while (not (and (setq en (car (entsel "\n chon duong can lay yeu to cong:\n")))
(wcmatch (cdr (assoc 0 (setq ent (entget en)))) "ARC")))))
(setq a (* (vlax-get-property (vlax-ename->vla-object en) 'TotalAngle) 0.5))
(SetClipBoardText (princ (strcat "A" i " = " (ytc-g (+ (/ (* (- pi a a) 180.) pi) 0.00002))
"\nR" i " = " (rtos (setq R (cdr (assoc 40 ent)))) "m"
"\nT" i " = " (rtos (/ (* R (sin a)) (cos a)) 2 2) "m"
"\nP" i " = " (rtos (- (/ R (cos a)) R) 2 2) "m"
"\nK" i " = " (rtos (vlax-curve-getDistAtParam en (vlax-curve-getEndParam en)) 2 2) "m"))))
(princ))

e cám ơn bác. cho e hỏi, làm thế nào để rút bớt số chữ số thập phân sau dấu phẩy của thông số bán kính R khi dùng lisp này từ 4 về 2 con số thui ah?

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

e cám ơn bác. cho e hỏi, làm thế nào để rút bớt số chữ số thập phân sau dấu phẩy của thông số bán kính R khi dùng lisp này từ 4 về 2 con số thui ah?

thay

(rtos (setq R (cdr (assoc 40 ent))))

bằng

(rtos (setq R (cdr (assoc 40 ent))) 2 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

Yêu cầu của bạn có vẻ giống yêu cầu này, bạn tham khảo, tự tạo Block theo form của mình (miễn là có tên - thứ tự giống thế ) :

http://www.cadviet.c...showtopic=47442

cám ơn bác ketxu, e tìm trên diễn đàn mãi mà không được như ý, nên mới gửi yêu cầu

Chúc bác zui

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

thay

(rtos (setq R (cdr (assoc 40 ent))))

bằng

(rtos (setq R (cdr (assoc 40 ent))) 2 2)

được rùi ah.

Ctrl V lun không thấy j bác nhỉ? hjjj

e vẫn phải dùng tới F2 bôi đen rùi Ctrl C, rùi ed mtext rùi mới Ctrl 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

được rùi ah.

Ctrl V lun không thấy j bác nhỉ? hjjj

e vẫn phải dùng tới F2 bôi đen rùi Ctrl C, rùi ed mtext rùi mới Ctrl V.

bạn thử copy cái này (vl-load-com) rồi paste vào command. xong rồi chạy lại lệnh. nếu Ctrl+V mà ra được thì đưa nó vào lisp luôn.

Làm như trên thì bạn thừa bước edit mtext. mặc định khi nhấn Ctrl+V trong cad thì nó sẽ tạo luôn đối tượng Mtext chứa nội dung trong Clipboard cho bạn.

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  

×