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

[ Nhờ viết] Lisp rải mặt cắt thép theo tỷ lệ bản vẽ

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

Các anh các chị giúp e vụ này, e muốn tạo ra một lisp rải mặt cắt ngang của thép tròn khi gõ 

RT thì cad sẽ yêu cầu đường kính thép, sau đó yêu cầu khoảng cách giữa các mặt cắt, sau đó yêu cầu nhập tỷ lệ, sau đó chọn điểm đầu và điểm cuối, e xin cảm ơn   

http://www.mediafire.com/view/myfiles/#t9qmtqtlisx0crb   

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ử lisp sau, mình chỉ lấy những cái sẵn có rồi sửa lại theo yêu cầu của bạn

(defun c:rt (/ a pt1 pt2  times pt #dia1 #inter1)
  (setq #OSMODE (getvar "OSMODE"))
  (setvar "cmdecho" 0)
  (or #dia(setq #dia 16))
  (or #inter(setq #inter 200))
  (or #tl(setq #tl 20))
  (if(and(setq	pt1    (getpoint "\nDiem dau..."))
	 (setq pt2    (getpoint "\n... diem cuoi" pt1))
	 (not (initget 6))
	 (setq #dia   (cond((getdist pt2 (strcat"\nDuong kinh thep <" (rtos #dia 2 2)">: ")))(#dia)))
	 (not (initget 6))
	 (setq #inter (cond((getdist(strcat"\nKhoang cach giua cac thanh thep  <" (rtos #inter 2 2)">: ")))(#inter)) )
	 (not (initget 6))
	 (setq #tl (cond((getint (strcat"\nTy le <" (rtos #tl 2 0)">: ")))(#tl)))
	 )
    (progn
      (setq #dia1 (/ #dia #tl)
	    #inter1 (/ #inter #tl)
	    a      (angle pt1 pt2)
	    times  (fix (/ (distance pt1 pt2) #inter1))
	    )

      (command "_.Undo" "be")
      (setvar "osmode" 0)

      (while (>= times 0)
	(setq pt (polar pt1 a (* times #inter1)))
	(command "_.DONUT" 0 #dia1 pt "")
	(setq times (1- times))
	)
      )
    )
  (command "_.Undo" "be")
  (setvar "osmode" #OSMODE)
  (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

Em cảm ơn anh rất nhiều, a ơi a có thể sửa lại giúp sao cho chỗ nhập đường kính cốt thép nó hiện trên  nền cad được không, của a nó nằm dưới dòng command, mà a chỉnh luôn hộ e xem khoảng cách giữa các cốt thép thì tính từ mép ngoài của thép được không anh, lisp của a tính từ tâm của thép mất rồi. e 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

khoảng cách các thép tính từ mép ngoài là tính như thế nào?

còn những cay ở giữa thì tính ra sao?

Nếu Bạn nêu rõ đầu bài tính như thế nào thì mình làm mới được và cũng không bị mất nhiều thời gian để viết code

Còn việc nhập từ bàn phím mà nó ko hiện lên trên nền cad là do autocad cua bạn đã tắt chức năng dynamic input rồ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

Dạ ý e là như thế này: Giả sử e có một đoạn thẳng dài 200mm cần rải thép

Gõ RT chọn điểm thứ nhất em chọn đầu đoạn 200mm, chọn điểm thứ hai e chọn cuối đoạn 200mm

nhập đường kính thép -> nhập khoảng cách giữa các cốt thép, thì có kết quả như hình vẽ sau, e xin đưa ảnh lên để anh tien2005 rõ, nếu có gì thì mong a và mọi người bỏ qua cho

http://www.mediafire.com/view/myfiles/#yf29xp3pz5ydil9

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

ah, mình hỏi thêm cho rõ vấn đề:

- Bạn muốn thanh thép là circle hay donut?

- theo hình vẽ ở bài 5 thì dó phải điểm tiếp xúc của circle và line cách điểm đầu 1 đoạn là d/2 hay ko?

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

Dạ e muốn thanh thép là donut, và tâm của đường tròn đó cách đường thẳng e chon ban đầu là D/2 và điểm đầu tiên của đường thẳng mình chọn cùng phương với đường kính ngoài của thép ( giống hình e đã mô tả) e xin cảm ơ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

Bạn thử lisp này xem đã chưa

(defun c:rt (/ a pt1 pt2  times pt #dia1 #inter1 dyn)
  (setq #OSMODE (getvar "OSMODE"))
  (setq dyn (getvar "DYNMODE"))
  (setvar "cmdecho" 0)
  (setvar "DYNMODE" 3)
  (or #dia(setq #dia 16))
  (or #inter(setq #inter 200))
  (or #tl(setq #tl 20))
  (if(and(setq	pt1    (getpoint "\nDiem dau..."))
	 (setq pt2    (getpoint "\n... diem cuoi" pt1))
	 (not (initget 6))
	 (setq #dia   (cond((getdist pt2 (strcat"\nDuong kinh thep <" (rtos #dia 2 2)">: ")))(#dia)))
	 (not (initget 6))
	 (setq #inter (cond((getdist(strcat"\nKhoang cach giua cac thanh thep  <" (rtos #inter 2 2)">: ")))(#inter)) )
	 (not (initget 6))
	 (setq #tl (cond((getint (strcat"\nTy le <" (rtos #tl 2 0)">: ")))(#tl)))
	 )
    (progn
      (setq #dia1 (/ #dia #tl)
	    #inter1 (+(/ #inter #tl)(* #dia1 1))
	    a      (angle pt1 pt2)
	    times  (fix (/ (distance pt1 pt2) #inter1))
	    pt1 (polar pt1 (+ a (/ pi 4)) ( * #dia1 0.5 (sqrt 2.0)))
	    )

      (command "_.Undo" "be")
      (setvar "osmode" 0)

      (while (>= times 0)
	(setq pt (polar pt1 a (* times #inter1)))
	(command "_.DONUT" 0 #dia1 pt "")
	(setq times (1- times))
	)
      )
    )
  (command "_.Undo" "en")
  (setvar "osmode" #OSMODE)
  (setvar "DYNMODE" dyn)
  (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

Quá đã :)) tien2005 sếp à, quá tuyệt =)) nếu có được địa chỉ email hoặc nick chát của sếp thì còn đã hơn, mong một ngày nào đó được làm phiền thêm lần nữa hihi

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

×