kopia lustrzana https://github.com/evil-mad/EggBot
				
				
				
			Issue #30: Make 'Start with pen centered' behavior more intuitive
git-svn-id: https://eggbotcode.googlecode.com/svn/trunk@149 72233254-1b6c-9e9c-5072-401df62706fbpull/47/head
							rodzic
							
								
									349d91703b
								
							
						
					
					
						commit
						86b5ca7a50
					
				|  | @ -31,8 +31,8 @@ import eggbot_scan | ||||||
| F_DEFAULT_SPEED = 1 | F_DEFAULT_SPEED = 1 | ||||||
| N_PEN_DOWN_DELAY = 400    # delay (ms) for the pen to go down before the next move | N_PEN_DOWN_DELAY = 400    # delay (ms) for the pen to go down before the next move | ||||||
| N_PEN_UP_DELAY = 400      # delay (ms) for the pen to up down before the next move | N_PEN_UP_DELAY = 400      # delay (ms) for the pen to up down before the next move | ||||||
| N_PEN_AXIS_STEPS = 1000   # steps the pen motor can move | N_PAGE_HEIGHT = 800       # Default page height (each unit equiv. to one step) | ||||||
| N_EGG_AXIS_STEPS = 1000   # steps for the egg motor move in one revolution | N_PAGE_WIDTH = 3200       # Default page width (each unit equiv. to one step) | ||||||
| 
 | 
 | ||||||
| N_PEN_UP_POS = 50      # Default pen-up position | N_PEN_UP_POS = 50      # Default pen-up position | ||||||
| N_PEN_DOWN_POS = 40      # Default pen-down position | N_PEN_DOWN_POS = 40      # Default pen-down position | ||||||
|  | @ -69,6 +69,29 @@ MISC_OUTPUT_FILE = os.path.join( HOME, 'misc.txt' ) | ||||||
| ##	''' Works fine on Ubuntu; YMMV ''' | ##	''' Works fine on Ubuntu; YMMV ''' | ||||||
| ##	STR_DEFAULT_COM_PORT = '/dev/ttyACM0' | ##	STR_DEFAULT_COM_PORT = '/dev/ttyACM0' | ||||||
| 
 | 
 | ||||||
|  | def parseLengthWithUnits( str ): | ||||||
|  | 	''' | ||||||
|  | 	Parse an SVG value which may or may not have units attached | ||||||
|  | 	This version is greatly simplified in that it only allows: no units, | ||||||
|  | 	units of px, and units of %.  Everything else, it returns None for. | ||||||
|  | 	There is a more general routine to consider in scour.py if more | ||||||
|  | 	generality is ever needed. | ||||||
|  | 	''' | ||||||
|  | 	u = 'px' | ||||||
|  | 	s = str.strip() | ||||||
|  | 	if s[-2:] == 'px': | ||||||
|  | 		s = s[:-2] | ||||||
|  | 	elif s[-1:] == '%': | ||||||
|  | 		u = '%' | ||||||
|  | 		s = s[:-1] | ||||||
|  | 
 | ||||||
|  | 	try: | ||||||
|  | 		v = float( s ) | ||||||
|  | 	except: | ||||||
|  | 		return None, None | ||||||
|  | 
 | ||||||
|  | 	return v, u | ||||||
|  | 
 | ||||||
| def subdivideCubicPath( sp, flat, i=1 ): | def subdivideCubicPath( sp, flat, i=1 ): | ||||||
| 	""" | 	""" | ||||||
| 	Break up a bezier curve into smaller curves, each of which | 	Break up a bezier curve into smaller curves, each of which | ||||||
|  | @ -222,6 +245,9 @@ class EggBot( inkex.Effect ): | ||||||
| 		self.nDeltaX = 0 | 		self.nDeltaX = 0 | ||||||
| 		self.nDeltaY = 0 | 		self.nDeltaY = 0 | ||||||
| 
 | 
 | ||||||
|  | 		self.svgWidth = float( N_PAGE_WIDTH ) | ||||||
|  | 		self.svgHeight = float( N_PAGE_HEIGHT ) | ||||||
|  | 
 | ||||||
| 		# Hack for mismatched EBB/motors, | 		# Hack for mismatched EBB/motors, | ||||||
| 		# which have half resolution | 		# which have half resolution | ||||||
| 		try: | 		try: | ||||||
|  | @ -463,6 +489,15 @@ class EggBot( inkex.Effect ): | ||||||
| 		if self.serialPort is None: | 		if self.serialPort is None: | ||||||
| 			return | 			return | ||||||
| 
 | 
 | ||||||
