From 5cc9e724582ac4e302fad76d380c397ddeb27876 Mon Sep 17 00:00:00 2001 From: OszkarSemerath Date: Thu, 1 Feb 2018 14:28:01 +0100 Subject: Type coloring --- .../application/ui/highlight/ColorCalculator.xtend | 38 ++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 Application/hu.bme.mit.inf.dslreasoner.application.ui/src/hu/bme/mit/inf/dslreasoner/application/ui/highlight/ColorCalculator.xtend (limited to 'Application/hu.bme.mit.inf.dslreasoner.application.ui/src/hu/bme/mit/inf/dslreasoner/application/ui/highlight/ColorCalculator.xtend') diff --git a/Application/hu.bme.mit.inf.dslreasoner.application.ui/src/hu/bme/mit/inf/dslreasoner/application/ui/highlight/ColorCalculator.xtend b/Application/hu.bme.mit.inf.dslreasoner.application.ui/src/hu/bme/mit/inf/dslreasoner/application/ui/highlight/ColorCalculator.xtend new file mode 100644 index 00000000..d0f9db88 --- /dev/null +++ b/Application/hu.bme.mit.inf.dslreasoner.application.ui/src/hu/bme/mit/inf/dslreasoner/application/ui/highlight/ColorCalculator.xtend @@ -0,0 +1,38 @@ +package hu.bme.mit.inf.dslreasoner.application.ui.highlight + +import java.util.List +import java.util.Random +import org.eclipse.emf.ecore.EClass +import org.eclipse.emf.ecore.EEnum + +class ColorCalculator { + + public def dispatch getColor(EClass c) { + val supertypes = (c.getEAllSuperTypes + #[c]) + val typeHashcodes = supertypes.map[(c.getEPackage.nsURI->c.name).hashCode] + return randomColor(typeHashcodes) + } + public def dispatch getColor(EEnum e) { + return randomColor((e.getEPackage.nsURI->e.name).hashCode) + } + + protected def randomColor(Integer seed) { + val Random random = new Random(seed) + val rangePicker = [|random.nextInt(128)+128] + return #[rangePicker.apply(), rangePicker.apply(), rangePicker.apply()] + } + protected def randomColor(Iterable seeds) { seeds.map[randomColor].averageColor } + private def averageColor(Iterable> colors) { + if(colors.empty) { + return #[256,256,256] + } else { + return #[ + colors.map[get(0)].average, + colors.map[get(1)].average, + colors.map[get(2)].average + ] + } + } + private def average(Iterable doubles) { return doubles.reduce[p1, p2|p1+p2]/doubles.size } +} + -- cgit v1.2.3-70-g09d2