mirror of
https://github.com/3dmol/3Dmol.js.git
synced 2026-06-04 08:39:49 +09:00
Fix for Issue #743
The cartoon code was assuming DNA backbone atoms would always have a certain order. Now can deal with a partial residue at start.
This commit is contained in:
55
package-lock.json
generated
55
package-lock.json
generated
@@ -125,15 +125,6 @@
|
||||
"url": "https://opencollective.com/babel"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/core/node_modules/semver": {
|
||||
"version": "6.3.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
|
||||
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"semver": "bin/semver.js"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/eslint-parser": {
|
||||
"version": "7.22.15",
|
||||
"resolved": "https://registry.npmjs.org/@babel/eslint-parser/-/eslint-parser-7.22.15.tgz",
|
||||
@@ -152,15 +143,6 @@
|
||||
"eslint": "^7.5.0 || ^8.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/eslint-parser/node_modules/semver": {
|
||||
"version": "6.3.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
|
||||
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"semver": "bin/semver.js"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/generator": {
|
||||
"version": "7.23.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz",
|
||||
@@ -204,15 +186,6 @@
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-compilation-targets/node_modules/semver": {
|
||||
"version": "6.3.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
|
||||
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"semver": "bin/semver.js"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-create-class-features-plugin": {
|
||||
"version": "7.22.15",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz",
|
||||
@@ -236,15 +209,6 @@
|
||||
"@babel/core": "^7.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": {
|
||||
"version": "6.3.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
|
||||
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"semver": "bin/semver.js"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-environment-visitor": {
|
||||
"version": "7.22.20",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
|
||||
@@ -3390,7 +3354,7 @@
|
||||
},
|
||||
"node_modules/clean-jsdoc-theme": {
|
||||
"version": "4.2.14",
|
||||
"resolved": "git+ssh://git@github.com/3dmol/clean-jsdoc-theme.git#17def80a9698f7c826707f86a3bce88649236fc4",
|
||||
"resolved": "git+ssh://git@github.com/3dmol/clean-jsdoc-theme.git#d925b4f89ff6d1bf3038dad04bfc202d9d6c0ec0",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -8227,7 +8191,9 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/nanoid": {
|
||||
"version": "3.3.6",
|
||||
"version": "3.3.7",
|
||||
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
|
||||
"integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
|
||||
"dev": true,
|
||||
"funding": [
|
||||
{
|
||||
@@ -8235,7 +8201,6 @@
|
||||
"url": "https://github.com/sponsors/ai"
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"bin": {
|
||||
"nanoid": "bin/nanoid.cjs"
|
||||
},
|
||||
@@ -8790,7 +8755,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/postcss": {
|
||||
"version": "8.4.24",
|
||||
"version": "8.4.33",
|
||||
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz",
|
||||
"integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==",
|
||||
"dev": true,
|
||||
"funding": [
|
||||
{
|
||||
@@ -8806,9 +8773,8 @@
|
||||
"url": "https://github.com/sponsors/ai"
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"nanoid": "^3.3.6",
|
||||
"nanoid": "^3.3.7",
|
||||
"picocolors": "^1.0.0",
|
||||
"source-map-js": "^1.0.2"
|
||||
},
|
||||
@@ -9693,9 +9659,10 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/semver": {
|
||||
"version": "6.3.0",
|
||||
"version": "6.3.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
|
||||
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
|
||||
"dev": true,
|
||||
"license": "ISC",
|
||||
"bin": {
|
||||
"semver": "bin/semver.js"
|
||||
}
|
||||
|
||||
@@ -953,7 +953,7 @@
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.10.6"
|
||||
"version": "3.10.12"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
|
||||
@@ -295,10 +295,27 @@ export namespace GLDraw {
|
||||
* @param {CAP} toCap = 0 for none, 1 for flat, 2 for round
|
||||
*
|
||||
* */
|
||||
export function drawCylinder(geo: Geometry, from: any, to: any, radius: number, color: Color | Color[], fromCap:CAP = 0, toCap:CAP = 0) {
|
||||
export function drawCylinder(geo: Geometry, from: any, to: any, radius: number, color: Color | Color[], fromCap:CAP|string = 0, toCap:CAP|string = 0) {
|
||||
if (!from || !to)
|
||||
return;
|
||||
|
||||
let getcap = function(c: CAP|string): CAP {
|
||||
if(typeof c === "string") {
|
||||
let s = <string>c;
|
||||
if(s.toLowerCase() == 'flat') {
|
||||
return CAP.FLAT;
|
||||
} else if(s.toLowerCase() == 'round') {
|
||||
return CAP.ROUND;
|
||||
} else {
|
||||
return CAP.NONE;
|
||||
}
|
||||
} else {
|
||||
return <CAP>c;
|
||||
}
|
||||
}
|
||||
fromCap = getcap(fromCap);
|
||||
toCap = getcap(toCap);
|
||||
|
||||
// vertices
|
||||
var drawcaps = toCap || fromCap;
|
||||
color = color || ({ r: 0, g: 0, b: 0 } as Color);
|
||||
|
||||
@@ -1649,9 +1649,9 @@ export interface CylinderSpec extends ShapeSpec {
|
||||
/** radius */
|
||||
radius?: number;
|
||||
/** Place a cap at the start (none, flat or round) */
|
||||
fromCap?: CAP;
|
||||
fromCap?: CAP | string;
|
||||
/** Place a cap at the end (none, flat or round) */
|
||||
toCap?: CAP;
|
||||
toCap?: CAP | string;
|
||||
/** Make the cylinder dashed. */
|
||||
dashed?: boolean;
|
||||
/** Length of dashes (default 0.25) */
|
||||
|
||||
@@ -1156,7 +1156,7 @@ export function drawCartoon(group, atomList, gradientrange, quality = 10) {
|
||||
|
||||
// reached next residue (potentially the first residue)
|
||||
if (curr === undefined || curr.rescode != next.rescode || curr.resi != next.resi) {
|
||||
if (baseEndPt) // draw last NA residue's base
|
||||
if (baseEndPt && curr != undefined) // draw last NA residue's base
|
||||
{
|
||||
// start the cylinder at the midpoint between
|
||||
// consecutive backbone atoms
|
||||
@@ -1201,11 +1201,11 @@ export function drawCartoon(group, atomList, gradientrange, quality = 10) {
|
||||
};
|
||||
}
|
||||
// atoms used to orient the backbone strand
|
||||
else if (isAlphaCarbon(curr) && next.atom === "O" ||
|
||||
else if (curr != undefined && (isAlphaCarbon(curr) && next.atom === "O" ||
|
||||
inNucleicAcid && curr.atom === "P" &&
|
||||
(next.atom === "OP2" || next.atom === "O2P") ||
|
||||
inNucleicAcid && curr.atom.indexOf("O5") == 0 &&
|
||||
next.atom.indexOf("C5") == 0) {
|
||||
next.atom.indexOf("C5") == 0)) {
|
||||
orientPt = new Vector3(next.x, next.y, next.z);
|
||||
orientPt.resi = next.resi;
|
||||
if (next.atom === "OP2" || next.atom === "O2P") // for NA 3'
|
||||
|
||||
5
tests/auto/tests/testdnacartoon.js
Normal file
5
tests/auto/tests/testdnacartoon.js
Normal file
@@ -0,0 +1,5 @@
|
||||
/* @div
|
||||
<div class='viewer_3Dmoljs' style="width: 400px; height: 400px;" data-backgroundColor="white" data-href="../test_structs/dnamodel.pdb" data-style='{"cartoon":{"color":"spectrum"}}'></div>
|
||||
*/
|
||||
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 132 KiB |
2223
tests/test_structs/dnamodel.pdb
Normal file
2223
tests/test_structs/dnamodel.pdb
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user