Browse Source

Modifications to enable one at a time (still WIP)

Jaime van Kessel 9 years ago
parent
commit
ea66139751

+ 4 - 2
cura/OneAtATimeIterator.py

@@ -17,12 +17,13 @@ class OneAtATimeIterator(Iterator.Iterator):
     def _fillStack(self):
         node_list = []
         for node in self._scene_node.getChildren():
-            if node.getBoundingBox().height > Application.getInstance().getActiveMachine().getSettingByKey("gantry_height"):
+            if node.getBoundingBox().height > Application.getInstance().getActiveMachine().getSettingValueByKey("gantry_height"):
                 return
             if node.callDecoration("getConvexHull"):
                 node_list.append(node)
         
         if len(node_list) < 2:
+            self._node_stack = node_list[:]
             return 
         
         self._original_node_list = node_list[:]
@@ -34,6 +35,7 @@ class OneAtATimeIterator(Iterator.Iterator):
         for a in range(0,len(node_list)):
             for b in range(0,len(node_list)):
                 if a != b and self._hit_map[a][b] and self._hit_map[b][a]:
+                    print("Derp")
                     return 
         
         # Sort the original list so that items that block the most other objects are at the beginning.
@@ -54,9 +56,9 @@ class OneAtATimeIterator(Iterator.Iterator):
                         # We have no more nodes to check, so quit looking.
                         todo_node_list = None
                         self._node_stack = new_order
+                        print(self._node_stack)
                         return
                     todo_node_list.append(_objectOrder(new_order, new_todo_list))
-
         self._node_stack = [] #No result found!        
 
     

+ 44 - 25
plugins/CuraEngineBackend/CuraEngineBackend.py

@@ -113,13 +113,31 @@ class CuraEngineBackend(Backend):
             self.slicingCancelled.emit()
             return
 
-        objects = []
-        for node in DepthFirstIterator(self._scene.getRoot()):
-            if type(node) is SceneNode and node.getMeshData() and node.getMeshData().getVertices() is not None:
-                if not getattr(node, "_outside_buildarea", False):
-                    objects.append(node)
+        object_groups = []
+        if self._settings.getSettingValueByKey("print_sequence") == "One at a time":
+            for node in OneAtATimeIterator(self._scene.getRoot()):
+                temp_list = []
+                children = node.getAllChildren()
+                children.append(node)
+                for child_node in children:
+                    if type(child_node) is SceneNode and node.getMeshData() and node.getMeshData().getVertices() is not None:
+                        temp_list.append(child_node)
+                object_groups.append(temp_list)
+        else:
+            temp_list = []
+            for node in DepthFirstIterator(self._scene.getRoot()):
+                if type(node) is SceneNode and node.getMeshData() and node.getMeshData().getVertices() is not None:
+                    if not getattr(node, "_outside_buildarea", False):
+                        temp_list.append(node)
+            if len(temp_list) == 0:
+                return
+            object_groups.append(temp_list)
+        #for node in DepthFirstIterator(self._scene.getRoot()):
+        #    if type(node) is SceneNode and node.getMeshData() and node.getMeshData().getVertices() is not None:
+        #        if not getattr(node, "_outside_buildarea", False):
+        #            objects.append(node)
 
-        if not objects:
+        if len(object_groups) == 0:
             return #No point in slicing an empty build plate
 
         if kwargs.get("settings", self._settings).hasErrorValue():
@@ -145,36 +163,37 @@ class CuraEngineBackend(Backend):
 
         self._save_polygons = kwargs.get("save_polygons", True)
 
-        msg = Cura_pb2.ObjectList()
+        slice_message = Cura_pb2.Slice()
 
         #TODO: All at once/one at a time mode
         #print("Iterator time! ", OneAtATimeIterator(self._scene.getRoot()))
         #for item in OneAtATimeIterator(self._scene.getRoot()):
         #    print(item)
-        
         center = Vector()
-        for object in objects:
-            center += object.getPosition()
+        for group in object_groups:
+            group_message = slice_message.object_lists.add()
+            for object in group:
+                center += object.getPosition()
 
-            mesh_data = object.getMeshData().getTransformed(object.getWorldTransformation())
+                mesh_data = object.getMeshData().getTransformed(object.getWorldTransformation())
 
-            obj = msg.objects.add()
-            obj.id = id(object)
-            
-            verts = numpy.array(mesh_data.getVertices())
-            verts[:,[1,2]] = verts[:,[2,1]]
-            verts[:,1] *= -1
-            obj.vertices = verts.tostring()
+                obj = group_message.objects.add()
+                obj.id = id(object)
+                
+                verts = numpy.array(mesh_data.getVertices())
+                verts[:,[1,2]] = verts[:,[2,1]]
+                verts[:,1] *= -1
+                obj.vertices = verts.tostring()
 
