| 314 | |
| 315 | |
| 316 | class Vector( KicadObj ): |
| 317 | |
| 318 | def __init__( self, name, x=None, y=None ): |
| 319 | KicadObj.__init__( self, name ) |
| 320 | self.x = x |
| 321 | self.y = y |
| 322 | |
| 323 | def tag_value( self, factory, value ): |
| 324 | if self.x == None: |
| 325 | self.x = float(value) |
| 326 | elif self.y == None: |
| 327 | self.y = float(value) |
| 328 | else: |
| 329 | factory.parse_error( "too many values for '%s'" % self.obj_name ) |
| 330 | |
| 331 | def clone( self ): |
| 332 | return Vector( self.obj_name, self.x, self.y ) |
| 333 | |
| 334 | def is_set( self ): |
| 335 | return self.y != None |
| 336 | |
| 337 | def write_contents( self, writer ): |
| 338 | writer.write_float( self.x ) |
| 339 | writer.write_float( self.y ) |
| 340 | |
| 341 | def __add__( self, v ): |
| 342 | return Vector( self.obj_name, self.x+v.x, self.y+v.y ) |
| 343 | |
| 344 | def __sub__( self, v ): |
| 345 | return Vector( self.obj_name, self.x-v.x, self.y-v.y ) |
| 346 | |
| 347 | def __str__( self ): |
| 348 | if self.y == None: |
| 349 | return "<<<NONE>>>" |
| 350 | return "%f/%f" % ( self.x, self.y ) |
| 351 | |
| 352 | def unrot( self ): |
| 353 | return self |
| 354 | |
| 355 | def get_angle( self ): |
| 356 | return 0 |
| 357 | |
| 358 | def rotate( self, angle ): |
| 359 | x = self.x |
| 360 | y = self.y |
| 361 | if angle == 0: |
| 362 | pass |
| 363 | elif angle == 90: |
| 364 | x, y = y, -x |
| 365 | elif angle == 180: |
| 366 | x, y = -x, -y |
| 367 | elif angle == 270: |
| 368 | x, y = -y, x |
| 369 | else: |
| 370 | # +++ sin/cos??? |
| 371 | # raise Exception( "unsupported angle" ) |
| 372 | ra = math.radians( angle ) |
| 373 | sa = math.sin( ra ) |
no outgoing calls
no test coverage detected