comparison pkg/imports/sr.go @ 2612:c7ce8b011bcb

SR import: Negate negative Z values and issue a warning if a negative Z value is found.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Wed, 13 Mar 2019 12:13:22 +0100
parents 3f61b84ae7a6
children 1b6840093eac
comparison
equal deleted inserted replaced
2611:e8c97481438f 2612:c7ce8b011bcb
424 424
425 func loadXYZReader(r io.Reader, feedback Feedback) (octree.MultiPointZ, error) { 425 func loadXYZReader(r io.Reader, feedback Feedback) (octree.MultiPointZ, error) {
426 mpz := make(octree.MultiPointZ, 0, 250000) 426 mpz := make(octree.MultiPointZ, 0, 250000)
427 s := bufio.NewScanner(r) 427 s := bufio.NewScanner(r)
428 428
429 var hasNegZ bool
430
429 for line := 1; s.Scan(); line++ { 431 for line := 1; s.Scan(); line++ {
430 text := s.Text() 432 text := s.Text()
431 var p octree.Vertex 433 var p octree.Vertex
432 // fmt.Sscanf(text, "%f,%f,%f") is 4 times slower. 434 // fmt.Sscanf(text, "%f,%f,%f") is 4 times slower.
433 idx := strings.IndexByte(text, ',') 435 idx := strings.IndexByte(text, ',')
452 text = text[idx+1:] 454 text = text[idx+1:]
453 if p.Z, err = strconv.ParseFloat(text, 64); err != nil { 455 if p.Z, err = strconv.ParseFloat(text, 64); err != nil {
454 feedback.Warn("format error in line %d: %v", line, err) 456 feedback.Warn("format error in line %d: %v", line, err)
455 continue 457 continue
456 } 458 }
459 if p.Z < 0 {
460 p.Z = -p.Z
461 if !hasNegZ {
462 hasNegZ = true
463 feedback.Warn("Negative Z value found: Using -Z")
464 }
465 }
457 mpz = append(mpz, p) 466 mpz = append(mpz, p)
458 } 467 }
459 468
460 if err := s.Err(); err != nil { 469 if err := s.Err(); err != nil {
461 return nil, err 470 return nil, err