Esempio n. 1
0
	def getUnpausedArcMovement( self, line, splitLine ):
		"Get an unpaused arc movement."
		if self.oldLocation == None:
			return line
		self.feedRateMinute = gcodec.getFeedRateMinute( self.feedRateMinute, splitLine )
		relativeLocation = gcodec.getLocationFromSplitLine( self.oldLocation, splitLine )
		location = self.oldLocation + relativeLocation
		self.oldLocation = location
		halfPlaneLineDistance = 0.5 * abs( relativeLocation.dropAxis( 2 ) )
		radius = gcodec.getDoubleFromCharacterSplitLine( 'R', splitLine )
		if radius == None:
			relativeCenter = complex( gcodec.getDoubleFromCharacterSplitLine( 'I', splitLine ), gcodec.getDoubleFromCharacterSplitLine( 'J', splitLine ) )
			radius = abs( relativeCenter )
		angle = 0.0
		if radius > 0.0:
			angle = math.pi
			if halfPlaneLineDistance < radius:
				angle = 2.0 * math.asin( halfPlaneLineDistance / radius )
			else:
				angle *= halfPlaneLineDistance / radius
		deltaZ = abs( relativeLocation.z )
		arcDistanceZ = complex( abs( angle ) * radius, relativeLocation.z )
		distance = abs( arcDistanceZ )
		if distance <= 0.0:
			return ''
		feedRateMinute = self.distanceFeedRate.getZLimitedFeedRate( deltaZ, distance, self.feedRateMinute )
		indexOfF = gcodec.indexOfStartingWithSecond( "F", splitLine )
		if indexOfF > 0 and feedRateMinute != self.feedRateMinute:
			feedRateStringOriginal = splitLine[ indexOfF ]
			feedRateStringReplacement = 'F' + self.distanceFeedRate.getRounded( feedRateMinute )
			return line.replace( feedRateStringOriginal, feedRateStringReplacement )
		return line
Esempio n. 2
0
 def getDimensionedArcMovement(self, line, splitLine):
     "Get an dimensioned arc movement."
     if self.oldLocation == None:
         return line
     relativeLocation = gcodec.getLocationFromSplitLine(
         self.oldLocation, splitLine)
     location = self.oldLocation + relativeLocation
     self.oldLocation = location
     halfPlaneLineDistance = 0.5 * abs(relativeLocation.dropAxis(2))
     radius = gcodec.getDoubleFromCharacterSplitLine('R', splitLine)
     if radius == None:
         relativeCenter = complex(
             gcodec.getDoubleFromCharacterSplitLine('I', splitLine),
             gcodec.getDoubleFromCharacterSplitLine('J', splitLine))
         radius = abs(relativeCenter)
     angle = 0.0
     if radius > 0.0:
         angle = math.pi
         if halfPlaneLineDistance < radius:
             angle = 2.0 * math.asin(halfPlaneLineDistance / radius)
         else:
             angle *= halfPlaneLineDistance / radius
     deltaZ = abs(relativeLocation.z)
     arcDistanceZ = complex(abs(angle) * radius, relativeLocation.z)
     distance = abs(arcDistanceZ)
     return line + self.getExtrusionDistanceString(distance, splitLine)
