Skip to content

Commit 49af880

Browse files
committed
Handle better skew ans scale in Maps CZ
1 parent 47181fa commit 49af880

2 files changed

Lines changed: 37 additions & 2 deletions

File tree

blender/MapsModelsImporter/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
bl_info = {
2525
"name": "Maps Models Importer",
2626
"author": "Elie Michel",
27-
"version": (0, 6, 1),
27+
"version": (0, 6, 2),
2828
"blender": (3, 1, 0),
2929
"location": "File > Import > Google Maps Capture",
3030
"description": "Import meshes from a Google Maps or Google Earth capture",

blender/MapsModelsImporter/google_maps.py

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,14 +150,24 @@ def extractUniforms(constants, refMatrix):
150150
#matrix = makeMatrix(globUniforms['_uModelviewMatrix']) @ matrix
151151
elif '_uMV' in globUniforms:
152152
# Mapy CZ
153-
uvOffsetScale = [0, -1, 1, -1]
153+
_uParams = makeMatrix(globUniforms['_uParams'])
154+
#uvOffsetScale = [0, -1, 1, -1]
155+
uvOffsetScale = [
156+
_uParams[2][2] / _uParams[0][2],
157+
(_uParams[3][2] - 1) / _uParams[1][2],
158+
_uParams[0][2],
159+
-_uParams[1][2],
160+
]
154161
matrix = makeMatrix(globUniforms['_uMV'])
162+
163+
"""
155164
postMatrix = Matrix(
156165
((0.682889997959137, 0.20221230387687683, 0.7019768357276917, -0.06431722640991211),
157166
(0.07228320091962814, 0.9375065565109253, -0.3403771221637726, -0.11041564494371414),
158167
(-0.7269363403320312, 0.28318125009536743, 0.6255972981452942, -1.349690556526184),
159168
(0.0, 0.0, 0.0, 1.0))
160169
) @ Matrix.Scale(500, 4)
170+
"""
161171
else:
162172
if refMatrix is None:
163173
print("globUniforms:")
@@ -287,6 +297,31 @@ def filesToBlender(context, prefix, max_blocks=200, globalScale=1.0/256.0):
287297

288298
if constants["DrawCall"]["type"] == 'Google Maps':
289299
verts = positions[:,:3] * 256.0 # [ [ p[0] * 256.0, p[1] * 256.0, p[2] * 256.0 ] for p in positions ]
300+
elif constants["DrawCall"]["type"] == 'Mapy CZ':
301+
raw_verts = positions[:,:3]
302+
verts = []
303+
globUniforms = constants['$Globals']
304+
_uParamsSE = makeMatrix(globUniforms['_uParamsSE'])
305+
for v0 in raw_verts:
306+
r0 = [0.0, 0.0, 0.0, 0.0]
307+
r1 = np.zeros((3,), dtype=np.float32)
308+
r2 = np.zeros((3,), dtype=np.float32)
309+
r1[0] = v0[0] * _uParamsSE[3][0] + _uParamsSE[0][0]
310+
r1[1] = v0[1] * _uParamsSE[0][1] + _uParamsSE[1][0]
311+
r1[2] = (v0[2] * _uParamsSE[1][1] + _uParamsSE[2][0]) * _uParamsSE[3][3]
312+
r0[1] = np.linalg.norm(r1)
313+
r0[2] = r0[1] + 0.0001
314+
r0[1] = r0[1] - _uParamsSE[2][3]
315+
r0[2] = 1.0 / r0[2]
316+
r1 *= r0[2]
317+
r0[2] = min(max(r0[1], _uParamsSE[1][2]), _uParamsSE[3][2]) # clamp
318+
r0[2] = (r0[2] - _uParamsSE[1][2]) * _uParamsSE[0][3] * _uParamsSE[1][3] + _uParamsSE[2][2]
319+
r0[1] = r0[1] * r0[2] - r0[1]
320+
r2[0] = v0[0] * _uParamsSE[3][0]
321+
r2[1] = v0[1] * _uParamsSE[0][1]
322+
r2[2] = v0[2] * _uParamsSE[1][1]
323+
r2 += r1 * r0[1]
324+
verts.append(r2.tolist())
290325
else:
291326
verts = positions[:,:3] # [ [ p[0], p[1], p[2] ] for p in positions ]
292327

0 commit comments

Comments
 (0)