Đến nội dung


Hình ảnh
- - - - -

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


  • Please log in to reply
9 replies to this topic

#1 LoveLisp

LoveLisp

    biết lệnh extend

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

Đã gửi 13 November 2012 - 03:11 PM

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

#2 ketxu

ketxu

    Copier - Paster - Editor

  • Moderator
  • PipPipPipPipPipPipPip
  • 5678 Bài viết
Điểm đánh giá: 2605 (tuyệt vời)

Đã gửi 13 November 2012 - 03:18 PM

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

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#3 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 November 2012 - 03:42 PM

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

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


#4 LoveLisp

LoveLisp

    biết lệnh extend

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

Đã gửi 13 November 2012 - 03:56 PM

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

#5 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 November 2012 - 03:59 PM

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

  • 0

#6 LoveLisp

LoveLisp

    biết lệnh extend

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

Đã gửi 13 November 2012 - 04:05 PM

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 đỡ!
  • 0

#7 LoveLisp

LoveLisp

    biết lệnh extend

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

Đã gửi 13 November 2012 - 04:19 PM

Ồ, 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!!!
  • 0

#8 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 November 2012 - 04:25 PM

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

#9 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 November 2012 - 04:41 PM

Ồ, 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.
  • 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.


#10 LoveLisp

LoveLisp

    biết lệnh extend

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

Đã gửi 13 November 2012 - 04:59 PM

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