Cubitect / cubiomes-viewer

An efficient graphical Minecraft seed finder and map viewer.
GNU General Public License v3.0
1.02k stars 60 forks source link

Scale for map #203

Closed someretical closed 1 year ago

someretical commented 1 year ago

Hi,

The feature I would like to be added is an adaptive scale for the map. Currently, the closest I can get to this is through Edit > Preferences > Custom grid spacing which is rather inconvenient if I would like to zoom in and out frequently.

The current system is easier to read when the coordinates are smaller, but in my case the coordinates I am working with are 7 digits each which makes it a lot more difficult to discern the difference between neighbouring regions.

Delvin4519 commented 1 year ago

I also have this problem of the default map grid being too cumbersome to read for 1.18, nether, and end maps.

Perhaps the default grid can be fixed to be double the length interval for 1.18, nether and end?

This is the default grid at 1:1.9999 zoom for 1.18+, nether, and end. Having the default grid at 128 intervals at this zoom, is a bit too much. This is at 0,0, so even worse a million blocks out.

The northwest corner of the grid is unreadable with the negative hundred numbers spilling into the next grid.

I also have a problem where the grid in 1.12/1.17 overworld maps is wider than the screen resolution at 1:4.0001 zoom level. Since my vertical resolution is under 1024px vertically, the vertical grid disappears at that particular zoom level/equivalents.

To my understanding, the grid is constructed directly from what scale the map tiles are being loaded it. Grid = 1:128 if zoom < 2.0 Grid = 1:512 if zoom < 4.0 (overworld 1.17-), or zoom < 8.0 Grid = 1:2048 if zoom < 16.0 (overworld 1.17-), or zoom < 32.0 Grid = 1:8192 if zoom < 64.0 (overworld 1.17-), or zoom < 128.0 Grid = 132768 if zoom < 256.0 (overworld 1.17-), or zoom < 512.0 Grid = 1:131072 if zoom < 1024.0 (overworld 1.17-), or zoom >= 512.0 Grid = 1:131072 if zoom >=1024.0 (overworld 1.17-),

I wonder if there's a way for the grid to simply round to whatever power of 2 is from the zoom level directly. And if a number is greater than say, 1000000, then display the Z coordinate as a /newline.

Example: Take the blocks per pixel, multiply by 256, then round down to the power of 2 to obtain the grid.

In AMIDST, the grid is simply the blocks per pixel, rounded up to the nearest multiple of 4, then multiplied by 128 to obtain the grid.

image

Delvin4519 commented 1 year ago

[V3.1.1 ISSUE/BUG] Update:

As of v3.1.1, there is an adaptive custom grid spacing adaptive zoom. One thing of note:

One issue. The adaptive zoom scaling seems to be using a factor of 133.0 to be adjust the grid intervals. I can't seem to identify why it is using a factor of 133.0 to scale the grid under adaptive zoom instead of an expected factor of 128. Generally, it's desirable to have the grid scale at predictable zoom levels.

For example. Use a custom grid interval of 128. The zoom should scale at a zoom level of 1, 2, 4, 8, 16, etc. Instead, it is doing so at 128/133, 2*128/133, 4*128/133, 8*128/133.

I tested this using a zoom scaling of 5, and same issue. Set the grid interval to 128 again, and instead of scaling at 1, 5, 25, etc., it scales at a zoom level 1*128/133, 5*128/133, 25*128/133, etc, etc.

Set grid interval to 128:

Zoom scale: 0.9624, 0.9624 < 1*128/133 = 128 grid spacing. 128/0.9624 = 133.000831
Zoom scale: 0.9625, 0.9625 > 1*128/133 = 256 grid spacing. 256/0.9625 = 265.974026

Expected zoom scaling to adapt at: zoom: 1.0000 Actual zoom scaling adapting at: zoom: 0.9625 -> 1*128/133

If zoom scaling is set to 2, with grid interval of 128, then:

Zoom scale: 1.9248, 1.9248 < 2*128/133 = 256 grid spacing. 256/1.9248 = 133.000831
Zoom scale: 1.9249, 1.9249 > 2*128/133 = 512 grid spacing. 512/1.9249 = 265.987844

Expected zoom scaling to adapt at: zoom: 2.0000 Actual zoom scaling adapting at: zoom: 1.9249 -> 2*128/133

If zoom scaling is set to 5, with grid interval set to 128, then:

Zoom scale: 4.8120, 4.8120 < 5*128/133 = 640 grid spacing. 640/4.8120 = 133.000831
Zoom scale: 4.8121, 4.8121 > 5*128/133 = 3200 grid spacing. 3200/4.8121 = 664.990337

Expected zoom scaling to adapt at: zoom: 5.0000 Actual zoom scaling adapting at: zoom: 4.8121 -> 5*128/133.

Note: This issue of custom grid interval with adaptive zoom scaling was tested with the map view (NOT screen resolution, but the map size itself on screen) of 1024x976 pixels dedicated to the map itself, centered on 0,0. I tried resizing the map and moving the map to a different coordinates, but doesn't seem to have an effect.

I also tried a different grid interval, say, 100, but same issue:

Zoom scale: 0.7518, 0.7518 < 1*(100/128)*128/133 = 100 grid spacing. 100/0.7518 = 133.014099
Zoom scale: 0.7519, 0.7519 > 1*(100/128)*128/133 = 200 grid spacing. 200/0.7519 = 265.992818

Expected zoom scaling to adapt at: zoom: 0.7813 == (2^-7*100) Actual zoom scaling adapting at: zoom: 0.7519 == 1*(100/128)*128/133

Delvin4519 commented 1 year ago

This functionality is now fully functional as of v3.2.0. This issue may be closed and marked as resolved as such.

someretical commented 1 year ago

🎉