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 1996 | ChemDraw 默认 | |
|---|---|---|
| 键长 | 14.4 pt | 30 pt |
| 原子标签 | 10 pt | 10 pt |
| 标签占一个键长的 | 69% | 33% |
所以 Style 同时喂给布局和绘制,而 Depiction 记下产生它的规范指纹 ——
拿另一套规范去渲染时可以被查出来,不会静默地挤成一团。
§一张图由它自己决定,不由它被写成什么样决定
同一个分子的任何 SMILES 写法给出全等的图。布局的每一处平局都按
ranks_of 打破,不看原子的存储下标。这一条有判据守着。
§画不好的地方会说出来
桥环、笼状体系在平面上没有好解,拥挤到一定程度的取代基也排不开。这些如实记在
Depiction::degraded 与 Depiction::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 图。