changeset 3795:b330e014c655 yworks-svg2pdf

merge from default
author Bernhard Reiter <bernhard@intevation.de>
date Thu, 04 Jul 2019 08:33:12 +0200
parents 9156890179e2 (current diff) 6521c962a7b6 (diff)
children 243316850889
files
diffstat 3 files changed, 107 insertions(+), 72 deletions(-) [+]
line wrap: on
line diff
--- a/pkg/controllers/common.go	Wed Jul 03 17:48:19 2019 +0200
+++ b/pkg/controllers/common.go	Thu Jul 04 08:33:12 2019 +0200
@@ -100,6 +100,18 @@
 	return &ia
 }
 
+func sliceToTextArray(s []string) *pgtype.TextArray {
+	if len(s) == 0 {
+		return nil
+	}
+	var ta pgtype.TextArray
+	if err := ta.Set(s); err != nil {
+		log.Printf("warn: %v\n", err)
+		return nil
+	}
+	return &ta
+}
+
 func toTextArray(txt string, allowed []string) *pgtype.TextArray {
 	parts := strings.Split(txt, ",")
 	var accepted []string
@@ -114,13 +126,15 @@
 			}
 		}
 	}
-	if len(accepted) == 0 {
-		return nil
-	}
-	var ta pgtype.TextArray
-	if err := ta.Set(accepted); err != nil {
-		log.Printf("warn: %v\n", err)
-		return nil
-	}
-	return &ta
+	return sliceToTextArray(accepted)
 }
+
+func splitUpper(s string) []string {
+	s = strings.Map(func(r rune) rune {
+		if ('A' <= r && r <= 'Z') || r == ',' {
+			return r
+		}
+		return -1
+	}, strings.ToUpper(s))
+	return strings.FieldsFunc(s, func(r rune) bool { return r != ',' })
+}
--- a/pkg/controllers/importqueue.go	Wed Jul 03 17:48:19 2019 +0200
+++ b/pkg/controllers/importqueue.go	Thu Jul 04 08:33:12 2019 +0200
@@ -112,6 +112,14 @@
 			query, query, query, query)
 	}
 
+	if cc := req.FormValue("cc"); cc != "" {
+		codes := sliceToTextArray(splitUpper(cc))
+		cond(" username IN "+
+			"(SELECT username FROM internal.user_profiles "+
+			"WHERE country = ANY($%d)) ",
+			codes)
+	}
+
 	if st := req.FormValue("states"); st != "" {
 		states := toTextArray(st, imports.ImportStateNames)
 		cond(" state = ANY($%d) ", states)
--- a/pkg/octree/simplify.go	Wed Jul 03 17:48:19 2019 +0200
+++ b/pkg/octree/simplify.go	Thu Jul 04 08:33:12 2019 +0200
@@ -17,6 +17,74 @@
 	"math"
 )
 
+func handleTriangle(
+	t *Triangle,
+	maxDist, tolerance float64,
+	maxIdx int,
+	points MultiPointZ,
+	result *MultiPointZ,
+) bool {
+	if maxDist <= tolerance {
+		return false
+	}
+
+	if len(points) == 1 {
+		*result = append(*result, points[0])
+		return true
+	}
+
+	var (
+		tris     [3]Triangle
+		planes   [3]Plane3D
+		maxDists [3]float64
+		maxIdxs  [3]int
+		parts    [3]MultiPointZ
+	)
+
+	top := points[maxIdx]
+	for i := 0; i < 3; i++ {
+		tris[i] = Triangle{t[i], t[(i+1)%3], top}
+		planes[i] = tris[i].Plane3D()
+	}
+
+nextPoint:
+	for i, v := range points {
+		if i == maxIdx {
+			continue
+		}
+
+		for j := range tris {
+			if tris[j].Contains(v.X, v.Y) {
+				if dist := math.Abs(planes[j].Eval(v)); dist > maxDists[j] {
+					maxDists[j] = dist
+					maxIdxs[j] = len(parts[j])
+				}
+				parts[j] = append(parts[j], v)
+				continue nextPoint
+			}
+		}
+	}
+
+	var found bool
+	for i, part := range parts {
+		if len(part) > 0 && handleTriangle(
+			&tris[i],
+			maxDists[i], tolerance,
+			maxIdxs[i],
+			part,
+			result,
+		) {
+			found = true
+		}
+	}
+
+	if found {
+		*result = append(*result, top)
+	}
+
+	return found
+}
+
 func (points MultiPointZ) Simplify(tolerance float64) MultiPointZ {
 
 	if len(points) < 2 {
@@ -111,72 +179,17 @@
 		}
 	}
 
-	result := make([]Vertex, 0, len(points))
-
-	var handleTriangle func(*Triangle, float64, int, []Vertex) bool
-
-	handleTriangle = func(
-		t *Triangle,
-		maxDist float64, maxIdx int,
-		points []Vertex,
-	) bool {
-		if maxDist <= tolerance {
-			return false
-		}
-
-		if len(points) == 1 {
-			result = append(result, points[0])
-		}
-
-		var (
-			tris     [3]Triangle
-			planes   [3]Plane3D
-			maxDists [3]float64
-			maxIdxs  [3]int
-			parts    [3][]Vertex
-		)
-
-		top := points[maxIdx]
-		for i := 0; i < 3; i++ {
-			tris[i] = Triangle{t[i], t[(i+1)%3], top}
-			planes[i] = tris[i].Plane3D()
-		}
-
-	nextPoint:
-		for i, v := range points {
-			if i == maxIdx {
-				continue
-			}
-
-			for j := range tris {
-				if tris[j].Contains(v.X, v.Y) {
-					if dist := math.Abs(planes[j].Eval(v)); dist > maxDists[j] {
-						maxDists[j] = dist
-						maxIdxs[j] = len(parts[j])
-					}
-					parts[j] = append(parts[j], v)
-					continue nextPoint
-				}
-			}
-		}
-
-		var found bool
-		for i, part := range parts {
-			if len(part) > 0 && handleTriangle(&tris[i], maxDists[i], maxIdxs[i], part) {
-				found = true
-			}
-		}
-
-		if found {
-			result = append(result, top)
-		}
-
-		return found
-	}
+	result := make(MultiPointZ, 0, len(points))
 
 	var found bool
 	for i, part := range parts {
-		if len(part) > 0 && handleTriangle(&tris[i], maxDists[i], maxIdxs[i], part) {
+		if len(part) > 0 && handleTriangle(
+			&tris[i],
+			maxDists[i], tolerance,
+			maxIdxs[i],
+			part,
+			&result,
+		) {
 			found = true
 		}
 	}