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