Đến nội dung


Hình ảnh
- - - - -

[Đã xong] Lisp bố trí file hình slide cân xứng trong tile image của dialog


  • Please log in to reply
22 replies to this topic

#1 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 07 October 2014 - 09:10 AM

Chúng ta thường vất vả phải chỉnh sửa nhiều lần để slide nằm cân xứng trong tile image của dialog?

Lisp dưới đây giúp các bạn giải quyết công việc đó một cách nhẹ nhàng.

Bài toán:

Giả sử trong dialog chúng ta có 1 tile image tên là key,  với kích thước rộng và cao là wimg, himg. Tỉ số kimg=wimg/himg.

Giả sử chúng ta có 3 rectang rec1, rec2, rec3 với các kích thước rộng và cao tổng quát là wrec và hrec. Tỉ số krec=wrec/hrec.

Giả sử chiều rộng và chiều cao của screensize là wscr, hscr (lấy bằng hàm (getvar “screensize”)). Tỉ số kscr=wscr/hscr.

Làm thế nào để bố trí rec1/rec2/rec3 vào tile image cân xứng nhất có thể?

(Cân xứng ở đây được định nghĩa là: trọng tâm của hình và trọng tâm của tile phải trùng nhau; 2 đường biên trái/phải hoặc trên/dưới hoặc cả 4 đường biên của hình phải vừa khít vào đường biên của tile)

Hình vẽ dưới minh họa rec1 có krec<kimg, rec2 có krec>kimg, rec3 có krec=kimg.

67029_display_image.png

Các bước giải quyết:

1). Dùng hàm (getvar “screensize”) để lấy wscr và hscr, tính tỉ số kscr.

2). Đo kích thước wrec và hrec của rec, tính tỉ số krec.

3). Zoom “W” với “ll” và “ur” của rec. Sau đó dùng lệnh MSlide để tạo file slide, gọi tên là fname.

4). Dùng hàm (HA:Image key fname color kscr krec) để display rec lên tile image. Hàm này thay cho 4 hàm: start_image + file_image + slide_image + end_image. Trong đó color là màu nền.

; 1). VÏ Rectang bao quanh Image muèn t¹o Slide, råi Zoom "W" víi "ll" vµ "ur" cña Rectang.
; 2). §o kÝch th­íc Width vµ Height cña Rectang, ®­îc c¸c gi¸ trÞ: wrec vµ hrec, tÝnh tØ sè krec=wrec/hrec.
; 3). Dïng hµm (getvar 'screensize) ®Ó lÊy Width vµ Height cña Screen, ®­îc c¸c gi¸ trÞ: wscr vµ hscr, tÝnh tØ sè kscr=wscr/hscr.
; 4). T¹o Slide b»ng lÖnh MSlide.
; 5). Dïng hµm "HA:Image" (thay cho 4 c¶ hµm start_image + fill_image + slide_image + end_image) ®­a vµo Lisp cña b¹n ®Ó Display lªn Tile Image.
; Chó ý: 
; 1). Image lu«n n»m ë träng t©m cña Tile vµ chÌn khÝt biªn cña Tile.
; 2). Do c¸c gi¸ trÞ nhËp vµo hµm slide_image lµ sè nguyªn (dialog box units) nªn c¸c hµm fix cã thÓ dÉn ®Õn sai sè nhá.
(defun HA:Image (key fname color kscr krec / wimg himg)
 (setq wimg (dimx_tile key) himg (dimy_tile key))
 (start_image key)
 (fill_image 0 0 wimg himg color)
 (if (<= krec kscr)
  (slide_image (- (fix (/ (- (* himg kscr) wimg) 2))) 0 (fix (* himg kscr)) himg fname)
  (slide_image 0 (- (fix (/ (- (/ wimg kscr) himg) 2))) wimg (fix (/ wimg kscr)) fname))
 (end_image))
 


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


#2 phamhuy1

phamhuy1

    biết vẽ rectang

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

Đã gửi 07 October 2014 - 10:41 AM

Thanks sự nhiệt tâm của a! Download về xài thui :)


  • 0

#3 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 07 October 2014 - 03:08 PM

Sao bác HA không làm cho hình 3,4 nó vừa khít giống hình 5 luôn? như vậy nó mới đẹp chứ.

