Ver Fonte

improved unitcell bounding sphere (added extrema)

Alexander Rose há 5 anos atrás
pai
commit
3e7c358c07
1 ficheiros alterados com 12 adições e 1 exclusões
  1. 12 1
      src/mol-repr/shape/model/unitcell.ts

+ 12 - 1
src/mol-repr/shape/model/unitcell.ts

@@ -68,11 +68,22 @@ function getUnitcellMesh(data: UnitcellData, props: UnitcellProps, mesh?: Mesh)
     const cpD = Vec3.create(0, 1, 1)
     Vec3.transformMat4(cpD, Vec3.add(cpD, cpD, tmpRef), fromFractional)
 
+    const cpE = Vec3.create(0, 0, 1)
+    Vec3.transformMat4(cpE, Vec3.add(cpE, cpE, tmpRef), fromFractional)
+    const cpF = Vec3.create(1, 0, 1)
+    Vec3.transformMat4(cpF, Vec3.add(cpF, cpF, tmpRef), fromFractional)
+    const cpG = Vec3.create(1, 1, 0)
+    Vec3.transformMat4(cpG, Vec3.add(cpG, cpG, tmpRef), fromFractional)
+    const cpH = Vec3.create(0, 1, 0)
+    Vec3.transformMat4(cpH, Vec3.add(cpH, cpH, tmpRef), fromFractional)
+
     const center = Vec3()
     Vec3.add(center, cpA, cpB)
     Vec3.scale(center, center, 0.5)
     const d = Math.max(Vec3.distance(cpA, cpB), Vec3.distance(cpC, cpD))
-    const sphere = Sphere3D.create(center, d / 2 + radius)
+    const sphere = Sphere3D.create(center, d / 2)
+    Sphere3D.setExtrema(sphere, [cpA, cpB, cpC, cpD, cpE, cpF, cpG, cpH])
+    Sphere3D.expand(sphere, sphere, radius)
 
     const m = MeshBuilder.getMesh(state)
     m.setBoundingSphere(sphere)