diff --git a/HandGenerator/HandGenerator.py b/HandGenerator/HandGenerator.py index 8990033..0e765f2 100644 --- a/HandGenerator/HandGenerator.py +++ b/HandGenerator/HandGenerator.py @@ -28,7 +28,7 @@ def __init__(self, parent=None): self.connectorNode = None self.generated = False - + slicer.mymod = self def setup(self): ScriptedLoadableModuleWidget.setup(self) @@ -53,8 +53,14 @@ def setup(self): self.generateButton.text = "Generate Hands" self.parametersFormLayout.addWidget(self.generateButton) + self.generateModelButton = qt.QPushButton() + self.generateModelButton.setDefault(False) + self.generateModelButton.text = "Generate Hand Models" + self.parametersFormLayout.addWidget(self.generateModelButton) + self.connectButton.connect('clicked(bool)', self.onConnectButtonClicked) self.generateButton.connect('clicked(bool)', self.generateCylinders) + self.generateModelButton.connect('clicked(bool)', self.generateModels) self.layout.addStretch(1) def onConnectButtonClicked(self): @@ -115,3 +121,118 @@ def generateCylinders(self): slicer.mrmlScene.RemoveNode(nodes[i]) self.generated = False self.generateCylinders() + + + def generateModels(self): + self.resourcePath = os.path.dirname(os.path.abspath(__file__)) + if self.generated == False: + self.nodes = slicer.util.getNodesByClass('vtkMRMLLinearTransformNode') + self.n = len(self.nodes) + l = slicer.modules.createmodels.logic() + + mat = vtk.vtkMatrix4x4() + mat_axis_conv = vtk.vtkMatrix4x4() + mat_table_to_mounted = vtk.vtkMatrix4x4() + # Old transforms + mat.SetElement(0,0,-1) + mat.SetElement(2,2,-1) + + # Transform Matrix for HTC VIVE + #mat.SetElement(0,0,-0.99) + #mat.SetElement(0,1,-0.02) + #mat.SetElement(0,2,0.08) + #mat.SetElement(0,3,-2.75) + #mat.SetElement(1,0,-0.06) + #mat.SetElement(1,1,-.23) + #mat.SetElement(1,2,-0.97) + #mat.SetElement(1,3,29.11) + #mat.SetElement(2,0,0.04) + #mat.SetElement(2,1,-0.98) + #mat.SetElement(2,2,0.23) + #mat.SetElement(2,3,-133.75) + + # Transform Matrix for HTC VIVE PRO + mat.SetElement(0,0,-0.99) + mat.SetElement(0,1,-0.02) + mat.SetElement(0,2,0.08) + mat.SetElement(0,3,7.25) + mat.SetElement(1,0,-0.06) + mat.SetElement(1,1,-0.23) + mat.SetElement(1,2,-0.97) + mat.SetElement(1,3,-100.89) + mat.SetElement(2,0,0.04) + mat.SetElement(2,1,-0.98) + mat.SetElement(2,2,0.23) + mat.SetElement(2,3,-111.75) + + # Transforms from https://developer.leapmotion.com/documentation/v4/vrar.html + # Must attach to HMD transforms (ie, make HMD transform the parent of this matrix + # Setting the axis_conversion + #mat_axis_conv.SetElement(2,2,-1) #Identity with position 2,2 (starting from 0) set to -1 + + # Setting the table_to_mounted matrix + #mat_table_to_mounted.SetElement(0,0,-1) + #mat_table_to_mounted.SetElement(1,1,0) + #mat_table_to_mounted.SetElement(1,2,-1) + #mat_table_to_mounted.SetElement(2,1,-1) + #mat_table_to_mounted.SetElement(2,2,0) + #mat_table_to_mounted.SetElement(2,3,-80) + + #Multiply4x4(mat_axis_conv, mat_table_to_mounted, mat) + #vtk.vtkMatrix4x4.Multiply4x4(mat_axis_conv,mat_table_to_mounted, mat) + + self.Xflip = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLLinearTransformNode') + self.Xflip.SetName('LHG_TrackerToHMD') + self.Xflip.SetAndObserveMatrixTransformToParent(mat) + #self.Xflip.SetAndObserveTransformNodeID(self.Xflip.GetID()) Set this to observe the VR.HMD transform + #self.HMDAlign = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLLinearTransformNode') + #self.HMDAlign.SetName("LHG_RASToHMD") + self.generated = True + + print(self.resourcePath) + + + for i in range (0, self.n): + if 'Left' in self.nodes[i].GetName() or 'Right' in self.nodes[i].GetName(): + if 'Dis' in self.nodes[i].GetName() or 'Int' in self.nodes[i].GetName() or 'Prox' in self.nodes[i].GetName() or 'Meta' in self.nodes[i].GetName() or 'Palm' in self.nodes[i].GetName(): + + + print('Resources\\' + self.nodes[i].GetName() + ".stl") + self.tempModel = slicer.util.loadModel(os.path.join(self.resourcePath, 'Resources\\' + self.nodes[i].GetName() + ".stl")) + if self.tempModel is not False: + self.nodes[i].SetAndObserveTransformNodeID(self.Xflip.GetID()) + self.tempModel.SetAndObserveTransformNodeID(self.nodes[i].GetID()) + self.tempModel.SetName('LHG_Seg' + self.nodes[i].GetName()) + + else: + self.nodes = slicer.util.getNodesByClass('vtkMRMLLinearTransformNode') + self.n = len(self.nodes) + self.models = slicer.util.getNodesByClass('vtkMRMLModelNode') + if self.Xflip is None: + mat = vtk.vtkMatrix4x4() + # Old transforms + mat.SetElement(0,0,-1) + mat.SetElement(2,2,-1) + + # New transforms + mat.SetElement(0,0,-1) + mat.SetElement(1,1,0.17) + mat.SetElement(1,2,-0.99) + mat.SetElement(1,3,-70) + mat.SetElement(2,1,-0.99) + mat.SetElement(2,2,-0.17) + mat.SetElement(2,3,-80) + self.Xflip = slicer.mrmlScene.AddNewNodeByClass('vtkMRMLLinearTransformNode') + self.Xflip.SetName('LHG_TrackerToHMD') + self.Xflip.SetAndObserveMatrixTransformToParent(mat) + for j in range(0, len(self.models)): + if 'LHG_' in self.models[j].GetName(): + slicer.mrmlScene.RemoveNode(self.models[j]) + for i in range (0, self.n): + if 'Left' in self.nodes[i].GetName() or 'Right' in self.nodes[i].GetName(): + if 'Dis' in self.nodes[i].GetName() or 'Int' in self.nodes[i].GetName() or 'Prox' in self.nodes[i].GetName() or 'Meta' in self.nodes[i].GetName(): + print('Resources\\' + self.nodes[i].GetName() + ".stl") + self.tempModel = slicer.util.loadModel(os.path.join(self.resourcePath, 'Resources\\' + self.nodes[i].GetName() + ".stl")) + self.nodes[i].SetAndObserveTransformNodeID(self.Xflip.GetID()) + self.tempModel.SetAndObserveTransformNodeID(self.nodes[i].GetID()) + self.tempModel.SetName('LHG_Seg' + self.nodes[i].GetName()) diff --git a/HandGenerator/PlusDeviceSet_Server_LeapMotionTracker Both.xml b/HandGenerator/PlusDeviceSet_Server_LeapMotionTracker Both.xml index 545064b..783395f 100644 --- a/HandGenerator/PlusDeviceSet_Server_LeapMotionTracker Both.xml +++ b/HandGenerator/PlusDeviceSet_Server_LeapMotionTracker Both.xml @@ -8,7 +8,7 @@ AcquisitionRate="1000" Id="TrackerDevice" Type="LeapMotion" - LeapHMDPolicy="FALSE" + LeapHMDPolicy="TRUE" ToolReferenceFrame="Tracker" > @@ -26,13 +26,14 @@ - + - + + @@ -46,13 +47,14 @@ - + - + + @@ -72,12 +74,13 @@ - + - + + @@ -91,12 +94,13 @@ - + - + + @@ -160,12 +164,13 @@ - + - + + @@ -179,13 +184,13 @@ - + - - + + diff --git a/HandGenerator/PlusDeviceSet_Server_LeapMotionTracker Left.xml b/HandGenerator/PlusDeviceSet_Server_LeapMotionTracker Left.xml index 31054bf..e11fed8 100644 --- a/HandGenerator/PlusDeviceSet_Server_LeapMotionTracker Left.xml +++ b/HandGenerator/PlusDeviceSet_Server_LeapMotionTracker Left.xml @@ -8,7 +8,7 @@ AcquisitionRate="1000" Id="TrackerDevice" Type="LeapMotion" - LeapHMDPolicy="FALSE" + LeapHMDPolicy="TRUE" ToolReferenceFrame="Tracker" > @@ -26,14 +26,14 @@ - + - - + + - - + + + - - + + - + + @@ -95,12 +96,13 @@ - + - + + @@ -185,13 +187,13 @@ - + - - + + diff --git a/HandGenerator/PlusDeviceSet_Server_LeapMotionTracker.xml b/HandGenerator/PlusDeviceSet_Server_LeapMotionTracker.xml new file mode 100644 index 0000000..73d3cae --- /dev/null +++ b/HandGenerator/PlusDeviceSet_Server_LeapMotionTracker.xml @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/HandGenerator/Resources/LeftIndexDistalToTra.stl b/HandGenerator/Resources/LeftIndexDistalToTra.stl new file mode 100644 index 0000000..9c8a420 Binary files /dev/null and b/HandGenerator/Resources/LeftIndexDistalToTra.stl differ diff --git a/HandGenerator/Resources/LeftIndexIntermediat.stl b/HandGenerator/Resources/LeftIndexIntermediat.stl new file mode 100644 index 0000000..2f56791 Binary files /dev/null and b/HandGenerator/Resources/LeftIndexIntermediat.stl differ diff --git a/HandGenerator/Resources/LeftIndexProximalToT.stl b/HandGenerator/Resources/LeftIndexProximalToT.stl new file mode 100644 index 0000000..f4cb5ca Binary files /dev/null and b/HandGenerator/Resources/LeftIndexProximalToT.stl differ diff --git a/HandGenerator/Resources/LeftMiddleDistalToTr.stl b/HandGenerator/Resources/LeftMiddleDistalToTr.stl new file mode 100644 index 0000000..cf58d82 Binary files /dev/null and b/HandGenerator/Resources/LeftMiddleDistalToTr.stl differ diff --git a/HandGenerator/Resources/LeftMiddleIntermedia.stl b/HandGenerator/Resources/LeftMiddleIntermedia.stl new file mode 100644 index 0000000..250f605 Binary files /dev/null and b/HandGenerator/Resources/LeftMiddleIntermedia.stl differ diff --git a/HandGenerator/Resources/LeftMiddleMetacarpal.stl b/HandGenerator/Resources/LeftMiddleMetacarpal.stl new file mode 100644 index 0000000..570305d Binary files /dev/null and b/HandGenerator/Resources/LeftMiddleMetacarpal.stl differ diff --git a/HandGenerator/Resources/LeftMiddleProximalTo.stl b/HandGenerator/Resources/LeftMiddleProximalTo.stl new file mode 100644 index 0000000..6d55fb2 Binary files /dev/null and b/HandGenerator/Resources/LeftMiddleProximalTo.stl differ diff --git a/HandGenerator/Resources/LeftPalmToTracker.stl b/HandGenerator/Resources/LeftPalmToTracker.stl new file mode 100644 index 0000000..9873ea1 Binary files /dev/null and b/HandGenerator/Resources/LeftPalmToTracker.stl differ diff --git a/HandGenerator/Resources/LeftPinkyDistalToTra.stl b/HandGenerator/Resources/LeftPinkyDistalToTra.stl new file mode 100644 index 0000000..8abe1c7 Binary files /dev/null and b/HandGenerator/Resources/LeftPinkyDistalToTra.stl differ diff --git a/HandGenerator/Resources/LeftPinkyIntermediat.stl b/HandGenerator/Resources/LeftPinkyIntermediat.stl new file mode 100644 index 0000000..1f2d1b2 Binary files /dev/null and b/HandGenerator/Resources/LeftPinkyIntermediat.stl differ diff --git a/HandGenerator/Resources/LeftPinkyProximalToT.stl b/HandGenerator/Resources/LeftPinkyProximalToT.stl new file mode 100644 index 0000000..c85851c Binary files /dev/null and b/HandGenerator/Resources/LeftPinkyProximalToT.stl differ diff --git a/HandGenerator/Resources/LeftRingDistalToTrac.stl b/HandGenerator/Resources/LeftRingDistalToTrac.stl new file mode 100644 index 0000000..be788c7 Binary files /dev/null and b/HandGenerator/Resources/LeftRingDistalToTrac.stl differ diff --git a/HandGenerator/Resources/LeftRingIntermediate.stl b/HandGenerator/Resources/LeftRingIntermediate.stl new file mode 100644 index 0000000..67b286b Binary files /dev/null and b/HandGenerator/Resources/LeftRingIntermediate.stl differ diff --git a/HandGenerator/Resources/LeftRingProximalToTr.stl b/HandGenerator/Resources/LeftRingProximalToTr.stl new file mode 100644 index 0000000..bac82bb Binary files /dev/null and b/HandGenerator/Resources/LeftRingProximalToTr.stl differ diff --git a/HandGenerator/Resources/LeftThumbDistalToTra.stl b/HandGenerator/Resources/LeftThumbDistalToTra.stl new file mode 100644 index 0000000..db1f28a Binary files /dev/null and b/HandGenerator/Resources/LeftThumbDistalToTra.stl differ diff --git a/HandGenerator/Resources/LeftThumbIntermediat.stl b/HandGenerator/Resources/LeftThumbIntermediat.stl new file mode 100644 index 0000000..fd24dc8 Binary files /dev/null and b/HandGenerator/Resources/LeftThumbIntermediat.stl differ diff --git a/HandGenerator/Resources/RightIndexDistalToTr.stl b/HandGenerator/Resources/RightIndexDistalToTr.stl new file mode 100644 index 0000000..f9a74ce Binary files /dev/null and b/HandGenerator/Resources/RightIndexDistalToTr.stl differ diff --git a/HandGenerator/Resources/RightIndexIntermedia.stl b/HandGenerator/Resources/RightIndexIntermedia.stl new file mode 100644 index 0000000..14dfaa6 Binary files /dev/null and b/HandGenerator/Resources/RightIndexIntermedia.stl differ diff --git a/HandGenerator/Resources/RightIndexProximalTo.stl b/HandGenerator/Resources/RightIndexProximalTo.stl new file mode 100644 index 0000000..9927fd7 Binary files /dev/null and b/HandGenerator/Resources/RightIndexProximalTo.stl differ diff --git a/HandGenerator/Resources/RightMiddleDistalToT.stl b/HandGenerator/Resources/RightMiddleDistalToT.stl new file mode 100644 index 0000000..9dc8b52 Binary files /dev/null and b/HandGenerator/Resources/RightMiddleDistalToT.stl differ diff --git a/HandGenerator/Resources/RightMiddleIntermedi.stl b/HandGenerator/Resources/RightMiddleIntermedi.stl new file mode 100644 index 0000000..386eb2b Binary files /dev/null and b/HandGenerator/Resources/RightMiddleIntermedi.stl differ diff --git a/HandGenerator/Resources/RightMiddleMetacarpa - Copy.stl b/HandGenerator/Resources/RightMiddleMetacarpa - Copy.stl new file mode 100644 index 0000000..fd379ae Binary files /dev/null and b/HandGenerator/Resources/RightMiddleMetacarpa - Copy.stl differ diff --git a/HandGenerator/Resources/RightMiddleMetacarpa.stl b/HandGenerator/Resources/RightMiddleMetacarpa.stl new file mode 100644 index 0000000..01fb444 Binary files /dev/null and b/HandGenerator/Resources/RightMiddleMetacarpa.stl differ diff --git a/HandGenerator/Resources/RightMiddleProximalT.stl b/HandGenerator/Resources/RightMiddleProximalT.stl new file mode 100644 index 0000000..be46105 Binary files /dev/null and b/HandGenerator/Resources/RightMiddleProximalT.stl differ diff --git a/HandGenerator/Resources/RightPalmToTracker.stl b/HandGenerator/Resources/RightPalmToTracker.stl new file mode 100644 index 0000000..9873ea1 Binary files /dev/null and b/HandGenerator/Resources/RightPalmToTracker.stl differ diff --git a/HandGenerator/Resources/RightPinkyDistalToTr.stl b/HandGenerator/Resources/RightPinkyDistalToTr.stl new file mode 100644 index 0000000..5ead4b5 Binary files /dev/null and b/HandGenerator/Resources/RightPinkyDistalToTr.stl differ diff --git a/HandGenerator/Resources/RightPinkyIntermedia.stl b/HandGenerator/Resources/RightPinkyIntermedia.stl new file mode 100644 index 0000000..446d462 Binary files /dev/null and b/HandGenerator/Resources/RightPinkyIntermedia.stl differ diff --git a/HandGenerator/Resources/RightPinkyProximalTo.stl b/HandGenerator/Resources/RightPinkyProximalTo.stl new file mode 100644 index 0000000..1b8fb1d Binary files /dev/null and b/HandGenerator/Resources/RightPinkyProximalTo.stl differ diff --git a/HandGenerator/Resources/RightRingDistalToTra.stl b/HandGenerator/Resources/RightRingDistalToTra.stl new file mode 100644 index 0000000..56727ed Binary files /dev/null and b/HandGenerator/Resources/RightRingDistalToTra.stl differ diff --git a/HandGenerator/Resources/RightRingIntermediat.stl b/HandGenerator/Resources/RightRingIntermediat.stl new file mode 100644 index 0000000..d88e195 Binary files /dev/null and b/HandGenerator/Resources/RightRingIntermediat.stl differ diff --git a/HandGenerator/Resources/RightRingProximalToT.3mf b/HandGenerator/Resources/RightRingProximalToT.3mf new file mode 100644 index 0000000..d3d056f Binary files /dev/null and b/HandGenerator/Resources/RightRingProximalToT.3mf differ diff --git a/HandGenerator/Resources/RightRingProximalToT.stl b/HandGenerator/Resources/RightRingProximalToT.stl new file mode 100644 index 0000000..368cb12 Binary files /dev/null and b/HandGenerator/Resources/RightRingProximalToT.stl differ diff --git a/HandGenerator/Resources/RightThumbDistalToTr.stl b/HandGenerator/Resources/RightThumbDistalToTr.stl new file mode 100644 index 0000000..451c57c Binary files /dev/null and b/HandGenerator/Resources/RightThumbDistalToTr.stl differ diff --git a/HandGenerator/Resources/RightThumbIntermedia.stl b/HandGenerator/Resources/RightThumbIntermedia.stl new file mode 100644 index 0000000..f9d66d7 Binary files /dev/null and b/HandGenerator/Resources/RightThumbIntermedia.stl differ