Đến nội dung


Hình ảnh
- - - - -

{Xin giup do] Viet autolisp nhu File Cad


  • Please log in to reply
8 replies to this topic

#1 trinhhoanghieu090

trinhhoanghieu090

    Edu level: li8

  • Members
  • PipPipPipPipPip
  • 309 Bài viết
Điểm đánh giá: 29 (tàm tạm)

Đã gửi 02 August 2014 - 10:32 AM

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.c...uoi_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é.


  • 0

#2 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 02 August 2014 - 02:25 PM

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

  • 0

#3 trinhhoanghieu090

trinhhoanghieu090

    Edu level: li8

  • Members
  • PipPipPipPipPip
  • 309 Bài viết
Điểm đánh giá: 29 (tàm tạm)

Đã gửi 02 August 2014 - 04:55 PM

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.


  • 0

#4 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 02 August 2014 - 05:13 PM

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

#5 trinhhoanghieu090

trinhhoanghieu090

    Edu level: li8

  • Members
  • PipPipPipPipPip
  • 309 Bài viết
Điểm đánh giá: 29 (tàm tạm)

Đã gửi 02 August 2014 - 05:34 PM

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


  • 0

#6 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 02 August 2014 - 06:20 PM

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.


  • 0

#7 trinhhoanghieu090

trinhhoanghieu090

    Edu level: li8

  • Members
  • PipPipPipPipPip
  • 309 Bài viết
Điểm đánh giá: 29 (tàm tạm)

Đã gửi 02 August 2014 - 06:59 PM

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
  • 0

#8 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 02 August 2014 - 07:30 PM

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

  • 0

#9 trinhhoanghieu090

trinhhoanghieu090

    Edu level: li8

  • Members
  • PipPipPipPipPip
  • 309 Bài viết
Điểm đánh giá: 29 (tàm tạm)

Đã gửi 02 August 2014 - 09:09 PM

Thanks pro nhé. Chúc pro cuôi tuần vui vẻ


  • 0