Modifications to enable one at a time (still WIP)

This commit is contained in:
Jaime van Kessel 2015-07-23 10:18:58 +02:00
parent 7349e28b84
commit ea66139751
4 changed files with 115 additions and 84 deletions

View file

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

View file

@ -113,13 +113,31 @@ class CuraEngineBackend(Backend):
self.slicingCancelled.emit() self.slicingCancelled.emit()
return return
objects = [] 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()): for node in DepthFirstIterator(self._scene.getRoot()):
if type(node) is SceneNode and node.getMeshData() and node.getMeshData().getVertices() is not None: if type(node) is SceneNode and node.getMeshData() and node.getMeshData().getVertices() is not None:
if not getattr(node, "_outside_buildarea", False): if not getattr(node, "_outside_buildarea", False):
objects.append(node) 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 return #No point in slicing an empty build plate
if kwargs.get("settings", self._settings).hasErrorValue(): if kwargs.get("settings", self._settings).hasErrorValue():
@ -145,20 +163,21 @@ class CuraEngineBackend(Backend):
self._save_polygons = kwargs.get("save_polygons", True) 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 #TODO: All at once/one at a time mode
#print("Iterator time! ", OneAtATimeIterator(self._scene.getRoot())) #print("Iterator time! ", OneAtATimeIterator(self._scene.getRoot()))
#for item in OneAtATimeIterator(self._scene.getRoot()): #for item in OneAtATimeIterator(self._scene.getRoot()):
# print(item) # print(item)
center = Vector() center = Vector()
for object in objects: for group in object_groups:
group_message = slice_message.object_lists.add()
for object in group:
center += object.getPosition() center += object.getPosition()
mesh_data = object.getMeshData().getTransformed(object.getWorldTransformation()) mesh_data = object.getMeshData().getTransformed(object.getWorldTransformation())
obj = msg.objects.add() obj = group_message.objects.add()
obj.id = id(object) obj.id = id(object)
verts = numpy.array(mesh_data.getVertices()) verts = numpy.array(mesh_data.getVertices())
@ -173,8 +192,8 @@ class CuraEngineBackend(Backend):
#obj.indices = meshData.getIndicesAsByteArray() #obj.indices = meshData.getIndicesAsByteArray()
self._scene.releaseLock() self._scene.releaseLock()
print("sending slice message")
self._socket.sendMessage(msg) self._socket.sendMessage(slice_message)
def _onSceneChanged(self, source): def _onSceneChanged(self, source):
if (type(source) is not SceneNode) or (source is self._scene.getRoot()) or (source.getMeshData() is None): 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): def _createSocket(self):
super()._createSocket() 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(2, Cura_pb2.SlicedObjectList)
self._socket.registerMessageType(3, Cura_pb2.Progress) self._socket.registerMessageType(3, Cura_pb2.Progress)
self._socket.registerMessageType(4, Cura_pb2.GCodeLayer) self._socket.registerMessageType(4, Cura_pb2.GCodeLayer)

View file

