|  | @@ -20,6 +20,7 @@ def TellClasses():
 | 
	
		
			
				|  |  |               DeformerSurfaceDeform,
 | 
	
		
			
				|  |  |               DeformerMeshDeform,
 | 
	
		
			
				|  |  |               DeformerLatticeDeform,
 | 
	
		
			
				|  |  | +             DeformerSmoothCorrectiveDeform,
 | 
	
		
			
				|  |  |             ]
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  # object instance probably can't use the deformer but it doesn't hurt to try.
 | 
	
	
		
			
				|  | @@ -665,7 +666,7 @@ class DeformerLatticeDeform(MantisDeformerNode):
 | 
	
		
			
				|  |  |          self.executed = True
 | 
	
		
			
				|  |  |           
 | 
	
		
			
				|  |  |      def bFinalize(self, bContext=None):
 | 
	
		
			
				|  |  | -        prGreen("Executing Mesh Deform Node")
 | 
	
		
			
				|  |  | +        prGreen("Executing Lattice Deform Node")
 | 
	
		
			
				|  |  |          mod_name = self.evaluate_input("Name")
 | 
	
		
			
				|  |  |          for xf in self.GetxForm():
 | 
	
		
			
				|  |  |              ob = xf.bGetObject()
 | 
	
	
		
			
				|  | @@ -675,4 +676,36 @@ class DeformerLatticeDeform(MantisDeformerNode):
 | 
	
		
			
				|  |  |              self.bObject.append(d)
 | 
	
		
			
				|  |  |              self.get_target_and_subtarget(d, input_name="Object")
 | 
	
		
			
				|  |  |              props_sockets = self.gen_property_socket_map()
 | 
	
		
			
				|  |  | +            evaluate_sockets(self, d, props_sockets)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +class DeformerSmoothCorrectiveDeform(MantisDeformerNode):
 | 
	
		
			
				|  |  | +    '''A node representing a corrective smooth deform modifier'''
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    def __init__(self, signature, base_tree):
 | 
	
		
			
				|  |  | +        super().__init__(signature, base_tree, SmoothDeformSockets)
 | 
	
		
			
				|  |  | +        # now set up the traverse target...
 | 
	
		
			
				|  |  | +        self.init_parameters(additional_parameters={"Name":None})
 | 
	
		
			
				|  |  | +        self.set_traverse([("Deformer", "Deformer")])
 | 
	
		
			
				|  |  | +        self.prepared = True
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    def GetxForm(self, socket="Deformer"):
 | 
	
		
			
				|  |  | +        if socket == "Deformer":
 | 
	
		
			
				|  |  | +            return super().GetxForm()
 | 
	
		
			
				|  |  | +        else:
 | 
	
		
			
				|  |  | +            trace_xForm_back(self, socket)
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +    def bExecute(self, bContext = None,):
 | 
	
		
			
				|  |  | +        self.executed = True
 | 
	
		
			
				|  |  | +         
 | 
	
		
			
				|  |  | +    def bFinalize(self, bContext=None):
 | 
	
		
			
				|  |  | +        prGreen("Executing Smooth Deform Node")
 | 
	
		
			
				|  |  | +        mod_name = self.evaluate_input("Name")
 | 
	
		
			
				|  |  | +        for xf in self.GetxForm():
 | 
	
		
			
				|  |  | +            ob = xf.bGetObject()
 | 
	
		
			
				|  |  | +            d = ob.modifiers.new(mod_name, type='CORRECTIVE_SMOOTH')
 | 
	
		
			
				|  |  | +            if d is None:
 | 
	
		
			
				|  |  | +                raise RuntimeError(f"Modifier was not created in node {self} -- the object is invalid.")
 | 
	
		
			
				|  |  | +            self.bObject.append(d)
 | 
	
		
			
				|  |  | +            self.get_target_and_subtarget(d, input_name="Object")
 | 
	
		
			
				|  |  | +            props_sockets = self.gen_property_socket_map()
 | 
	
		
			
				|  |  |              evaluate_sockets(self, d, props_sockets)
 |