chiark / gitweb /
Fixed positioning when using multiple extruders. Fixed GCode preview for multiple...
authorDaid <daid303@gmail.com>
Sun, 29 Apr 2012 12:22:20 +0000 (14:22 +0200)
committerDaid <daid303@gmail.com>
Sun, 29 Apr 2012 12:22:20 +0000 (14:22 +0200)
Cura/cura_sf/fabmetheus_utilities/geometry/solids/triangle_mesh.py
Cura/cura_sf/fabmetheus_utilities/settings.py
Cura/cura_sf/skeinforge_application/skeinforge_plugins/craft_plugins/carve.py
Cura/cura_sf/skeinforge_application/skeinforge_plugins/craft_plugins/skirt.py
Cura/gui/preview3d.py
Cura/gui/sliceProgessPanel.py
Cura/util/gcodeInterpreter.py

index 3239830577c9f7a30304a8e70a74b030070295cd..550f400689a94c47afe9e5cdca1b9fa1401f76e8 100644 (file)
@@ -824,7 +824,7 @@ class TriangleMesh( group.Group ):
                halfHeight = 0.5 * self.layerHeight
                self.zoneArrangement = ZoneArrangement(self.layerHeight, self.getTransformedVertexes())
                layerTop = self.cornerMaximum.z - halfHeight * 0.5
-               z = self.cornerMinimum.z + halfHeight
+               z = halfHeight
                layerCount = int((layerTop - z) / self.layerHeight) + 1
                while z < layerTop:
                        getLoopLayerAppend(self.loopLayers, layerCount, z).loops = self.getLoopsFromMesh(self.zoneArrangement.getEmptyZ(z))
index 08ad268d7691e7f16bb2159f724f4f58879a5752..fa79a29c5fa00b78acb55e74506a517fca3f2980 100644 (file)
@@ -113,6 +113,9 @@ def getProfileInformation():
                        'SwapYZ': storedSetting("swap_yz"),
                        'Scale': storedSettingFloat("model_scale"),
                        'Rotate': storedSettingFloat("model_rotate_base"),
+                       'CenterX': storedSettingFloat("machine_center_x"),
+                       'CenterY': storedSettingFloat("machine_center_y"),
+                       'AlternativeCenterFile': storedSetting("alternative_center"),
                },'scale': {
                        'Activate_Scale': "False",
                        'XY_Plane_Scale_ratio': DEFSET,
@@ -171,7 +174,7 @@ def getProfileInformation():
                        'Surrounding_Angle_degrees': DEFSET,
                        'Thread_Sequence_Choice': storedSetting('sequence'),
                },'multiply': {
-                       'Activate_Multiply': "True",
+                       'Activate_Multiply': "False",
                        'Center_X_mm': storedSettingFloat("machine_center_x"),
                        'Center_Y_mm': storedSettingFloat("machine_center_y"),
                        'Number_of_Columns_integer': storedSetting('model_multiply_x'),
index ae949b3daacc020e76f2c9dc102b5927e79bf73d..b3ad845e30dead5232f62f30929227e106008507 100644 (file)
@@ -185,8 +185,11 @@ class CarveRepository:
                self.flipZ = settings.BooleanSetting().getFromValue('FlipZ', self, False)
                self.swapXZ = settings.BooleanSetting().getFromValue('SwapXZ', self, False)
                self.swapYZ = settings.BooleanSetting().getFromValue('SwapYZ', self, False)
+               self.centerX = settings.FloatSpin().getFromValue(0.0, 'CenterX', self, 1000.0, 0.0)
+               self.centerY = settings.FloatSpin().getFromValue(0.0, 'CenterY', self, 1000.0, 0.0)
                self.scale = settings.FloatSpin().getFromValue( 0.1, 'Scale', self, 10.0, 1.0 )
                self.rotate = settings.FloatSpin().getFromValue( -180.0, 'Rotate', self, 180.0, 0.0 )
+               self.alternativeCenter = settings.StringSetting().getFromValue('AlternativeCenterFile', self, '')
 
 
        def execute(self):
@@ -219,16 +222,6 @@ class CarveSkein:
                mat10 = math.sin(rotate) * scaleX
                mat11 = math.cos(rotate) * scaleY
 
-               minZ = carving.getMinimumZ()
-               minSize = carving.getCarveCornerMinimum()
-               maxSize = carving.getCarveCornerMaximum()
-               for v in carving.vertexes:
-                       v.z -= minZ
-                       v.x -= minSize.x + (maxSize.x - minSize.x) / 2
-                       v.y -= minSize.y + (maxSize.y - minSize.y) / 2
-                       #v.x += self.machineCenter.x
-                       #v.y += self.machineCenter.y
-               
                for i in xrange(0, len(carving.vertexes)):
                        x = carving.vertexes[i].x
                        y = carving.vertexes[i].y
@@ -242,6 +235,34 @@ class CarveSkein:
                                x * mat10 + y * mat11,
                                z * scaleZ)
 
