Mercurial > gemma
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 |