Skip to content
Snippets Groups Projects
Commit 456ee97b authored by Alexander Rose's avatar Alexander Rose
Browse files

polymer iterator cleanup

parent a8d057aa
No related branches found
No related tags found
No related merge requests found
...@@ -23,6 +23,7 @@ import { createMeshValues, updateMeshValues, updateRenderableState, createRender ...@@ -23,6 +23,7 @@ import { createMeshValues, updateMeshValues, updateRenderableState, createRender
import { MeshBuilder } from '../../../shape/mesh-builder'; import { MeshBuilder } from '../../../shape/mesh-builder';
import { getPolymerElementCount, PolymerBackboneIterator } from './util/polymer'; import { getPolymerElementCount, PolymerBackboneIterator } from './util/polymer';
import { getElementLoci, markElement } from './util/element'; import { getElementLoci, markElement } from './util/element';
import { Vec3 } from 'mol-math/linear-algebra';
async function createPolymerBackboneCylinderMesh(ctx: RuntimeContext, unit: Unit, mesh?: Mesh) { async function createPolymerBackboneCylinderMesh(ctx: RuntimeContext, unit: Unit, mesh?: Mesh) {
const polymerElementCount = getPolymerElementCount(unit) const polymerElementCount = getPolymerElementCount(unit)
...@@ -32,15 +33,22 @@ async function createPolymerBackboneCylinderMesh(ctx: RuntimeContext, unit: Unit ...@@ -32,15 +33,22 @@ async function createPolymerBackboneCylinderMesh(ctx: RuntimeContext, unit: Unit
// TODO better vertex count estimates // TODO better vertex count estimates
const builder = MeshBuilder.create(polymerElementCount * 30, polymerElementCount * 30 / 2, mesh) const builder = MeshBuilder.create(polymerElementCount * 30, polymerElementCount * 30 / 2, mesh)
const { elements } = unit
const pos = unit.conformation.invariantPosition
const pA = Vec3.zero()
const pB = Vec3.zero()
let i = 0 let i = 0
const polymerBackboneIt = PolymerBackboneIterator(unit) const polymerBackboneIt = PolymerBackboneIterator(unit)
while (polymerBackboneIt.hasNext) { while (polymerBackboneIt.hasNext) {
const { indexA, indexB, posA, posB } = polymerBackboneIt.move()
builder.setId(indexA)
// TODO size theme // TODO size theme
builder.addCylinder(posA, posB, 0.5, { radiusTop: 0.2, radiusBottom: 0.2 }) const { centerA, centerB } = polymerBackboneIt.move()
builder.setId(indexB) pos(centerA.element, pA)
builder.addCylinder(posB, posA, 0.5, { radiusTop: 0.2, radiusBottom: 0.2 }) pos(centerB.element, pB)
builder.setId(elements[centerA.element])
builder.addCylinder(pA, pB, 0.5, { radiusTop: 0.2, radiusBottom: 0.2 })
builder.setId(elements[centerB.element])
builder.addCylinder(pB, pA, 0.5, { radiusTop: 0.2, radiusBottom: 0.2 })
if (i % 10000 === 0 && ctx.shouldUpdate) { if (i % 10000 === 0 && ctx.shouldUpdate) {
await ctx.update({ message: 'Backbone mesh', current: i, max: polymerElementCount }); await ctx.update({ message: 'Backbone mesh', current: i, max: polymerElementCount });
......
...@@ -73,7 +73,7 @@ function interpolateNormals(controlPoints: Helpers.NumberArray, tangentVectors: ...@@ -73,7 +73,7 @@ function interpolateNormals(controlPoints: Helpers.NumberArray, tangentVectors:
// console.warn(i, 'flip compared to prev', radToDeg(Math.acos(Vec3.dot(prevNormal, normalVec)))) // console.warn(i, 'flip compared to prev', radToDeg(Math.acos(Vec3.dot(prevNormal, normalVec))))
// } // }
Vec3.copy(prevNormal, normalVec) Vec3.copy(prevNormal, normalVec)
Vec3.normalize(binormalVec, Vec3.cross(binormalVec, tangentVec, normalVec)) Vec3.normalize(binormalVec, Vec3.cross(binormalVec, tangentVec, normalVec))
Vec3.toArray(binormalVec, binormalVectors, i * 3) Vec3.toArray(binormalVec, binormalVectors, i * 3)
} }
...@@ -84,6 +84,8 @@ async function createPolymerTraceMesh(ctx: RuntimeContext, unit: Unit, mesh?: Me ...@@ -84,6 +84,8 @@ async function createPolymerTraceMesh(ctx: RuntimeContext, unit: Unit, mesh?: Me
console.log('polymerElementCount', polymerElementCount) console.log('polymerElementCount', polymerElementCount)
if (!polymerElementCount) return Mesh.createEmpty(mesh) if (!polymerElementCount) return Mesh.createEmpty(mesh)
const { elements } = unit
// TODO better vertex count estimates // TODO better vertex count estimates
const builder = MeshBuilder.create(polymerElementCount * 30, polymerElementCount * 30 / 2, mesh) const builder = MeshBuilder.create(polymerElementCount * 30, polymerElementCount * 30 / 2, mesh)
const linearSegments = 12 const linearSegments = 12
...@@ -108,7 +110,7 @@ async function createPolymerTraceMesh(ctx: RuntimeContext, unit: Unit, mesh?: Me ...@@ -108,7 +110,7 @@ async function createPolymerTraceMesh(ctx: RuntimeContext, unit: Unit, mesh?: Me
const polymerTraceIt = PolymerTraceIterator(unit) const polymerTraceIt = PolymerTraceIterator(unit)
while (polymerTraceIt.hasNext) { while (polymerTraceIt.hasNext) {
const v = polymerTraceIt.move() const v = polymerTraceIt.move()
builder.setId(v.index) builder.setId(elements[v.center.element])
for (let j = 0; j <= linearSegments; ++j) { for (let j = 0; j <= linearSegments; ++j) {
const t = j * 1.0 / linearSegments; const t = j * 1.0 / linearSegments;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment