Đến nội dung


Hình ảnh
- - - - -

[yêu cầu] Lisp vẽ hình chữ nhật


  • Please log in to reply
13 replies to this topic

#1 phongtran86

phongtran86

    biết lệnh offset

  • Members
  • PipPipPip
  • 177 Bài viết
Điểm đánh giá: 22 (tàm tạm)

Đã gửi 13 May 2013 - 03:55 PM

Nhập vào 2 điểm A, B. lisp1 sẽ vẽ HCN qua ma offset vào 1 đoạn a thay đổi<mặc định là 110>

lisp 2 offset ra ngoai đoạn a <mặc định là 110>. Như hình mô tả dưới. Các bác giúp em với

945447_561790720510724_150356312_n.jpg

Similar topics from web:
Bộ lisp autocad đầy đủ cho dân thiết kế mảng xây dựng. Tất cả trong ...
Auto CAD qua các hình vẽ
Kinh ngiệm dùng CAD và LISP
Visual Lisp? [Lưu Trữ]
HiTD
Download Phần mềm thống kê cốt thép TIP
Tự động hóa vẽ Hình trụ hố khoan và Mặt cắt địa chất công trình ...
Phần mềm PKT 1.0 trong khảo sát thiết kế: Giảm thời gian, tránh sai ...
Làm sao lấy dữ liệu trong cad qua excel?
Mẹo vặt trong CAD
Hướng dẫn sử dụng mã Lisp
Lisp chuyển Line thành Polyline
Thảo luận [Nên đọc] Xây dựng cấu hình và các giải pháp cho các ...
Giúp em Lisp lấy số liệu từ file txt để vẽ hình
Tổng quan về Autolisp–ngôn ngữ lập trình trong tự động hóa thiết kế

  • 0

#2 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1360 (rất tốt)

Đã gửi 13 May 2013 - 04:48 PM

Muốn ra thì dương mà muốn vô thì âm.

Lệnh VHCN.

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;Tao moi rectang
;;;Cu phap su dung (duy:t_rectang toadoa toadob kieu tile Layer Color)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun duy:t_rectang (diema diemb dorong tl stl La Co)


(setq toado (list diema (list (car diema) (cadr diemb)) diemb (list (car diemb) (cadr diema)) ))

(cond ((= la "") (setq la (getvar "Clayer")) ))
(cond ((= co "") (setq co 256) ))
(cond ((= tl "") (setq tl "bylayer") ))
(cond ((= stl "") (setq stl 1) ))


(setq Lst
  (list
   (cons 0 "LWPOLYLINE")
   (cons 100 "AcDbEntity")
   (cons 8 la)
   (cons 6 tl)
   (cons 48 stl)
   (cons 62 co)
   (cons 100 "AcDbPolyline")
   (cons 43 dorong)
   (cons 90 4)
   (cons 70 1)))
(setq x 0)
(repeat 4
  (setq Lst (append Lst (list (cons 10 (nth x toado)) )))
  (setq x (1+ x)))
(entmakex Lst)
(princ)
)


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;Xac dinh gia tri so neu chua co thi gan cho gia tri mac dinh
;;;Cu phap su dung (duy:xd_gts gtn gtmd mdich)
;;;Gia tri tra ve la so gtn
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun duy:xd_gts (gtn gtmd mdich / gtn gtmd mdich)
(or gtn (setq gtn gtmd))
(setq gtn (cond ((getreal (strcat "\n" mdich " < " (rtos gtn 2 2) " >:")))(gtn)))
gtn)



(defun c:vhcn (/ diemm diemh diema diemb)
(setq diemm (getpoint "\nDiem thu nhat:"))
(setq diemh (getpoint "\nDiem thu hai:"))
(duy:t_rectang diemm diemh 0 "" "" "" "")
(setq khoang (duy:xd_gts khoang 110 "Khoang cach offset: "))
(setq diema (polar diemm pi khoang))
(setq diema (polar diema (/ (* pi 3) 2) khoang))
(setq diemb (polar diemh (* 2 pi) khoang))
(setq diemb (polar diemb (/ pi 2) khoang))
(duy:t_rectang diema diemb 0 "" "" "" "")
(princ))

  • 1

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#3 phongtran86

phongtran86

    biết lệnh offset

  • Members
  • PipPipPip
  • 177 Bài viết
Điểm đánh giá: 22 (tàm tạm)

Đã gửi 13 May 2013 - 05:15 PM

