demoCombineMeshes.py

demoCombineMeshes.py
1 '''
2 Demonstrates combining the mesh of two scene nodes
3 '''
4 from PySide2 import QtWidgets
5 import MaxPlus
6 
7 app = QtWidgets.qApp
8 if not app:
9  app = QtWidgets.QApplication([])
10 
11 class _GCProtector(object):
12  widgets = []
13 
14 def GetObjectMesh(node):
15  node.Convert(MaxPlus.ClassIds.TriMeshGeometry)
16  object_state = node.EvalWorldState()
17  obj_original = object_state.Getobj()
18  tri_obj = MaxPlus.TriObject._CastFrom(obj_original)
19  tri_mesh = tri_obj.GetMesh()
20  return tri_mesh
21 
22 def CombineNodes():
24  msg = "Please select 2 nodes to combine."
25  print msg
26  show_alert(msg)
27  else:
30  a = GetObjectMesh(node1)
31  b = GetObjectMesh(node2)
32  # create a new, empty mesh for the combined meshes:
34  new_node = MaxPlus.Factory.CreateNode(new_obj)
35  new_mesh=new_obj.GetMesh()
36  # combine a and b into the new mesh:
37  MaxPlus.Mesh.CombineMeshes(new_mesh,a,b)
38 
39 def show_alert(message):
40  msgBox = QtWidgets.QMessageBox()
41  msgBox.setText(message)
42  msgBox.exec_()
43 
44 def main():
45  w = QtWidgets.QDialog(MaxPlus.GetQMaxMainWindow())
46  _GCProtector.widgets.append(w)
47  w.resize(250, 100)
48  w.setWindowTitle('Combine 2 Nodes')
49 
50  main_layout = QtWidgets.QVBoxLayout()
51  label = QtWidgets.QLabel("Combine 2 Nodes")
52  main_layout.addWidget(label)
53 
54  combine_btn = QtWidgets.QPushButton("Combine")
55  combine_btn.clicked.connect(CombineNodes)
56  main_layout.addWidget(combine_btn)
57 
58  w.setLayout(main_layout)
59  w.show()
60 
61 
62 if __name__ == '__main__':
63  main()