Skip to content
Snippets Groups Projects
Select Git revision
  • d2cffbe6e625c325c6647d21f14dcdb6d3f9ad7d
  • master default protected
  • devel
  • hruska-feature-clients-api
  • malostik-#5066-deduplicate-idea-ids
  • warden-postgresql-port
  • hruska-feature-#6799-filter-keys
  • hruska-feature-5066-duplicateIdeaID
  • warden-client-3.0-beta3
  • warden-server-3.0-beta3
  • warden-client-2.2-final
  • warden-server-2.2-final
  • warden-client-3.0-beta2
  • warden-server-3.0-beta2
  • warden-client-2.2
  • warden-server-2.2-patch3
  • warden-client-3.0-beta1
  • warden-server-3.0-beta1
  • warden-server-2.2-patch1
  • warden-client-3.0-beta0
  • warden-server-3.0-beta0
  • warden-server-2.2
  • warden-server-2.1-patch1
  • warden-client-2.1
  • warden-server-2.1
  • warden-server-2.1-beta6
  • warden-server-2.1-beta5
  • warden-server-2.1-beta4
28 results

update.sh

Blame
  • Forked from 713 / Warden / Warden - archive
    Source project has a limited visibility.
    point.ts 3.18 KiB
    /**
     * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info.
     *
     * @author Alexander Rose <alexander.rose@weirdbyte.de>
     */
    
    import { ValueCell } from 'mol-util/value-cell'
    
    import { createPointRenderObject, RenderObject } from 'mol-gl/scene'
    import { Mat4 } from 'mol-math/linear-algebra'
    import { OrderedSet } from 'mol-data/int'
    import { ChunkedArray } from 'mol-data/util';
    import { Unit, ElementGroup } from 'mol-model/structure';
    import { RepresentationProps, UnitsRepresentation } from './index';
    import { Task } from 'mol-task'
    import { VdwRadius } from 'mol-model/structure/model/properties/atomic';
    import { createUniformColor, createInstanceColor } from '../../color/data';
    import { fillSerial } from 'mol-gl/renderable/util';
    import { ColorScale } from '../../color/scale';
    
    export const DefaultPointProps = {
    
    }
    export type PointProps = Partial<typeof DefaultPointProps>
    
    export default function Point(): UnitsRepresentation<PointProps> {
        const renderObjects: RenderObject[] = []
        const vertices = ChunkedArray.create(Float32Array, 3, 1024, 2048);
        const sizes = ChunkedArray.create(Float32Array, 1, 1024, 2048);
    
        return {
            renderObjects,
            create: (units: ReadonlyArray<Unit>, elementGroup: ElementGroup, props: PointProps = {}) => Task.create('Spacefill', async ctx => {
                // const l = Element.Location();
    
                const { x, y, z } = units[0].model.conformation
                const { type_symbol } = units[0].model.hierarchy.atoms
                const elementCount = OrderedSet.size(elementGroup.elements)
                for (let i = 0; i < elementCount; i++) {
                    const e = OrderedSet.getAt(elementGroup.elements, i)
                    ChunkedArray.add3(vertices, x[e], y[e], z[e])
                    ChunkedArray.add(sizes, VdwRadius(type_symbol.value(e)))
    
                    if (i % 10000 === 0 && ctx.shouldUpdate) {
                        await ctx.update({ message: 'Point', current: i, max: elementCount });
                    }
                }
    
                const unitCount = units.length
                const transformArray = new Float32Array(unitCount * 16)
                for (let i = 0; i < unitCount; i++) {
                    Mat4.toArray(units[i].operator.matrix, transformArray, i * 16)
                }
    
                // const color = createUniformColor({ value: 0xFF4411 })
                const scale = ColorScale.create({ domain: [ 0, unitCount - 1 ] })
                const color = createInstanceColor({
                    colorFn: scale.color,
                    unitCount
                })
    
                const points = createPointRenderObject({
                    objectId: 0,
    
                    position: ValueCell.create(ChunkedArray.compact(vertices, true) as Float32Array),
                    id: ValueCell.create(fillSerial(new Float32Array(unitCount))),
                    size: ValueCell.create(ChunkedArray.compact(sizes, true) as Float32Array),
                    color,
                    transform: ValueCell.create(transformArray),
    
                    instanceCount: unitCount,
                    elementCount,
                    positionCount: vertices.elementCount
                })
                renderObjects.push(points)
            }),
            update: (props: RepresentationProps) => false
        }
    }