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))
'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,
'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'),
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):
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
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)
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
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
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
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')
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")
currentE = 0.0
totalExtrusion = 0.0
maxExtrusion = 0.0
+ currentExtruder = 0
totalMoveTimeMinute = 0.0
scale = 1.0
posAbs = True
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:
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.