|
|
@@ -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)
|