Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Đăng nhập để thực hiện theo  
trinhhoanghieu090

{Xin giup do] Viet autolisp nhu File Cad

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

Trước tiên mời các pro xem file cad của em trước rồi em sẽ trình bày, đây là file cad của em.

http://www.cadviet.com/upfiles/3/133631_ve__luoi_o_vuong.dwg

 

 Mong các pro viết cho em một Lisp thay thế cho các công đoạn thủ công em phải vẽ như sau:

 

Trường hợp một:

 

B1: Đầu tiên là vẽ một hình chữ nhật với chiều chiều theo trục x và chiều theo trục y được nhập vào trên dòng lệnh, sau đó pick tâm  hình chữ nhật này (giao điểm của 2 đường chéo) vào một điểm có sẵn trên cad.

B2: Array 2 cạnh của hình AB, AD lần lượt với khoảng cách theo trục X là a và khoảng cách theo trục y là b ( Nếu các pro mà viết được cho em cái lisp mà phải tính array theo bao nhiêu cột và bao nhiêu hàng thì hay quá)

 

Trường hợp hai:

 

B1: Đầu tiên là vẽ một hình chữ nhật với 2 đỉnh được pick  điểm có sẵn trên cad.

B2: Hoàn toàn giống như trên

Vì đây chỉ là một công đoạn rất nhỏ trong một quá trình vẽ bằng cad của em. Các pro bỏ chút thời gian làm cho em cái lisp nhé.

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
Tot77    501

Bạn thử cái này.

 

(defun ve(pt / p1 p2 p3 p4 n)
  (entmake (list (cons 0  "LWPOLYLINE") (cons 100 "AcDbEntity") (cons 100 "AcDbPolyline")
  (cons 90 4) (cons 70 1) (cons 62 1)
  (cons 10 (setq p1 (polar (polar pt pi (* 0.5 ng)) -1.5708 (* 0.5 du))))
  (cons 10 (setq p2 (polar p1 0 ng)))
  (cons 10 (setq p3 (polar p2 1.5708 du)))
  (cons 10 (setq p4 (polar p3 pi ng)))))
  (setq n 0)
  (repeat (1- song)
    (entmake (list (cons 0 "LINE") (cons 62 3)
  (cons 10 (polar p4 0 (* (setq n (1+ n)) d1)))
  (cons 11 (polar p1 0 (* n d1)))))
  )
  (setq n 0)
  (repeat (1- sodu)
    (entmake (list (cons 0 "LINE") (cons 62 3)
  (cons 10 (polar p1 1.5708 (* (setq n (1+ n)) d2)))
  (cons 11 (polar p2 1.5708 (* n d2)))))
  ) 
)
 
(defun c:vov1(/ ng du song sodu pt d1 d2)
  (setq ng (getreal "\nNgang: ")
du (getreal "\nDung: ")
song (getint "\nSo o ngang: ")
sodu (getint "\nSo o dung: ")
pt (getpoint "\nDiem: ")
d1 (/ ng song 1.0)
d2 (/ du sodu 1.0)
  ) (ve pt)
) 
 
(defun c:vov2(/ pt pt1 pt2 ng du song sodu d1 d2)
  (setq pt1 (getpoint "\nDiem1: ")
pt2 (getpoint "\nDiem2: ")
pt (polar pt1 (angle pt1 pt2) (* 0.5 (distance pt1 pt2)))
ng (abs (- (car pt2) (car pt1)))
du (abs (- (cadr pt2) (cadr pt1)))
song (getint "\nSo o ngang: ")
sodu (getint "\nSo o dung: ")
d1 (/ ng song 1.0)
d2 (/ du sodu 1.0)
  ) (ve pt)
) 

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

Thanks Pro   Tot77 nhiều nhé.Em có thể nhờ thêm Pro chút nữa được không. Trong dòng lệnh thay vì nhập " Số ô ngang" và "Số ô đứng" mình "nhập lại là khoảng cách giữa các Line" không". Ví Dụ chiều dài  ngang =1000 ta chọn 10 ô thì khoảng cách mỗi ô là 10m, giờ ta nhập luôn là 10m vào ấy. Và các đường vẽ ra là polyline màu trắng nhé (vì mình dùng kết hợp với lisp khác nữa). Thanks bạn nhiều.

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

Vậy nếu không chia hết thì ô cuối kích thước sẽ khác pk?

 

Đúng rồi Pro ạ. Khi đó kích thước ô bên phải ngoài cùng theo chiều ngang à ô phía trên cùng theo chiều đứng sẽ khác. Pro làm giúp em một phần nữa là sau khi vẽ xong tất cả thì xoá cái hình chữ nhật ban đầu đi. Sorry Pro nhé tại phần yêu cầu  thiếu đúng một chữ quan trọng nhất: " Nếu các pro mà viết được cho em cái lisp mà Không phải tính array theo bao nhiêu cột và bao nhiêu hàng thì hay quá)". :D

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
Tot77    501

Sao bạn nói để cái pline màu trắng cho lệnh sau rồi giờ lại nói xoá đi?

Nếu xoá thì đâu cần vẽ cái đó làm gì. Nói chung khi yêu cầu thì bạn nên cụ thể và nhất quán 1 chút,

chứ ai cũng ngại viết đi sửa lạ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

Hi, có chút hiểu nhầm ở đây anh ạ. Ý em là tất cả các lỉne mình vẽ ra để màu trắng ấy. Còn cái vụ xoá hình vuông thì thôi để em tự xử cũng được. Pro giúp em nốt tí nhé. Thanks pro

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
Tot77    501

Vậy thì đây.

 

(defun ve(pt / p1 p2 p3 p4 n)
 (setq p1 (polar (polar pt pi (* 0.5 ng)) -1.5708 (* 0.5 du))
       p2 (polar p1 0 ng)
       p3 (polar p2 1.5708 du)
       p4 (polar p3 pi ng)
       n 0
  )
  (repeat (if (= 0 (rem ng song)) (1- (fix (/ ng song))) (fix (/ ng song)))
    (entmake (list (cons 0 "LINE") (cons 62 7)
  (cons 10 (polar p4 0 (* (setq n (1+ n)) song)))
  (cons 11 (polar p1 0 (* n song)))))
  )
  (setq n 0)
  (repeat (if (= 0 (rem du sodu)) (1- (fix (/ du sodu))) (fix (/ du sodu)))
    (entmake (list (cons 0 "LINE") (cons 62 7)
  (cons 10 (polar p1 1.5708 (* (setq n (1+ n)) sodu)))
  (cons 11 (polar p2 1.5708 (* n sodu)))))
  )
  (princ)
)
 
(defun c:vov1(/ ng du song sodu pt)
  (setq ng (getreal "\nNgang: ")
du (getreal "\nDung: ")
song (getint "\nKT ngang o: ")
sodu (getint "\nKT dung o: ")
pt (getpoint "\nDiem: ")
  ) (ve pt)
) 
 
(defun c:vov2(/ pt pt1 pt2 ng du song sodu)
  (setq pt1 (getpoint "\nDiem1: ")
pt2 (getpoint "\nDiem2: ")
pt (polar pt1 (angle pt1 pt2) (* 0.5 (distance pt1 pt2)))
ng (abs (- (car pt2) (car pt1)))
du (abs (- (cadr pt2) (cadr pt1)))
song (getint "\nKT ngang o: ")
sodu (getint "\nKT dung o: ")
  ) (ve pt)
)
 

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  

×