From 9f12599ef3f28ecd8e1094fa4409772cb4cba2bf Mon Sep 17 00:00:00 2001
From: Alexander Rose <alex.rose@rcsb.org>
Date: Tue, 4 Sep 2018 15:10:35 -0700
Subject: [PATCH] color-/size-data related refactoring

---
 .../structure/visual/util/common.ts            | 18 +++++++++---------
 src/mol-geo/util/color-data.ts                 |  4 +++-
 src/mol-view/theme/color.ts                    |  4 ++--
 src/mol-view/theme/color/custom.ts             |  2 +-
 src/mol-view/theme/size.ts                     |  2 +-
 src/mol-view/theme/size/physical.ts            |  2 +-
 src/mol-view/theme/size/uniform.ts             |  2 +-
 7 files changed, 18 insertions(+), 16 deletions(-)

diff --git a/src/mol-geo/representation/structure/visual/util/common.ts b/src/mol-geo/representation/structure/visual/util/common.ts
index d77396d73..b5bc76743 100644
--- a/src/mol-geo/representation/structure/visual/util/common.ts
+++ b/src/mol-geo/representation/structure/visual/util/common.ts
@@ -6,8 +6,8 @@
  */
 
 import { Unit, Structure } from 'mol-model/structure';
-import { createUniformColor, ColorData, createGroupColor, createGroupInstanceColor, createInstanceColor } from '../../../../util/color-data';
-import { createUniformSize, SizeData, createGroupSize, createGroupInstanceSize, createInstanceSize } from '../../../../util/size-data';
+import { createUniformColor, ColorData, createGroupColor, createGroupInstanceColor, createInstanceColor, ColorType } from '../../../../util/color-data';
+import { createUniformSize, SizeData, createGroupSize, createGroupInstanceSize, createInstanceSize, SizeType } from '../../../../util/size-data';
 import { ValueCell } from 'mol-util';
 import { LocationIterator } from '../../../../util/location-iterator';
 import { Mesh } from '../../../../mesh/mesh';
@@ -24,11 +24,14 @@ import { PointProps } from 'mol-geo/representation/structure/representation/poin
 import { fillSerial } from 'mol-util/array';
 import { TransformData, createIdentityTransform, createTransforms } from '../../../../util/transform-data';
 
+function getGranularity(locationIt: LocationIterator, granularity: ColorType | SizeType) {
+    // Always use 'group' kind for 'complex' location iterators, i.e. an instance may include multiple units
+    return granularity === 'instance' && locationIt.isComplex ? 'group' : granularity
+}
+
 export function createColors(ctx: RuntimeContext, locationIt: LocationIterator, props: ColorThemeProps, colorData?: ColorData): Promise<ColorData> {
     const colorTheme = ColorTheme(props)
-    // Always use 'group' kind for 'complex' location iterators, i.e. an instance may include multiple units
-    const kind = colorTheme.granularity === 'instance' && locationIt.isComplex ? 'group' : colorTheme.granularity
-    switch (kind) {
+    switch (getGranularity(locationIt, colorTheme.granularity)) {
         case 'uniform': return createUniformColor(ctx, locationIt, colorTheme.color, colorData)
         case 'group': return createGroupColor(ctx, locationIt, colorTheme.color, colorData)
         case 'groupInstance': return createGroupInstanceColor(ctx, locationIt, colorTheme.color, colorData)
@@ -38,7 +41,7 @@ export function createColors(ctx: RuntimeContext, locationIt: LocationIterator,
 
 export async function createSizes(ctx: RuntimeContext, locationIt: LocationIterator, props: SizeThemeProps, sizeData?: SizeData): Promise<SizeData> {
     const sizeTheme = SizeTheme(props)
-    switch (sizeTheme.kind) {
+    switch (getGranularity(locationIt, sizeTheme.granularity)) {
         case 'uniform': return createUniformSize(ctx, locationIt, sizeTheme.size, sizeData)
         case 'group': return createGroupSize(ctx, locationIt, sizeTheme.size, sizeData)
         case 'groupInstance': return createGroupInstanceSize(ctx, locationIt, sizeTheme.size, sizeData)
@@ -52,10 +55,7 @@ type StructureMeshProps = Required<MeshProps & StructureProps>
 
 async function _createMeshValues(ctx: RuntimeContext, transforms: TransformData, mesh: Mesh, locationIt: LocationIterator, props: StructureMeshProps): Promise<MeshValues> {
     const { instanceCount, groupCount } = locationIt
-    console.time('createColors')
     const color = await createColors(ctx, locationIt, props.colorTheme)
-    console.timeEnd('createColors')
-    console.log(locationIt.groupCount)
     const marker = createMarkers(instanceCount * groupCount)
 
     const counts = { drawCount: mesh.triangleCount * 3, groupCount, instanceCount }
diff --git a/src/mol-geo/util/color-data.ts b/src/mol-geo/util/color-data.ts
index d0a8115a5..e47eef2d8 100644
--- a/src/mol-geo/util/color-data.ts
+++ b/src/mol-geo/util/color-data.ts
@@ -10,9 +10,11 @@ import { Color } from 'mol-util/color';
 import { Vec2, Vec3 } from 'mol-math/linear-algebra';
 import { LocationIterator } from './location-iterator';
 import { NullLocation } from 'mol-model/location';
-import { LocationColor, ColorType } from 'mol-view/theme/color';
+import { LocationColor } from 'mol-view/theme/color';
 import { RuntimeContext } from 'mol-task';
 
+export type ColorType = 'uniform' | 'instance' | 'group' | 'groupInstance'
+
 export type ColorData = {
     uColor: ValueCell<Vec3>,
     aColor: ValueCell<Float32Array>,
diff --git a/src/mol-view/theme/color.ts b/src/mol-view/theme/color.ts
index 293870932..55ef2d83a 100644
--- a/src/mol-view/theme/color.ts
+++ b/src/mol-view/theme/color.ts
@@ -17,8 +17,8 @@ import { UniformColorTheme } from './color/uniform';
 import { CrossLinkColorTheme } from './color/cross-link';
 import { ShapeGroupColorTheme } from './color/shape-group';
 import { CustomColorTheme } from './color/custom';
+import { ColorType } from 'mol-geo/util/color-data';
 
-export type ColorType = 'uniform' | 'instance' | 'group' | 'groupInstance'
 export type LocationColor = (location: Location, isSecondary: boolean) => Color
 
 export interface ColorTheme {
@@ -46,7 +46,7 @@ export interface ColorThemeProps {
     value?: Color
     structure?: Structure
     color?: LocationColor
-    kind?: ColorType
+    granularity?: ColorType
 }
 
 export const ColorThemeInfo = {
diff --git a/src/mol-view/theme/color/custom.ts b/src/mol-view/theme/color/custom.ts
index eb3d93bc0..08c8781b4 100644
--- a/src/mol-view/theme/color/custom.ts
+++ b/src/mol-view/theme/color/custom.ts
@@ -13,7 +13,7 @@ const DefaultColor = Color(0xCCCCCC)
 export function CustomColorTheme(props: ColorThemeProps): ColorTheme {
     const value = defaults(props.value, DefaultColor)
     return {
-        granularity: defaults(props.kind, 'uniform'),
+        granularity: defaults(props.granularity, 'uniform'),
         color: defaults(props.color, () => value)
     }
 }
\ No newline at end of file
diff --git a/src/mol-view/theme/size.ts b/src/mol-view/theme/size.ts
index 059c8b04f..f1d829f4e 100644
--- a/src/mol-view/theme/size.ts
+++ b/src/mol-view/theme/size.ts
@@ -11,7 +11,7 @@ import { PhysicalSizeTheme } from './size/physical';
 import { UniformSizeTheme } from './size/uniform';
 
 export interface SizeTheme {
-    kind: SizeType
+    granularity: SizeType
     size: LocationSize
 }
 
diff --git a/src/mol-view/theme/size/physical.ts b/src/mol-view/theme/size/physical.ts
index 87c7ccefe..43a885989 100644
--- a/src/mol-view/theme/size/physical.ts
+++ b/src/mol-view/theme/size/physical.ts
@@ -42,7 +42,7 @@ export function PhysicalSizeTheme(props: SizeThemeProps): SizeTheme {
     }
 
     return {
-        kind: 'group',
+        granularity: 'group',
         size: sizeFn
     }
 }
\ No newline at end of file
diff --git a/src/mol-view/theme/size/uniform.ts b/src/mol-view/theme/size/uniform.ts
index f9810f2e7..28634f5ee 100644
--- a/src/mol-view/theme/size/uniform.ts
+++ b/src/mol-view/theme/size/uniform.ts
@@ -15,7 +15,7 @@ export function UniformSizeTheme(props: SizeThemeProps): SizeTheme {
     const size = value * factor
 
     return {
-        kind: 'uniform',
+        granularity: 'uniform',
         size: () => size
     }
 }
\ No newline at end of file
-- 
GitLab