cảm ơn bác. Khi vẽ như thế thi em không muốn có hcn của pick1, pick2 mà chỉ có của offset thôi. Với lại  Khi ta vẽ 2 đỉnh từ cung phần tư thứ 2 sang cung phần tư thứ 4 thi hình chữ nhật ko đc như ý. Bác fix dc thi tốt quá21028_h2.png


  • 0

#4 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 13 May 2013 - 05:50 PM

Code của bạn đây :

 

 
(DEFUN C:vhcn(/ p1 p2 pside kcach el)
  (setvar "cmdecho" 0)
  (COMMAND "RECTANG" "_non" (SETQ P1 (GETPOINT "\nPICK DIEM 1 :")) "_non"(setq p2 (GETPOINT p1 "\npICK DIEM 2 :")))
  (if (< (setq kcach (getreal "\nKhoang cach offset :")) 0)
    (setq pside (polar p1 (angle p1 p2) (/ (distance p1 p2) 2.0)))
    (setq pside (polar p1 (angle p2 p1) (/ (distance p1 p2) 2.0)))
  )(setq el (entlast))
  (COMMAND "OFFSET" (abs kcach) el "_non" pside "e")
  (command "erase" el "")
)

  • 2

#5 phongtran86

phongtran86

    biết lệnh offset

  • Members
  • PipPipPip
  • 177 Bài viết
Điểm đánh giá: 22 (tàm tạm)

Đã gửi 13 May 2013 - 06:43 PM

Code của bác thật ngắn gọn xúc tích. Cảm ơn bác nhiều. Có cái nó ko có cái gợi ý 110, em thêm vào rồi


  • 0

#6 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 13 May 2013 - 07:00 PM

Thích ngắn thì đây nữa!

 

(defun C:HA( / p1 p3 kc p1x p3x)
 (setq p1 (getpoint "\nPick diem 1: "))
 (setq p3 (getcorner p1 "\nPick diem 2: "))
 (or kc (setq kc 110))
 (setq kc (cond ((getdist (strcat "\nKhoang cach offset <" (rtos kc 2 2) ">:"))) (kc)))
 (setq p1x (list (+ (min (car p1) (car p3)) kc) (+ (min (cadr p1) (cadr p3)) kc))
       p3x (list (- (max (car p1) (car p3)) kc) (- (max (cadr p1) (cadr p3)) kc)))
 (command "rectang" "non" p1x "non" p3x))

  • 2

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#7 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 13 May 2013 - 10:17 PM

Thích ngắn hơn thì đây nữa :

 
(defun c:vhcn(/ p1 p2 dis)
  (setvar "cmdecho" 0)
 (or kc (setq kc 110))
 (setq kc (cond ((getdist (strcat "\nKhoang cach offset <" (rtos kc 2 2) ">:"))) (kc)))
  (command "rectang" (setq p1 (getpoint "\n Diem thu 1 :")) (setq p2 (getcorner p1 "\n Diem thu 2 :")))
  (setq dis (/ (distance p1 p2) 2.0))
  (command "scale" "l" "" "_non" (polar p1 (angle p1 p2) dis) (abs (/ (+ dis (* kc (sqrt 2))) dis)))
)

  • 0

#8 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 13 May 2013 - 10:24 PM

Sao mà scale theo 2 phương như nhau được bác Tue_NV ơi? HCN chứ phải vuông đâu!


  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#9 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4296 Bài viết
Điểm đánh giá: 3804 (đỉnh cao)

Đã gửi 13 May 2013 - 10:31 PM

Sao mà scale theo 2 phương như nhau được bác Tue_NV ơi? HCN chứ phải vuông đâu!

 

Ý da! nhầm, thanks bác


  • 0

#10 phongtran86

phongtran86

    biết lệnh offset

  • Members
  • PipPipPip
  • 177 Bài viết
Điểm đánh giá: 22 (tàm tạm)

Đã gửi 13 May 2013 - 10:36 PM

hi hi. Bac tue bi bat lỗi :))


  • 0

#11 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 13 May 2013 - 10:55 PM

hi hi. Bac tue bi bat lỗi :))

Xin lỗi bác Tue_NV, tôi xin trả lời thay:

Sơ ý trong khi code lisp là chuyện thường ngày ở... forum bạn à! Ai không sơ ý mới lạ!


  • 0

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#12 phongtran86

phongtran86

    biết lệnh offset

  • Members
  • PipPipPip
  • 177 Bài viết
Điểm đánh giá: 22 (tàm tạm)

Đã gửi 14 May 2013 - 09:06 AM

