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

[Đố vui] Vẽ hình chữ nhật bao quanh khung nhìn hiện tại trong Model

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

AutoCAD kiểm soát vị trí của bản vẽ thông qua biến "ViewCtr" và "ViewSize". Cả hai biến này đều Read only và có thể điều khiển thông qua các lệnh Zoom và Pan. Nếu bạn thu nhỏ cửa sổ AutoCAD và co kéo các cạnh biên thì các biến này cũng tự động thay đổi theo.

 

Trong Model, mình muốn vẽ một hình chữ nhật bao quanh khung nhìn hiện tại, liệu có được không?(nghĩa là hình chữ nhật bao quanh phần nền đen mặc định của AutoCAD, kể cả việc thu nhỏ và co kéo cửa sổ).

 

hehe, nói và đố vui chứ mình ... không có lời giải, vì biến "ViewCtr" là tọa độ điểm, còn ViewSize là chiều cao khung nhìn, mình không biết cách nào để lấy chiều rộng của khung nhì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

Nếu mình nhớ không nhầm thì bạn thử tìm biến này + tên bác Thaistreetz xem sao. Mình nhớ có bài chia viewport hình như có hàm con.

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

Lisp vẽ rectangle bao quanh khung nhìn model (toàn màn hình):

(defun C:HA()
(command "rectangle" (car (VPCords)) (cadr (VPCords))))
(defun VPCords ( )
((lambda (offset) ((lambda (viewctr) (list (mapcar '- viewctr offset) (mapcar '+ viewctr offset))) (getvar "viewctr")))
((lambda (halfHeight aspectRatio) (list (* halfHeight aspectRatio) halfHeight)) (* 0.5 (getvar "viewsize")) (apply '/ (getvar "screensize")))))

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

hehe.. còn biến "ScreenSize" nữa mà bây giờ mình mới biết!! Cám ơn bác Hà nhé!

 

Biến này không phụ thuộc vào lệnh zoom và pan, chỉ phụ thuộc kích thước của sổ của màn hình AutoCAD. Khi co kéo cửa sổ thì nó thay đổi theo.

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 acet thì chỉ thế này thôi

(defun c:vsr()
(command "rectang" (car (ACET-GEOM-VIEW-POINTS)) (cadr (ACET-GEOM-VIEW-POINTS)) )
)

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 không biết dùng hàm Lambda nên không hiểu cách tính toán các góc như thế nào cả, bác Hà vui lòng hướng dẫn một chút được không?

(getvar "ViewCtr")=(list x y)

(getvar "ViewSize")=h

(getvar "ScreenSize")=(list a b )

 

Như vậy, các góc d1(x1, y1) và d2(x2, y2) được tính toán như thế nào?

 

Mình tìm được rồi:

x1=x-h*(a/b )*0.5__________y1=y-h*0.5 (góc dưới bên trái)

x2=x+h*(a/b )*0.5__________y2=y+h*0.5 (góc trên bên phải)

Cám ơn bạn Tue_NV đã giúp đỡ!

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

Ồ, như vậy là hàm con VPCords của bác Hà trả về kết quả hoàn toàn giống với (ACET-GEOM-VIEW-POINTS), hay nói cách khác đó chính là hàm (ACET-GEOM-VIEW-POINTS) được viết lại bởi CadViet.com!!!

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 không biết dùng hàm Lambda nên không hiểu cách tính toán các góc như thế nào cả, bác Hà vui lòng hướng dẫn một chút được không?

(getvar "ViewCtr")=(list x y)

(getvar "ViewSize")=h

(getvar "ScreenSize")=(list a b )

 

Như vậy, các góc d1(x1, y1) và d2(x2, y2) được tính toán như thế nào?

Bạn tham khảo thêm ở đây để biết cách tính:

Bài viết số 4

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

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

Ồ, như vậy là hàm con VPCords của bác Hà trả về kết quả hoàn toàn giống với (ACET-GEOM-VIEW-POINTS), hay nói cách khác đó chính là hàm (ACET-GEOM-VIEW-POINTS) được viết lại bởi CadViet.com!!!

ACET không phải được viết bởi Cadviet.com.

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

ACET không phải được viết bởi Cadviet.com.

 

Mình có ghi rõ là viết lại mà bác! ACET là một phần cài thêm của AutoCAD, nằm trong Express.

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  

×