I need to make a custom mesh, don't know how and want to post a question about it.
However before I do I want to run an example of something simple. I've been away for several years, this runs on 2.77.
Question: What are the changes to Blender that prevent this old script from running in the modern world, and how to change it so that it runs in 2.92 which I will start using now?
Once I can do this I can create an example on which to base my more challenging question.
runs in 2.77, fails in 2.92 with error message:
Traceback (most recent call last):
File "/Users/your-name-here/Documents/NTHU/Blender/meshitest.blend/Text", line 25, in <module>
AttributeError: 'bpy_prop_collection' object has no attribute 'link'
Error: Python script failed, check the message in the system console
import numpy as np
import bpy
x = 0.5 *np.arange(-8, 9)
X, Y = np.meshgrid(x, x[2:-2])
Z = np.ones_like(X) -0.1
ny, nx = X.shape
X, Y, Z = [thing.flatten() for thing in (X, Y, Z)]
Z[::2] += 0.2
verts = list(zip(X, Y, Z))
faces = []
for i in range(ny-1):
for j in range(nx-1):
v1 = i*(nx) + j
v2 = v1 + 1
v3 = v2 + nx
v4 = v3 - 1
faces.append((v1, v2, v3, v4))
name = 'sqr'
me = bpy.data.meshes.new(name)
ob = bpy.data.objects.new(name, me)
bpy.context.scene.objects.link(ob)
me.from_pydata(verts, [], faces)
bpy.data.objects[name].select = False
bpy.data.objects[name].select = True
bpy.ops.object.shade_smooth()