Просмотр исходного кода

Changed the point data type sent from the backend from int64 to float.

Added extruder information to LayerPolygon
Johan K 8 лет назад
Родитель
Сommit
3d413df215

+ 7 - 2
cura/LayerPolygon.py

@@ -17,11 +17,12 @@ class LayerPolygon:
     
     __jump_map = numpy.logical_or( numpy.arange(10) == NoneType, numpy.arange(10) >= MoveCombingType )
     
-    def __init__(self, mesh, line_types, data, line_widths):
+    def __init__(self, mesh, extruder, line_types, data, line_widths):
         self._mesh = mesh
+        self._extruder = extruder
         self._types = line_types
         self._data = data
-        self._line_widths = line_widths / 1000
+        self._line_widths = line_widths
         
         self._vertex_begin = 0
         self._vertex_end = 0
@@ -113,6 +114,10 @@ class LayerPolygon:
     def lineMeshElementCount(self):
         return (self._index_end - self._index_begin)
 
+    @property
+    def extruder(self):
+        return self._extruder
+
     @property
     def types(self):
         return self._types

+ 2 - 2
plugins/CuraEngineBackend/Cura.proto

@@ -77,9 +77,9 @@ message PathSegment {
         Point3D = 1;
     }
     PointType point_type = 2;
-    bytes points = 3; // The points defining the line segments, bytes of int64[2/3]? array of length N+1
+    bytes points = 3; // The points defining the line segments, bytes of float[2/3] array of length N+1
     bytes line_type = 4; // Type of line segment as an unsigned char array of length 1 or N, where N is the number of line segments in this path
-    bytes line_width = 5; // The widths of the line segments as bytes of a float? array of length 1 or N
+    bytes line_width = 5; // The widths of the line segments as bytes of a float array of length 1 or N
 }
 
 

+ 19 - 10
plugins/CuraEngineBackend/ProcessSlicedLayersJob.py

@@ -94,26 +94,35 @@ class ProcessSlicedLayersJob(Job):
             for p in range(layer.repeatedMessageCount("path_segment")):
                 polygon = layer.getRepeatedMessage("path_segment", p)
 
+                extruder = polygon.extruder
+
                 line_types = numpy.fromstring(polygon.line_type, dtype="u1")  # Convert bytearray to numpy array
                 line_types = line_types.reshape((-1,1))
 
-                points = numpy.fromstring(polygon.points, dtype="i8")  # Convert bytearray to numpy array
-                points = points.reshape((-1,2))  # We get a linear list of pairs that make up the points, so make numpy interpret them correctly.
+                points = numpy.fromstring(polygon.points, dtype="f4")  # Convert bytearray to numpy array
+                if polygon.point_type == 0: # Point2D
+                    points = points.reshape((-1,2))  # We get a linear list of pairs that make up the points, so make numpy interpret them correctly.
+                else: # Point3D
+                    points = points.reshape((-1,3))
 
-                line_widths = numpy.fromstring(polygon.line_width, dtype="i4")  # Convert bytearray to numpy array
+                line_widths = numpy.fromstring(polygon.line_width, dtype="f4")  # Convert bytearray to numpy array
                 line_widths = line_widths.reshape((-1,1))  # We get a linear list of pairs that make up the points, so make numpy interpret them correctly.
                 
                 # Create a new 3D-array, copy the 2D points over and insert the right height.
                 # This uses manual array creation + copy rather than numpy.insert since this is
                 # faster.
                 new_points = numpy.empty((len(points), 3), numpy.float32)
-                new_points[:,0] = points[:,0]
-                new_points[:,1] = layer.height
-                new_points[:,2] = -points[:,1]
-
-                new_points /= 1000
-
-                this_poly = LayerPolygon.LayerPolygon(layer_data, line_types, new_points, line_widths)
+                if polygon.point_type == 0: # Point2D
+                    new_points[:,0] = points[:,0]
+                    new_points[:,1] = layer.height/1000 # layer height value is in backend representation
+                    new_points[:,2] = -points[:,1]
+                else: # Point3D
+                    new_points[:,0] = points[:,0]
+                    new_points[:,1] = points[:,2]
+                    new_points[:,2] = -points[:,1]
+                    
+
+                this_poly = LayerPolygon.LayerPolygon(layer_data, extruder, line_types, new_points, line_widths)
                 this_poly.buildCache()
                 
                 this_layer.polygons.append(this_poly)