Esempio n. 3
0
	def getUnpausedArcMovement( self, line, splitLine ):
		"Get an unpaused arc movement."
		if self.oldLocation == None:
			return line
		self.feedRateMinute = gcodec.getFeedRateMinute( self.feedRateMinute, splitLine )
		relativeLocation = gcodec.getLocationFromSplitLine( self.oldLocation, splitLine )
		location = self.oldLocation + relativeLocation
		self.oldLocation = location
		halfPlaneLineDistance = 0.5 * abs( relativeLocation.dropAxis( 2 ) )
		radius = gcodec.getDoubleFromCharacterSplitLine( 'R', splitLine )
		if radius == None:
			relativeCenter = complex( gcodec.getDoubleFromCharacterSplitLine( 'I', splitLine ), gcodec.getDoubleFromCharacterSplitLine( 'J', splitLine ) )
			radius = abs( relativeCenter )
		angle = 0.0
		if radius > 0.0:
			angle = math.pi
			if halfPlaneLineDistance < radius:
				angle = 2.0 * math.asin( halfPlaneLineDistance / radius )
			else:
				angle *= halfPlaneLineDistance / radius
		deltaZ = abs( relativeLocation.z )
		arcDistanceZ = complex( abs( angle ) * radius, relativeLocation.z )
		distance = abs( arcDistanceZ )
		if distance <= 0.0:
			return ''
		unpausedFeedRateMinute = self.distanceFeedRate.getZLimitedFeedRate( deltaZ, distance, self.feedRateMinute )
		return self.distanceFeedRate.getLineWithFeedRate( unpausedFeedRateMinute, line, splitLine )
Esempio n. 4
0
 def getUnpausedArcMovement(self, line, splitLine):
     "Get an unpaused arc movement."
     if self.oldLocation == None:
         return line
     self.feedRateMinute = gcodec.getFeedRateMinute(self.feedRateMinute,
                                                    splitLine)
     relativeLocation = gcodec.getLocationFromSplitLine(
         self.oldLocation, splitLine)
     location = self.oldLocation + relativeLocation
     self.oldLocation = location
     halfPlaneLineDistance = 0.5 * abs(relativeLocation.dropAxis(2))
     radius = gcodec.getDoubleFromCharacterSplitLine('R', splitLine)
     if radius == None:
         relativeCenter = complex(
             gcodec.getDoubleFromCharacterSplitLine('I', splitLine),
             gcodec.getDoubleFromCharacterSplitLine('J', splitLine))
         radius = abs(relativeCenter)
     angle = 0.0
     if radius > 0.0:
         angle = math.pi
         if halfPlaneLineDistance < radius:
             angle = 2.0 * math.asin(halfPlaneLineDistance / radius)
         else:
             angle *= halfPlaneLineDistance / radius
     deltaZ = abs(relativeLocation.z)
     arcDistanceZ = complex(abs(angle) * radius, relativeLocation.z)
     distance = abs(arcDistanceZ)
     if distance <= 0.0:
         return ''
     unpausedFeedRateMinute = self.distanceFeedRate.getZLimitedFeedRate(
         deltaZ, distance, self.feedRateMinute)
     return self.distanceFeedRate.getLineWithFeedRate(
         unpausedFeedRateMinute, line, splitLine)
Esempio n. 5
0
	def getDimensionedArcMovement( self, line, splitLine ):
		"Get an dimensioned arc movement."
		if self.oldLocation == None:
			return line
		relativeLocation = gcodec.getLocationFromSplitLine( self.oldLocation, splitLine )
		location = self.oldLocation + relativeLocation
		self.oldLocation = location
		halfPlaneLineDistance = 0.5 * abs( relativeLocation.dropAxis( 2 ) )
		radius = gcodec.getDoubleFromCharacterSplitLine( 'R', splitLine )
		if radius == None:
			relativeCenter = complex( gcodec.getDoubleFromCharacterSplitLine( 'I', splitLine ), gcodec.getDoubleFromCharacterSplitLine( 'J', splitLine ) )
			radius = abs( relativeCenter )
		angle = 0.0
		if radius > 0.0:
			angle = math.pi
			if halfPlaneLineDistance < radius:
				angle = 2.0 * math.asin( halfPlaneLineDistance / radius )
			else:
				angle *= halfPlaneLineDistance / radius
		deltaZ = abs( relativeLocation.z )
		arcDistanceZ = complex( abs( angle ) * radius, relativeLocation.z )
		distance = abs( arcDistanceZ )
		return line + self.getExtrusionDistanceString( distance, splitLine )