Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
8 replies to this topic

#1 chien_lv

chien_lv

    biết vẽ rectang

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

Đã gửi 30 May 2013 - 12:18 AM

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


  • 0

#2 tien2005

tien2005

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 257 Bài viết
Điểm đánh giá: 94 (tàm tạm)

Đã gửi 30 May 2013 - 01:40 PM

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

  • 0

#3 chien_lv

chien_lv

    biết vẽ rectang

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

Đã gửi 30 May 2013 - 03:15 PM

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


  • 0

#4 tien2005

tien2005

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 257 Bài viết
Điểm đánh giá: 94 (tàm tạm)

Đã gửi 30 May 2013 - 05:21 PM

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


  • 0

#5 chien_lv

chien_lv

    biết vẽ rectang

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

Đã gửi 30 May 2013 - 08:14 PM

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


  • 0

#6 tien2005

tien2005

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 257 Bài viết
Điểm đánh giá: 94 (tàm tạm)

Đã gửi 30 May 2013 - 11:48 PM

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?


  • 0

#7 chien_lv

chien_lv

    biết vẽ rectang

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

Đã gửi 31 May 2013 - 02:36 PM

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


  • 0

#8 tien2005

tien2005

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 257 Bài viết
Điểm đánh giá: 94 (tàm tạm)

Đã gửi 31 May 2013 - 04:47 PM

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

  • 0

#9 chien_lv

chien_lv

    biết vẽ rectang

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

Đã gửi 31 May 2013 - 08:47 PM

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


  • 0