@phamhuy1 : nếu bạn down về xài thì bạn chắc cũng thuộc dạng "Ngọa hổ tàng long", "Chân nhân bất lộ tướng" hay chí ít cũng là "Cao nhân giả kẻ khờ", chứ xài được cái lsp này thì ngoài khả năng biết lsp ra thì cũng phải biết DCL mới dùng được. :lol:  :lol:


  • 0

#4 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 07 October 2014 - 03:22 PM

Sao bác HA không làm cho hình 3,4 nó vừa khít giống hình 5 luôn? như vậy nó mới đẹp chứ.

Cái này là tùy user ứng biến. Bắt họ vẽ các Rec cùng hệ số k với k của tile là hơi ép họ. Ở đây theo nguyên tắc "mở" là Rec nào cũng OK cả. Còn ai sành điệu thì chắc chắn họ sẽ vẽ 2 Rec đồng dạng rồi!


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


#5 phamhuy1

phamhuy1

    biết vẽ rectang

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

Đã gửi 07 October 2014 - 04:04 PM

phamhuy1 : nếu bạn down về xài thì bạn chắc cũng thuộc dạng "Ngọa hổ tàng long", "Chân nhân bất lộ tướng" hay chí ít cũng là "Cao nhân giả kẻ khờ", chứ xài được cái lsp này thì ngoài khả năng biết lsp ra thì cũng phải biết DCL mới dùng được. :lol:  :lol:

 

Ah há, giờ test thử thì mới tá hỏa tam tinh :wub:


  • 0

#6 anhduccec

anhduccec

    biết vẽ arc

  • Members
  • PipPip
  • 45 Bài viết
Điểm đánh giá: 21 (tàm tạm)

Đã gửi 10 October 2014 - 11:23 AM

Cái này là tùy user ứng biến. Bắt họ vẽ các Rec cùng hệ số k với k của tile là hơi ép họ. Ở đây theo nguyên tắc "mở" là Rec nào cũng OK cả. Còn ai sành điệu thì chắc chắn họ sẽ vẽ 2 Rec đồng dạng rồi!

Có thể chọn trước Tỉ số kscr=wscr/hscr này để việc làm đơn giản hơn.


  • 0

#7 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 10 October 2014 - 11:26 AM

Có thể chọn trước Tỉ số kscr=wscr/hscr này để việc làm đơn giản hơn.

 Chọn trước tỉ số này nghĩa là sao?


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


#8 anhduccec

anhduccec

    biết vẽ arc

  • Members
  • PipPip
  • 45 Bài viết
Điểm đánh giá: 21 (tàm tạm)

Đã gửi 10 October 2014 - 02:08 PM

 Chọn trước tỉ số này nghĩa là sao?

Bật sang layout. Vẽ 1 Rec theo đúng tỷ lệ kscr.  View-> Viewports -> Object -> Chọn Rec. Lúc này Rec trở thành viewport. Chuyển sang chế độ MSPACE (MS). Bây giờ Zoom slide tùy ý và MSLIDE. Tỷ lệ (W:H) slide này phụ thuộc vào tỷ lệ (W:H) của viewport.


  • 0

#9 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 10 October 2014 - 02:45 PM

Bật sang layout. Vẽ 1 Rec theo đúng tỷ lệ kscr.  View-> Viewports -> Object -> Chọn Rec. Lúc này Rec trở thành viewport. Chuyển sang chế độ MSPACE (MS). Bây giờ Zoom slide tùy ý và MSLIDE. Tỷ lệ (W:H) slide này phụ thuộc vào tỷ lệ (W:H) của viewport.

Thứ nhất: không nhanh.

Thứ hai: một bản vẽ có thể chứa nhiều nhóm cần tạo slide riêng, chứ không hẳn chỉ có 1 nhóm.


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

anhduccec

    biết vẽ arc

  • Members
  • PipPip
  • 45 Bài viết
Điểm đánh giá: 21 (tàm tạm)

Đã gửi 10 October 2014 - 03:41 PM

Mục tiêu ở đây là tạo slide có tỷ W:H trùng với tile image trong dialog, nên không cần cân chỉnh. Thứ nữa trong 1 layout bạn có tạo rất nhiều viewport có tỷ lệ khác nhau, khi active view nào thì có thể thực hiện make slide của view đó.


  • 0

#11 anhduccec

anhduccec

    biết vẽ arc

  • Members
  • PipPip
  • 45 Bài viết
Điểm đánh giá: 21 (tàm tạm)

Đã gửi 10 October 2014 - 04:04 PM