-            #if meshData.hasNormals():
-                #obj.normals = meshData.getNormalsAsByteArray()
+                #if meshData.hasNormals():
+                    #obj.normals = meshData.getNormalsAsByteArray()
 
-            #if meshData.hasIndices():
-                #obj.indices = meshData.getIndicesAsByteArray()
+                #if meshData.hasIndices():
+                    #obj.indices = meshData.getIndicesAsByteArray()
 
         self._scene.releaseLock()
-
-        self._socket.sendMessage(msg)
+        print("sending slice message")
+        self._socket.sendMessage(slice_message)
 
     def _onSceneChanged(self, source):
         if (type(source) is not SceneNode) or (source is self._scene.getRoot()) or (source.getMeshData() is None):
@@ -228,7 +247,7 @@ class CuraEngineBackend(Backend):
     def _createSocket(self):
         super()._createSocket()
         
-        self._socket.registerMessageType(1, Cura_pb2.ObjectList)
+        self._socket.registerMessageType(1, Cura_pb2.Slice)
         self._socket.registerMessageType(2, Cura_pb2.SlicedObjectList)
         self._socket.registerMessageType(3, Cura_pb2.Progress)
         self._socket.registerMessageType(4, Cura_pb2.GCodeLayer)

+ 66 - 56
plugins/CuraEngineBackend/Cura_pb2.py

@@ -18,7 +18,7 @@ _sym_db = _symbol_database.Default()
 DESCRIPTOR = _descriptor.FileDescriptor(
   name='Cura.proto',
   package='Cura',
-  serialized_pb=_b('\n\nCura.proto\x12\x04\x43ura\"+\n\nObjectList\x12\x1d\n\x07objects\x18\x01 \x03(\x0b\x32\x0c.Cura.Object\"i\n\x06Object\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x10\n\x08vertices\x18\x02 \x01(\x0c\x12\x0f\n\x07normals\x18\x03 \x01(\x0c\x12\x0f\n\x07indices\x18\x04 \x01(\x0c\x12\x1f\n\x08settings\x18\x05 \x03(\x0b\x32\r.Cura.Setting\"\x1a\n\x08Progress\x12\x0e\n\x06\x61mount\x18\x01 \x01(\x02\"7\n\x10SlicedObjectList\x12#\n\x07objects\x18\x01 \x03(\x0b\x32\x12.Cura.SlicedObject\"7\n\x0cSlicedObject\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x1b\n\x06layers\x18\x02 \x03(\x0b\x32\x0b.Cura.Layer\"W\n\x05Layer\x12\n\n\x02id\x18\x01 \x01(\x05\x12\x0e\n\x06height\x18\x02 \x01(\x02\x12\x11\n\tthickness\x18\x03 \x01(\x02\x12\x1f\n\x08polygons\x18\x04 \x03(\x0b\x32\r.Cura.Polygon\"\xdb\x01\n\x07Polygon\x12 \n\x04type\x18\x01 \x01(\x0e\x32\x12.Cura.Polygon.Type\x12\x0e\n\x06points\x18\x02 \x01(\x0c\x12\x12\n\nline_width\x18\x03 \x01(\x02\"\x89\x01\n\x04Type\x12\x0c\n\x08NoneType\x10\x00\x12\x0e\n\nInset0Type\x10\x01\x12\x0e\n\nInsetXType\x10\x02\x12\x0c\n\x08SkinType\x10\x03\x12\x0f\n\x0bSupportType\x10\x04\x12\r\n\tSkirtType\x10\x05\x12\x0e\n\nInfillType\x10\x06\x12\x15\n\x11SupportInfillType\x10\x07\"&\n\nGCodeLayer\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\"D\n\x0fObjectPrintTime\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x0c\n\x04time\x18\x02 \x01(\x02\x12\x17\n\x0fmaterial_amount\x18\x03 \x01(\x02\".\n\x0bSettingList\x12\x1f\n\x08settings\x18\x01 \x03(\x0b\x32\r.Cura.Setting\"&\n\x07Setting\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c\"\x1b\n\x0bGCodePrefix\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\x62\x06proto3')
+  serialized_pb=_b('\n\nCura.proto\x12\x04\x43ura\"+\n\nObjectList\x12\x1d\n\x07objects\x18\x01 \x03(\x0b\x32\x0c.Cura.Object\"/\n\x05Slice\x12&\n\x0cobject_lists\x18\x01 \x03(\x0b\x32\x10.Cura.ObjectList\"i\n\x06Object\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x10\n\x08vertices\x18\x02 \x01(\x0c\x12\x0f\n\x07normals\x18\x03 \x01(\x0c\x12\x0f\n\x07indices\x18\x04 \x01(\x0c\x12\x1f\n\x08settings\x18\x05 \x03(\x0b\x32\r.Cura.Setting\"\x1a\n\x08Progress\x12\x0e\n\x06\x61mount\x18\x01 \x01(\x02\"7\n\x10SlicedObjectList\x12#\n\x07objects\x18\x01 \x03(\x0b\x32\x12.Cura.SlicedObject\"7\n\x0cSlicedObject\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x1b\n\x06layers\x18\x02 \x03(\x0b\x32\x0b.Cura.Layer\"4\n\x05Layer\x12\n\n\x02id\x18\x01 \x01(\x05\x12\x1f\n\x08polygons\x18\x02 \x03(\x0b\x32\r.Cura.Polygon\"\x9f\x01\n\x07Polygon\x12 \n\x04type\x18\x01 \x01(\x0e\x32\x12.Cura.Polygon.Type\x12\x0e\n\x06points\x18\x02 \x01(\x0c\"b\n\x04Type\x12\x0c\n\x08NoneType\x10\x00\x12\x0e\n\nInset0Type\x10\x01\x12\x0e\n\nInsetXType\x10\x02\x12\x0c\n\x08SkinType\x10\x03\x12\x0f\n\x0bSupportType\x10\x04\x12\r\n\tSkirtType\x10\x05\"&\n\nGCodeLayer\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\"D\n\x0fObjectPrintTime\x12\n\n\x02id\x18\x01 \x01(\x03\x12\x0c\n\x04time\x18\x02 \x01(\x02\x12\x17\n\x0fmaterial_amount\x18\x03 \x01(\x02\".\n\x0bSettingList\x12\x1f\n\x08settings\x18\x01 \x03(\x0b\x32\r.Cura.Setting\"&\n\x07Setting\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c\"\x1b\n\x0bGCodePrefix\x12\x0c\n\x04\x64\x61ta\x18\x02 \x01(\x0c\x62\x06proto3')
 )
 _sym_db.RegisterFileDescriptor(DESCRIPTOR)
 