|  | 		if self.options.startCentered and ( not self.getDocProps() ): | ||||||
|  | 			# Cannot handle the document's dimensions!!! | ||||||
|  | 			inkex.errormsg( gettext.gettext( | ||||||
|  | 			'The document to be plotted has invalid dimensions. ' + | ||||||
|  | 			'The dimensions must be unitless or have units of pixels (px) or ' + | ||||||
|  | 			'percentages (%). Document dimensions may be set in Inkscape with ' + | ||||||
|  | 			'File > Document Properties' ) ) | ||||||
|  | 			return | ||||||
|  | 
 | ||||||
| 		self.ServoSetup() | 		self.ServoSetup() | ||||||
| 
 | 
 | ||||||
| 		if bDebug: | 		if bDebug: | ||||||
|  | @ -878,6 +913,42 @@ class EggBot( inkex.Effect ): | ||||||
| 				self.LayersPlotted += 1 | 				self.LayersPlotted += 1 | ||||||
| 		#Note: this function is only called if we are NOT plotting all layers. | 		#Note: this function is only called if we are NOT plotting all layers. | ||||||
| 
 | 
 | ||||||
|  | 	def getLength( self, name, default ): | ||||||
|  | 		''' | ||||||
|  | 		Get the <svg> attribute with name "name" and default value "default" | ||||||
|  | 		Parse the attribute into a value and associated units.  Then, accept | ||||||
|  | 		no units (''), units of pixels ('px'), and units of percentage ('%'). | ||||||
|  | 		''' | ||||||
|  | 		str = self.svg.get( name ) | ||||||
|  | 		if str: | ||||||
|  | 			v, u = parseLengthWithUnits( str ) | ||||||
|  | 			if not v: | ||||||
|  | 				# Couldn't parse the value | ||||||
|  | 				return None | ||||||
|  | 			elif ( u == '' ) or ( u == 'px' ): | ||||||
|  | 				return v | ||||||
|  | 			elif u == '%': | ||||||
|  | 				return float( default ) * v / 100.0 | ||||||
|  | 			else: | ||||||
|  | 				# Unsupported units | ||||||
|  | 				return None | ||||||
|  | 		else: | ||||||
|  | 			# No width specified; assume the default value | ||||||
|  | 			return float( default ) | ||||||
|  | 
 | ||||||
|  | 	def getDocProps( self ): | ||||||
|  | 		''' | ||||||
|  | 		Get the document's height and width attributes from the <svg> tag. | ||||||
|  | 		Use a default value in case the property is not present or is | ||||||
|  | 		expressed in units of percentages. | ||||||
|  | 		''' | ||||||
|  | 		self.svgHeight = self.getLength( 'height', N_PAGE_HEIGHT ) | ||||||
|  | 		self.svgWidth = self.getLength( 'width', N_PAGE_WIDTH ) | ||||||
|  | 		if ( self.svgHeight == None ) or ( self.svgWidth == None ): | ||||||
|  | 			return False | ||||||
|  | 		else: | ||||||
|  | 			return True | ||||||
|  | 
 | ||||||
| 	def plotPath( self, path, matTransform ): | 	def plotPath( self, path, matTransform ): | ||||||
| 		''' | 		''' | ||||||
| 		Plot the path while applying the transformation defined | 		Plot the path while applying the transformation defined | ||||||
|  | @ -925,8 +996,8 @@ class EggBot( inkex.Effect ): | ||||||
| 
 | 
 | ||||||
| 					# if we should start at center, then the first line segment should draw from there | 					# if we should start at center, then the first line segment should draw from there | ||||||
| 					if self.options.startCentered: | 					if self.options.startCentered: | ||||||
| 						self.fPrevX = self.fX | 						self.fPrevX = self.svgWidth / ( 2 * self.step_scaling_factor ) | ||||||
| 						self.fPrevY = N_PEN_AXIS_STEPS / ( 2 * self.step_scaling_factor ) | 						self.fPrevY = self.svgHeight / ( 2 * self.step_scaling_factor ) | ||||||
| 
 | 
 | ||||||
| 						self.ptFirst = ( self.fPrevX, self.fPrevY ) | 						self.ptFirst = ( self.fPrevX, self.fPrevY ) | ||||||
| 					else: | 					else: | ||||||
|  |  | ||||||
		Ładowanie…
	
		Reference in New Issue
	
	 newman.daniel1
						newman.daniel1