Fixed positioning when using multiple extruders. Fixed GCode preview for multiple extruders. Removed multiply, depricated because of the project planner, and does not work right with multiple extruders.

master
Daid 2012-04-29 14:22:20 +02:00
parent 70d833b19d
commit 74d8329a73
7 changed files with 60 additions and 24 deletions

View 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))

View 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'),

View 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)

View 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

View File

@ -93,12 +93,11 @@ class previewPanel(wx.Panel):
self.toolbar2.AddSeparator()
# Multiply
self.mulXadd = toolbarUtil.NormalButton(self.toolbar2, self.OnMulXAddClick, 'object-mul-x-add.png', 'Increase number of models on X axis')
self.mulXsub = toolbarUtil.NormalButton(self.toolbar2, self.OnMulXSubClick, 'object-mul-x-sub.png', 'Decrease number of models on X axis')
self.mulYadd = toolbarUtil.NormalButton(self.toolbar2, self.OnMulYAddClick, 'object-mul-y-add.png', 'Increase number of models on Y axis')
self.mulYsub = toolbarUtil.NormalButton(self.toolbar2, self.OnMulYSubClick, 'object-mul-y-sub.png', 'Decrease number of models on Y axis')
self.toolbar2.AddSeparator()
#self.mulXadd = toolbarUtil.NormalButton(self.toolbar2, self.OnMulXAddClick, 'object-mul-x-add.png', 'Increase number of models on X axis')
#self.mulXsub = toolbarUtil.NormalButton(self.toolbar2, self.OnMulXSubClick, 'object-mul-x-sub.png', 'Decrease number of models on X axis')
#self.mulYadd = toolbarUtil.NormalButton(self.toolbar2, self.OnMulYAddClick, 'object-mul-y-add.png', 'Increase number of models on Y axis')
#self.mulYsub = toolbarUtil.NormalButton(self.toolbar2, self.OnMulYSubClick, 'object-mul-y-sub.png', 'Decrease number of models on Y axis')
#self.toolbar2.AddSeparator()
# Rotate
self.rotateReset = toolbarUtil.NormalButton(self.toolbar2, self.OnRotateReset, 'object-rotate.png', 'Reset model rotation')
@ -623,8 +622,8 @@ class PreviewGLCanvas(glcanvas.GLCanvas):
glFlush()
def drawModel(self, obj):
multiX = int(profile.getProfileSetting('model_multiply_x'))
multiY = int(profile.getProfileSetting('model_multiply_y'))
multiX = 1 #int(profile.getProfileSetting('model_multiply_x'))
multiY = 1 #int(profile.getProfileSetting('model_multiply_y'))
modelScale = profile.getProfileSettingFloat('model_scale')
modelSize = (obj.mesh.getMaximum() - obj.mesh.getMinimum()) * modelScale
glPushMatrix()

View 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")

View 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.