// ColorIndex converts RGB value to corresponding color number. func ColorIndex(cl []int) color.ColorNumber { minind := 0 minval := 1000000 for i, c := range color.ColorRGB { tmpval := 0 for j := 0; j < 3; j++ { tmpval += (cl[j] - int(c[j])) * (cl[j] - int(c[j])) } if tmpval < minval { minind = i minval = tmpval if minval == 0 { break } } } return color.ColorNumber(minind) }
// ParseLayer parses LAYER tables. func ParseLayer(d *drawing.Drawing, data [][2]string) (table.SymbolTable, error) { var name string var flag int var col color.ColorNumber var lt *table.LineType var lw int for _, dt := range data { switch dt[0] { case "2": name = dt[1] case "70": val, err := strconv.ParseInt(strings.TrimSpace(dt[1]), 10, 64) if err != nil { return nil, err } flag = int(val) case "62": val, err := strconv.ParseInt(strings.TrimSpace(dt[1]), 10, 64) if err != nil { return nil, err } col = color.ColorNumber(val) case "6": l, err := d.LineType(dt[1]) if err != nil { return nil, err } lt = l case "370": val, err := strconv.ParseInt(strings.TrimSpace(dt[1]), 10, 64) if err != nil { return nil, err } lw = int(val) case "390": // plotstyle } } l := table.NewLayer(name, col, lt) l.SetFlag(flag) l.SetLineWidth(lw) l.SetPlotStyle(d.PlotStyle) return l, nil }