From ad968f10e2ff9b7d7ef14889ab86f90cadaff07f Mon Sep 17 00:00:00 2001 From: Alexander Rose <alexander.rose@weirdbyte.de> Date: Sun, 10 Mar 2019 12:21:53 -0700 Subject: [PATCH] wip, cage primitives --- src/mol-geo/primitive/box.ts | 25 +++++++++++++++++++++ src/mol-geo/primitive/dodecahedron.ts | 4 ++-- src/mol-geo/primitive/icosahedron.ts | 12 ++++++++++ src/mol-geo/primitive/octahedron.ts | 32 ++++++++++++++++++++++----- 4 files changed, 65 insertions(+), 8 deletions(-) diff --git a/src/mol-geo/primitive/box.ts b/src/mol-geo/primitive/box.ts index 97bf5931f..5ce466fe7 100644 --- a/src/mol-geo/primitive/box.ts +++ b/src/mol-geo/primitive/box.ts @@ -7,6 +7,7 @@ import { Vec3 } from 'mol-math/linear-algebra' import { Primitive, PrimitiveBuilder } from './primitive'; import { polygon } from './polygon' +import { Cage, createCage } from './cage'; const a = Vec3.zero(), b = Vec3.zero(), c = Vec3.zero(), d = Vec3.zero() const points = polygon(4, true) @@ -55,4 +56,28 @@ let perforatedBox: Primitive export function PerforatedBox() { if (!perforatedBox) perforatedBox = createBox(true) return perforatedBox +} + +let boxCage: Cage +export function BoxCage() { + if (!boxCage) { + boxCage = createCage( + [ + 0.5, 0.5, -0.5, // bottom + -0.5, 0.5, -0.5, + -0.5, -0.5, -0.5, + 0.5, -0.5, -0.5, + 0.5, 0.5, 0.5, // top + -0.5, 0.5, 0.5, + -0.5, -0.5, 0.5, + 0.5, -0.5, 0.5 + ], + [ + 0, 4, 1, 5, 2, 6, 3, 7, // sides + 0, 1, 1, 2, 2, 3, 3, 0, // bottom base + 4, 5, 5, 6, 6, 7, 7, 4 // top base + ] + ) + } + return boxCage } \ No newline at end of file diff --git a/src/mol-geo/primitive/dodecahedron.ts b/src/mol-geo/primitive/dodecahedron.ts index 8d63af07b..063f19a7d 100644 --- a/src/mol-geo/primitive/dodecahedron.ts +++ b/src/mol-geo/primitive/dodecahedron.ts @@ -35,7 +35,7 @@ const dodecahedronIndices: ReadonlyArray<number> = [ // pentagonal faces 7, 1, 2, 2, 17, 18, 7, 2, 18, // 7, 1, 2, 17, 18 ]; -const dodecahedronEdgeIndices: ReadonlyArray<number> = [ +const dodecahedronEdges: ReadonlyArray<number> = [ 0, 1, 0, 4, 0, 5, 1, 2, 1, 7, 2, 3, 2, 17, 3, 4, 3, 14, 4, 16, 5, 6, 5, 19, 6, 7, 6, 11, 7, 18, 8, 9, 8, 12, 8, 13, 9, 10, 9, 15, 10, 11, 10, 18, 11, 12, 12, 19, 13, 14, 13, 16, 14, 15, 15, 17, 16, 19, 17, 18, @@ -47,7 +47,7 @@ export function Dodecahedron(): Primitive { return dodecahedron } -const dodecahedronCage = createCage(dodecahedronVertices, dodecahedronEdgeIndices) +const dodecahedronCage = createCage(dodecahedronVertices, dodecahedronEdges) export function DodecahedronCage(): Cage { return dodecahedronCage } \ No newline at end of file diff --git a/src/mol-geo/primitive/icosahedron.ts b/src/mol-geo/primitive/icosahedron.ts index 79a9b37aa..4be044a7d 100644 --- a/src/mol-geo/primitive/icosahedron.ts +++ b/src/mol-geo/primitive/icosahedron.ts @@ -5,6 +5,7 @@ */ import { createPrimitive, Primitive } from './primitive'; +import { Cage, createCage } from './cage'; const t = (1 + Math.sqrt(5)) / 2; @@ -21,8 +22,19 @@ const icosahedronIndices: ReadonlyArray<number> = [ 4, 9, 5, 2, 4, 11, 6, 2, 10, 8, 6, 7, 9, 8, 1 ]; +const icosahedronEdges: ReadonlyArray<number> = [ + 0, 11, 5, 11, 0, 5, 1, 5, 0, 1, 1, 7, 0, 7, 7, 10, 0, 10, 10, 11, + 5, 9, 4, 11, 2, 10, 6, 7, 1, 8, 3, 9, 4, 9, 3, 4, 2, 4, 2, 3, + 2, 6, 3, 6, 6, 8, 3, 8, 8, 9, 4, 5, 2, 11, 6, 10, 7, 8, 1, 9 +] + let icosahedron: Primitive export function Icosahedron(): Primitive { if (!icosahedron) icosahedron = createPrimitive(icosahedronVertices, icosahedronIndices) return icosahedron +} + +const icosahedronCage = createCage(icosahedronVertices, icosahedronEdges) +export function IcosahedronCage(): Cage { + return icosahedronCage } \ No newline at end of file diff --git a/src/mol-geo/primitive/octahedron.ts b/src/mol-geo/primitive/octahedron.ts index cb23691c9..989526767 100644 --- a/src/mol-geo/primitive/octahedron.ts +++ b/src/mol-geo/primitive/octahedron.ts @@ -1,20 +1,23 @@ /** - * Copyright (c) 2018 mol* contributors, licensed under MIT, See LICENSE file for more info. + * Copyright (c) 2018-2019 mol* contributors, licensed under MIT, See LICENSE file for more info. * * @author Alexander Rose <alexander.rose@weirdbyte.de> */ import { createPrimitive, Primitive } from './primitive'; +import { createCage, Cage } from './cage'; export const octahedronVertices: ReadonlyArray<number> = [ 0.5, 0, 0, -0.5, 0, 0, 0, 0.5, 0, - 0, -0.5, 0, 0, 0, 0.5, 0, 0, -0.5 + 0, -0.5, 0, 0, 0, 0.5, 0, 0, -0.5 ]; + export const octahedronIndices: ReadonlyArray<number> = [ 0, 2, 4, 0, 4, 3, 0, 3, 5, 0, 5, 2, 1, 2, 5, 1, 5, 3, 1, 3, 4, 1, 4, 2 ]; + export const perforatedOctahedronIndices: ReadonlyArray<number> = [ 0, 2, 4, 0, 4, 3, // 0, 3, 5, 0, 5, 2, @@ -22,8 +25,25 @@ export const perforatedOctahedronIndices: ReadonlyArray<number> = [ // 1, 3, 4, 1, 4, 2 ]; -const octahedron = createPrimitive(octahedronVertices, octahedronIndices) -const perforatedOctahedron = createPrimitive(octahedronVertices, perforatedOctahedronIndices) +const octahedronEdges: ReadonlyArray<number> = [ + 0, 2, 1, 3, 2, 1, 3, 0, + 0, 4, 1, 4, 2, 4, 3, 4, + 0, 5, 1, 5, 2, 5, 3, 5, +] + +let octahedron: Primitive +export function Octahedron(): Primitive { + if (!octahedron) octahedron = createPrimitive(octahedronVertices, octahedronIndices) + return octahedron +} + +let perforatedOctahedron: Primitive +export function PerforatedOctahedron(): Primitive { + if (!perforatedOctahedron) perforatedOctahedron = createPrimitive(octahedronVertices, perforatedOctahedronIndices) + return perforatedOctahedron +} -export function Octahedron(): Primitive { return octahedron } -export function PerforatedOctahedron(): Primitive { return perforatedOctahedron } \ No newline at end of file +const octahedronCage = createCage(octahedronVertices, octahedronEdges) +export function OctahedronCage(): Cage { + return octahedronCage +} \ No newline at end of file -- GitLab