Chuyển đến nội dung
Diễn đàn CADViet
  • Thông báo

    • Nguyen Hoanh

      CADViet đã hoàn tất nâng cấp   14/09/2017

      Chào các bạn, CADViet đã hoàn tất việc nâng cấp lên phiên bản mới. Tất cả các chức năng đã hoạt động theo kỳ vọng của ban quản trị. Nếu có vấn đề gì cần phản hồi, các bản post ở đây nhé: Trân trọng, Nguyễn Hoành.
Doan Van Ha

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

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

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

  • 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

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:

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

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!

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

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:

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

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.

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

 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.

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

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ụ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 đó.

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ô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?

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

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

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

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

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

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.

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

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.

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

Sao không đúng được, bạn cứ thử đi! nó co giãn đều các phương mà. Theo tôi hiểu (slide_image X1 Y1 X2 Y2 "SLD") là nó lấy 2 điểm chuẩn x1,y2 và x2,y2 (đường chéo) của cả 2 thằng SLD và Tile rồi nó căng ra hoặc nén lạ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

Nói chung là bạn hay kết luận theo suy luận chứ không test. Tôi đều test trước khi kết luận cả. Lý do sai là do bạn hiểu sai các giá trí x1 y1 x2 y2. Tile lấy gốc tọa độ là điểm góc trái trên chứ không phải trọng tâm. Vì vậy mà không có chuyện co giản.

Tôi dừng tranh luận ở đây vì thấy không hiệu quả gì.

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

Chính bạn là người kết luận đấy thôi!
1. Bạn nói đúng về gốc tọa độ, và tôi cũng không hiểu sai điều này (x1 y1, x2 y2)
2. Bạn nói không có chuyện co giãn là sai.

 * Để chứng minh điều này bạn hãy thử như sau:

- Đặt một tile với width >= 30 (Tại sao? Điều này sẽ nói ở dưới).

- Tạo 1 SLD cân xứng với Tile trên.

- Tăng dần: width * n và Height * n (n>1), dùng SLD cũ ở trên => Xem kết quả.

*** Đây là phần suy đoán: có thể bạn đã dùng w có cả <30 và >=30 -> nên có kết quả như bạn nói.

*** Với thằng Image_tile này có dimx nhỏ nhất là 178 tương đương w =30, do đó nếu bạn đặt w với một số bất kỳ < 30 thì kết quả đều như nhau (tất nhiên cùng H).

Tạm kết luận:

+ Khi w < 30 (cùng h) kết quả như nhau (có nghĩa: w =1 cân xứng thì w = (2; 5; 7; 8 ...) đều cân xứng khi dùng 1 SLD.

+ Khi w >= 30 có thể nhân w và h cùng 1 hệ số (n>1), kết quả: cùng cân xứng khi dùng 1 SLD.

Hiệu quả hay không tùy thuộc ở bạn. Bởi vì đây là một vấn đề rất bé...!

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


×