123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- import { isPositionLocation } from '../../mol-geo/util/location-iterator';
- import { Vec3 } from '../../mol-math/linear-algebra';
- import { ColorTheme } from '../../mol-theme/color';
- import { ThemeDataContext } from '../../mol-theme/theme';
- import { Color } from '../../mol-util/color';
- import { ColorNames } from '../../mol-util/color/names';
- import { ParamDefinition as PD } from '../../mol-util/param-definition';
- export function CustomColorTheme(
- ctx: ThemeDataContext,
- props: PD.Values<{}>
- ): ColorTheme<{}> {
- const { radius, center } = ctx.structure?.boundary.sphere!;
- const radiusSq = Math.max(radius * radius, 0.001);
- const scale = ColorTheme.PaletteScale;
- return {
- factory: CustomColorTheme,
- granularity: 'vertex',
- color: location => {
- if (!isPositionLocation(location)) return ColorNames.black;
- const dist = Vec3.squaredDistance(location.position, center);
- const t = Math.min(dist / radiusSq, 1);
- return ((t * scale) | 0) as Color;
- },
- palette: {
- filter: 'nearest',
- colors: [
- ColorNames.red,
- ColorNames.pink,
- ColorNames.violet,
- ColorNames.orange,
- ColorNames.yellow,
- ColorNames.green,
- ColorNames.blue
- ]
- },
- props: props,
- description: '',
- };
- }
- export const CustomColorThemeProvider: ColorTheme.Provider<{}, 'basic-wrapper-custom-color-theme'> = {
- name: 'basic-wrapper-custom-color-theme',
- label: 'Custom Color Theme',
- category: ColorTheme.Category.Misc,
- factory: CustomColorTheme,
- getParams: () => ({}),
- defaultValues: { },
- isApplicable: (ctx: ThemeDataContext) => true,
- };
|