Chuyển đến nội dung
Diễn đàn CADViet
NTD

[Yêu cầu ] Lisp Xoay Viewport tùy ý

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

Em là Kiến Trúc Sư , em vẽ Mặt Bằng nhà xong thì muốn vẽ tiếp Mặt Bên + Măt Cắt Ngang của nhà ( các hinh chiếu có hướng chiếu so với Măt Bằng là đi từ bên trái hay bên phải nhìn vào ,các bác đừng nhầm lẫn khái niệm với Mặt Đứng & Mặt Cắt Dọc nhé , 2 cái đấy em ko có vấn đề gì) thì em có 2 cách : Làm hết bên Model Space nha , ko muốn chơi Paper Space đâu

Mời các bác xuống núi . Em xin cảm ơn tất cả ý kiến & Lisp các bác viết cho

Theo mình bạn hoàn toàn giải quyết việc này được nhờ vào chế độ view bên paper mà chẳng khác gì đang vẽ trong model, không việc gì phải dùng đến lisp cả.

Nó đáp ứng được yêu cầu:

- Xoay được mặt bằng để vẽ mặt bên, mặt cắt

- Đảm bảo chỉ có 1 mặt bằng duy nhất (không phải copy hay block... gì cả) nên đảm bảo cả việc tham chiếu và sửa đổi.

Để làm được điều trên:

- Mời bạn sang tab Layout

- Bạn tạo cho mình một View zoom về vị trí mặt bằng (gọi là V1)

- Copy View vừa tạo sang một bên để tý nữa vẽ mặt bên, mặt cắt (gọi là V2)

- Xoay view mặt bằng với lệnh ALIGNSPACE hay lệnh nào tùy bạn miễn là xoay được mặt bằng theo ý muốn. Zoom center V1 theo tỷ lệ thích hợp (nhớ lưu tỷ lệ zoom này_ gọi là Z1)

- Sang V2, Zoom center về giá trị Z1 (đảm bảo chuẩn kích thước so với V1), rồi Pan đến vị trí hợp lý để vẽ mặt bên, mặt cắt

- Bước cuối cùng để việc vẽ bên paper như model là bạn khóa view V1, V2 lại để không thể zoom và Pan (bằng cách quét chọn vào V1, V2 rồi nhấn vào biểu tượng khóa view ở góc dưới bên phải màn hình autocad hoặc Ctrl+1 rồi sửa thuộc tính Display lock của 2 view này thành yes)

- Giờ bạn lick đúp vào V2 để vẽ trên đó bình thường (không khác việc bạn vẽ bên Model tý nào)

  • 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

Theo mình bạn hoàn toàn giải quyết việc này được nhờ vào chế độ view bên paper mà chẳng khác gì đang vẽ trong model, không việc gì phải dùng đến lisp cả.

Em xin bổ sung thêm 2 command VPMAX VPMIN nữa.

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

Code này có thể Zoom center và chọn lại scale của view trước khi xoay, dựa vào Viewsize và chọn center của view

Còn về UCS thay đổi theo View mới, theo mình hợp lý hơn là vẫn theo view trước đó, vì khi này ta ghi dim text ko bị đảo lộn.

Rengen thì mình pó tay, vì dùng lệnh Plan của CAD thì nó mặt định đi theo rồi. hic

