mirror of
https://git.mirrors.martin98.com/https://github.com/Ultimaker/Cura
synced 2025-08-05 16:30:39 +08:00
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.
This commit is contained in:
parent
70d833b19d
commit
74d8329a73
@ -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))
|
||||
|
@ -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'),
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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()
|
||||
|
@ -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")
|
||||
|
@ -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.
|
||||
|
Loading…
x
Reference in New Issue
Block a user