Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBastien Montagne <montagne29@wanadoo.fr>2019-08-21 12:38:30 +0300
committerBastien Montagne <montagne29@wanadoo.fr>2019-08-21 12:38:30 +0300
commit1faadc1aeb1837e1940efca72e9b14567ef9182c (patch)
tree69d470488e2543a32120f075b3b5a81a5161bf0d
parent9152da178b89a8e7cbcca870acd63cfa8857935e (diff)
Fix T63497: wrl import fails.
Main issue was the sphere generation code, that was 100% broken, presumably since ages (= since adding bmesh to Blender)? Plus some non-updated API call after changes in 2.80.
-rw-r--r--io_scene_x3d/__init__.py2
-rw-r--r--io_scene_x3d/import_x3d.py31
2 files changed, 22 insertions, 11 deletions
diff --git a/io_scene_x3d/__init__.py b/io_scene_x3d/__init__.py
index 4af6a652..a08b9a90 100644
--- a/io_scene_x3d/__init__.py
+++ b/io_scene_x3d/__init__.py
@@ -21,7 +21,7 @@
bl_info = {
"name": "Web3D X3D/VRML2 format",
"author": "Campbell Barton, Bart, Bastien Montagne, Seva Alekseyev",
- "version": (2, 2, 1),
+ "version": (2, 2, 2),
"blender": (2, 80, 0),
"location": "File > Import-Export",
"description": "Import-Export X3D, Import VRML2",
diff --git a/io_scene_x3d/import_x3d.py b/io_scene_x3d/import_x3d.py
index ea591d7a..9c1ceae8 100644
--- a/io_scene_x3d/import_x3d.py
+++ b/io_scene_x3d/import_x3d.py
@@ -2341,7 +2341,7 @@ def importMesh_Extrusion(geom, ancestry):
in scaledLoopVertex(mloops[lb + i].vertex_index % nc)]
importMesh_ApplyTextureToLoops(bpymesh, loops)
- bpymesh.validate(True)
+ bpymesh.validate()
bpymesh.update()
return bpymesh
@@ -2478,8 +2478,19 @@ def importMesh_Sphere(geom, ancestry):
-cos(lou * seg) * sin(lau * ring))]
bpymesh.vertices.foreach_set('co', co)
+ num_poly = ns * nr
+ num_tri = ns * 2
+ num_quad = num_poly - num_tri
+ num_loop = num_quad * 4 + num_tri * 3
tf = bpymesh.polygons
- tf.add(ns * nr)
+ tf.add(num_poly)
+ bpymesh.loops.add(num_loop)
+ bpymesh.polygons.foreach_set("loop_start",
+ tuple(range(0, ns * 3, 3)) +
+ tuple(range(ns * 3, num_loop - ns * 3, 4)) +
+ tuple(range(num_loop - ns * 3, num_loop, 3)))
+ bpymesh.polygons.foreach_set("loop_total", (3,) * ns + (4,) * num_quad + (3,) * ns)
+
vb = 2 + (nr - 2) * ns # First vertex index for the bottom cap
fb = (nr - 1) * ns # First face index for the bottom cap
@@ -2499,12 +2510,12 @@ def importMesh_Sphere(geom, ancestry):
for seg in range(ns):
tf[seg].vertices = (0, seg + 2, (seg + 1) % ns + 2)
tf[fb + seg].vertices = (1, vb + (seg + 1) % ns, vb + seg)
- for lidx, uv in zip(tf[seg].loops,
+ for lidx, uv in zip(tf[seg].loop_indices,
(((seg + 0.5) / ns, 1),
(seg / ns, 1 - 1 / nr),
((seg + 1) / ns, 1 - 1 / nr))):
tex[lidx].uv = uv
- for lidx, uv in zip(tf[fb + seg].loops,
+ for lidx, uv in zip(tf[fb + seg].loop_indices,
(((seg + 0.5) / ns, 0),
((seg + 1) / ns, 1 / nr),
(seg / ns, 1 / nr))):
@@ -2521,15 +2532,15 @@ def importMesh_Sphere(geom, ancestry):
# First face index for the ring
for seg in range(ns):
nseg = (seg + 1) % ns
- tf[rfb + seg].vertices_raw = (tvb + seg, bvb + seg, bvb + nseg, tvb + nseg)
- for lidx, uv in zip(tf[rfb + seg].loops,
+ tf[rfb + seg].vertices = (tvb + seg, bvb + seg, bvb + nseg, tvb + nseg)
+ for lidx, uv in zip(tf[rfb + seg].loop_indices,
((seg / ns, 1 - (ring + 1) / nr),
(seg / ns, 1 - (ring + 2) / nr),
((seg + 1) / ns, 1 - (ring + 2) / nr),
((seg + 1) / ns, 1 - (ring + 1) / nr))):
tex[lidx].uv = uv
- bpymesh.validate(False)
+ bpymesh.validate()
bpymesh.update()
return bpymesh
@@ -2570,7 +2581,7 @@ def importMesh_Cylinder(geom, ancestry):
# Tried constructing the mesh manually from polygons/loops/edges,
# the difference in performance on Blender 2.74 (Win64) is negligible.
- bpymesh.validate(False)
+ bpymesh.validate()
# The structure of the loop array goes: cap, side, cap.
loops = []
@@ -2619,7 +2630,7 @@ def importMesh_Cone(geom, ancestry):
bpymesh = bpy.data.meshes.new(name="Cone")
bpymesh.from_pydata(verts, [], faces)
- bpymesh.validate(False)
+ bpymesh.validate()
loops = []
if side:
loops += [co for i in range(n)
@@ -2662,7 +2673,7 @@ def importMesh_Box(geom, ancestry):
5, 1, 0, 4, # +z
7, 6, 5, 4)) # -y
- bpymesh.validate(False)
+ bpymesh.validate()
d = bpymesh.uv_layers.new().data
d.foreach_set('uv', (
1, 0, 0, 0, 0, 1, 1, 1,