Hi. Em đùa tí cho vui ấy mà. Mấy bác giúp đỡ nhiệt tình quá.


  • 0

#13 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1360 (rất tốt)

Đã gửi 21 May 2013 - 10:23 AM

Các bác cũng đã làm lisp mới rồi. Nhưng mình cũng sửa phát cho nó vui.

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;Tao moi rectang
;;;Cu phap su dung (duy:t_rectang toadoa toadob kieu tile Layer Color)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun duy:t_rectang (diema diemb dorong tl stl La Co)


(setq toado (list diema (list (car diema) (cadr diemb)) diemb (list (car diemb) (cadr diema)) ))

(cond ((= la "") (setq la (getvar "Clayer")) ))
(cond ((= co "") (setq co 256) ))
(cond ((= tl "") (setq tl "bylayer") ))
(cond ((= stl "") (setq stl 1) ))


(setq Lst
  (list
   (cons 0 "LWPOLYLINE")
   (cons 100 "AcDbEntity")
   (cons 8 la)
   (cons 6 tl)
   (cons 48 stl)
   (cons 62 co)
   (cons 100 "AcDbPolyline")
   (cons 43 dorong)
   (cons 90 4)
   (cons 70 1)))
(setq x 0)
(repeat 4
  (setq Lst (append Lst (list (cons 10 (nth x toado)) )))
  (setq x (1+ x)))
(entmakex Lst)
(princ)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;Xac dinh diem duoi trai va tren phai tu hai diem a va b
;;;Cu phap su dung (duy:xd_dttp<diemdiem diema diemb )
;;;Gia tri tra ve la list diem duoi ben trai va diem tren ben phai
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun duy:xd_dttp<diemdiem (a b / a b xtr xph ytr ydu trd ptr lkq)
(setq luubatdiem (getvar "osmode"))
(setvar "osmode" 0)
(setq xtr (min (car a) (car b)))
(setq xph (max (car a) (car b)))
(setq ytr (max (cadr a) (cadr b)))
(setq ydu (min (cadr a) (cadr b)))
(setq trd (list xtr ydu))
(setq ptr (list xph ytr))
(setq lkq (list trd ptr))
(setvar "osmode" luubatdiem)
lkq)


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;Xac dinh gia tri so neu chua co thi gan cho gia tri mac dinh
;;;Cu phap su dung (duy:xd_gts gtn gtmd mdich)
;;;Gia tri tra ve la so gtn
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun duy:xd_gts (gtn gtmd mdich / gtn gtmd mdich)
(or gtn (setq gtn gtmd))
(setq gtn (cond ((getreal (strcat "\n" mdich " < " (rtos gtn 2 2) " >:")))(gtn)))
gtn)



(defun c:vhcn (/ diemm diemh diema diemb)
(setq diemm (getpoint "\nDiem thu nhat:"))
(setq diemh (getpoint "\nDiem thu hai:"))
(setq trao (duy:xd_dttp<diemdiem diemm diemh))
(setq diemm (car trao))
(setq diemh (cadr trao))
(setq khoang (duy:xd_gts khoang 110 "Khoang cach offset: "))
(setq diema (polar diemm pi khoang))
(setq diema (polar diema (/ (* pi 3) 2) khoang))
(setq diemb (polar diemh (* 2 pi) khoang))
(setq diemb (polar diemb (/ pi 2) khoang))
(duy:t_rectang diema diemb 0 "" "" "" "")
(princ))

 

Mình dùng biện pháp củ chuối là làm 1 hàm cứ nhập vào 2 điểm kiểu gì thì kiểu nó cũng ném lại cho hai điểm theo thứ tự điểm dưới bên trái và điểm trên bên phải he he.


  • 1

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#14 nganhtuan_spkt

nganhtuan_spkt

    Chưa sử dụng CAD

  • Members
  • Pip
  • 4 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 19 September 2016 - 10:58 AM

Nhờ mọi người giúp đỡ viết lisp vẽ hình chữ nhật, chương trình sẽ hỏi chiều rộng (W) và chiều cao (H) hình chữ nhật. Khi vẽ thì cad chỉ cần vẽ ra theo chiều rộng mà chương trình đã hỏi,chiều dài là do mình click chuột trên bản vẽ, không cần chiều cao. Vẽ xong sẽ xuất text WxH với chiều cao chữ sẽ được chương trình lisp hỏi (vẽ lần sau thì chương trình tự nhớ chiều cao chữ,nếu muốn thay đổi thì mình mới đánh lại chiều cao chữ
 
 Cám ơn nhiều!

  • 0