@ -18,7 +18,7 @@ _sym_db = _symbol_database.Default()
DESCRIPTOR = _descriptor.FileDescriptor( DESCRIPTOR = _descriptor.FileDescriptor(
name='Cura.proto', name='Cura.proto',
package='Cura', 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) _sym_db.RegisterFileDescriptor(DESCRIPTOR)
@ -54,19 +54,11 @@ _POLYGON_TYPE = _descriptor.EnumDescriptor(
name='SkirtType', index=5, number=5, name='SkirtType', index=5, number=5,
options=None, options=None,
type=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, containing_type=None,
options=None, options=None,
serialized_start=486, serialized_start=479,
serialized_end=623, serialized_end=577,
) )
_sym_db.RegisterEnumDescriptor(_POLYGON_TYPE) _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( _OBJECT = _descriptor.Descriptor(
name='Object', name='Object',
full_name='Cura.Object', full_name='Cura.Object',
@ -154,8 +176,8 @@ _OBJECT = _descriptor.Descriptor(
extension_ranges=[], extension_ranges=[],
oneofs=[ oneofs=[
], ],
serialized_start=65, serialized_start=114,
serialized_end=170, serialized_end=219,
) )
@ -184,8 +206,8 @@ _PROGRESS = _descriptor.Descriptor(
extension_ranges=[], extension_ranges=[],
oneofs=[ oneofs=[
], ],
serialized_start=172, serialized_start=221,
serialized_end=198, serialized_end=247,
) )
@ -214,8 +236,8 @@ _SLICEDOBJECTLIST = _descriptor.Descriptor(
extension_ranges=[], extension_ranges=[],
oneofs=[ oneofs=[
], ],
serialized_start=200, serialized_start=249,
serialized_end=255, serialized_end=304,
) )
@ -251,8 +273,8 @@ _SLICEDOBJECT = _descriptor.Descriptor(
extension_ranges=[], extension_ranges=[],
oneofs=[ oneofs=[
], ],
serialized_start=257, serialized_start=306,
serialized_end=312, serialized_end=361,
) )
@ -271,22 +293,8 @@ _LAYER = _descriptor.Descriptor(
is_extension=False, extension_scope=None, is_extension=False, extension_scope=None,
options=None), options=None),
_descriptor.FieldDescriptor( _descriptor.FieldDescriptor(
name='height', full_name='Cura.Layer.height', index=1, name='polygons', full_name='Cura.Layer.polygons', index=1,
number=2, type=2, cpp_type=6, label=1, number=2, type=11, cpp_type=10, label=3,
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,
has_default_value=False, default_value=[], has_default_value=False, default_value=[],
message_type=None, enum_type=None, containing_type=None, message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None, is_extension=False, extension_scope=None,
@ -302,8 +310,8 @@ _LAYER = _descriptor.Descriptor(
extension_ranges=[], extension_ranges=[],
oneofs=[ oneofs=[
], ],
serialized_start=314, serialized_start=363,
serialized_end=401, serialized_end=415,
) )
@ -328,13 +336,6 @@ _POLYGON = _descriptor.Descriptor(
message_type=None, enum_type=None, containing_type=None, message_type=None, enum_type=None, containing_type=None,
is_extension=False, extension_scope=None, is_extension=False, extension_scope=None,
options=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=[ extensions=[
], ],
@ -347,8 +348,8 @@ _POLYGON = _descriptor.Descriptor(
extension_ranges=[], extension_ranges=[],
oneofs=[ oneofs=[
], ],
serialized_start=404, serialized_start=418,
serialized_end=623, serialized_end=577,
) )
@ -384,8 +385,8 @@ _GCODELAYER = _descriptor.Descriptor(
extension_ranges=[], extension_ranges=[],
oneofs=[ oneofs=[
], ],
serialized_start=625, serialized_start=579,
serialized_end=663, serialized_end=617,
) )
@ -428,8 +429,8 @@ _OBJECTPRINTTIME = _descriptor.Descriptor(
extension_ranges=[], extension_ranges=[],
oneofs=[ oneofs=[
], ],
serialized_start=665, serialized_start=619,
serialized_end=733, serialized_end=687,
) )
@ -458,8 +459,8 @@ _SETTINGLIST = _descriptor.Descriptor(
extension_ranges=[], extension_ranges=[],
oneofs=[ oneofs=[
], ],
serialized_start=735, serialized_start=689,
serialized_end=781, serialized_end=735,
) )
@ -495,8 +496,8 @@ _SETTING = _descriptor.Descriptor(
extension_ranges=[], extension_ranges=[],
oneofs=[ oneofs=[
], ],
serialized_start=783, serialized_start=737,
serialized_end=821, serialized_end=775,
) )
@ -525,11 +526,12 @@ _GCODEPREFIX = _descriptor.Descriptor(
extension_ranges=[], extension_ranges=[],
oneofs=[ oneofs=[
], ],
serialized_start=823, serialized_start=777,
serialized_end=850, serialized_end=804,
) )
_OBJECTLIST.fields_by_name['objects'].message_type = _OBJECT _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 _OBJECT.fields_by_name['settings'].message_type = _SETTING
_SLICEDOBJECTLIST.fields_by_name['objects'].message_type = _SLICEDOBJECT _SLICEDOBJECTLIST.fields_by_name['objects'].message_type = _SLICEDOBJECT
_SLICEDOBJECT.fields_by_name['layers'].message_type = _LAYER _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 _POLYGON_TYPE.containing_type = _POLYGON
_SETTINGLIST.fields_by_name['settings'].message_type = _SETTING _SETTINGLIST.fields_by_name['settings'].message_type = _SETTING
DESCRIPTOR.message_types_by_name['ObjectList'] = _OBJECTLIST 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['Object'] = _OBJECT
DESCRIPTOR.message_types_by_name['Progress'] = _PROGRESS DESCRIPTOR.message_types_by_name['Progress'] = _PROGRESS
DESCRIPTOR.message_types_by_name['SlicedObjectList'] = _SLICEDOBJECTLIST DESCRIPTOR.message_types_by_name['SlicedObjectList'] = _SLICEDOBJECTLIST
@ -557,6 +560,13 @@ ObjectList = _reflection.GeneratedProtocolMessageType('ObjectList', (_message.Me
)) ))
_sym_db.RegisterMessage(ObjectList) _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( Object = _reflection.GeneratedProtocolMessageType('Object', (_message.Message,), dict(
DESCRIPTOR = _OBJECT, DESCRIPTOR = _OBJECT,
__module__ = 'Cura_pb2' __module__ = 'Cura_pb2'

View file

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