Browse Source

show structure orientation ellipsoid for more applicable units

Alexander Rose 5 years ago
parent
commit
a55572d52f
1 changed files with 15 additions and 1 deletions
  1. 15 1
      src/mol-repr/structure/visual/orientation-ellipsoid-mesh.ts

+ 15 - 1
src/mol-repr/structure/visual/orientation-ellipsoid-mesh.ts

@@ -20,6 +20,7 @@ import { OrderedSet, Interval } from '../../../mol-data/int';
 import { EmptyLoci, Loci } from '../../../mol-model/loci';
 import { UnitIndex } from '../../../mol-model/structure/structure/element/element';
 import { LocationIterator } from '../../../mol-geo/util/location-iterator';
+import { MoleculeType } from '../../../mol-model/structure/model/types';
 
 export const OrientationEllipsoidMeshParams = {
     ...UnitsMeshParams,
@@ -51,8 +52,21 @@ export interface OrientationEllipsoidMeshProps {
     sizeFactor: number,
 }
 
+function isUnitApplicable(unit: Unit) {
+    if (Unit.Traits.is(unit.traits, Unit.Trait.MultiChain)) return false
+    if (Unit.Traits.is(unit.traits, Unit.Trait.Patitioned)) return false
+    if (Unit.isCoarse(unit)) return true
+    if (unit.elements.length === 0) return false
+    unit.model.atomicHierarchy.derived.residue.moleculeType
+    const rI = unit.residueIndex[unit.elements[0]]
+    const mt = unit.model.atomicHierarchy.derived.residue.moleculeType[rI]
+    if (mt === MoleculeType.Ion) return false
+    if (mt === MoleculeType.Water) return false
+    return true
+}
+
 export function createOrientationEllipsoidMesh(ctx: VisualContext, unit: Unit, structure: Structure, theme: Theme, props: OrientationEllipsoidMeshProps, mesh?: Mesh): Mesh {
-    if (unit.polymerElements.length === 0) return Mesh.createEmpty(mesh)
+    if (!isUnitApplicable(unit)) return Mesh.createEmpty(mesh)
 
     const { detail, sizeFactor } = props