Skip to content
Snippets Groups Projects
Commit bff8295b authored by Pratik Borhade's avatar Pratik Borhade Committed by Campbell Barton
Browse files

Fix T93422: ANT Landscape Tools - Landscape Eroder not working

Ref D15432
parent c27fd9ec
No related branches found
No related tags found
No related merge requests found
...@@ -908,61 +908,36 @@ class Eroder(bpy.types.Operator): ...@@ -908,61 +908,36 @@ class Eroder(bpy.types.Operator):
stats = Stats() stats = Stats()
counts= {} counts= {}
maps = {
'rainmap': lambda g, r, c: g.rainmap[r, c],
'scree': lambda g, r, c: g.avalanced[r, c],
'avalanced': lambda g, r, c: -g.avalanced[r, c],
'water': lambda g, r, c: g.water[r, c] / g.watermax,
'scour': lambda g, r, c: g.scour[r, c] / max(g.scourmax, -g.scourmin),
'deposit': lambda g, r, c: g.scour[r, c] / min(-g.scourmax, g.scourmin),
'flowrate': lambda g, r, c: g.flowrate[r, c],
'sediment': lambda g, r, c: g.sediment[r, c],
'sedimentpct': lambda g, r, c: g.sedimentpct[r, c],
'capacity': lambda g, r, c: g.capacity[r, c]
}
def execute(self, context): def execute(self, context):
ob = context.active_object ob = context.active_object
me = ob.data oldMesh = ob.data
self.stats.reset() self.stats.reset()
try: index_to_name = {}
vgActive = ob.vertex_groups.active.name
except: for name in self.maps:
vgActive = "capacity" try:
print("ActiveGroup", vgActive) ob.vertex_groups[name]
try: except:
vg=ob.vertex_groups["rainmap"] ob.vertex_groups.new(name=name)
except: # Save a mapping from index to name, in case,
vg=ob.vertex_groups.new(name="rainmap") # the next iteration is different.
try: index_to_name[ob.vertex_groups[name].index] = name
vgscree=ob.vertex_groups["scree"]
except: g = Grid.fromBlenderMesh(oldMesh, ob.vertex_groups['rainmap'], self.Ef)
vgscree=ob.vertex_groups.new(name="scree")
try:
vgavalanced=ob.vertex_groups["avalanced"]
except:
vgavalanced=ob.vertex_groups.new(name="avalanced")
try:
vgw=ob.vertex_groups["water"]
except:
vgw=ob.vertex_groups.new(name="water")
try:
vgscour=ob.vertex_groups["scour"]
except:
vgscour=ob.vertex_groups.new(name="scour")
try:
vgdeposit=ob.vertex_groups["deposit"]
except:
vgdeposit=ob.vertex_groups.new(name="deposit")
try:
vgflowrate=ob.vertex_groups["flowrate"]
except:
vgflowrate=ob.vertex_groups.new(name="flowrate")
try:
vgsediment=ob.vertex_groups["sediment"]
except:
vgsediment=ob.vertex_groups.new(name="sediment")
try:
vgsedimentpct=ob.vertex_groups["sedimentpct"]
except:
vgsedimentpct=ob.vertex_groups.new(name="sedimentpct")
try:
vgcapacity=ob.vertex_groups["capacity"]
except:
vgcapacity=ob.vertex_groups.new(name="capacity")
g = Grid.fromBlenderMesh(me, vg, self.Ef)
me = bpy.data.meshes.new(me.name)
self.counts['diffuse'] = 0 self.counts['diffuse'] = 0
self.counts['avalanche'] = 0 self.counts['avalanche'] = 0
...@@ -986,64 +961,29 @@ class Eroder(bpy.types.Operator): ...@@ -986,64 +961,29 @@ class Eroder(bpy.types.Operator):
g.fluvial_erosion(self.Kr, self.Kv, self.userainmap, self.Kc, self.Ks, self.Kz*50, self.Ka, 0,0,0,0, self.numexpr) g.fluvial_erosion(self.Kr, self.Kv, self.userainmap, self.Kc, self.Ks, self.Kz*50, self.Ka, 0,0,0,0, self.numexpr)
self.counts['water']+=1 self.counts['water']+=1
g.toBlenderMesh(me) newMesh = bpy.data.meshes.new(oldMesh.name)
ob.data = me g.toBlenderMesh(newMesh)
if vg: # This empties ob.vertex_groups.
for row in range(g.rainmap.shape[0]): ob.data = newMesh
for col in range(g.rainmap.shape[1]):
i = row * g.rainmap.shape[1] + col # Copy vertex groups from the old mesh.
vg.add([i],g.rainmap[row,col],'ADD') for name in self.maps:
if vgscree: ob.vertex_groups.new(name=name)
for row in range(g.rainmap.shape[0]): for vert in oldMesh.vertices:
for col in range(g.rainmap.shape[1]): for group in vert.groups:
i = row * g.rainmap.shape[1] + col name = index_to_name[group.group]
vgscree.add([i],g.avalanced[row,col],'ADD') if name:
if vgavalanced: ob.vertex_groups[name].add([vert.index], group.weight, 'REPLACE')
for row in range(g.rainmap.shape[0]):
for col in range(g.rainmap.shape[1]): # Add the new data.
i = row * g.rainmap.shape[1] + col for row in range(g.rainmap.shape[0]):
vgavalanced.add([i],-g.avalanced[row,col],'ADD') for col in range(g.rainmap.shape[1]):
if vgw: i = row * g.rainmap.shape[1] + col
for row in range(g.rainmap.shape[0]): for name, fn in self.maps.items():
for col in range(g.rainmap.shape[1]): ob.vertex_groups[name].add([i], fn(g, row, col), 'ADD')
i = row * g.rainmap.shape[1] + col
vgw.add([i],g.water[row,col]/g.watermax,'ADD') ob.vertex_groups.active = ob.vertex_groups['capacity']
if vgscour:
for row in range(g.rainmap.shape[0]):
for col in range(g.rainmap.shape[1]):
i = row * g.rainmap.shape[1] + col
vgscour.add([i],g.scour[row,col]/max(g.scourmax, -g.scourmin),'ADD')
if vgdeposit:
for row in range(g.rainmap.shape[0]):
for col in range(g.rainmap.shape[1]):
i = row * g.rainmap.shape[1] + col
vgdeposit.add([i],g.scour[row,col]/min(-g.scourmax, g.scourmin),'ADD')
if vgflowrate:
for row in range(g.rainmap.shape[0]):
for col in range(g.rainmap.shape[1]):
i = row * g.rainmap.shape[1] + col
vgflowrate.add([i],g.flowrate[row,col],'ADD')
if vgsediment:
for row in range(g.rainmap.shape[0]):
for col in range(g.rainmap.shape[1]):
i = row * g.rainmap.shape[1] + col
vgsediment.add([i],g.sediment[row,col],'ADD')
if vgsedimentpct:
for row in range(g.rainmap.shape[0]):
for col in range(g.rainmap.shape[1]):
i = row * g.rainmap.shape[1] + col
vgsedimentpct.add([i],g.sedimentpct[row,col],'ADD')
if vgcapacity:
for row in range(g.rainmap.shape[0]):
for col in range(g.rainmap.shape[1]):
i = row * g.rainmap.shape[1] + col
vgcapacity.add([i],g.capacity[row,col],'ADD')
try:
vg = ob.vertex_groups["vgActive"]
except:
vg = vgcapacity
ob.vertex_groups.active = vg
if self.smooth: if self.smooth:
bpy.ops.object.shade_smooth() bpy.ops.object.shade_smooth()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment