Procházet zdrojové kódy

Add Node: Matrix Compose

add a new node to compose a matrix from basis vectors and translation
Joseph Brandenburg před 6 měsíci
rodič
revize
b437aebafb
4 změnil soubory, kde provedl 43 přidání a 1 odebrání
  1. 2 1
      __init__.py
  2. 20 0
      misc_nodes.py
  3. 8 0
      misc_nodes_socket_templates.py
  4. 13 0
      misc_nodes_ui.py

+ 2 - 1
__init__.py

@@ -16,7 +16,7 @@ from .utilities import prRed
 
 MANTIS_VERSION_MAJOR=0
 MANTIS_VERSION_MINOR=10
-MANTIS_VERSION_SUB=7
+MANTIS_VERSION_SUB=8
 
 classLists = [module.TellClasses() for module in [
  link_definitions,
@@ -149,6 +149,7 @@ matrix_category = [
         NodeItem("UtilityAxesFromMatrix"),
         NodeItem("UtilityMatrixTransform"),
         NodeItem("UtilityMatrixInvert"),
+        NodeItem("UtilityMatrixCompose"),
         NodeItem("UtilityTransformationMatrix"),
         NodeItem("UtilitySetBoneMatrixTail"),
     ]

+ 20 - 0
misc_nodes.py

@@ -50,6 +50,7 @@ def TellClasses():
              UtilityBoneMatrixHeadTailFlip,
              UtilityMatrixTransform,
              UtilityMatrixInvert,
+             UtilityMatrixCompose,
              UtilityTransformationMatrix,
              UtilityIntToString,
              UtilityArrayGet,
@@ -1555,6 +1556,25 @@ class UtilityMatrixInvert(MantisNode):
         self.prepared = True
         self.executed = True
 
+
+class UtilityMatrixCompose(MantisNode):
+    def __init__(self, signature, base_tree):
+        super().__init__(signature, base_tree, MatrixComposeSockets)
+        self.init_parameters()
+        self.node_type = "UTILITY"
+
+    def bPrepare(self, bContext = None,):
+        from mathutils import Matrix
+        matrix= Matrix.Identity(3)
+        matrix[0] = self.evaluate_input('X Basis Vector')
+        matrix[1] = self.evaluate_input('Y Basis Vector')
+        matrix[2] = self.evaluate_input('Z Basis Vector')
+        matrix.transpose(); matrix=matrix.to_4x4()
+        matrix.translation = self.evaluate_input('Translation')
+        self.parameters['Matrix']=matrix
+        self.prepared = True
+        self.executed = True
+
 class UtilityTransformationMatrix(MantisNode):
     def __init__(self, signature, base_tree):
         super().__init__(signature, base_tree)

+ 8 - 0
misc_nodes_socket_templates.py

@@ -32,6 +32,14 @@ MatrixInvertSockets=[
     name="Matrix", is_input=False,  bl_idname='MatrixSocket', ),
 ]
 
+MatrixComposeSockets=[
+    XBasisVector := SockTemplate(
+    name="X Basis Vector", is_input=True,  bl_idname='VectorSocket', ),
+    YBasisVector := replace(XBasisVector, name="Y Basis Vector"),
+    ZBasisVector := replace(XBasisVector, name="Z Basis Vector"),
+    Translation := replace(XBasisVector, name="Translation"),
+    MatrixOutTemplate,
+]
 CompareSockets = [
     ComparisonOperation := SockTemplate( name='Comparison',
             is_input=True, bl_idname="EnumCompareOperation",

+ 13 - 0
misc_nodes_ui.py

@@ -56,6 +56,7 @@ def TellClasses():
              UtilityBoneMatrixHeadTailFlip,
              UtilityMatrixTransform,
              UtilityMatrixInvert,
+             UtilityMatrixCompose,
              UtilityTransformationMatrix,
              UtilitySetBoneMatrixTail,
 
@@ -892,6 +893,18 @@ class UtilityMatrixInvert(Node, MantisUINode):
         self.init_sockets(MatrixInvertSockets)
         self.initialized = True
 
+class UtilityMatrixCompose(Node, MantisUINode):
+    """Inverts an invertable matrix, otherwise throws an error."""
+    bl_idname = "UtilityMatrixCompose"
+    bl_label = "Compose Matrix"
+    bl_icon = "NODE"
+    initialized : bpy.props.BoolProperty(default = False)
+    mantis_node_class_name=bl_idname
+    
+    def init(self, context):
+        self.init_sockets(MatrixComposeSockets)
+        self.initialized = True
+
 class UtilityMatrixSetLocation(Node, MantisUINode):
     """Sets a matrix's location."""
     bl_idname = "UtilityMatrixSetLocation"