+               if repository.alternativeCenter.value != '':
+                       carving2 = svg_writer.getCarving(repository.alternativeCenter.value)
+                       for i in xrange(0, len(carving2.vertexes)):
+                               x = carving2.vertexes[i].x
+                               y = carving2.vertexes[i].y
+                               z = carving2.vertexes[i].z
+                               if swapXZ:
+                                       x, z = z, x
+                               if swapYZ:
+                                       y, z = z, y
+                               carving2.vertexes[i] = Vector3(
+                                       x * mat00 + y * mat01,
+                                       x * mat10 + y * mat11,
+                                       z * scaleZ)
+                       minZ = carving2.getMinimumZ()
+                       minSize = carving2.getCarveCornerMinimum()
+                       maxSize = carving2.getCarveCornerMaximum()
+               else:
+                       minZ = carving.getMinimumZ()
+                       minSize = carving.getCarveCornerMinimum()
+                       maxSize = carving.getCarveCornerMaximum()
+               for v in carving.vertexes:
+                       v.z -= minZ
+                       v.x -= minSize.x + (maxSize.x - minSize.x) / 2
+                       v.y -= minSize.y + (maxSize.y - minSize.y) / 2
+                       v.x += repository.centerX.value
+                       v.y += repository.centerY.value
+
                layerHeight = repository.layerHeight.value
                edgeWidth = repository.edgeWidth.value
                carving.setCarveLayerHeight(layerHeight)
index 4a87d47134363009846d61b992ee7d624e7ab123..51f3549c5bc73eb9cfc1b54e8e2c2f343eb83801 100644 (file)
@@ -171,6 +171,8 @@ class SkirtSkein:
 
        def addSkirt(self, z):
                'At skirt at z to gcode output.'
+               if len(self.outsetLoops) < 1 or len(self.outsetLoops[0]) < 1:
+                       return
                self.setSkirtFeedFlowTemperature()
                self.distanceFeedRate.addLine('(<skirt>)')
                oldTemperature = self.oldTemperatureInput
index ad2f5f0d49a96c87ba5f34a8dea249a5fd5f2a42..f905d0f4b73dc90df78c4fe9d3a0e648545f98ab 100644 (file)
@@ -93,12 +93,11 @@ class previewPanel(wx.Panel):
                self.toolbar2.AddSeparator()\r
 \r
                # Multiply\r
-               self.mulXadd = toolbarUtil.NormalButton(self.toolbar2, self.OnMulXAddClick, 'object-mul-x-add.png', 'Increase number of models on X axis')\r
-               self.mulXsub = toolbarUtil.NormalButton(self.toolbar2, self.OnMulXSubClick, 'object-mul-x-sub.png', 'Decrease number of models on X axis')\r
-               self.mulYadd = toolbarUtil.NormalButton(self.toolbar2, self.OnMulYAddClick, 'object-mul-y-add.png', 'Increase number of models on Y axis')\r
-               self.mulYsub = toolbarUtil.NormalButton(self.toolbar2, self.OnMulYSubClick, 'object-mul-y-sub.png', 'Decrease number of models on Y axis')\r
-\r
-               self.toolbar2.AddSeparator()\r
+               #self.mulXadd = toolbarUtil.NormalButton(self.toolbar2, self.OnMulXAddClick, 'object-mul-x-add.png', 'Increase number of models on X axis')\r
+               #self.mulXsub = toolbarUtil.NormalButton(self.toolbar2, self.OnMulXSubClick, 'object-mul-x-sub.png', 'Decrease number of models on X axis')\r
+               #self.mulYadd = toolbarUtil.NormalButton(self.toolbar2, self.OnMulYAddClick, 'object-mul-y-add.png', 'Increase number of models on Y axis')\r
+               #self.mulYsub = toolbarUtil.NormalButton(self.toolbar2, self.OnMulYSubClick, 'object-mul-y-sub.png', 'Decrease number of models on Y axis')\r
+               #self.toolbar2.AddSeparator()\r
 \r
                # Rotate\r
                self.rotateReset = toolbarUtil.NormalButton(self.toolbar2, self.OnRotateReset, 'object-rotate.png', 'Reset model rotation')\r