Make-slide.jpgTrong layout gõ lệnh PSPACE (PS) để có thể chỉnh sửa tỷ lệ của viewport.


  • 0

#12 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 10 October 2014 - 04:19 PM

Tôi không hiểu rõ ý bạn lắm. Bạn có thể diễn giải các bước làm từ A tới Z đi nhé!

Ví dụ:

- Bản vẽ chứa 3 rectang Rec1, Rec2, Rec3 với các tỉ lệ wi/hi khác nhau.

- Tile image có tỉ lệ là k (k=w/h).

- Cách để tạo 3 slide cho 3 Rec 1/2/3 để nó bố trí cân xứng trong Tile?


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


#13 anhduccec

anhduccec

    biết vẽ arc

  • Members
  • PipPip
  • 45 Bài viết
Điểm đánh giá: 21 (tàm tạm)

Đã gửi 10 October 2014 - 04:32 PM

Nếu chỉ có 1 loại Tile image thì lại đơn giản hơn.

+. Trong bản vẽ đã có 3 Rec

1. Tạo viewport có tỷ lệ k trong layout như đã nói ở trên.

2. Trong viewprort này dùng zoom Rec cần tạo slide như bạn đã zoom.

3. Mslide.

(Ở đây là tỷ lệ K của slide và K của tile image là 1 nên 3 slide tạo ra không cần cân chỉnh gì, vì khi zoom "W" thì Rec đã trùng trọng tâm với viewprort rồi).

(slide_image 0 0 x y "myslide.sld") <->  x=dimx_tile "key" ; y=dimy_tile "key" .


  • 0

#14 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 10 October 2014 - 10:57 PM

Bạn đã test việc slide bố trí cân xứng trong tile chưa? Tôi thấy slide nó biến mất tiêu luôn?


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


#15 anhduccec

anhduccec

    biết vẽ arc

  • Members
  • PipPip
  • 45 Bài viết
Điểm đánh giá: 21 (tàm tạm)

Đã gửi 10 October 2014 - 11:20 PM

Tôi đã quên không nhắc là biến đổi tỷ lệ k=dimx_tile/dimy_tile. dimx_tile = (* Width 6); dimy_tille = (* Height 13).

Bạn đã test việc slide bố trí cân xứng trong tile chưa? Tôi thấy slide nó biến mất tiêu luôn?

Còn có 1 cách khác cũng là thay đổi tỷ lệ  kscr=wscr/hscr. Tôi gửi kèm 1 đoạn code bạn xem sẽ rõ. Bạn có thể sửa width và height cho phù hợp.

Sau khi load xong code màn hình tự thu nhỏ, bạn có thể mslide trong model.

 