(defun c:AS(/ p goc vs)
 (setq p (getpoint "\nSpecify Center")
goc (getreal "\nangle: ")
vs (getvar "viewsize")
p (trans p 1 0))
 (command "ucs" "z" (* -1 goc) "")
 (command "plan" "")
 (command "zoom" "c" (trans p 0 1) vs)
 (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

Code này có thể Zoom center và chọn lại scale của view trước khi xoay, dựa vào Viewsize và chọn center của view

Còn về UCS thay đổi theo View mới, theo mình hợp lý hơn là vẫn theo view trước đó, vì khi này ta ghi dim text ko bị đảo lộn.

Rengen thì mình pó tay, vì dùng lệnh Plan của CAD thì nó mặt định đi theo rồi. hic

Lisp chon tâm rồi nhâp góc xoay view này ngon rồi bác ạ ,

Bác thêm cho em trường hợp chọn góc xoay bằng chuột với . Nhưng bác đừng làm theo kiểu chon 2 điểm như cái lúc trước em thấy dùng ko trưc quan Xin bác có thể lam theo kiểu 3 điểm : chọn điểm A làm tâm , chọn điẻm B , chọn điểm C Enter dẫn đễn AB trùng AC ==> view đc xoay 1 góc BAC .

 

PS: bác sửa cả Lisp xoay kiểu chon đối tượng dùng chuột đê xoay theo 3 điểm như em vừa nói xong nhé

 

Có bác lo cho topic này em sướng rồi , cảm ơn bác 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

Bạn xem lại dòng này: AB trùng AC ==> view đc xoay 1 góc BAC ==> góc quay luôn dương (??). Mình viết theo kiểu Align space của cad:

(defun c:ACS(/ p1 p2 p3 goc vs)
 (setq p1 (getpoint "\nChon Tam")
p2 (getpoint p1 "\nChon Phuong hien tai")
p3 (getpoint p1 "\nChon Phuong moi")
goc (-(angle p3 p1)(angle p2 p1))
vs (getvar "viewsize")
p1 (trans p1 1 0))
 (command "ucs" "z" (/(* 180 goc)pi) "")
 (command "plan" "")
 (command "zoom" "c" (trans p1 0 1) vs)
 (princ)
 )

 

P/s Có bác lo cho topic này em sướng rồi , cảm ơn bác nhiều bạn mà viết như thế này là đã bỏ qua biết bao ý kiến của nhiều bác khác trong diễn đàn, mà cách giải quyết của họ có thể nhanh gọn và hay hơn của mình gấp nhiều lần. Bạn rút kinh nghiệm nhá!

  • Vote tăng 2

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

@ lp_hai : Lisp chạy rất nuột , cảm ơn bạn , tuổi trẻ mà tài cao thế . Mình soi code mãi mà chưa học đc . Tham gia đội bóng cadviet đi , đóng quỹ bóng xong là mình hậu tạ rồi ...nhờ chỉ bảo dài dài :D

http://www.cadviet.c...showtopic=65326

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

Haiz, em cũng muốn tham gia lắm, nhưng sợ tốn "tiền máy bay" hehheheh, vì ở trong SG bác ợ.

Về code thì trong đó toàn những cái cơ bản và quá đơn giả so với các bác khác, nói em tài cao sợ các bá ý cười. heheheh

Sao trong nam không thành lập một đội rồi cuối năm giao lưu với các vùng khác 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

 

Bạn xem lại dòng này: AB trùng AC ==> view đc xoay 1 góc BAC ==> góc quay luôn dương (??). Mình viết theo kiểu Align space của cad:

(defun c:ACS(/ p1 p2 p3 goc vs)
  (setq p1 (getpoint "\nChon Tam")
p2 (getpoint p1 "\nChon Phuong hien tai")
p3 (getpoint p1 "\nChon Phuong moi")
goc (-(angle p3 p1)(angle p2 p1))
vs (getvar "viewsize")
p1 (trans p1 1 0))
  (command "ucs" "z" (/(* 180 goc)pi) "")
  (command "plan" "")
  (command "zoom" "c" (trans p1 0 1) vs)
  (princ)
  )

P/s Có bác lo cho topic này em sướng rồi , cảm ơn bác nhiều bạn mà viết như thế này là đã bỏ qua biết bao ý kiến của nhiều bác khác trong diễn đàn, mà cách giải quyết của họ có thể nhanh gọn và hay hơn của mình gấp nhiều lần. Bạn rút kinh nghiệm nhá!

Bữa nay vào trang này thấy bạn viết đoạn lisp này mang về thử thấy chạy tuyệt quá, mình rất thích thanks bạn nha

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 xem lại dòng này: AB trùng AC ==> view đc xoay 1 góc BAC ==> góc quay luôn dương (??). Mình viết theo kiểu Align space của cad:

(defun c:ACS(/ p1 p2 p3 goc vs)
  (setq p1 (getpoint "\nChon Tam")
p2 (getpoint p1 "\nChon Phuong hien tai")
p3 (getpoint p1 "\nChon Phuong moi")
goc (-(angle p3 p1)(angle p2 p1))
vs (getvar "viewsize")
p1 (trans p1 1 0))
  (command "ucs" "z" (/(* 180 goc)pi) "")
  (command "plan" "")
  (command "zoom" "c" (trans p1 0 1) vs)
  (princ)
  )
P/s Có bác lo cho topic này em sướng rồi , cảm ơn bác nhiều bạn mà viết như thế này là đã bỏ qua biết bao ý kiến của nhiều bác khác trong diễn đàn, mà cách giải quyết của họ có thể nhanh gọn và hay hơn của mình gấp nhiều lần. Bạn rút kinh nghiệm nhá!

 

đúng là hôm nay mới thấy cái này hay hơn hẳn mấy cái mặc định ucs và mvsetup của cad nhưng bác có thể phát triển nó lên nữa ko ạ

em có biết cad 2014 nó quay viewport bằng lệnh ro luôn, đời của nó cao quá mà máy thì hơi cùi nên ko theo được

lisp mình có thể làm được tương tự như vậy không ạ

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

×