@@ -54,19 +54,11 @@ _POLYGON_TYPE = _descriptor.EnumDescriptor(
       name='SkirtType', index=5, number=5,
       options=None,
       type=None),
-    _descriptor.EnumValueDescriptor(
-      name='InfillType', index=6, number=6,
-      options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='SupportInfillType', index=7, number=7,
-      options=None,
-      type=None),
   ],
   containing_type=None,
   options=None,
-  serialized_start=486,
-  serialized_end=623,
+  serialized_start=479,
+  serialized_end=577,
 )
 _sym_db.RegisterEnumDescriptor(_POLYGON_TYPE)
 
@@ -101,6 +93,36 @@ _OBJECTLIST = _descriptor.Descriptor(
 )
 
 
+_SLICE = _descriptor.Descriptor(
+  name='Slice',
+  full_name='Cura.Slice',
+  filename=None,
+  file=DESCRIPTOR,
+  containing_type=None,
+  fields=[
+    _descriptor.FieldDescriptor(
+      name='object_lists', full_name='Cura.Slice.object_lists', index=0,
+      number=1, type=11, cpp_type=10, label=3,
+      has_default_value=False, default_value=[],
+      message_type=None, enum_type=None, containing_type=None,
+      is_extension=False, extension_scope=None,
+      options=None),
+  ],
+  extensions=[
+  ],
+  nested_types=[],
+  enum_types=[
+  ],
+  options=None,
+  is_extendable=False,
+  extension_ranges=[],
+  oneofs=[
+  ],
+  serialized_start=65,
+  serialized_end=112,
+)
+
+
 _OBJECT = _descriptor.Descriptor(
   name='Object',
   full_name='Cura.Object',
@@ -154,8 +176,8 @@ _OBJECT = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=65,
-  serialized_end=170,
+  serialized_start=114,
+  serialized_end=219,
 )
 
 
@@ -184,8 +206,8 @@ _PROGRESS = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=172,
-  serialized_end=198,
+  serialized_start=221,
+  serialized_end=247,
 )
 
 
@@ -214,8 +236,8 @@ _SLICEDOBJECTLIST = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=200,
-  serialized_end=255,
+  serialized_start=249,
+  serialized_end=304,
 )
 
 
@@ -251,8 +273,8 @@ _SLICEDOBJECT = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=257,
-  serialized_end=312,
+  serialized_start=306,
+  serialized_end=361,
 )
 
 