(defun create_dialog ()
(setq fname (vl-filename-mktemp "dcl.dcl"))
(setq fn (open fname "w"))
(write-line "ShowSlide : dialog {
   key = \"Title\";
   label = \"Image Slide Title here\";
   spacer;
   : image {
   key = \"SLD\";
   width = 40;
   height = 25;
   color= -2;
     }
   ok_only;
      }" fn)
(close fn))
(defun c:test (/ fn fname X# Y# dcl_id)
(create_dialog)
(setq dcl_id (load_dialog fname))
(if (not (new_dialog "ShowSlide" dcl_id))(exit))
(start_image "Title")
   (setq X# (dimx_tile "SLD"))
   (setq Y# (dimy_tile "SLD"))
(end_image)
   (start_image "SLD")
   (fill_image 0 0 X# Y# -2)
(slide_image 0 0 X# Y# "C:/TEMP/SLD.sld")
   (end_image)
   (action_tile "accept" "(done_dialog 1)")
   (start_dialog)
   (unload_dialog dcl_id)
(vl-file-delete fname)
(SetScreenSize  X# Y#)
(princ (strcat "Co the lay gia tri X-Y nay de ve Rectang trong Layout: " (rtos X# 2 0) "-" (rtos Y# 2 0)))
(princ))
(C:TEST)
(defun C:lg ()(load "SLD-img.lsp")(princ))
(defun c:msl ()(vl-cmdf "MSLIDE" "C:/TEMP/SLD.sld")(princ))
(defun SetScreenSize (Width height / doc oldsize doc w1 h1 dw dh)
  (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
  (setq oldsize (getvar "SCREENSIZE"))
  (setq W1 (vla-get-width doc))
  (setq H1 (vla-get-Height doc))
  (setq dw (- w1 (car oldsize)))
  (setq dh (- h1 (cadr oldsize)))
  (vla-put-width doc (+ dw width))
  (vla-put-height doc (+ dh height))
)

(defun create_dialog ()
(setq fname (vl-filename-mktemp "dcl.dcl"))
(setq fn (open fname "w"))
(write-line "ShowSlide : dialog {
key = \"Title\";
label = \"Image Slide Title here\";
spacer;
: image {
key = \"SLD\";
width = 40;
height = 25;
color= -2;
}
ok_only;
}" fn)
(close fn))
(defun c:test (/ fn fname X# Y# dcl_id)
(create_dialog)
(setq dcl_id (load_dialog fname))
(if (not (new_dialog "ShowSlide" dcl_id))(exit))
(start_image "Title")
  (setq X# (dimx_tile "SLD"))
  (setq Y# (dimy_tile "SLD"))
(end_image)
  (start_image "SLD")
  (fill_image 0 0 X# Y# -2)
(slide_image 0 0 X# Y# "C:/TEMP/SLD.sld")
  (end_image)
  (action_tile "accept" "(done_dialog 1)")
  (start_dialog)
  (unload_dialog dcl_id)
(vl-file-delete fname)
(SetScreenSize  X# Y#)
(princ (strcat "Co the lay gia tri X-Y nay de ve Rectang trong Layout: " (rtos X# 2 0) "-" (rtos Y# 2 0)))
(princ))
(C:TEST)
(defun C:lg ()(load "SLD-img.lsp")(princ))
(defun c:msl ()(vl-cmdf "MSLIDE" "C:/TEMP/SLD.sld")(princ))
(defun SetScreenSize (Width height / doc oldsize doc w1 h1 dw dh)
  (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
  (setq oldsize (getvar "SCREENSIZE"))
  (setq W1 (vla-get-width doc))
  (setq H1 (vla-get-Height doc))
  (setq dw (- w1 (car oldsize)))
  (setq dh (- h1 (cadr oldsize)))
  (vla-put-width doc (+ dw width))
  (vla-put-height doc (+ dh height))
)
 
(defun create_dialog ()
(setq fname (vl-filename-mktemp "dcl.dcl"))
(setq fn (open fname "w"))
(write-line "ShowSlide : dialog {
key = \"Title\";
label = \"Image Slide Title here\";
spacer;
: image {
key = \"SLD\";
width = 40;
height = 25;
color= -2;
}
ok_only;
}" fn)
(close fn))
(defun c:test (/ fn fname X# Y# dcl_id)
(create_dialog)
(setq dcl_id (load_dialog fname))
(if (not (new_dialog "ShowSlide" dcl_id))(exit))
(start_image "Title")
  (setq X# (dimx_tile "SLD"))
  (setq Y# (dimy_tile "SLD"))
(end_image)
  (start_image "SLD")
  (fill_image 0 0 X# Y# -2)
(slide_image 0 0 X# Y# "C:/TEMP/SLD.sld")
  (end_image)
  (action_tile "accept" "(done_dialog 1)")
  (start_dialog)
  (unload_dialog dcl_id)
(vl-file-delete fname)
(SetScreenSize  X# Y#)
(princ (strcat "Co the lay gia tri X-Y nay de ve Rectang trong Layout: " (rtos X# 2 0) "-" (rtos Y# 2 0)))
(princ))
(C:TEST)
(defun C:lg ()(load "SLD-img.lsp")(princ))
(defun c:msl ()(vl-cmdf "MSLIDE" "C:/TEMP/SLD.sld")(princ))
(defun SetScreenSize (Width height / doc oldsize doc w1 h1 dw dh)
  (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
  (setq oldsize (getvar "SCREENSIZE"))
  (setq W1 (vla-get-width doc))
  (setq H1 (vla-get-Height doc))
  (setq dw (- w1 (car oldsize)))
  (setq dh (- h1 (cadr oldsize)))
  (vla-put-width doc (+ dw width))
  (vla-put-height doc (+ dh height))
)
 
(defun create_dialog ()
(setq fname (vl-filename-mktemp "dcl.dcl"))
(setq fn (open fname "w"))
(write-line "ShowSlide : dialog {
key = \"Title\";
label = \"Image Slide Title here\";
spacer;
: image {
key = \"SLD\";
width = 40;
height = 25;
color= -2;
}
ok_only;
}" fn)
(close fn))
(defun c:test (/ fn fname X# Y# dcl_id)
(create_dialog)
(setq dcl_id (load_dialog fname))
(if (not (new_dialog "ShowSlide" dcl_id))(exit))
(start_image "Title")
  (setq X# (dimx_tile "SLD"))
  (setq Y# (dimy_tile "SLD"))
(end_image)
  (start_image "SLD")
  (fill_image 0 0 X# Y# -2)
(slide_image 0 0 X# Y# "C:/TEMP/SLD.sld")
  (end_image)
  (action_tile "accept" "(done_dialog 1)")
  (start_dialog)
  (unload_dialog dcl_id)
(vl-file-delete fname)
(SetScreenSize  X# Y#)
(princ (strcat "Co the lay gia tri X-Y nay de ve Rectang trong Layout: " (rtos X# 2 0) "-" (rtos Y# 2 0)))
(princ))
(C:TEST)
(defun C:lg ()(load "SLD-img.lsp")(princ))
(defun c:msl ()(vl-cmdf "MSLIDE" "C:/TEMP/SLD.sld")(princ))
(defun SetScreenSize (Width height / doc oldsize doc w1 h1 dw dh)
  (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
  (setq oldsize (getvar "SCREENSIZE"))
  (setq W1 (vla-get-width doc))
  (setq H1 (vla-get-Height doc))
  (setq dw (- w1 (car oldsize)))
  (setq dh (- h1 (cadr oldsize)))
  (vla-put-width doc (+ dw width))
  (vla-put-height doc (+ dh height))
)
 
(defun create_dialog ()
(setq fname (vl-filename-mktemp "dcl.dcl"))
(setq fn (open fname "w"))
(write-line "ShowSlide : dialog {
key = \"Title\";
label = \"Image Slide Title here\";
spacer;
: image {
key = \"SLD\";
width = 40;
height = 25;
color= -2;
}
ok_only;
}" fn)
(close fn))
(defun c:test (/ fn fname X# Y# dcl_id)
(create_dialog)
(setq dcl_id (load_dialog fname))
(if (not (new_dialog "ShowSlide" dcl_id))(exit))
(start_image "Title")
  (setq X# (dimx_tile "SLD"))
  (setq Y# (dimy_tile "SLD"))
(end_image)
  (start_image "SLD")
  (fill_image 0 0 X# Y# -2)
(slide_image 0 0 X# Y# "C:/TEMP/SLD.sld")
  (end_image)
  (action_tile "accept" "(done_dialog 1)")
  (start_dialog)
  (unload_dialog dcl_id)
(vl-file-delete fname)
(SetScreenSize  X# Y#)
(princ (strcat "Co the lay gia tri X-Y nay de ve Rectang trong Layout: " (rtos X# 2 0) "-" (rtos Y# 2 0)))
(princ))
(C:TEST)
(defun C:lg ()(load "SLD-img.lsp")(princ))
(defun c:msl ()(vl-cmdf "MSLIDE" "C:/TEMP/SLD.sld")(princ))
(defun SetScreenSize (Width height / doc oldsize doc w1 h1 dw dh)
  (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
  (setq oldsize (getvar "SCREENSIZE"))
  (setq W1 (vla-get-width doc))
  (setq H1 (vla-get-Height doc))
  (setq dw (- w1 (car oldsize)))
  (setq dh (- h1 (cadr oldsize)))
  (vla-put-width doc (+ dw width))
  (vla-put-height doc (+ dh height))
)

  • 0

#16 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 11 October 2014 - 11:07 AM

1). Cách 1: Số 16 và 13 ở đâu ra nhỉ?

2). Cách 2: Tiên dụng với các tile có w và h lớn. Không tiện dụng với các tile có w và h nhỏ, vì khi đó screen quá nhỏ, khó thao tác.


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


#17 anhduccec

anhduccec

    biết vẽ arc

  • Members
  • PipPip
  • 45 Bài viết
Điểm đánh giá: 21 (tàm tạm)

Đã gửi 11 October 2014 - 11:33 AM

6 và 13 sưu tầm được.  Còn thêm nữa.

// widths increment by about ~0.17 per pixel (/ 1 6.0) = 0.166667
// popup_list vs edit_box = 2.5 width diff
// smallest 9.09 = 6.59
//         11.42 = 8.92 same size as Cancel button
// spacer, row, & column
//   0.08 = 1 pixel
//   0.25 = 2 pixels
//   0.42 = 3 pixels
// heights increment by about ~0.08 per pixel (/ 1 13.0) = 0.0769231
// horizontal_margin = none; = no left and right margins
// vertical_margin = none;   = no top and bottom margins
// For heights for list_box
// height = 2.57; = 1 line
// height = 3.80; = 2 lines
// height = 5.03; = 3 lines
// height = 6.26; = 4 lines
// height = 7.49; = 6 lines
// height = 8.73; = 7 lines
// height = 9.96; = 8 lines
// Smallest width for a button
// label = ""; width = 5.58;
// For heights for spacers
// : spacer { height = ?;} don't use fixed_height = true;
//   0.04 = 1 pixel more than spacer;
//   0.12 = 2 pixels ...
//   0.20 = 3 pixels
//   0.27 = 4 pixels
//   0.35 = 5 pixels
//   0.43 = 6 pixels
//   0.50 = 7 pixels
//   0.58 = 8 pixels
//   0.66 = 9 pixels
//   0.73 = 10 pixels
//   0.81 = 11 pixels
//   0.89 = 12 pixels
//   0.96 = 13 pixels
//   1.04 = 14 pixels ... same pattern as above

// widths increment by about ~0.17 per pixel (/ 1 6.0) = 0.166667
// popup_list vs edit_box = 2.5 width diff
// smallest 9.09 = 6.59
//         11.42 = 8.92 same size as Cancel button
// spacer, row, & column
//   0.08 = 1 pixel
//   0.25 = 2 pixels
//   0.42 = 3 pixels
// heights increment by about ~0.08 per pixel (/ 1 13.0) = 0.0769231
// horizontal_margin = none; = no left and right margins
// vertical_margin = none;   = no top and bottom margins
// For heights for list_box
// height = 2.57; = 1 line
// height = 3.80; = 2 lines
// height = 5.03; = 3 lines
// height = 6.26; = 4 lines
// height = 7.49; = 6 lines
// height = 8.73; = 7 lines
// height = 9.96; = 8 lines
// Smallest width for a button
// label = ""; width = 5.58;
// For heights for spacers
// : spacer { height = ?;} don't use fixed_height = true;
//   0.04 = 1 pixel more than spacer;
//   0.12 = 2 pixels ...
//   0.20 = 3 pixels
//   0.27 = 4 pixels
//   0.35 = 5 pixels
//   0.43 = 6 pixels
//   0.50 = 7 pixels
//   0.58 = 8 pixels
//   0.66 = 9 pixels
//   0.73 = 10 pixels
//   0.81 = 11 pixels
//   0.89 = 12 pixels
//   0.96 = 13 pixels
//   1.04 = 14 pixels ... same pattern as above

  • 1

#18 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 11 October 2014 - 11:42 AM

Cám ơn bạn về thông tin "sưu tầm" này.


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


#19 anhduccec

anhduccec

    biết vẽ arc

  • Members
  • PipPip
  • 45 Bài viết
Điểm đánh giá: 21 (tàm tạm)

Đã gửi 11 October 2014 - 12:44 PM

Cách 2:

 

. Cách 2: Tiên dụng với các tile có w và h lớn. Không tiện dụng với các tile có w và h nhỏ, vì khi đó screen quá nhỏ, khó thao tác.

Sao lại để nó làm khó mình được, bản chất ở đây là Slide đồng dạng với Image ở dialog mà. => Bạn có thể scale Screensize lên n lần cho độ lớn phù hợp mà thao tác. Cụ thể trong đoạn code trên ở đoạn (SetScreenSize  X#  Y# ) thay bằng (SetScreenSize  (* X# n) (* Y# n)) là được.


  • 0

#20 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 11 October 2014 - 12:56 PM

Cách 2:

 

Sao lại để nó làm khó mình được, bản chất ở đây là Slide đồng dạng với Image ở dialog mà. => Bạn có thể scale Screensize lên n lần cho độ lớn phù hợp mà thao tác. Cụ thể trong đoạn code trên ở đoạn (SetScreenSize  X#  Y# ) thay bằng (SetScreenSize  (* X# n) (* Y# n)) là được.

Chỉ khi screen và tile có kích thước giống nhau thì image mới cân xứng, còn khi lệch nhau hệ số n thì hàm (slide_image 0 0 ...) sẽ không cho kết quả đúng.


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