@@ -623,8 +622,8 @@ class PreviewGLCanvas(glcanvas.GLCanvas):
                glFlush()\r
        \r
        def drawModel(self, obj):\r
-               multiX = int(profile.getProfileSetting('model_multiply_x'))\r
-               multiY = int(profile.getProfileSetting('model_multiply_y'))\r
+               multiX = 1 #int(profile.getProfileSetting('model_multiply_x'))\r
+               multiY = 1 #int(profile.getProfileSetting('model_multiply_y'))\r
                modelScale = profile.getProfileSettingFloat('model_scale')\r
                modelSize = (obj.mesh.getMaximum() - obj.mesh.getMinimum()) * modelScale\r
                glPushMatrix()\r
index 7c1a2df070e019d6342f897d94dfd5f87dd57790..bb83266b4228f0616c5deae2039e7256dc26a092 100644 (file)
@@ -68,6 +68,7 @@ class sliceProgessPanel(wx.Panel):
                                profile.putProfileSetting('skirt_line_count', '0')
                                profile.putProfileSetting('machine_center_x', profile.getProfileSettingFloat('machine_center_x') + float(profile.getPreference('extruder_offset_x%d' % (idx))))
                                profile.putProfileSetting('machine_center_y', profile.getProfileSettingFloat('machine_center_y') + float(profile.getPreference('extruder_offset_y%d' % (idx))))
+                               profile.putProfileSetting('alternative_center', self.filelist[0])
                        if len(self.filelist) > 1:
                                profile.putProfileSetting('add_start_end_gcode', 'False')
                                profile.putProfileSetting('gcode_extension', 'multi_extrude_tmp')
@@ -105,7 +106,7 @@ class sliceProgessPanel(wx.Panel):
                        status += " Print time: %02d:%02d" % (int(result.gcode.totalMoveTimeMinute / 60), int(result.gcode.totalMoveTimeMinute % 60))
                        cost = result.gcode.calculateCost()
                        if cost != False:
-                               status += "Cost: %s" % (cost)
+                               status += " Cost: %s" % (cost)
                        self.statusText.SetLabel(status)
                        if exporer.hasExporer():
                                self.openFileLocationButton = wx.Button(self, -1, "Open file location")
index 7e83d3f47d24b21e0216c00cf3e0a9fd1818d6bb..a84f1ec5b1af50d14559e32f6c6f68204f6ac0f8 100644 (file)
@@ -56,6 +56,7 @@ class gcode():
                currentE = 0.0
                totalExtrusion = 0.0
                maxExtrusion = 0.0
+               currentExtruder = 0
                totalMoveTimeMinute = 0.0
                scale = 1.0
                posAbs = True
@@ -90,6 +91,15 @@ class gcode():
                                if pathType != "CUSTOM":
                                        startCodeDone = True
                                line = line[0:line.find(';')]
+                       T = self.getCodeInt(line, 'T')
+                       if T is not None:
+                               if currentExtruder > 0:
+                                       posOffset.x += float(profile.getPreference('extruder_offset_x%d' % (currentExtruder)))
+                                       posOffset.y += float(profile.getPreference('extruder_offset_y%d' % (currentExtruder)))
+                               currentExtruder = T
+                               if currentExtruder > 0:
+                                       posOffset.x -= float(profile.getPreference('extruder_offset_x%d' % (currentExtruder)))
+                                       posOffset.y -= float(profile.getPreference('extruder_offset_y%d' % (currentExtruder)))
                        
                        G = self.getCodeInt(line, 'G')
                        if G is not None:
@@ -102,17 +112,17 @@ class gcode():
                                        oldPos = pos.copy()
                                        if x is not None:
                                                if posAbs:
-                                                       pos.x = x * scale
+                                                       pos.x = x * scale + posOffset.x
                                                else:
                                                        pos.x += x * scale
                                        if y is not None:
                                                if posAbs:
-                                                       pos.y = y * scale
+                                                       pos.y = y * scale + posOffset.y
                                                else:
                                                        pos.y += y * scale
                                        if z is not None:
                                                if posAbs:
-                                                       pos.z = z * scale
+                                                       pos.z = z * scale + posOffset.z
                                                else:
                                                        pos.z += z * scale
                                                #Check if we have a new layer.