@@ -271,22 +293,8 @@ _LAYER = _descriptor.Descriptor(
       is_extension=False, extension_scope=None,
       options=None),
     _descriptor.FieldDescriptor(
-      name='height', full_name='Cura.Layer.height', index=1,
-      number=2, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='thickness', full_name='Cura.Layer.thickness', index=2,
-      number=3, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
-    _descriptor.FieldDescriptor(
-      name='polygons', full_name='Cura.Layer.polygons', index=3,
-      number=4, type=11, cpp_type=10, label=3,
+      name='polygons', full_name='Cura.Layer.polygons', index=1,
+      number=2, type=11, cpp_type=10, label=3,
       has_default_value=False, default_value=[],
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
@@ -302,8 +310,8 @@ _LAYER = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=314,
-  serialized_end=401,
+  serialized_start=363,
+  serialized_end=415,
 )
 
 
@@ -328,13 +336,6 @@ _POLYGON = _descriptor.Descriptor(
       message_type=None, enum_type=None, containing_type=None,
       is_extension=False, extension_scope=None,
       options=None),
-    _descriptor.FieldDescriptor(
-      name='line_width', full_name='Cura.Polygon.line_width', index=2,
-      number=3, type=2, cpp_type=6, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      options=None),
   ],
   extensions=[
   ],
@@ -347,8 +348,8 @@ _POLYGON = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=404,
-  serialized_end=623,
+  serialized_start=418,
+  serialized_end=577,
 )
 
 
@@ -384,8 +385,8 @@ _GCODELAYER = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=625,
-  serialized_end=663,
+  serialized_start=579,
+  serialized_end=617,
 )
 
 
@@ -428,8 +429,8 @@ _OBJECTPRINTTIME = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=665,
-  serialized_end=733,
+  serialized_start=619,
+  serialized_end=687,
 )
 
 
@@ -458,8 +459,8 @@ _SETTINGLIST = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=735,
-  serialized_end=781,
+  serialized_start=689,
+  serialized_end=735,
 )
 
 
@@ -495,8 +496,8 @@ _SETTING = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=783,
-  serialized_end=821,
+  serialized_start=737,
+  serialized_end=775,
 )
 
 
@@ -525,11 +526,12 @@ _GCODEPREFIX = _descriptor.Descriptor(
   extension_ranges=[],
   oneofs=[
   ],
-  serialized_start=823,
-  serialized_end=850,
+  serialized_start=777,
+  serialized_end=804,
 )
 
 _OBJECTLIST.fields_by_name['objects'].message_type = _OBJECT
+_SLICE.fields_by_name['object_lists'].message_type = _OBJECTLIST
 _OBJECT.fields_by_name['settings'].message_type = _SETTING
 _SLICEDOBJECTLIST.fields_by_name['objects'].message_type = _SLICEDOBJECT
 _SLICEDOBJECT.fields_by_name['layers'].message_type = _LAYER
@@ -538,6 +540,7 @@ _POLYGON.fields_by_name['type'].enum_type = _POLYGON_TYPE
 _POLYGON_TYPE.containing_type = _POLYGON
 _SETTINGLIST.fields_by_name['settings'].message_type = _SETTING
 DESCRIPTOR.message_types_by_name['ObjectList'] = _OBJECTLIST
+DESCRIPTOR.message_types_by_name['Slice'] = _SLICE
 DESCRIPTOR.message_types_by_name['Object'] = _OBJECT
 DESCRIPTOR.message_types_by_name['Progress'] = _PROGRESS
 DESCRIPTOR.message_types_by_name['SlicedObjectList'] = _SLICEDOBJECTLIST
@@ -557,6 +560,13 @@ ObjectList = _reflection.GeneratedProtocolMessageType('ObjectList', (_message.Me
   ))
 _sym_db.RegisterMessage(ObjectList)
 
+Slice = _reflection.GeneratedProtocolMessageType('Slice', (_message.Message,), dict(
+  DESCRIPTOR = _SLICE,
+  __module__ = 'Cura_pb2'
+  # @@protoc_insertion_point(class_scope:Cura.Slice)
+  ))
+_sym_db.RegisterMessage(Slice)
+
 Object = _reflection.GeneratedProtocolMessageType('Object', (_message.Message,), dict(
   DESCRIPTOR = _OBJECT,
   __module__ = 'Cura_pb2'

+ 1 - 1
resources/settings/fdmprinter.json

@@ -102,7 +102,7 @@
 	},
 	"gantry_height":
 	{
-		"default":10
+		"default":99999999999
 	},
 	
         "machine_nozzle_tip_outer_diameter": {