Chuyển đến nội dung
Diễn đàn CADViet
Đăng nhập để thực hiện theo  
kienxd04

Lisp vễ hình chữ nhật theo phương bất kỳ

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

Xin chào các bạn

Hiện tại công việc của mình là phải vẽ hình chữ nhật rồi phải xoay hình chữ nhật theo phương ý muốn (vì mặt bằng cần xoay nhiều hướng) nên mình cần sự giúp đỡ của các bạn viết lisp vẽ hình chữ nhật rồi nó tự xoay theo phương bất kỳ (giống như ve hình chữ nhật trong sketchup vậy)

Rất mong sự giúp đỡ của các bạn rành về lisp

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

Yêu cầu có vẻ hơi lạm dụng lisp quá.

+ Tại sao bạn không dùng lệnh UCS để đổi trục theo ý muốn bất kỳ, sau đó rồi vẽ hình chữ nhật ?

+ 1 câu hỏi nữa: Để xoay 1 hình chữ nhật bạn mất bao nhiêu thao tác , các thao tác là như thế nào ( Kể cả cú pháp viết lệnh)  ( Câu hỏi mang tính kiểm tra trình độ sử dụng thành thạo Autocad của bạn)

  • Like 1

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ì mặt bằng của mình nó ko theo 1 hướng, nó rất nhiều hướng khác nhau nên mỗi lần vẽ 1 hcn là phải đổi trục sao?

- nếu theo phương pháp bình thường thì cũng phải mất 2 lệnh, vẽ hình chữ nhật xong dùng lệnh xoay, nhưng như mình đã nó là hình chữ nhật của mình kích thước mỗi hình khác nhau nên làm thủ công nó lâu thô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ùng cad một lệnh duy nhất

Command: REC RECTANG
Current rectangle modes:  Elevation=7313.8327  Rotation=9

Specify first corner point or [Chamfer/Elevation/Fillet/Thickness/Width]:
Specify other corner point or [Area/Dimensions/Rotation]: R
Specify rotation angle or [Pick points] <9>:
Specify other corner point or [Area/Dimensions/Rotation]:

  • Like 1

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

Kết hợp lisp  theo  cách đổi trục và vẽ hình chữ nhật:

 

