pub struct DiagramEntry {
pub data_partname: PartName,
pub layout_partname: PartName,
pub quick_style_partname: PartName,
pub colors_partname: PartName,
pub data_xml: String,
pub layout_xml: String,
pub quick_style_xml: String,
pub colors_xml: String,
pub data_rid: String,
pub layout_rid: String,
pub quick_style_rid: String,
pub colors_rid: String,
}Expand description
SmartArt(diagram)条目:保存到 /ppt/diagrams/ 下的 4 个 part 元数据(TODO-037)。
对应 python-pptx 中 SlideShapes.add_shape(...) 隐式管理的 SmartArt parts。
在 OOXML 中,一个 SmartArt 图形由 4 个独立 part 组成:
| part | 路径 | 关系类型 | dgm:relIds 属性 |
|---|---|---|---|
| data | /ppt/diagrams/dataN.xml | .../diagramData | r:dm |
| layout | /ppt/diagrams/layoutN.xml | .../diagramLayout | r:lo |
| quickStyle | /ppt/diagrams/quickStylesN.xml | .../diagramQuickStyle | r:qs |
| colors | /ppt/diagrams/colorsN.xml | .../diagramColors | r:cs |
被 slide 的 <p:graphicFrame> 内 <a:graphicData uri="...diagram"><dgm:relIds .../> 引用。
§Round-trip 策略
当前实现采用完整 round-trip:读路径保留 4 个 part 的原始 XML 字符串, 写路径直接写入保留的 XML(不重新序列化)。这样保证:
- 任何 SmartArt 模板/布局/颜色变体都能正确保留;
- 不依赖完整的 diagram schema 实现(避免数千行代码)。
§与 ChartEntry / OleEntry 的差异
- ChartEntry 持有强类型 Chart 模型,写出时调用
chart.to_xml(); - OleEntry 持有二进制 blob;
- DiagramEntry 持有 4 份 XML 字符串,直接写入 zip(不经过序列化)。
Fields§
§data_partname: PartNamedata part 路径,例如 /ppt/diagrams/data1.xml。
layout_partname: PartNamelayout part 路径,例如 /ppt/diagrams/layout1.xml。
quick_style_partname: PartNamequickStyle part 路径,例如 /ppt/diagrams/quickStyles1.xml。
colors_partname: PartNamecolors part 路径,例如 /ppt/diagrams/colors1.xml。
data_xml: String原始 data XML 字符串(<dgm:dataModel>...</dgm:dataModel>)。
layout_xml: String原始 layout XML 字符串(<dgm:layoutDef>...</dgm:layoutDef>)。
quick_style_xml: String原始 quickStyle XML 字符串(<dgm:styleData>...</dgm:styleData>)。
colors_xml: String原始 colors XML 字符串(<dgm:colorsDef>...</dgm:colorsDef>)。
data_rid: String在 slide xml 中引用 data part 的关系 id(形如 rIdDgmData1)。
对应 <dgm:relIds r:dm="rIdDgmData1"/>。
layout_rid: String在 slide xml 中引用 layout part 的关系 id(形如 rIdDgmLayout1)。
对应 <dgm:relIds r:lo="rIdDgmLayout1"/>。
quick_style_rid: String在 slide xml 中引用 quickStyle part 的关系 id(形如 rIdDgmQs1)。
对应 <dgm:relIds r:qs="rIdDgmQs1"/>。
colors_rid: String在 slide xml 中引用 colors part 的关系 id(形如 rIdDgmColors1)。
对应 <dgm:relIds r:cs="rIdDgmColors1"/>。
Implementations§
Source§impl DiagramEntry
impl DiagramEntry
Sourcepub fn data_model(&self) -> Result<DataModel>
pub fn data_model(&self) -> Result<DataModel>
按需解析 data part 为强类型 crate::oxml::diagram::DataModel(TODO-037)。
DiagramEntry 默认以 String blob 持有原始 XML,保证 byte-exact round-trip。
当调用方需要结构化访问 SmartArt 节点(如查询节点文本、遍历父子关系)时,
调用本方法触发按需解析。
§返回值
- 成功:返回
crate::oxml::diagram::DataModel,含所有节点与连接。 - 失败:返回
Error::Xml(data_xml 畸形时)。
§示例
let data_model = entry.data_model().expect("parse data part");
for pt in &data_model.points {
println!("node {}: {:?}", pt.model_id, pt.text);
}Sourcepub fn layout_def(&self) -> Result<LayoutDef>
pub fn layout_def(&self) -> Result<LayoutDef>
按需解析 layout part 为强类型 crate::oxml::diagram::LayoutDef。
返回元数据(uniqueId / title / desc / catLst)+ layoutNode 子树原始 XML。
Sourcepub fn quick_style_def(&self) -> Result<QuickStyleDef>
pub fn quick_style_def(&self) -> Result<QuickStyleDef>
按需解析 quickStyle part 为强类型 crate::oxml::diagram::QuickStyleDef。
返回 styleLbl 列表(仅 name + 原始 XML)。
Sourcepub fn colors_def(&self) -> Result<ColorsDef>
pub fn colors_def(&self) -> Result<ColorsDef>
按需解析 colors part 为强类型 crate::oxml::diagram::ColorsDef。
返回元数据 + styleClrLbl 列表(仅 name + 原始 XML)。
Sourcepub fn set_data_model(&mut self, data_model: &DataModel)
pub fn set_data_model(&mut self, data_model: &DataModel)
把修改后的 crate::oxml::diagram::DataModel 写回 data_xml 字段(TODO-037 文本节点编辑)。
典型用法:调用方先通过 DiagramEntry::data_model 解析得到 DataModel,
修改节点文本(如 set_point_text),再调用本方法把修改写回 data_xml,
后续 Presentation::save 会把更新后的 data_xml 写入 zip。
§参数
data_model:修改后的 DataModel 实例。
§示例
let mut dm = entry.data_model().expect("parse");
dm.set_point_text(1, "新文本");
entry.set_data_model(&dm);Trait Implementations§
Source§impl Clone for DiagramEntry
impl Clone for DiagramEntry
Source§fn clone(&self) -> DiagramEntry
fn clone(&self) -> DiagramEntry
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more