Files
wehub-resource-sync 8cb1f9f479
Publish SDK (PyPI) / publish (push) Has been cancelled
Publish SDK (npm) / publish (@aionui/officecli-sdk) (push) Has been cancelled
SDK smoke / smoke (windows-latest) (push) Has been cancelled
Publish SDK (npm) / publish (@officecli/officecli-sdk) (push) Has been cancelled
Publish SDK (npm) / publish (@officecli/sdk) (push) Has been cancelled
Publish SDK (npm) / publish (officecli-sdk) (push) Has been cancelled
SDK smoke / smoke (macos-latest) (push) Has been cancelled
SDK smoke / smoke (ubuntu-latest) (push) Has been cancelled
Skill parity / diff (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:09:29 +08:00

349 lines
16 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Basic PPT Shapes — Geometries, Fills, Outlines, Effects, Rotation
This demo consists of three files that work together:
- **shapes-basic.sh** — Shell script that calls `officecli` commands to generate the deck. Each slide's commands are shown as copyable blocks below.
- **shapes-basic.pptx** — The generated 5-slide deck (8 geometry presets, 8 fill types, 6 outline variants, 8 rotation angles, 3 effects, 6 stroke-geometry variants).
- **shapes-basic.md** — This file. Maps each slide to the features it demonstrates.
## Regenerate
```bash
cd examples/ppt
bash shapes/shapes-basic.sh
# → shapes/shapes-basic.pptx
```
## Slides
### Slide 1 — Geometry Preset Gallery
One row of 8 shapes, each rendered with a different `geometry=` preset.
Every supported schema-declared preset appears exactly once.
```bash
# Create the file and open a resident session
officecli create shapes-basic.pptx
officecli open shapes-basic.pptx
# Add the slide
officecli add shapes-basic.pptx / --type slide
# Title label
officecli add shapes-basic.pptx '/slide[1]' --type shape \
--prop text="Geometry Presets" --prop size=28 --prop bold=true \
--prop x=0.5in --prop y=0.3in --prop width=12in --prop height=0.6in
# One shape per preset — loop adds all 8 at columns 0..7
officecli add shapes-basic.pptx '/slide[1]' --type shape \
--prop geometry=rect \
--prop x=0.5in --prop y=1.5in --prop width=1.3in --prop height=1.3in \
--prop fill=4472C4 --prop color=FFFFFF \
--prop text="rect" --prop size=11 --prop bold=true
officecli add shapes-basic.pptx '/slide[1]' --type shape \
--prop geometry=roundRect \
--prop x=2.05in --prop y=1.5in --prop width=1.3in --prop height=1.3in \
--prop fill=4472C4 --prop color=FFFFFF \
--prop text="roundRect" --prop size=11 --prop bold=true
officecli add shapes-basic.pptx '/slide[1]' --type shape \
--prop geometry=ellipse \
--prop x=3.6in --prop y=1.5in --prop width=1.3in --prop height=1.3in \
--prop fill=4472C4 --prop color=FFFFFF \
--prop text="ellipse" --prop size=11 --prop bold=true
# … triangle, diamond, parallelogram, rightArrow, star5 follow the same pattern
officecli add shapes-basic.pptx '/slide[1]' --type shape \
--prop geometry=star5 \
--prop x=11.35in --prop y=1.5in --prop width=1.3in --prop height=1.3in \
--prop fill=4472C4 --prop color=FFFFFF \
--prop text="star5" --prop size=11 --prop bold=true
```
**Features:** `geometry` (rect, roundRect, ellipse, triangle, diamond, parallelogram, rightArrow, star5), `fill` (hex color), `color` (text color), `text`, `size`, `bold`, `x`/`y`/`width`/`height` (inch-suffixed dimensions)
---
### Slide 2 — Fill Variations
Eight `roundRect` shapes on one slide — every fill syntax demonstrated side by side.
```bash
officecli add shapes-basic.pptx / --type slide
# Solid hex fill
officecli add shapes-basic.pptx '/slide[2]' --type shape --prop geometry=roundRect \
--prop x=0.5in --prop y=1.3in --prop width=2.5in --prop height=1.5in \
--prop fill=E63946 --prop color=FFFFFF --prop bold=true \
--prop text='fill=E63946'
# Theme color (accent2 follows the deck's color theme)
officecli add shapes-basic.pptx '/slide[2]' --type shape --prop geometry=roundRect \
--prop x=3.3in --prop y=1.3in --prop width=2.5in --prop height=1.5in \
--prop fill=accent2 --prop color=FFFFFF --prop bold=true \
--prop text='fill=accent2'
# Linear gradient: COLOR1-COLOR2-ANGLE
officecli add shapes-basic.pptx '/slide[2]' --type shape --prop geometry=roundRect \
--prop x=6.1in --prop y=1.3in --prop width=2.5in --prop height=1.5in \
--prop gradient="FF6B6B-4ECDC4-45" --prop color=FFFFFF --prop bold=true \
--prop text='gradient linear 45°'
# Radial gradient: radial:CENTER-COLOR1-COLOR2
officecli add shapes-basic.pptx '/slide[2]' --type shape --prop geometry=roundRect \
--prop x=8.9in --prop y=1.3in --prop width=2.5in --prop height=1.5in \
--prop gradient="radial:FFE66D-FF6B35-center" --prop color=000000 --prop bold=true \
--prop text='gradient radial'
# Pattern fill: preset:foreground:background
officecli add shapes-basic.pptx '/slide[2]' --type shape --prop geometry=roundRect \
--prop x=0.5in --prop y=3.1in --prop width=2.5in --prop height=1.5in \
--prop pattern="diagBrick:1D3557:F1FAEE" --prop color=FFFFFF --prop bold=true \
--prop text='pattern diagBrick'
# Solid + opacity (opacity requires fill)
officecli add shapes-basic.pptx '/slide[2]' --type shape --prop geometry=roundRect \
--prop x=3.3in --prop y=3.1in --prop width=2.5in --prop height=1.5in \
--prop fill=2A9D8F --prop opacity=0.4 --prop color=000000 --prop bold=true \
--prop text='fill + opacity=0.4'
# No fill — outline only
officecli add shapes-basic.pptx '/slide[2]' --type shape --prop geometry=roundRect \
--prop x=6.1in --prop y=3.1in --prop width=2.5in --prop height=1.5in \
--prop fill=none --prop line="264653:2.5:solid" --prop color=264653 --prop bold=true \
--prop text='fill=none + outline'
# Per-stop gradient: COLOR@POSITION (0..100%)
officecli add shapes-basic.pptx '/slide[2]' --type shape --prop geometry=roundRect \
--prop x=8.9in --prop y=3.1in --prop width=2.5in --prop height=1.5in \
--prop gradient="FF0000@0-FFD700@40-0000FF@100" --prop color=FFFFFF --prop bold=true \
--prop text='gradient per-stop'
```
**Features:** `fill` (hex, theme color, none), `gradient` (linear `C1-C2-ANGLE`, radial `radial:C1-C2-center`, per-stop `C@POS-C@POS-C@POS`), `pattern` (`preset:fg:bg` — e.g. diagBrick, wave, dotGrid), `opacity` (0.01.0, requires fill), `line` (compound `color:widthPt:dash`)
---
### Slide 3 — Outline Styling
Six shapes demonstrating both the compound and per-attribute line forms, compound strokes, and arrowhead endpoints.
```bash
officecli add shapes-basic.pptx / --type slide
# Compound line form: "color:widthPt:dash"
officecli add shapes-basic.pptx '/slide[3]' --type shape --prop geometry=rect \
--prop x=0.5in --prop y=1.3in --prop width=3in --prop height=1.2in \
--prop fill=none --prop line="E63946:3:solid" \
--prop text='line="E63946:3:solid"' --prop size=12
officecli add shapes-basic.pptx '/slide[3]' --type shape --prop geometry=rect \
--prop x=4in --prop y=1.3in --prop width=3in --prop height=1.2in \
--prop fill=none --prop line="1D3557:2:dash" \
--prop text='line="1D3557:2:dash"' --prop size=12
officecli add shapes-basic.pptx '/slide[3]' --type shape --prop geometry=rect \
--prop x=7.5in --prop y=1.3in --prop width=3in --prop height=1.2in \
--prop fill=none --prop line="2A9D8F:2.5:dashDot" \
--prop text='line="2A9D8F:2.5:dashDot"' --prop size=12
# Per-attribute form: lineColor + lineWidth + lineDash separately
officecli add shapes-basic.pptx '/slide[3]' --type shape --prop geometry=ellipse \
--prop x=0.5in --prop y=2.9in --prop width=3in --prop height=1.4in \
--prop fill=FFE66D --prop lineColor=E63946 --prop lineWidth=4pt --prop lineDash=solid \
--prop text='separate lineColor/lineWidth/lineDash' --prop size=11
# Compound stroke: cmpd=dbl (double line)
officecli add shapes-basic.pptx '/slide[3]' --type shape --prop geometry=ellipse \
--prop x=4in --prop y=2.9in --prop width=3in --prop height=1.4in \
--prop fill=A8DADC --prop lineColor=1D3557 --prop lineWidth=6pt --prop cmpd=dbl \
--prop text='cmpd=dbl (double stroke)' --prop size=11
# Compound stroke: cmpd=tri (triple line)
officecli add shapes-basic.pptx '/slide[3]' --type shape --prop geometry=ellipse \
--prop x=7.5in --prop y=2.9in --prop width=3in --prop height=1.4in \
--prop fill=A8DADC --prop lineColor=1D3557 --prop lineWidth=8pt --prop cmpd=tri \
--prop text='cmpd=tri (triple stroke)' --prop size=11
# Arrowheads on shape outlines (headEnd / tailEnd)
officecli add shapes-basic.pptx '/slide[3]' --type shape --prop geometry=rect \
--prop x=0.5in --prop y=5.2in --prop width=4in --prop height=0.05in \
--prop fill=none --prop lineColor=000000 --prop lineWidth=2pt \
--prop headEnd=triangle --prop tailEnd=arrow
officecli add shapes-basic.pptx '/slide[3]' --type shape --prop geometry=rect \
--prop x=5in --prop y=5.2in --prop width=4in --prop height=0.05in \
--prop fill=none --prop lineColor=000000 --prop lineWidth=2pt \
--prop headEnd=diamond --prop tailEnd=oval
```
**Features:** `line` (compound `color:widthPt:dash`), `lineColor`, `lineWidth` (pt-suffixed), `lineDash` (solid, dash, dashDot, dot, lgDash, sysDash, sysDot), `cmpd` (dbl, tri), `headEnd` / `tailEnd` (none, triangle, arrow, diamond, oval, stealth)
---
### Slide 4 — Rotation + Effects
Eight right-arrow shapes show `rotation=0..270`. Three `roundRect` shapes demonstrate shadow, glow, and reflection effects.
```bash
officecli add shapes-basic.pptx / --type slide
# Rotation — degrees clockwise (0..360); each shape shows its angle as text
officecli add shapes-basic.pptx '/slide[4]' --type shape --prop geometry=rightArrow \
--prop x=0.5in --prop y=1.3in --prop width=1.4in --prop height=0.8in \
--prop fill=4472C4 --prop color=FFFFFF --prop bold=true \
--prop rotation=0 --prop text="0°" --prop size=11
officecli add shapes-basic.pptx '/slide[4]' --type shape --prop geometry=rightArrow \
--prop x=2.05in --prop y=1.3in --prop width=1.4in --prop height=0.8in \
--prop fill=4472C4 --prop color=FFFFFF --prop bold=true \
--prop rotation=30 --prop text="30°" --prop size=11
# … continues for 60, 90, 135, 180, 225, 270
# Shadow effect — color only; handler fills in blur/offset/direction defaults
officecli add shapes-basic.pptx '/slide[4]' --type shape --prop geometry=roundRect \
--prop x=1in --prop y=3in --prop width=3.5in --prop height=1.8in \
--prop fill=E63946 --prop color=FFFFFF --prop bold=true --prop size=14 \
--prop text='shadow=000000' \
--prop shadow=000000
# Glow effect — color; handler applies default radius
officecli add shapes-basic.pptx '/slide[4]' --type shape --prop geometry=roundRect \
--prop x=5.5in --prop y=3in --prop width=3.5in --prop height=1.8in \
--prop fill=2A9D8F --prop color=FFFFFF --prop bold=true --prop size=14 \
--prop text='glow=FFD700' \
--prop glow=FFD700
# Reflection effect — preset name
officecli add shapes-basic.pptx '/slide[4]' --type shape --prop geometry=roundRect \
--prop x=10in --prop y=3in --prop width=3in --prop height=1.8in \
--prop fill=F4A261 --prop color=000000 --prop bold=true --prop size=14 \
--prop text='reflection=tight' \
--prop reflection=tight
```
**Features:** `rotation` (degrees 0360), `shadow` (color or `true` for defaults; Get returns `#RRGGBB-blur-angle-dist-opacity`), `glow` (color or `color-radius-opacity`), `reflection` (tight, half, full)
---
### Slide 5 — Stroke Geometry Details
Six shapes demonstrating `lineCap`, `lineJoin` (incl. miterLimit), and `lineAlign`.
```bash
officecli add shapes-basic.pptx / --type slide
# lineCap — how stroke terminates at endpoints / dash gaps
# Thick dashed stroke makes the difference visible: round/square extend past
# the endpoint, flat cuts exactly at it.
officecli add shapes-basic.pptx '/slide[5]' --type shape --prop geometry=rect \
--prop x=0.5in --prop y=1.5in --prop width=4in --prop height=0.05in \
--prop fill=none --prop lineColor=1D3557 --prop lineWidth=10pt \
--prop lineDash=dash --prop lineCap=flat
officecli add shapes-basic.pptx '/slide[5]' --type shape --prop geometry=rect \
--prop x=4.8in --prop y=1.5in --prop width=4in --prop height=0.05in \
--prop fill=none --prop lineColor=1D3557 --prop lineWidth=10pt \
--prop lineDash=dash --prop lineCap=round
officecli add shapes-basic.pptx '/slide[5]' --type shape --prop geometry=rect \
--prop x=9.1in --prop y=1.5in --prop width=4in --prop height=0.05in \
--prop fill=none --prop lineColor=1D3557 --prop lineWidth=10pt \
--prop lineDash=dash --prop lineCap=square
# lineJoin — corner style on a stroked shape (thick triangle makes it obvious)
officecli add shapes-basic.pptx '/slide[5]' --type shape --prop geometry=triangle \
--prop x=0.5in --prop y=2.8in --prop width=2.5in --prop height=2in \
--prop fill=A8DADC --prop lineColor=E63946 --prop lineWidth=12pt \
--prop lineJoin=round
officecli add shapes-basic.pptx '/slide[5]' --type shape --prop geometry=triangle \
--prop x=3.5in --prop y=2.8in --prop width=2.5in --prop height=2in \
--prop fill=A8DADC --prop lineColor=E63946 --prop lineWidth=12pt \
--prop lineJoin=bevel
officecli add shapes-basic.pptx '/slide[5]' --type shape --prop geometry=triangle \
--prop x=6.5in --prop y=2.8in --prop width=2.5in --prop height=2in \
--prop fill=A8DADC --prop lineColor=E63946 --prop lineWidth=12pt \
--prop lineJoin=miter
# miterLimit — compound form sets join style + limit together
# Expressed in 1/1000ths of a percent; 800000 = 800%
officecli add shapes-basic.pptx '/slide[5]' --type shape --prop geometry=triangle \
--prop x=0.5in --prop y=5.5in --prop width=2.5in --prop height=1.8in \
--prop fill=A8DADC --prop lineColor=E63946 --prop lineWidth=8pt \
--prop lineJoin="miter:800000"
# lineAlign — stroke alignment: ctr (centered on path) vs in (fully inset)
officecli add shapes-basic.pptx '/slide[5]' --type shape --prop geometry=rect \
--prop x=9in --prop y=2.8in --prop width=2in --prop height=2in \
--prop fill=F4A261 --prop lineColor=1D3557 --prop lineWidth=12pt \
--prop lineAlign=ctr
officecli add shapes-basic.pptx '/slide[5]' --type shape --prop geometry=rect \
--prop x=11.5in --prop y=2.8in --prop width=2in --prop height=2in \
--prop fill=F4A261 --prop lineColor=1D3557 --prop lineWidth=12pt \
--prop lineAlign=in
officecli close shapes-basic.pptx
officecli validate shapes-basic.pptx
```
**Features:** `lineCap` (flat, round, square), `lineJoin` (round, bevel, miter), `lineJoin="miter:N"` (compound form sets join + miterLimit in one prop), `lineAlign` (ctr, in)
---
## Complete Feature Coverage
| Feature | Slide |
|---------|-------|
| **Geometry presets:** rect, roundRect, ellipse, triangle, diamond, parallelogram, rightArrow, star5 | 1 |
| **Solid fill:** hex color | 1, 2 |
| **Theme fill:** accent1..6, dark1/2, light1/2 | 2 |
| **Linear gradient:** `C1-C2-ANGLE` | 2 |
| **Radial gradient:** `radial:C1-C2-center` | 2 |
| **Per-stop gradient:** `C@POS-C@POS-C@POS` | 2 |
| **Pattern fill:** `preset:fg:bg` | 2 |
| **Opacity:** `opacity=0.01.0` (requires fill) | 2 |
| **No fill:** `fill=none` | 2 |
| **Compound line:** `line="color:widthPt:dash"` | 2, 3 |
| **Per-attribute line:** `lineColor`, `lineWidth`, `lineDash` | 3 |
| **Dash patterns:** solid, dash, dashDot, dot, lgDash, sysDash, sysDot | 3 |
| **Compound stroke:** `cmpd=dbl|tri` | 3 |
| **Arrowheads:** `headEnd` / `tailEnd` (triangle, arrow, diamond, oval, none) | 3 |
| **Rotation:** `rotation=0..360` | 4 |
| **Shadow effect:** `shadow=color` or `shadow=color-blur-angle-dist-opacity` | 4 |
| **Glow effect:** `glow=color` or `glow=color-radius-opacity` | 4 |
| **Reflection effect:** `reflection=tight|half|full` | 4 |
| **Line cap:** `lineCap=flat|round|square` | 5 |
| **Line join:** `lineJoin=round|bevel|miter` | 5 |
| **Miter limit:** `lineJoin="miter:N"` (compound) | 5 |
| **Line alignment:** `lineAlign=ctr|in` | 5 |
| **Text in shape:** `text`, `size`, `bold`, `color` | 15 |
| **Position/size:** `x`, `y`, `width`, `height` (in/cm/pt/emu) | 15 |
## Inspect the Generated File
```bash
# List all shapes on slide 1
officecli query shapes-basic.pptx '/slide[1]' shape
# Get the full property set for the ellipse (shape[3])
officecli get shapes-basic.pptx '/slide[1]/shape[3]'
# Check the fill and gradient on slide 2 shape[3] (linear gradient)
officecli get shapes-basic.pptx '/slide[2]/shape[3]'
# Inspect outline properties on slide 3 shape[2]
officecli get shapes-basic.pptx '/slide[3]/shape[2]'
# Check effects on the shadow shape (slide 4 shape[9])
officecli get shapes-basic.pptx '/slide[4]/shape[9]'
# Inspect stroke geometry on slide 5
officecli get shapes-basic.pptx '/slide[5]/shape[1]'
officecli get shapes-basic.pptx '/slide[5]/shape[4]'
```