(defun c:test2 ()
(command "cmdecho" 0)
    (defun *Error* (msg)
    (command "ucs" "p")
    (princ msg))
  (prompt "\nChon 2 diem theo huong ve HCN: ")
  (command "ucs" pause pause "")

  (prompt "\nVe HCN:")
  (command "rectang" pause pause)
  (command "ucs" "p")
  (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
43 phút trước, dinhvantrang đã nói:

Chỉ sưu tầm được của Mr Lee. trong file lisp đã giải thích rất rõ rồi nhé bạn

3P-RecV1-0.lsp

Cảm ơn bạn, lisp này đúng ý mình rồi, nhưng bạn có thể bổ sung thêm là có thêm nét vẽ nó dày ko, giống như vẽ pline đó, mình cảm ơn

 

18 phút trước, duy782006 đã nói:

Dùng cad một lệnh duy nhất

Command: REC RECTANG
Current rectangle modes:  Elevation=7313.8327  Rotation=9

Specify first corner point or [Chamfer/Elevation/Fillet/Thickness/Width]:
Specify other corner point or [Area/Dimensions/Rotation]: R
Specify rotation angle or [Pick points] <9>:
Specify other corner point or [Area/Dimensions/Rotation]:

 

Cái của bạn mìn thấy vãn còn nhiều thao tác quá, với số lượng vẽ hcn khoảng gần 100 hình nhiều hướng khác nhau chắc cũng đuố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
7 phút trước, Danh Cong đã nói:

Kết hợp lisp  theo  cách đổi trục và vẽ hình chữ nhật:

 

(defun c:test2 ()
(command "cmdecho" 0)
    (defun *Error* (msg)
    (command "ucs" "p")
    (princ msg))
  (prompt "\nChon 2 diem theo huong ve HCN: ")
  (command "ucs" pause pause "")

  (prompt "\nVe HCN:")
  (command "rectang" pause pause)
  (command "ucs" "p")
  (princ))

 

Cảm ơn bạn rất nhiều, lisp rất ok nhưng bạn bổ sung thêm tích hợp thêm chiều dày nét vẽ như lệnh pline không?

Mình cảm ơn 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
5 phút trước, Danh Cong đã nói:

:( Chán bạn này. Có kiến thức căn bản nhưng chưa tìm hiểu kỹ.

 

Cadviet.png

 

Ah, nếu vẽ như bạn thì nếu bật lắt lineweight thì trong bv sẽ cũng có rất nhiều nét tô đậm, cái mình muốn chỉ hiện mỗi nét mình vẽ lên thôi để người ta kiểm tra khối lượng, chỉ cần clik vào nét đậm của mình là ra diện tích

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ắt LineWeight thì bao nhiêu độ dày sẽ mất hết.

Nếu muốn hiện để tính khối lượng sao thì nên áp dụng cho nó 1 layer riêng, màu sắc riêng để quản lý. 

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
1 giờ trước, kienxd04 đã nói:

 

Cảm ơn bạn rất nhiều, lisp rất ok nhưng bạn bổ sung thêm tích hợp thêm chiều dày nét vẽ như lệnh pline không?

Mình cảm ơn bạn nhiều.

Dùng biến hệ thống: PLINEWID

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

Gửi bạn kienxd04

Chỉ là một góc nhìn khác!

 

 

(defun c:VeCN(/ d1 d2 td1 td2 goc1 goc2 td3 td4 td kieu dkb diem)
(defun GrdrawDs1 (Dspolya nmau / i dsve d1 d2)
  (setq i 0 dsve '())
  (Repeat (1- (length Dspolya))
     (setq dsve (append dsve (list nmau) (list (nth i Dspolya)) (list (nth (1+ i) Dspolya)))
           i (1+ i)
     )
  )
  (grvecs dsve)
)
  (setvar "Osmode" 0)(Setvar "orthomode" 0)
  (setq d1 (getpoint "\nCho diem dau: ") d2 (getpoint d1 "\nCho diem cuoi: ")
        ds2cu (list d1 d2) diem 2 goc1 (+ (angle d1 d2) (/ pi 2.0))
  )
  (While diem
    (setq kieu 3 dkb 5)
    (while (and (/= kieu 2)(/= dkb 3))
      (setq toado (grread 1) td (cadr toado) dkb (car toado))
      (If (or (= dkb 5) (= dkb 3))
      (Progn
        (setq td1 (Polar td goc1 100) td2 (inters d1 d2 td td1 F)
              goc2 (angle td2 td) kc1 (distance td td2)
              td3 (Polar d2 goc2 kc1) td4 (Polar d1 goc2 kc1)
        )
        (GrdrawDs1 ds2cu 0)(setq ds2 (list d1 d2 td3 td4 d1)) (GrdrawDs1 ds2 10)
      )
      )
      (If (= dkb 3)(setq oo (command "Pline" d1 d2 td3 td4 "c") diem nil))
      (setq ds2cu ds2)
    )
    (command "Redraw")
  )
)

  • Vote tăng 1

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ẽ hình chữ nhât qua 3 điểm

(defun c:hcn(/ p1 p2 p3 p4)
(and  (setq p1 (getpoint "\nP1 :") p2 (getpoint p1 "\nP2") p3 (not (grdraw p1 p2 3 -1)) p3 (getpoint p2 "\nP3:"))
  (entmake (append (list '(0 . "LWPOLYLINE")'(100 . "AcDbEntity") '(100 . "AcDbPolyline")(cons 90 4)(cons 70 1))
   (mapcar '(lambda (x) (cons 10 x)) (list p1 p2 p3 (polar p1 (angle p2 p3) (distance p2 p3))))))
)(redraw))

  • Like 1

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
2 giờ trước, lamgis đã nói:

Vẽ hình chữ nhât qua 3 điểm

(defun c:hcn(/ p1 p2 p3 p4)
(and  (setq p1 (getpoint "\nP1 :") p2 (getpoint p1 "\nP2") p3 (not (grdraw p1 p2 3 -1)) p3 (getpoint p2 "\nP3:"))
  (entmake (append (list '(0 . "LWPOLYLINE")'(100 . "AcDbEntity") '(100 . "AcDbPolyline")(cons 90 4)(cons 70 1))
   (mapcar '(lambda (x) (cons 10 x)) (list p1 p2 p3 (polar p1 (angle p2 p3) (distance p2 p3))))))
)(redraw))

Cái này hình như vẽ hình bình hành mà Bạn... Chương trình viết gọn thật.

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ào lúc 20/12/2017 tại 15:36, DuongTrungHuy đã nói:

Gửi bạn kienxd04

Chỉ là một góc nhìn khác!

 

 

(defun c:VeCN(/ d1 d2 td1 td2 goc1 goc2 td3 td4 td kieu dkb diem)
(defun GrdrawDs1 (Dspolya nmau / i dsve d1 d2)
  (setq i 0 dsve '())
  (Repeat (1- (length Dspolya))
     (setq dsve (append dsve (list nmau) (list (nth i Dspolya)) (list (nth (1+ i) Dspolya)))
           i (1+ i)
     )
  )
  (grvecs dsve)
)
  (setvar "Osmode" 0)(Setvar "orthomode" 0)
  (setq d1 (getpoint "\nCho diem dau: ") d2 (getpoint d1 "\nCho diem cuoi: ")
        ds2cu (list d1 d2) diem 2 goc1 (+ (angle d1 d2) (/ pi 2.0))
  )
  (While diem
    (setq kieu 3 dkb 5)
    (while (and (/= kieu 2)(/= dkb 3))
      (setq toado (grread 1) td (cadr toado) dkb (car toado))
      (If (or (= dkb 5) (= dkb 3))
      (Progn
        (setq td1 (Polar td goc1 100) td2 (inters d1 d2 td td1 F)
              goc2 (angle td2 td) kc1 (distance td td2)
              td3 (Polar d2 goc2 kc1) td4 (Polar d1 goc2 kc1)
        )
        (GrdrawDs1 ds2cu 0)(setq ds2 (list d1 d2 td3 td4 d1)) (GrdrawDs1 ds2 10)
      )
      )
      (If (= dkb 3)(setq oo (command "Pline" d1 d2 td3 td4 "c") diem nil))
      (setq ds2cu ds2)
    )
    (command "Redraw")
  )
)

Bác #DuongTrungHuy, lisp bác rất tuyệt. Nếu thêm nốt 1 tính năng bắt điểm khi pick điểm thứ 3 nữa là hoàn hảo. :)))

  • Like 1

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 Danh Cong có thể giúp mình việc đó mà.

Ý tưởng của bạn xoay trục cũng rất hay và thật bất ngờ với mì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
Vào lúc 12/20/2017 tại 15:36, DuongTrungHuy đã nói:

Gửi bạn kienxd04

Chỉ là một góc nhìn khác!

 

 

(defun c:VeCN(/ d1 d2 td1 td2 goc1 goc2 td3 td4 td kieu dkb diem)
(defun GrdrawDs1 (Dspolya nmau / i dsve d1 d2)
  (setq i 0 dsve '())
  (Repeat (1- (length Dspolya))
     (setq dsve (append dsve (list nmau) (list (nth i Dspolya)) (list (nth (1+ i) Dspolya)))
           i (1+ i)
     )
  )
  (grvecs dsve)
)
  (setvar "Osmode" 0)(Setvar "orthomode" 0)
  (setq d1 (getpoint "\nCho diem dau: ") d2 (getpoint d1 "\nCho diem cuoi: ")
        ds2cu (list d1 d2) diem 2 goc1 (+ (angle d1 d2) (/ pi 2.0))
  )
  (While diem
    (setq kieu 3 dkb 5)
    (while (and (/= kieu 2)(/= dkb 3))
      (setq toado (grread 1) td (cadr toado) dkb (car toado))
      (If (or (= dkb 5) (= dkb 3))
      (Progn
        (setq td1 (Polar td goc1 100) td2 (inters d1 d2 td td1 F)
              goc2 (angle td2 td) kc1 (distance td td2)
              td3 (Polar d2 goc2 kc1) td4 (Polar d1 goc2 kc1)
        )
        (GrdrawDs1 ds2cu 0)(setq ds2 (list d1 d2 td3 td4 d1)) (GrdrawDs1 ds2 10)
      )
      )
      (If (= dkb 3)(setq oo (command "Pline" d1 d2 td3 td4 "c") diem nil))
      (setq ds2cu ds2)
    )
    (command "Redraw")
  )
)

Ý tưởng của bạn rất hay, thêm 1 cách nữa vẽ HCN theo phương bất kỳ

Nhưng bạn thêm chức năng bắt điểm (cả 3 điểm) nữa thì sẽ ok

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 Kienxd04:

Vấn đề bắt điểm là đơn giản. Chỉ là mình ko biết cụ thể bạn đang làm 1 bản vẽ như thế nào để lập chế độ bắt điểm cho phù hợp, không có động tác thừa.

Còn nếu tổng quát khi chạy bạn chịu khó bắt điểm "bằng tay" (tức là bắt điểm osnap trên thanh Ribbon)  vậy.

 

Nếu được Bạn đưa bản vẽ và y/c cụ thể thì có thể mình thêm lệnh bắt dính cho phù hợp.

  • Like 1

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
4 giờ trước, hiepttr đã nói:

Có vẻ như các bác đã "lờ đi" trường hợp các point có Z khác nhau thì phải ^^

Hì có vẻ bài toán đã được phát triển lên 3D. Theo Bạn các point có tọa độ z thì cụ thể đầu đề bài toán là sao hở Bạn, Bạn cho ý để mở rộng chương trình thêm lê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

Mình đâu có ý kiến ý voi gì đâu ^^
Chỉ là nhiều lúc trong công việc thì đầu vào của mình rất có thể là các point có Z khác nhau & cũng vẫn muốn vẽ ra các hcn ... (VD: từ số liệu trút được từ máy toàn đạc >>> vẽ sân bóng, nhà ăn ...)
>>> Khi đó, phần lớn các code trên chưa thực hiện được.

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
7 phút trước, hiepttr đã nói:

Mình đâu có ý kiến ý voi gì đâu ^^
Chỉ là nhiều lúc trong công việc thì đầu vào của mình rất có thể là các point có Z khác nhau & cũng vẫn muốn vẽ ra các hcn ... (VD: từ số liệu trút được từ máy toàn đạc >>> vẽ sân bóng, nhà ăn ...)
>>> Khi đó, phần lớn các code trên chưa thực hiện được.

À thì ra là vậy. Ý của Bạn cũng rất thực tế. Tức là muốn có 1 hình chữ nhật trên mặt phẳng xOy từ 3 điểm 3D.

Nhưng mình muốn hỏi; Bạn có cần mình cải tiến thêm chương trình trên ko? Nếu nó cần với Bạn thì mình sẽ làm.

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  

×