Skip to main content

Crate omgkit_depict

Crate omgkit_depict 

Source
Expand description

2D 坐标生成与分子结构绘图。

use omgkit_depict::{generate, style::Style};

let mut m = omgkit_io::smiles::parse("OC(=O)c1ccccc1").unwrap();
omgkit_chem::pipeline::sanitize(&mut m).unwrap();

let d = generate(&m, &Style::ACS_1996);
assert_eq!(d.coords.len(), m.num_atoms());

§布局与绘制不是两件独立的事

几何骨架确实与规范无关:苯环是正六边形,跟用什么字号没关系。但**“算不算挤 在一起“是规范相关的** —— 原子标签要占地方,而标签尺寸与键长的比例随规范变:

ACS 1996ChemDraw 默认
键长14.4 pt30 pt
原子标签10 pt10 pt
标签占一个键长的69%33%

所以 Style 同时喂给布局和绘制,而 Depiction 记下产生它的规范指纹 —— 拿另一套规范去渲染时可以被查出来,不会静默地挤成一团。

§一张图由它自己决定,不由它被写成什么样决定

同一个分子的任何 SMILES 写法给出全等的图。布局的每一处平局都按 ranks_of 打破,不看原子的存储下标。这一条有判据守着。

§画不好的地方会说出来

桥环、笼状体系在平面上没有好解,拥挤到一定程度的取代基也排不开。这些如实记在 Depiction::degradedDepiction::unresolved 里,不假装成功。

Modules§

chains
链与取代基:给一个原子周围还没放置的邻居分配方向。
geom
平面几何的最小工具集。
hydrogens
为了画出构型而补出来的显式氢。
label
原子标签:显示什么文本,以及它占多大地方。
layout
布局驱动:把环系统、链、取代基串成一张完整的图。
orient
规范朝向:同一个分子的任何写法,摆出来逐点相同
palette
Jmol 的 CPK 元素配色 —— 三维图按元素上色用的那张表。 CPK 元素配色 —— 三维分子图按元素上色的那张表。
refine
消冲突:先用离散算子,不轻易动几何。
render
几何 → 图元。与输出格式无关的那一半
rings
环系统布局 —— 整个算法里最难的一段。
stereo
立体保真:楔形键指派,以及从坐标反读立体化学。
style
绘图规范 —— 同一份参数同时喂给布局和渲染
svg
SVG 后端:把 Scene 序列化成字符串。零依赖。
templates
桥环骨架的预存坐标表。见模块文档。 桥环骨架的预存坐标表。
three
三维分子图 —— 把一组三维坐标画成球棍/空间填充/棍状/线框四种图之一。

Structs§

Depiction
一张 2D 图。

Functions§

generate
给分子生成 2D 坐标。
ranks_of
布局用的原子秩:先按对称等价类,类内再按规范 SMILES 的输出次序