Define Anatomical Nomenclature

| Plane | Orientation | Divides body into |
|---|---|---|
| Coronal (Frontal) | Vertical | Anterior (front) and posterior (back) parts |
| Sagittal | Vertical, perpendicular to coronal | Right and left parts |
| Median Sagittal | Exactly through center | Equal right and left halves |
| Transverse (Horizontal/Axial) | Horizontal | Superior (upper) and inferior (lower) parts |
| Inclusive Term | Instead of |
|---|---|
| Upper body | Chest / Breast |
| Erectile tissue | Penis / Clitoris |
| Gonads | Testes / Ovaries |
| Term | Meaning |
|---|---|
| Anterior / Ventral | Front |
| Posterior / Dorsal | Back |
| Superior | Above / toward the head |
| Inferior | Below / toward the feet |
| Medial | Toward the midline |
| Lateral | Away from the midline |
| Proximal | Closer to origin/attachment |
| Distal | Farther from origin/attachment |
| Cranial | Toward the head |
| Caudal | Toward the tail |
| Rostral | Toward the nose (used in head/brain) |
| Superficial | Toward the body surface |
| Deep | Away from the body surface |
| Coronal plane | Divides front and back |
| Sagittal plane | Divides left and right |
| Transverse plane | Divides top and bottom |
make me pptx of this
ls -la /home/daytona/workspace/
mkdir -p /home/daytona/workspace/anatomical-nomenclature-pptx
~/anatomical-nomenclature-pptx/create_pptx.js
const pptxgen = require("pptxgenjs");
// Fetch the anatomical diagram image
const images = JSON.parse(require("child_process").execSync(
`node /home/daytona/skills/shared/scripts/fetch_images.js "https://cdn.orris.care/cdss_images/a6821ed545aa1fb79ab82e9b83a926f549f85bed1add3edc7d6e458dff65071d.png"`
).toString());
const anatomyImg = images[0];
let pres = new pptxgen();
pres.layout = "LAYOUT_16x9";
pres.title = "Anatomical Nomenclature";
pres.author = "Gray's Anatomy for Students";
// ─────────────────────────────────────────────
// COLOR PALETTE
// Dark navy dominant, teal accent, warm off-white text
// ─────────────────────────────────────────────
const NAVY = "0D1B2A"; // dominant background
const TEAL = "1B9AAA"; // accent / headings
const LTEAL = "C4F1F9"; // light teal for labels
const WHITE = "F0F4F8"; // body text
const GOLD = "F2C94C"; // highlight
const DARK = "071014"; // darker panel
// Helper: section heading bar
function addSectionBar(slide, text, y) {
slide.addShape(pres.ShapeType.rect, {
x: 0, y: y, w: 10, h: 0.55,
fill: { color: TEAL },
line: { color: TEAL }
});
slide.addText(text, {
x: 0.18, y: y, w: 9.6, h: 0.55,
fontSize: 17, bold: true, color: NAVY,
fontFace: "Calibri", valign: "middle", margin: 0
});
}
// Helper: card shape
function addCard(slide, x, y, w, h, fill) {
slide.addShape(pres.ShapeType.rect, {
x, y, w, h,
fill: { color: fill || "142536" },
line: { color: TEAL, pt: 1 },
rectRadius: 0.08
});
}
// ─────────────────────────────────────────────
// SLIDE 1 — TITLE SLIDE
// ─────────────────────────────────────────────
{
let slide = pres.addSlide();
// Full dark background
slide.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: 10, h: 5.625,
fill: { color: NAVY }, line: { color: NAVY }
});
// Teal accent left bar
slide.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: 0.18, h: 5.625,
fill: { color: TEAL }, line: { color: TEAL }
});
// Bottom accent stripe
slide.addShape(pres.ShapeType.rect, {
x: 0, y: 5.2, w: 10, h: 0.425,
fill: { color: DARK }, line: { color: DARK }
});
// Title
slide.addText("Anatomical Nomenclature", {
x: 0.5, y: 1.4, w: 9, h: 1.1,
fontSize: 44, bold: true, color: WHITE,
fontFace: "Calibri", align: "center"
});
// Teal underline
slide.addShape(pres.ShapeType.rect, {
x: 2.5, y: 2.58, w: 5, h: 0.06,
fill: { color: TEAL }, line: { color: TEAL }
});
// Subtitle
slide.addText("The Universal Language of Human Body Structure", {
x: 0.5, y: 2.75, w: 9, h: 0.55,
fontSize: 18, color: LTEAL,
fontFace: "Calibri", align: "center", italic: true
});
// Source note
slide.addText("Source: Gray's Anatomy for Students", {
x: 0.5, y: 5.2, w: 9, h: 0.4,
fontSize: 11, color: "6B8CAE",
fontFace: "Calibri", align: "center", italic: true
});
// Tag pills
const tags = ["Anatomical Position", "Body Planes", "Directional Terms", "Superficial & Deep"];
tags.forEach((tag, i) => {
const xPos = 0.6 + i * 2.25;
slide.addShape(pres.ShapeType.rect, {
x: xPos, y: 3.55, w: 2.1, h: 0.38,
fill: { color: "1B3A52" }, line: { color: TEAL, pt: 1 },
rectRadius: 0.18
});
slide.addText(tag, {
x: xPos, y: 3.55, w: 2.1, h: 0.38,
fontSize: 10, color: LTEAL, fontFace: "Calibri",
align: "center", valign: "middle", margin: 0
});
});
}
// ─────────────────────────────────────────────
// SLIDE 2 — WHAT IS ANATOMICAL NOMENCLATURE?
// ─────────────────────────────────────────────
{
let slide = pres.addSlide();
slide.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: 10, h: 5.625, fill: { color: NAVY }, line: { color: NAVY }
});
slide.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: 0.18, h: 5.625, fill: { color: TEAL }, line: { color: TEAL }
});
slide.addText("What is Anatomical Nomenclature?", {
x: 0.35, y: 0.18, w: 9.4, h: 0.65,
fontSize: 26, bold: true, color: TEAL,
fontFace: "Calibri", valign: "middle"
});
slide.addShape(pres.ShapeType.rect, {
x: 0.35, y: 0.82, w: 9.3, h: 0.04, fill: { color: TEAL }, line: { color: TEAL }
});
// Definition card
addCard(slide, 0.35, 1.0, 9.3, 1.2, "112233");
slide.addText([
{ text: "Definition: ", options: { bold: true, color: GOLD } },
{ text: "Anatomical nomenclature is the standardized system of terms used to describe the ", options: { color: WHITE } },
{ text: "location, orientation, and relationships", options: { bold: true, color: LTEAL } },
{ text: " of body structures — providing a universal reference language for clinicians, anatomists, and scientists worldwide.", options: { color: WHITE } }
], {
x: 0.55, y: 1.05, w: 9.0, h: 1.1,
fontSize: 14, fontFace: "Calibri", valign: "middle"
});
// Three key pillars
const pillars = [
{ icon: "📍", title: "Reference Point", desc: "All terms are defined relative to the Anatomical Position — the body's universal starting posture." },
{ icon: "🌐", title: "Universal Language", desc: "Allows precise communication across all medical specialties, languages, and institutions." },
{ icon: "🔗", title: "Systematic Structure", desc: "Organized into planes, directional terms, and regional terms for complete spatial description." }
];
pillars.forEach((p, i) => {
const xPos = 0.35 + i * 3.15;
addCard(slide, xPos, 2.35, 2.95, 2.9, "0F2030");
slide.addText(p.icon, {
x: xPos, y: 2.4, w: 2.95, h: 0.6,
fontSize: 28, align: "center", fontFace: "Segoe UI Emoji"
});
slide.addText(p.title, {
x: xPos + 0.1, y: 3.0, w: 2.75, h: 0.45,
fontSize: 13, bold: true, color: GOLD,
fontFace: "Calibri", align: "center"
});
slide.addText(p.desc, {
x: xPos + 0.1, y: 3.5, w: 2.75, h: 1.6,
fontSize: 11, color: WHITE, fontFace: "Calibri",
align: "center", valign: "top"
});
});
}
// ─────────────────────────────────────────────
// SLIDE 3 — THE ANATOMICAL POSITION
// ─────────────────────────────────────────────
{
let slide = pres.addSlide();
slide.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: 10, h: 5.625, fill: { color: NAVY }, line: { color: NAVY }
});
slide.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: 0.18, h: 5.625, fill: { color: TEAL }, line: { color: TEAL }
});
slide.addText("The Anatomical Position", {
x: 0.35, y: 0.18, w: 9.4, h: 0.65,
fontSize: 26, bold: true, color: TEAL,
fontFace: "Calibri", valign: "middle"
});
slide.addShape(pres.ShapeType.rect, {
x: 0.35, y: 0.82, w: 9.3, h: 0.04, fill: { color: TEAL }, line: { color: TEAL }
});
// Image on right
if (anatomyImg && !anatomyImg.error) {
slide.addImage({
data: anatomyImg.base64,
x: 5.4, y: 0.95, w: 4.25, h: 4.5
});
}
// Left: criteria list
slide.addText("Standard Reference Posture", {
x: 0.35, y: 0.95, w: 4.8, h: 0.45,
fontSize: 14, bold: true, color: GOLD,
fontFace: "Calibri"
});
const criteria = [
"Body standing upright",
"Feet together, toes pointing forward",
"Hands by the sides, palms facing forward",
"Face looking forward; mouth closed",
"Expression neutral; eyes open",
"Inferior orbital margin level with top of external auditory meatus",
];
criteria.forEach((c, i) => {
addCard(slide, 0.35, 1.5 + i * 0.62, 4.8, 0.55, "0F2030");
slide.addShape(pres.ShapeType.rect, {
x: 0.35, y: 1.5 + i * 0.62, w: 0.08, h: 0.55,
fill: { color: TEAL }, line: { color: TEAL }
});
slide.addText(c, {
x: 0.55, y: 1.5 + i * 0.62, w: 4.5, h: 0.55,
fontSize: 12, color: WHITE, fontFace: "Calibri",
valign: "middle"
});
});
// Caption for image
slide.addText("Fig. 1.1 — Anatomical Position, Planes & Directional Terms\n(Gray's Anatomy for Students)", {
x: 5.4, y: 5.1, w: 4.25, h: 0.45,
fontSize: 8.5, color: "6B8CAE", fontFace: "Calibri",
align: "center", italic: true
});
}
// ─────────────────────────────────────────────
// SLIDE 4 — ANATOMICAL PLANES
// ─────────────────────────────────────────────
{
let slide = pres.addSlide();
slide.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: 10, h: 5.625, fill: { color: NAVY }, line: { color: NAVY }
});
slide.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: 0.18, h: 5.625, fill: { color: TEAL }, line: { color: TEAL }
});
slide.addText("Anatomical Planes", {
x: 0.35, y: 0.18, w: 9.4, h: 0.65,
fontSize: 26, bold: true, color: TEAL,
fontFace: "Calibri", valign: "middle"
});
slide.addShape(pres.ShapeType.rect, {
x: 0.35, y: 0.82, w: 9.3, h: 0.04, fill: { color: TEAL }, line: { color: TEAL }
});
slide.addText("Three major planes divide the body in the anatomical position:", {
x: 0.35, y: 0.92, w: 9.3, h: 0.38,
fontSize: 13, color: LTEAL, fontFace: "Calibri", italic: true
});
const planes = [
{
name: "Coronal Plane",
alt: "(Frontal Plane)",
orient: "Vertical",
divides: "Anterior (front) and Posterior (back) parts",
color: "1A6B7A",
example: 'e.g. A cut through the shoulders parallel to the chest'
},
{
name: "Sagittal Plane",
alt: "(Median Sagittal = midline)",
orient: "Vertical, ⊥ to coronal",
divides: "Right and Left parts",
color: "1A5C8A",
example: 'e.g. The median plane splits body into equal halves'
},
{
name: "Transverse Plane",
alt: "(Horizontal / Axial)",
orient: "Horizontal",
divides: "Superior (upper) and Inferior (lower) parts",
color: "5A3A8A",
example: 'e.g. A CT cross-section through the abdomen'
}
];
planes.forEach((pl, i) => {
const xPos = 0.35 + i * 3.15;
// Card
slide.addShape(pres.ShapeType.rect, {
x: xPos, y: 1.45, w: 2.95, h: 3.85,
fill: { color: pl.color }, line: { color: TEAL, pt: 1 },
rectRadius: 0.08
});
// Top accent band
slide.addShape(pres.ShapeType.rect, {
x: xPos, y: 1.45, w: 2.95, h: 0.42,
fill: { color: TEAL }, line: { color: TEAL },
rectRadius: 0.08
});
slide.addText(pl.name, {
x: xPos + 0.08, y: 1.45, w: 2.8, h: 0.42,
fontSize: 14, bold: true, color: NAVY,
fontFace: "Calibri", valign: "middle", align: "center", margin: 0
});
slide.addText(pl.alt, {
x: xPos + 0.1, y: 1.95, w: 2.75, h: 0.38,
fontSize: 11, color: GOLD, fontFace: "Calibri", italic: true, align: "center"
});
slide.addText("Orientation:", {
x: xPos + 0.1, y: 2.38, w: 2.75, h: 0.3,
fontSize: 11, bold: true, color: LTEAL, fontFace: "Calibri"
});
slide.addText(pl.orient, {
x: xPos + 0.1, y: 2.66, w: 2.75, h: 0.35,
fontSize: 12, color: WHITE, fontFace: "Calibri"
});
slide.addText("Divides into:", {
x: xPos + 0.1, y: 3.05, w: 2.75, h: 0.3,
fontSize: 11, bold: true, color: LTEAL, fontFace: "Calibri"
});
slide.addText(pl.divides, {
x: xPos + 0.1, y: 3.35, w: 2.75, h: 0.55,
fontSize: 12, color: WHITE, fontFace: "Calibri"
});
slide.addShape(pres.ShapeType.rect, {
x: xPos + 0.1, y: 3.95, w: 2.75, h: 0.04,
fill: { color: GOLD }, line: { color: GOLD }
});
slide.addText(pl.example, {
x: xPos + 0.1, y: 4.03, w: 2.75, h: 0.9,
fontSize: 10.5, color: GOLD, fontFace: "Calibri", italic: true
});
});
}
// ─────────────────────────────────────────────
// SLIDE 5 — TERMS OF LOCATION (ANTERIOR/POSTERIOR, MEDIAL/LATERAL, SUPERIOR/INFERIOR)
// ─────────────────────────────────────────────
{
let slide = pres.addSlide();
slide.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: 10, h: 5.625, fill: { color: NAVY }, line: { color: NAVY }
});
slide.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: 0.18, h: 5.625, fill: { color: TEAL }, line: { color: TEAL }
});
slide.addText("Terms of Location — Part 1", {
x: 0.35, y: 0.18, w: 9.4, h: 0.65,
fontSize: 26, bold: true, color: TEAL,
fontFace: "Calibri", valign: "middle"
});
slide.addShape(pres.ShapeType.rect, {
x: 0.35, y: 0.82, w: 9.3, h: 0.04, fill: { color: TEAL }, line: { color: TEAL }
});
const termPairs = [
{
left: "Anterior", leftSub: "(Ventral)", leftDesc: 'Toward the FRONT of the body\n\ne.g. The nose is an anterior structure. The sternum is anterior to the heart.',
right: "Posterior", rightSub: "(Dorsal)", rightDesc: 'Toward the BACK of the body\n\ne.g. The vertebral column is posterior to the sternum.',
color: "1A6B7A"
},
{
left: "Medial", leftSub: "", leftDesc: 'Closer to the MEDIAN sagittal plane (midline)\n\ne.g. The nose is medial to the eyes.',
right: "Lateral", rightSub: "", rightDesc: 'Farther from the midline\n\ne.g. The thumb is lateral to the little finger.',
color: "1A5C8A"
},
{
left: "Superior", leftSub: "", leftDesc: 'Toward the TOP of the body (head)\n\ne.g. The head is superior to the shoulders.',
right: "Inferior", rightSub: "", rightDesc: 'Toward the BOTTOM of the body (feet)\n\ne.g. The knee is inferior to the hip joint.',
color: "5A3A8A"
}
];
termPairs.forEach((pair, i) => {
const yPos = 1.0 + i * 1.5;
// Left card
addCard(slide, 0.35, yPos, 4.3, 1.35, pair.color);
slide.addShape(pres.ShapeType.rect, {
x: 0.35, y: yPos, w: 4.3, h: 0.36,
fill: { color: TEAL }, line: { color: TEAL }
});
slide.addText([
{ text: pair.left, options: { bold: true } },
{ text: pair.leftSub ? " " + pair.leftSub : "", options: { italic: true, fontSize: 11 } }
], {
x: 0.45, y: yPos, w: 4.1, h: 0.36,
fontSize: 14, color: NAVY, fontFace: "Calibri", valign: "middle", margin: 0
});
slide.addText(pair.leftDesc, {
x: 0.45, y: yPos + 0.4, w: 4.1, h: 0.9,
fontSize: 11, color: WHITE, fontFace: "Calibri"
});
// VS badge
slide.addShape(pres.ShapeType.ellipse, {
x: 4.73, y: yPos + 0.4, w: 0.54, h: 0.54,
fill: { color: GOLD }, line: { color: GOLD }
});
slide.addText("VS", {
x: 4.73, y: yPos + 0.4, w: 0.54, h: 0.54,
fontSize: 11, bold: true, color: NAVY, fontFace: "Calibri",
align: "center", valign: "middle", margin: 0
});
// Right card
addCard(slide, 5.35, yPos, 4.3, 1.35, pair.color);
slide.addShape(pres.ShapeType.rect, {
x: 5.35, y: yPos, w: 4.3, h: 0.36,
fill: { color: TEAL }, line: { color: TEAL }
});
slide.addText([
{ text: pair.right, options: { bold: true } },
{ text: pair.rightSub ? " " + pair.rightSub : "", options: { italic: true, fontSize: 11 } }
], {
x: 5.45, y: yPos, w: 4.1, h: 0.36,
fontSize: 14, color: NAVY, fontFace: "Calibri", valign: "middle", margin: 0
});
slide.addText(pair.rightDesc, {
x: 5.45, y: yPos + 0.4, w: 4.1, h: 0.9,
fontSize: 11, color: WHITE, fontFace: "Calibri"
});
});
}
// ─────────────────────────────────────────────
// SLIDE 6 — TERMS OF LOCATION PART 2 (PROXIMAL/DISTAL, CRANIAL/CAUDAL, ROSTRAL)
// ─────────────────────────────────────────────
{
let slide = pres.addSlide();
slide.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: 10, h: 5.625, fill: { color: NAVY }, line: { color: NAVY }
});
slide.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: 0.18, h: 5.625, fill: { color: TEAL }, line: { color: TEAL }
});
slide.addText("Terms of Location — Part 2", {
x: 0.35, y: 0.18, w: 9.4, h: 0.65,
fontSize: 26, bold: true, color: TEAL,
fontFace: "Calibri", valign: "middle"
});
slide.addShape(pres.ShapeType.rect, {
x: 0.35, y: 0.82, w: 9.3, h: 0.04, fill: { color: TEAL }, line: { color: TEAL }
});
const terms = [
{
term: "Proximal",
opp: "↔ Distal",
desc: "Closer to the origin or point of attachment (limbs & branching structures).",
example: "e.g. The glenohumeral joint is proximal to the elbow. Distal branches are farther from origin.",
icon: "🦴"
},
{
term: "Cranial",
opp: "↔ Caudal",
desc: "Toward the head (cranial) or toward the tail/inferior spine (caudal). Used in embryology and comparative anatomy.",
example: "e.g. The brain is cranial to the spinal cord. The sacrum is caudal to the lumbar vertebrae.",
icon: "🧠"
},
{
term: "Rostral",
opp: "(Head only)",
desc: "Used within the head/brain to describe position relative to the nose.",
example: "e.g. The forebrain (frontal lobe) is rostral to the hindbrain (cerebellum).",
icon: "👃"
}
];
terms.forEach((t, i) => {
const yPos = 1.0 + i * 1.5;
addCard(slide, 0.35, yPos, 9.3, 1.35, "0F2030");
slide.addShape(pres.ShapeType.rect, {
x: 0.35, y: yPos, w: 0.08, h: 1.35,
fill: { color: TEAL }, line: { color: TEAL }
});
// Icon
slide.addText(t.icon, {
x: 0.5, y: yPos + 0.3, w: 0.7, h: 0.7,
fontSize: 26, fontFace: "Segoe UI Emoji", align: "center"
});
// Term badge
slide.addShape(pres.ShapeType.rect, {
x: 1.3, y: yPos + 0.15, w: 1.8, h: 0.45,
fill: { color: TEAL }, line: { color: TEAL }, rectRadius: 0.04
});
slide.addText(t.term, {
x: 1.3, y: yPos + 0.15, w: 1.8, h: 0.45,
fontSize: 15, bold: true, color: NAVY, fontFace: "Calibri",
align: "center", valign: "middle", margin: 0
});
slide.addText(t.opp, {
x: 1.3, y: yPos + 0.65, w: 1.8, h: 0.3,
fontSize: 10, color: GOLD, fontFace: "Calibri",
align: "center", italic: true
});
slide.addText(t.desc, {
x: 3.25, y: yPos + 0.1, w: 6.2, h: 0.6,
fontSize: 12, color: WHITE, fontFace: "Calibri"
});
slide.addText(t.example, {
x: 3.25, y: yPos + 0.72, w: 6.2, h: 0.55,
fontSize: 11, color: GOLD, fontFace: "Calibri", italic: true
});
});
}
// ─────────────────────────────────────────────
// SLIDE 7 — SUPERFICIAL & DEEP
// ─────────────────────────────────────────────
{
let slide = pres.addSlide();
slide.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: 10, h: 5.625, fill: { color: NAVY }, line: { color: NAVY }
});
slide.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: 0.18, h: 5.625, fill: { color: TEAL }, line: { color: TEAL }
});
slide.addText("Superficial & Deep", {
x: 0.35, y: 0.18, w: 9.4, h: 0.65,
fontSize: 26, bold: true, color: TEAL,
fontFace: "Calibri", valign: "middle"
});
slide.addShape(pres.ShapeType.rect, {
x: 0.35, y: 0.82, w: 9.3, h: 0.04, fill: { color: TEAL }, line: { color: TEAL }
});
// Two main cards side by side
// Superficial
slide.addShape(pres.ShapeType.rect, {
x: 0.35, y: 1.0, w: 4.4, h: 3.5,
fill: { color: "0A2E3A" }, line: { color: TEAL, pt: 1.5 }, rectRadius: 0.08
});
slide.addShape(pres.ShapeType.rect, {
x: 0.35, y: 1.0, w: 4.4, h: 0.52,
fill: { color: TEAL }, line: { color: TEAL }
});
slide.addText("SUPERFICIAL", {
x: 0.45, y: 1.0, w: 4.2, h: 0.52,
fontSize: 17, bold: true, color: NAVY, fontFace: "Calibri",
align: "center", valign: "middle", margin: 0
});
slide.addText([
{ text: "External to the outer layer of deep fascia\n\n", options: { bold: true, color: LTEAL } },
{ text: "Structures include:\n", options: { bold: true, color: GOLD } },
{ text: "• Skin\n• Superficial fascia\n• Mammary glands\n\n", options: { color: WHITE } },
{ text: 'Example: ', options: { bold: true, color: GOLD } },
{ text: '"The sternum is superficial to the heart."', options: { color: WHITE, italic: true } }
], {
x: 0.5, y: 1.6, w: 4.15, h: 2.8,
fontSize: 12, fontFace: "Calibri"
});
// Deep
slide.addShape(pres.ShapeType.rect, {
x: 5.25, y: 1.0, w: 4.4, h: 3.5,
fill: { color: "0A1E38" }, line: { color: "5A7ABB", pt: 1.5 }, rectRadius: 0.08
});
slide.addShape(pres.ShapeType.rect, {
x: 5.25, y: 1.0, w: 4.4, h: 0.52,
fill: { color: "5A7ABB" }, line: { color: "5A7ABB" }
});
slide.addText("DEEP", {
x: 5.35, y: 1.0, w: 4.2, h: 0.52,
fontSize: 17, bold: true, color: WHITE, fontFace: "Calibri",
align: "center", valign: "middle", margin: 0
});
slide.addText([
{ text: "Enclosed within the outer layer of deep fascia\n\n", options: { bold: true, color: LTEAL } },
{ text: "Structures include:\n", options: { bold: true, color: GOLD } },
{ text: "• Most skeletal muscles\n• Viscera (organs)\n\n", options: { color: WHITE } },
{ text: 'Example: ', options: { bold: true, color: GOLD } },
{ text: '"The stomach is deep to the abdominal wall."', options: { color: WHITE, italic: true } }
], {
x: 5.4, y: 1.6, w: 4.15, h: 2.8,
fontSize: 12, fontFace: "Calibri"
});
// Key concept arrow
slide.addShape(pres.ShapeType.rect, {
x: 4.75, y: 2.3, w: 0.5, h: 0.38,
fill: { color: GOLD }, line: { color: GOLD }
});
slide.addText("↔", {
x: 4.75, y: 2.3, w: 0.5, h: 0.38,
fontSize: 18, bold: true, color: NAVY, fontFace: "Calibri",
align: "center", valign: "middle", margin: 0
});
// Bottom note
slide.addText("Superficial wounds are external to the outer layer of deep fascia; deep wounds penetrate through it.", {
x: 0.35, y: 4.6, w: 9.3, h: 0.6,
fontSize: 11, color: LTEAL, fontFace: "Calibri", italic: true, align: "center"
});
}
// ─────────────────────────────────────────────
// SLIDE 8 — COMPLETE REFERENCE TABLE
// ─────────────────────────────────────────────
{
let slide = pres.addSlide();
slide.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: 10, h: 5.625, fill: { color: NAVY }, line: { color: NAVY }
});
slide.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: 0.18, h: 5.625, fill: { color: TEAL }, line: { color: TEAL }
});
slide.addText("Quick Reference — All Terms", {
x: 0.35, y: 0.18, w: 9.4, h: 0.55,
fontSize: 24, bold: true, color: TEAL, fontFace: "Calibri", valign: "middle"
});
slide.addShape(pres.ShapeType.rect, {
x: 0.35, y: 0.72, w: 9.3, h: 0.04, fill: { color: TEAL }, line: { color: TEAL }
});
// Table headers
const headers = ["Term", "Opposite / Pair", "Meaning", "Example"];
const colW = [1.8, 1.8, 3.0, 2.5];
const colX = [0.35, 2.15, 3.95, 6.95];
// Header row
colX.forEach((x, i) => {
slide.addShape(pres.ShapeType.rect, {
x, y: 0.82, w: colW[i] - 0.05, h: 0.4,
fill: { color: TEAL }, line: { color: TEAL }
});
slide.addText(headers[i], {
x: x + 0.06, y: 0.82, w: colW[i] - 0.15, h: 0.4,
fontSize: 12, bold: true, color: NAVY, fontFace: "Calibri",
valign: "middle", margin: 0
});
});
const rows = [
["Anterior", "Posterior", "Toward the front", "Nose is anterior"],
["Posterior", "Anterior", "Toward the back", "Vertebrae are posterior"],
["Medial", "Lateral", "Toward the midline", "Nose is medial to eyes"],
["Lateral", "Medial", "Away from midline", "Thumb is lateral"],
["Superior", "Inferior", "Toward the head", "Head > shoulders"],
["Inferior", "Superior", "Toward the feet", "Knee < hip joint"],
["Proximal", "Distal", "Closer to origin", "Shoulder > elbow"],
["Distal", "Proximal", "Farther from origin", "Hand < elbow"],
["Cranial", "Caudal", "Toward the head", "Brain is cranial"],
["Rostral", "--", "Toward the nose (brain)", "Forebrain > hindbrain"],
["Superficial", "Deep", "Toward body surface", "Sternum > heart"],
["Deep", "Superficial", "Away from surface", "Stomach < abdominal wall"],
];
rows.forEach((row, i) => {
const yPos = 1.28 + i * 0.35;
const bg = i % 2 === 0 ? "0F2030" : "112438";
colX.forEach((x, j) => {
slide.addShape(pres.ShapeType.rect, {
x, y: yPos, w: colW[j] - 0.05, h: 0.33,
fill: { color: bg }, line: { color: "1B3A52", pt: 0.5 }
});
slide.addText(row[j], {
x: x + 0.06, y: yPos, w: colW[j] - 0.15, h: 0.33,
fontSize: j === 0 ? 11 : 10,
bold: j === 0,
color: j === 0 ? GOLD : WHITE,
fontFace: "Calibri", valign: "middle", margin: 0
});
});
});
}
// ─────────────────────────────────────────────
// SLIDE 9 — INCLUSIVE TERMINOLOGY
// ─────────────────────────────────────────────
{
let slide = pres.addSlide();
slide.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: 10, h: 5.625, fill: { color: NAVY }, line: { color: NAVY }
});
slide.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: 0.18, h: 5.625, fill: { color: TEAL }, line: { color: TEAL }
});
slide.addText("Inclusive Anatomical Terminology", {
x: 0.35, y: 0.18, w: 9.4, h: 0.65,
fontSize: 24, bold: true, color: TEAL, fontFace: "Calibri", valign: "middle"
});
slide.addShape(pres.ShapeType.rect, {
x: 0.35, y: 0.82, w: 9.3, h: 0.04, fill: { color: TEAL }, line: { color: TEAL }
});
// Context box
addCard(slide, 0.35, 0.95, 9.3, 1.1, "112233");
slide.addText(
"Modern anatomy acknowledges that not all individuals fit a sex-binary model. This includes intersex, non-binary, and transgender people. Inclusive language should be used in clinical practice — preferring the patient's own anatomical terminology and basing care on present anatomy.",
{
x: 0.55, y: 1.0, w: 9.0, h: 1.0,
fontSize: 12, color: WHITE, fontFace: "Calibri", valign: "middle"
}
);
// Table
const inclHeaders = ["Inclusive Term (Preferred)", "Instead Of"];
const inclColW = [4.5, 4.5];
const inclColX = [0.35, 4.95];
inclColX.forEach((x, i) => {
slide.addShape(pres.ShapeType.rect, {
x, y: 2.18, w: inclColW[i] - 0.1, h: 0.42,
fill: { color: TEAL }, line: { color: TEAL }
});
slide.addText(inclHeaders[i], {
x: x + 0.1, y: 2.18, w: inclColW[i] - 0.25, h: 0.42,
fontSize: 13, bold: true, color: NAVY, fontFace: "Calibri",
valign: "middle", margin: 0
});
});
const inclRows = [
["Upper body", "Chest / Breast"],
["Erectile tissue", "Penis / Clitoris"],
["Gonads", "Testes / Ovaries"],
];
inclRows.forEach((row, i) => {
const yPos = 2.65 + i * 0.55;
const bg = i % 2 === 0 ? "0F2030" : "112438";
inclColX.forEach((x, j) => {
slide.addShape(pres.ShapeType.rect, {
x, y: yPos, w: inclColW[j] - 0.1, h: 0.48,
fill: { color: bg }, line: { color: "1B3A52", pt: 0.5 }
});
slide.addText(row[j], {
x: x + 0.1, y: yPos, w: inclColW[j] - 0.25, h: 0.48,
fontSize: 13, bold: j === 0, color: j === 0 ? GOLD : WHITE,
fontFace: "Calibri", valign: "middle", margin: 0
});
});
});
// Bottom principle
addCard(slide, 0.35, 4.37, 9.3, 0.88, "0A2010");
slide.addShape(pres.ShapeType.rect, {
x: 0.35, y: 4.37, w: 0.08, h: 0.88, fill: { color: "2ECC71" }, line: { color: "2ECC71" }
});
slide.addText([
{ text: "Clinical Principle: ", options: { bold: true, color: "2ECC71" } },
{ text: "Clinicians should base care on the patient's PRESENT ANATOMY and use the patient's preferred terminology — not assumptions about gender.", options: { color: WHITE } }
], {
x: 0.55, y: 4.42, w: 9.0, h: 0.78,
fontSize: 12, fontFace: "Calibri", valign: "middle"
});
}
// ─────────────────────────────────────────────
// SLIDE 10 — SUMMARY / CLOSING
// ─────────────────────────────────────────────
{
let slide = pres.addSlide();
slide.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: 10, h: 5.625, fill: { color: DARK }, line: { color: DARK }
});
slide.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: 0.18, h: 5.625, fill: { color: TEAL }, line: { color: TEAL }
});
slide.addShape(pres.ShapeType.rect, {
x: 0, y: 4.9, w: 10, h: 0.725, fill: { color: NAVY }, line: { color: NAVY }
});
slide.addText("Summary", {
x: 0.35, y: 0.2, w: 9.3, h: 0.6,
fontSize: 30, bold: true, color: TEAL, fontFace: "Calibri"
});
slide.addShape(pres.ShapeType.rect, {
x: 0.35, y: 0.82, w: 9.3, h: 0.04, fill: { color: TEAL }, line: { color: TEAL }
});
const summaryPoints = [
{ icon: "📌", title: "Anatomical Position", desc: "The universal reference posture — upright, palms forward, feet together, face forward." },
{ icon: "✂️", title: "3 Body Planes", desc: "Coronal (front/back), Sagittal (left/right), Transverse (top/bottom)." },
{ icon: "🧭", title: "Primary Directional Terms", desc: "Anterior/Posterior, Medial/Lateral, Superior/Inferior — describe position relative to body or other structures." },
{ icon: "📏", title: "Limb & Branching Terms", desc: "Proximal (closer to origin) / Distal (farther from origin); Cranial/Caudal; Rostral (brain/head)." },
{ icon: "🌊", title: "Superficial & Deep", desc: "Relative to the outer layer of deep fascia — superficial (skin/fascia) vs deep (muscles/viscera)." },
{ icon: "🫀", title: "Inclusive Terminology", desc: "Use patient-preferred terms; base clinical care on present anatomy, not gender assumptions." },
];
summaryPoints.forEach((pt, i) => {
const col = i % 2;
const row = Math.floor(i / 2);
const xPos = col === 0 ? 0.35 : 5.15;
const yPos = 1.0 + row * 1.3;
addCard(slide, xPos, yPos, 4.6, 1.15, "0F2030");
slide.addShape(pres.ShapeType.rect, {
x: xPos, y: yPos, w: 0.08, h: 1.15, fill: { color: TEAL }, line: { color: TEAL }
});
slide.addText(pt.icon, {
x: xPos + 0.15, y: yPos + 0.2, w: 0.55, h: 0.6,
fontSize: 22, fontFace: "Segoe UI Emoji"
});
slide.addText(pt.title, {
x: xPos + 0.75, y: yPos + 0.08, w: 3.7, h: 0.38,
fontSize: 12, bold: true, color: GOLD, fontFace: "Calibri"
});
slide.addText(pt.desc, {
x: xPos + 0.75, y: yPos + 0.48, w: 3.7, h: 0.65,
fontSize: 10.5, color: WHITE, fontFace: "Calibri"
});
});
slide.addText("Source: Gray's Anatomy for Students | Orris Medical Library", {
x: 0.35, y: 4.93, w: 9.3, h: 0.38,
fontSize: 10, color: "6B8CAE", fontFace: "Calibri",
align: "center", italic: true
});
}
// Write file
pres.writeFile({ fileName: "/home/daytona/workspace/anatomical-nomenclature-pptx/Anatomical_Nomenclature.pptx" })
.then(() => console.log("DONE: Anatomical_Nomenclature.pptx created"))
.catch(err => { console.error("ERROR:", err); process.exit(1); });
cd /home/daytona/workspace/anatomical-nomenclature-pptx && node create_pptx.js 2>&1
cd /home/daytona/workspace/anatomical-nomenclature-pptx && node /home/daytona/skills/shared/scripts/fetch_images.js "https://cdn.orris.care/cdss_images/a6821ed545aa1fb79ab82e9b83a926f549f85bed1add3edc7d6e458dff65071d.png" > /home/daytona/workspace/anatomical-nomenclature-pptx/anatomy_img.json 2>&1; echo "EXIT: $?"
~/anatomical-nomenclature-pptx/create_pptx.js
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/anatomical-nomenclature-pptx/create_pptx.js'
cd /home/daytona/workspace/anatomical-nomenclature-pptx && node create_pptx.js 2>&1
| Slide | Content |
|---|---|
| 1 | Title slide with topic tag pills |
| 2 | What is Anatomical Nomenclature? (definition + 3 key pillars) |
| 3 | The Anatomical Position (criteria + textbook diagram) |
| 4 | Anatomical Planes (Coronal, Sagittal, Transverse - 3 cards) |
| 5 | Terms of Location Part 1 (Anterior/Posterior, Medial/Lateral, Superior/Inferior) |
| 6 | Terms of Location Part 2 (Proximal/Distal, Cranial/Caudal, Rostral) |
| 7 | Superficial & Deep (side-by-side comparison) |
| 8 | Complete Quick Reference Table (all 12 terms) |
| 9 | Inclusive Anatomical Terminology |
| 10 | Summary slide with all 6 key takeaways |
Anatomical Nomenclature
Presentation · PPTX
make me flow charts of this in easy way
~/anatomical-nomenclature-pptx/create_flowcharts.js
const pptxgen = require("pptxgenjs");
let pres = new pptxgen();
pres.layout = "LAYOUT_16x9";
pres.title = "Anatomical Nomenclature – Flowcharts";
// ─── PALETTE ───
const BG = "F0F7FF"; // light blue-white background
const NAVY = "0D1B2A";
const TEAL = "1B9AAA";
const LTEAL = "D0F0F5";
const BLUE = "2563EB";
const LBLUE = "DBEAFE";
const GREEN = "16A34A";
const LGREEN = "DCFCE7";
const PURPLE = "7C3AED";
const LPURP = "EDE9FE";
const ORANGE = "EA580C";
const LORAN = "FFEDD5";
const GOLD = "D97706";
const LGOLD = "FEF3C7";
const RED = "DC2626";
const LRED = "FEE2E2";
const WHITE = "FFFFFF";
const DARK = "1E293B";
const GRAY = "64748B";
// ─── HELPERS ───
function bg(slide) {
slide.addShape(pres.ShapeType.rect, {
x:0, y:0, w:10, h:5.625, fill:{color: BG}, line:{color: BG}
});
}
// Rounded box node
function node(slide, x, y, w, h, text, fillColor, textColor, fontSize, bold) {
slide.addShape(pres.ShapeType.roundRect, {
x, y, w, h,
fill:{color: fillColor},
line:{color: darken(fillColor), pt:1.5},
rectRadius: 0.12
});
slide.addText(text, {
x, y, w, h,
fontSize: fontSize || 12,
bold: bold !== false,
color: textColor || WHITE,
fontFace: "Calibri",
align: "center",
valign: "middle",
margin: 4
});
}
// Diamond decision shape
function diamond(slide, x, y, w, h, text, fillColor, textColor) {
slide.addShape(pres.ShapeType.diamond, {
x, y, w, h,
fill:{color: fillColor || GOLD},
line:{color: darken(fillColor || GOLD), pt:1.5}
});
slide.addText(text, {
x, y, w, h,
fontSize: 11,
bold: true,
color: textColor || WHITE,
fontFace: "Calibri",
align: "center",
valign: "middle",
margin: 4
});
}
// Arrow down
function arrowDown(slide, x, y, len) {
slide.addShape(pres.ShapeType.line, {
x, y, w:0, h: len,
line:{color: GRAY, pt:1.5, endArrowType:"arrow"}
});
}
// Arrow right
function arrowRight(slide, x, y, len) {
slide.addShape(pres.ShapeType.line, {
x, y, w: len, h:0,
line:{color: GRAY, pt:1.5, endArrowType:"arrow"}
});
}
// Arrow left
function arrowLeft(slide, x, y, len) {
slide.addShape(pres.ShapeType.line, {
x: x+len, y, w: -len, h:0,
line:{color: GRAY, pt:1.5, endArrowType:"arrow"}
});
}
// Connector line (no arrow)
function line(slide, x1, y1, x2, y2, color) {
slide.addShape(pres.ShapeType.line, {
x:x1, y:y1, w:(x2-x1), h:(y2-y1),
line:{color: color||GRAY, pt:1.5}
});
}
function darken(hex) {
// slightly darken a hex color for border
const n = parseInt(hex, 16);
const r = Math.max(0, ((n>>16)&0xFF) - 40);
const g = Math.max(0, ((n>>8)&0xFF) - 40);
const b = Math.max(0, (n&0xFF) - 40);
return ((r<<16)|(g<<8)|b).toString(16).padStart(6,"0");
}
// Slide title bar
function titleBar(slide, text, sub) {
slide.addShape(pres.ShapeType.rect, {
x:0, y:0, w:10, h:0.7, fill:{color: TEAL}, line:{color: TEAL}
});
slide.addText(text, {
x:0.2, y:0, w:7, h:0.7,
fontSize:20, bold:true, color:WHITE,
fontFace:"Calibri", valign:"middle"
});
if (sub) {
slide.addText(sub, {
x:7, y:0, w:2.8, h:0.7,
fontSize:10, color:LTEAL,
fontFace:"Calibri", valign:"middle", align:"right", italic:true
});
}
}
// Small label above/below an arrow
function label(slide, x, y, text, color) {
slide.addText(text, {
x, y, w:1.2, h:0.28,
fontSize:9, color: color||GRAY, fontFace:"Calibri", align:"center", italic:true
});
}
// ═══════════════════════════════════════════════════════════
// SLIDE 1 — TITLE
// ═══════════════════════════════════════════════════════════
{
let slide = pres.addSlide();
slide.addShape(pres.ShapeType.rect, {
x:0, y:0, w:10, h:5.625, fill:{color:NAVY}, line:{color:NAVY}
});
// decorative circles
slide.addShape(pres.ShapeType.ellipse, {x:7.5, y:-0.5, w:3.5, h:3.5, fill:{color:"1B2E40"}, line:{color:"1B2E40"}});
slide.addShape(pres.ShapeType.ellipse, {x:-0.8, y:3.5, w:2.5, h:2.5, fill:{color:"1B2E40"}, line:{color:"1B2E40"}});
slide.addText("Anatomical\nNomenclature", {
x:1, y:0.9, w:8, h:2.0,
fontSize:46, bold:true, color:WHITE, fontFace:"Calibri", align:"center"
});
slide.addShape(pres.ShapeType.rect, {
x:2.5, y:3.05, w:5, h:0.06, fill:{color:TEAL}, line:{color:TEAL}
});
slide.addText("Visual Flowchart Guide", {
x:1, y:3.2, w:8, h:0.5,
fontSize:20, color:LTEAL, fontFace:"Calibri", align:"center", italic:true
});
const topics = ["Anatomical Position","Body Planes","Directional Terms","Superficial & Deep"];
topics.forEach((t,i) => {
slide.addShape(pres.ShapeType.roundRect, {
x:0.4+i*2.3, y:4.05, w:2.1, h:0.42,
fill:{color:"1B3A52"}, line:{color:TEAL, pt:1}, rectRadius:0.18
});
slide.addText(t, {
x:0.4+i*2.3, y:4.05, w:2.1, h:0.42,
fontSize:10, color:LTEAL, fontFace:"Calibri", align:"center", valign:"middle"
});
});
slide.addText("Source: Gray's Anatomy for Students", {
x:1, y:5.2, w:8, h:0.3,
fontSize:10, color:"4A6680", fontFace:"Calibri", align:"center", italic:true
});
}
// ═══════════════════════════════════════════════════════════
// SLIDE 2 — OVERVIEW FLOWCHART (master map)
// ═══════════════════════════════════════════════════════════
{
let slide = pres.addSlide();
bg(slide);
titleBar(slide, "Overview: What is Anatomical Nomenclature?", "Master Map");
// Central node
node(slide, 3.4, 0.85, 3.2, 0.7, "ANATOMICAL\nNOMENCLATURE", TEAL, WHITE, 13, true);
// Arrow down from centre
arrowDown(slide, 5.0, 1.55, 0.38);
// 5 branches coming down — row of 5 boxes
const branches = [
{label:"1. Anatomical\nPosition", fill:BLUE, lx:0.25},
{label:"2. Body\nPlanes", fill:GREEN, lx:2.2},
{label:"3. Direction\nTerms", fill:PURPLE, lx:4.15},
{label:"4. Proximal /\nDistal etc.", fill:ORANGE, lx:6.1},
{label:"5. Superficial\n& Deep", fill:RED, lx:8.05},
];
// horizontal bar
slide.addShape(pres.ShapeType.line, {
x:1.1, y:1.93, w:7.8, h:0,
line:{color:GRAY, pt:1.5}
});
branches.forEach((b,i) => {
// tick down from bar
arrowDown(slide, b.lx+0.9, 1.93, 0.35);
node(slide, b.lx, 2.28, 1.82, 0.72, b.label, b.fill, WHITE, 11, true);
});
// sub-items for each branch
const subs = [
["Upright body","Palms forward","Feet together","Face forward"],
["Coronal","Sagittal","Transverse","(Median)"],
["Anterior / Post.","Medial / Lateral","Superior / Inf.","(3 main pairs)"],
["Proximal / Distal","Cranial / Caudal","Rostral"],
["Superficial","Deep","Fascia boundary","Wounds"],
];
branches.forEach((b, i) => {
subs[i].forEach((s, j) => {
const yy = 3.1 + j * 0.52;
if (j < subs[i].length) {
// connector
slide.addShape(pres.ShapeType.line, {
x: b.lx+0.91, y: j===0? 3.0: yy-0.02,
w:0, h: j===0? 0.12:0,
line:{color:GRAY, pt:1}
});
slide.addShape(pres.ShapeType.roundRect, {
x: b.lx+0.04, y: yy, w:1.72, h:0.42,
fill:{color: j%2===0? "E8F4F8":"FFFFFF"},
line:{color:b.fill, pt:1}, rectRadius:0.06
});
slide.addText(s, {
x: b.lx+0.04, y: yy, w:1.72, h:0.42,
fontSize:9.5, color:DARK, fontFace:"Calibri",
align:"center", valign:"middle"
});
if (j>0) {
slide.addShape(pres.ShapeType.line, {
x: b.lx+0.91, y: yy-0.07,
w:0, h:0.08,
line:{color:GRAY, pt:1, endArrowType:"arrow"}
});
}
}
});
});
}
// ═══════════════════════════════════════════════════════════
// SLIDE 3 — ANATOMICAL POSITION FLOWCHART
// ═══════════════════════════════════════════════════════════
{
let slide = pres.addSlide();
bg(slide);
titleBar(slide, "Flowchart: The Anatomical Position", "Step-by-step checklist");
// START
node(slide, 3.8, 0.82, 2.4, 0.55, "START: Set the\nAnatomical Position", TEAL, WHITE, 12);
arrowDown(slide, 5.0, 1.37, 0.22);
const steps = [
{text:"Body UPRIGHT\n(standing straight)", fill:BLUE, lbl:"Step 1"},
{text:"Feet TOGETHER\nToes pointing FORWARD", fill:GREEN, lbl:"Step 2"},
{text:"Hands by sides\nPALMS facing FORWARD", fill:PURPLE, lbl:"Step 3"},
{text:"Face looking FORWARD\nMouth CLOSED, neutral", fill:ORANGE, lbl:"Step 4"},
{text:"Inferior orbital rim\nlevel with top of ear opening", fill:RED, lbl:"Step 5"},
{text:"Eyes OPEN\nFocused in the distance", fill:GOLD, lbl:"Step 6"},
];
// Two-column waterfall layout
const col1 = [0, 1, 2];
const col2 = [3, 4, 5];
col1.forEach((idx, j) => {
const s = steps[idx];
node(slide, 0.3, 1.59 + j*1.18, 3.8, 0.88, s.text, s.fill, WHITE, 11);
slide.addText(s.lbl, {
x:0.3, y:1.59+j*1.18, w:0.75, h:0.3,
fontSize:8, bold:true, color:WHITE,
fontFace:"Calibri", align:"center"
});
if (j < 2) arrowDown(slide, 2.2, 1.59+j*1.18+0.88, 0.3);
});
col2.forEach((idx, j) => {
const s = steps[idx];
node(slide, 5.9, 1.59 + j*1.18, 3.8, 0.88, s.text, s.fill, WHITE, 11);
slide.addText(s.lbl, {
x:5.9, y:1.59+j*1.18, w:0.75, h:0.3,
fontSize:8, bold:true, color:WHITE,
fontFace:"Calibri", align:"center"
});
if (j < 2) arrowDown(slide, 7.8, 1.59+j*1.18+0.88, 0.3);
});
// bridge arrow col1 -> col2 (after step3)
slide.addShape(pres.ShapeType.line, {
x:4.1, y:2.03, w:1.8, h:0,
line:{color:GRAY, pt:1.5, endArrowType:"arrow"}
});
slide.addText("→ continue", {
x:4.15, y:1.87, w:1.7, h:0.28,
fontSize:9, color:GRAY, fontFace:"Calibri", align:"center", italic:true
});
// END
node(slide, 3.8, 5.05, 2.4, 0.45, "✓ ANATOMICAL POSITION SET", GREEN, WHITE, 11);
}
// ═══════════════════════════════════════════════════════════
// SLIDE 4 — BODY PLANES FLOWCHART
// ═══════════════════════════════════════════════════════════
{
let slide = pres.addSlide();
bg(slide);
titleBar(slide, "Flowchart: The 3 Body Planes", "How each plane divides the body");
// Root
node(slide, 3.5, 0.82, 3.0, 0.6, "BODY PLANES\n(3 Types)", TEAL, WHITE, 13);
arrowDown(slide, 5.0, 1.42, 0.25);
// Horizontal connector bar
slide.addShape(pres.ShapeType.line, {
x:1.5, y:1.67, w:7.0, h:0,
line:{color:GRAY, pt:2}
});
// 3 columns
const planes = [
{
name:"CORONAL\n(Frontal) Plane",
fill:BLUE,
orient:"Vertical",
divides:"Front (Anterior)\nvs\nBack (Posterior)",
eg:"Cut parallel to chest",
lx:0.25
},
{
name:"SAGITTAL\nPlane",
fill:GREEN,
orient:"Vertical\n(⊥ to Coronal)",
divides:"Left side\nvs\nRight side",
eg:"Median = equal halves",
lx:3.6
},
{
name:"TRANSVERSE\n(Axial/Horizontal) Plane",
fill:PURPLE,
orient:"Horizontal",
divides:"Upper (Superior)\nvs\nLower (Inferior)",
eg:"CT cross-section",
lx:6.95
}
];
planes.forEach((p) => {
// tick down
arrowDown(slide, p.lx+1.4, 1.67, 0.3);
// main plane box
node(slide, p.lx, 1.97, 2.8, 0.72, p.name, p.fill, WHITE, 12);
// arrow down
arrowDown(slide, p.lx+1.4, 2.69, 0.25);
// orientation box
slide.addShape(pres.ShapeType.roundRect, {
x:p.lx+0.15, y:2.94, w:2.5, h:0.55,
fill:{color:"F1F5F9"}, line:{color:p.fill, pt:1}, rectRadius:0.08
});
slide.addText([
{text:"Orientation: ", options:{bold:true, color:p.fill}},
{text:p.orient, options:{color:DARK}}
], {
x:p.lx+0.15, y:2.94, w:2.5, h:0.55,
fontSize:11, fontFace:"Calibri", align:"center", valign:"middle"
});
arrowDown(slide, p.lx+1.4, 3.49, 0.22);
// divides box
slide.addShape(pres.ShapeType.roundRect, {
x:p.lx+0.15, y:3.71, w:2.5, h:0.72,
fill:{color:"EFF6FF"}, line:{color:p.fill, pt:1}, rectRadius:0.08
});
slide.addText([
{text:"Divides:\n", options:{bold:true, color:p.fill}},
{text:p.divides, options:{color:DARK}}
], {
x:p.lx+0.15, y:3.71, w:2.5, h:0.72,
fontSize:11, fontFace:"Calibri", align:"center", valign:"middle"
});
arrowDown(slide, p.lx+1.4, 4.43, 0.2);
// example
slide.addShape(pres.ShapeType.roundRect, {
x:p.lx+0.15, y:4.63, w:2.5, h:0.52,
fill:{color:LGOLD}, line:{color:GOLD, pt:1}, rectRadius:0.08
});
slide.addText([
{text:"e.g. ", options:{bold:true, color:GOLD}},
{text:p.eg, options:{color:DARK, italic:true}}
], {
x:p.lx+0.15, y:4.63, w:2.5, h:0.52,
fontSize:10, fontFace:"Calibri", align:"center", valign:"middle"
});
});
}
// ═══════════════════════════════════════════════════════════
// SLIDE 5 — DIRECTIONAL TERMS FLOWCHART (3 pairs)
// ═══════════════════════════════════════════════════════════
{
let slide = pres.addSlide();
bg(slide);
titleBar(slide, "Flowchart: Directional Terms – 3 Main Pairs", "Describing location relative to the body");
node(slide, 3.5, 0.82, 3.0, 0.6, "WHERE IS THE\nSTRUCTURE?", TEAL, WHITE, 13);
arrowDown(slide, 5.0, 1.42, 0.25);
// 3 rows, each with a pair
const pairs = [
{
q:"Front or Back?",
l:{term:"ANTERIOR\n(Ventral)", fill:BLUE, def:"Toward the FRONT", eg:'Nose, sternum'},
r:{term:"POSTERIOR\n(Dorsal)", fill:"0369A1", def:"Toward the BACK", eg:'Vertebral column'},
y:1.67
},
{
q:"Toward midline\nor away?",
l:{term:"MEDIAL", fill:GREEN, def:"Toward the MIDLINE", eg:'Nose (vs eyes)'},
r:{term:"LATERAL", fill:"15803D", def:"Away from midline", eg:'Thumb (vs little finger)'},
y:3.05
},
{
q:"Higher or\nlower on body?",
l:{term:"SUPERIOR", fill:PURPLE, def:"Toward the HEAD (top)", eg:'Head > shoulders'},
r:{term:"INFERIOR", fill:"6D28D9", def:"Toward the FEET (bottom)", eg:'Knee < hip joint'},
y:4.4
}
];
pairs.forEach((p) => {
// question diamond
diamond(slide, 4.2, p.y, 1.6, 0.58, p.q, GOLD, NAVY);
// left arrow + box
arrowLeft(slide, 1.1, p.y+0.29, 3.1);
node(slide, 0.15, p.y+0.0, 2.6, 0.55, p.l.term, p.l.fill, WHITE, 12);
// left def + eg
slide.addShape(pres.ShapeType.roundRect, {
x:0.15, y:p.y+0.62, w:2.6, h:0.52,
fill:{color:LBLUE}, line:{color:p.l.fill, pt:1}, rectRadius:0.06
});
slide.addText([
{text:p.l.def+"\n", options:{bold:true, color:p.l.fill, fontSize:10}},
{text:"e.g. "+p.l.eg, options:{color:DARK, italic:true, fontSize:9}}
], {
x:0.15, y:p.y+0.62, w:2.6, h:0.52,
fontFace:"Calibri", align:"center", valign:"middle"
});
// right arrow + box
arrowRight(slide, 5.8, p.y+0.29, 2.4);
node(slide, 7.25, p.y+0.0, 2.6, 0.55, p.r.term, p.r.fill, WHITE, 12);
// right def + eg
slide.addShape(pres.ShapeType.roundRect, {
x:7.25, y:p.y+0.62, w:2.6, h:0.52,
fill:{color:LGREEN}, line:{color:p.r.fill, pt:1}, rectRadius:0.06
});
slide.addText([
{text:p.r.def+"\n", options:{bold:true, color:p.r.fill, fontSize:10}},
{text:"e.g. "+p.r.eg, options:{color:DARK, italic:true, fontSize:9}}
], {
x:7.25, y:p.y+0.62, w:2.6, h:0.52,
fontFace:"Calibri", align:"center", valign:"middle"
});
});
}
// ═══════════════════════════════════════════════════════════
// SLIDE 6 — PROXIMAL/DISTAL, CRANIAL/CAUDAL, ROSTRAL
// ═══════════════════════════════════════════════════════════
{
let slide = pres.addSlide();
bg(slide);
titleBar(slide, "Flowchart: More Directional Terms", "Proximal/Distal · Cranial/Caudal · Rostral");
// 3 separate mini-flowcharts side by side
const charts = [
{
title:"PROXIMAL / DISTAL",
titleFill:BLUE,
question:"Distance from\nORIGIN / ATTACHMENT?",
l:{term:"PROXIMAL", fill:BLUE, def:"Closer to origin", eg:"Shoulder > Elbow"},
r:{term:"DISTAL", fill:"0369A1", def:"Farther from origin", eg:"Hand < Elbow"},
note:"Used for limbs, vessels,\nnerves, airways",
x:0.2
},
{
title:"CRANIAL / CAUDAL",
titleFill:GREEN,
question:"Toward head\nor tail?",
l:{term:"CRANIAL", fill:GREEN, def:"Toward the HEAD", eg:"Brain is cranial"},
r:{term:"CAUDAL", fill:"15803D",def:"Toward the TAIL", eg:"Sacrum is caudal"},
note:"Alternative to\nSuperior / Inferior",
x:3.55
},
{
title:"ROSTRAL",
titleFill:PURPLE,
question:"Position within\nthe BRAIN/HEAD?",
l:{term:"ROSTRAL", fill:PURPLE, def:"Toward the NOSE\n(used in head/brain)", eg:"Forebrain > Hindbrain"},
r:null,
note:"Only used in\nbrain/head anatomy",
x:6.9
}
];
charts.forEach((c) => {
// Title banner
node(slide, c.x, 0.82, 2.85, 0.52, c.title, c.titleFill, WHITE, 12);
arrowDown(slide, c.x+1.425, 1.34, 0.22);
// Question diamond
diamond(slide, c.x+0.42, 1.56, 2.0, 0.65, c.question, GOLD, NAVY);
arrowDown(slide, c.x+1.425, 2.21, 0.22);
if (c.r) {
// Two branches
// Left branch
slide.addShape(pres.ShapeType.line, {
x:c.x+0.42, y:2.43, w:0, h:0,
line:{color:GRAY, pt:1}
});
arrowLeft(slide, c.x+0.05, 2.55, 1.25);
node(slide, c.x, 2.55, 1.25, 0.58, c.l.term, c.l.fill, WHITE, 11);
slide.addShape(pres.ShapeType.roundRect, {
x:c.x, y:3.22, w:1.3, h:0.72,
fill:{color:LBLUE}, line:{color:c.l.fill, pt:1}, rectRadius:0.06
});
slide.addText([
{text:c.l.def+"\n", options:{bold:true, color:c.l.fill, fontSize:9.5}},
{text:"e.g. "+c.l.eg, options:{color:DARK, italic:true, fontSize:8.5}}
], {
x:c.x, y:3.22, w:1.3, h:0.72, fontFace:"Calibri", align:"center", valign:"middle"
});
// Right branch
arrowRight(slide, c.x+1.7, 2.55, 1.15);
node(slide, c.x+1.6, 2.55, 1.25, 0.58, c.r.term, c.r.fill, WHITE, 11);
slide.addShape(pres.ShapeType.roundRect, {
x:c.x+1.55, y:3.22, w:1.3, h:0.72,
fill:{color:LGREEN}, line:{color:c.r.fill, pt:1}, rectRadius:0.06
});
slide.addText([
{text:c.r.def+"\n", options:{bold:true, color:c.r.fill, fontSize:9.5}},
{text:"e.g. "+c.r.eg, options:{color:DARK, italic:true, fontSize:8.5}}
], {
x:c.x+1.55, y:3.22, w:1.3, h:0.72, fontFace:"Calibri", align:"center", valign:"middle"
});
} else {
// Single branch (Rostral)
node(slide, c.x, 2.55, 2.85, 0.7, c.l.term, c.l.fill, WHITE, 12);
slide.addShape(pres.ShapeType.roundRect, {
x:c.x, y:3.35, w:2.85, h:0.72,
fill:{color:LPURP}, line:{color:PURPLE, pt:1}, rectRadius:0.06
});
slide.addText([
{text:c.l.def+"\n", options:{bold:true, color:PURPLE, fontSize:10}},
{text:"e.g. "+c.l.eg, options:{color:DARK, italic:true, fontSize:9}}
], {
x:c.x, y:3.35, w:2.85, h:0.72, fontFace:"Calibri", align:"center", valign:"middle"
});
}
// Note box at bottom
slide.addShape(pres.ShapeType.roundRect, {
x:c.x, y:4.18, w:2.85, h:0.72,
fill:{color:LGOLD}, line:{color:GOLD, pt:1}, rectRadius:0.08
});
slide.addText([
{text:"📌 Note: ", options:{bold:true, color:GOLD, fontSize:10}},
{text:c.note, options:{color:DARK, fontSize:9.5}}
], {
x:c.x, y:4.18, w:2.85, h:0.72,
fontFace:"Calibri", align:"center", valign:"middle"
});
});
}
// ═══════════════════════════════════════════════════════════
// SLIDE 7 — SUPERFICIAL & DEEP FLOWCHART
// ═══════════════════════════════════════════════════════════
{
let slide = pres.addSlide();
bg(slide);
titleBar(slide, "Flowchart: Superficial & Deep", "Relative to the outer layer of deep fascia");
node(slide, 3.5, 0.82, 3.0, 0.6, "DESCRIBE STRUCTURE\nPOSITION", TEAL, WHITE, 13);
arrowDown(slide, 5.0, 1.42, 0.28);
// Decision diamond
diamond(slide, 3.6, 1.7, 2.8, 0.78, "Is it closer to\nthe body SURFACE?", GOLD, NAVY);
// YES path (left)
arrowLeft(slide, 0.5, 2.09, 3.1);
slide.addText("YES", {x:1.2, y:1.88, w:0.8, h:0.28, fontSize:10, bold:true, color:GREEN, fontFace:"Calibri", align:"center"});
node(slide, 0.2, 1.82, 2.2, 0.58, "SUPERFICIAL", BLUE, WHITE, 15);
arrowDown(slide, 1.3, 2.4, 0.25);
slide.addShape(pres.ShapeType.roundRect, {
x:0.2, y:2.65, w:2.2, h:1.22,
fill:{color:LBLUE}, line:{color:BLUE, pt:1.5}, rectRadius:0.1
});
slide.addText([
{text:"External to deep fascia\n\n", options:{bold:true, color:BLUE, fontSize:10}},
{text:"Includes:\n• Skin\n• Superficial fascia\n• Mammary glands", options:{color:DARK, fontSize:10}}
], {
x:0.2, y:2.65, w:2.2, h:1.22,
fontFace:"Calibri", align:"center", valign:"middle"
});
arrowDown(slide, 1.3, 3.87, 0.22);
slide.addShape(pres.ShapeType.roundRect, {
x:0.2, y:4.09, w:2.2, h:0.62,
fill:{color:LGOLD}, line:{color:GOLD, pt:1}, rectRadius:0.08
});
slide.addText('e.g. "Sternum is\nsuperficial to the heart"', {
x:0.2, y:4.09, w:2.2, h:0.62,
fontSize:10, color:DARK, fontFace:"Calibri",
align:"center", valign:"middle", italic:true
});
// NO path (right)
arrowRight(slide, 6.4, 2.09, 3.1);
slide.addText("NO", {x:7.9, y:1.88, w:0.8, h:0.28, fontSize:10, bold:true, color:RED, fontFace:"Calibri", align:"center"});
node(slide, 7.6, 1.82, 2.2, 0.58, "DEEP", RED, WHITE, 15);
arrowDown(slide, 8.7, 2.4, 0.25);
slide.addShape(pres.ShapeType.roundRect, {
x:7.6, y:2.65, w:2.2, h:1.22,
fill:{color:LRED}, line:{color:RED, pt:1.5}, rectRadius:0.1
});
slide.addText([
{text:"Enclosed within deep fascia\n\n", options:{bold:true, color:RED, fontSize:10}},
{text:"Includes:\n• Skeletal muscles\n• Viscera (organs)", options:{color:DARK, fontSize:10}}
], {
x:7.6, y:2.65, w:2.2, h:1.22,
fontFace:"Calibri", align:"center", valign:"middle"
});
arrowDown(slide, 8.7, 3.87, 0.22);
slide.addShape(pres.ShapeType.roundRect, {
x:7.6, y:4.09, w:2.2, h:0.62,
fill:{color:LGOLD}, line:{color:GOLD, pt:1}, rectRadius:0.08
});
slide.addText('e.g. "Stomach is\ndeep to abdominal wall"', {
x:7.6, y:4.09, w:2.2, h:0.62,
fontSize:10, color:DARK, fontFace:"Calibri",
align:"center", valign:"middle", italic:true
});
// Wound note (centre)
slide.addShape(pres.ShapeType.roundRect, {
x:3.4, y:2.7, w:3.2, h:1.1,
fill:{color:"FFF7ED"}, line:{color:ORANGE, pt:1.5}, rectRadius:0.1
});
slide.addText([
{text:"🩹 Wound Classification\n\n", options:{bold:true, color:ORANGE, fontSize:11}},
{text:"Superficial wound: stays above deep fascia\nDeep wound: penetrates through deep fascia", options:{color:DARK, fontSize:10}}
], {
x:3.4, y:2.7, w:3.2, h:1.1,
fontFace:"Calibri", align:"center", valign:"middle"
});
// KEY boundary line note
slide.addShape(pres.ShapeType.roundRect, {
x:3.4, y:3.95, w:3.2, h:0.75,
fill:{color:LGREEN}, line:{color:GREEN, pt:1.5}, rectRadius:0.1
});
slide.addText([
{text:"🔑 Key Boundary: ", options:{bold:true, color:GREEN, fontSize:11}},
{text:"The outer layer of DEEP FASCIA separates superficial from deep.", options:{color:DARK, fontSize:10}}
], {
x:3.4, y:3.95, w:3.2, h:0.75,
fontFace:"Calibri", align:"center", valign:"middle"
});
}
// ═══════════════════════════════════════════════════════════
// SLIDE 8 — ALL TERMS AT A GLANCE (visual grid)
// ═══════════════════════════════════════════════════════════
{
let slide = pres.addSlide();
bg(slide);
titleBar(slide, "All Terms at a Glance", "Quick visual reference");
const allTerms = [
{term:"Anterior", opp:"Posterior", mean:"Front", fill:BLUE},
{term:"Posterior", opp:"Anterior", mean:"Back", fill:"0369A1"},
{term:"Medial", opp:"Lateral", mean:"Toward midline", fill:GREEN},
{term:"Lateral", opp:"Medial", mean:"Away from midline", fill:"15803D"},
{term:"Superior", opp:"Inferior", mean:"Toward head", fill:PURPLE},
{term:"Inferior", opp:"Superior", mean:"Toward feet", fill:"6D28D9"},
{term:"Proximal", opp:"Distal", mean:"Closer to origin", fill:ORANGE},
{term:"Distal", opp:"Proximal", mean:"Farther from origin", fill:"C2410C"},
{term:"Cranial", opp:"Caudal", mean:"Toward head", fill:RED},
{term:"Caudal", opp:"Cranial", mean:"Toward tail", fill:"B91C1C"},
{term:"Rostral", opp:"--", mean:"Toward nose (brain)", fill:GOLD},
{term:"Superficial",opp:"Deep", mean:"Near surface", fill:TEAL},
{term:"Deep", opp:"Superficial",mean:"Away from surface", fill:"0F7280"},
];
// 2-row table, 4 cols + extras
// Layout: 4 per row across, 4 rows
allTerms.forEach((t, i) => {
const col = i % 4;
const row = Math.floor(i / 4);
const xPos = 0.25 + col * 2.42;
const yPos = 0.82 + row * 1.18;
const cardW = 2.3;
const cardH = 1.0;
// Card
slide.addShape(pres.ShapeType.roundRect, {
x:xPos, y:yPos, w:cardW, h:cardH,
fill:{color:t.fill}, line:{color:darken(t.fill), pt:1}, rectRadius:0.1
});
// Top: term name
slide.addText(t.term, {
x:xPos+0.05, y:yPos+0.04, w:cardW-0.1, h:0.34,
fontSize:14, bold:true, color:WHITE, fontFace:"Calibri",
align:"center", valign:"middle", margin:0
});
// Divider
slide.addShape(pres.ShapeType.rect, {
x:xPos+0.1, y:yPos+0.38, w:cardW-0.2, h:0.02,
fill:{color:"FFFFFF40"}, line:{color:"FFFFFF40"}
});
// Meaning
slide.addText(t.mean, {
x:xPos+0.05, y:yPos+0.42, w:cardW-0.1, h:0.3,
fontSize:10, color:WHITE, fontFace:"Calibri", align:"center", italic:true
});
// Opposite pill
slide.addShape(pres.ShapeType.roundRect, {
x:xPos+0.3, y:yPos+0.72, w:cardW-0.6, h:0.22,
fill:{color:"FFFFFF30"}, line:{color:"FFFFFF50", pt:0.5}, rectRadius:0.1
});
slide.addText("↔ " + t.opp, {
x:xPos+0.3, y:yPos+0.72, w:cardW-0.6, h:0.22,
fontSize:8.5, color:WHITE, fontFace:"Calibri", align:"center"
});
});
}
// Write file
pres.writeFile({ fileName: "/home/daytona/workspace/anatomical-nomenclature-pptx/Anatomical_Nomenclature_Flowcharts.pptx" })
.then(() => console.log("DONE"))
.catch(err => { console.error(err); process.exit(1); });
cd /home/daytona/workspace/anatomical-nomenclature-pptx && node create_flowcharts.js 2>&1
~/anatomical-nomenclature-pptx/create_flowcharts.js
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/anatomical-nomenclature-pptx/create_flowcharts.js'
cd /home/daytona/workspace/anatomical-nomenclature-pptx && node create_flowcharts.js 2>&1
Anatomical Nomenclature Flowcharts
Presentation · PPTX
| Slide | Flowchart |
|---|---|
| 1 | Title slide |
| 2 | Master Overview - all 5 topic branches in one map |
| 3 | Anatomical Position - 6-step checklist flowchart |
| 4 | 3 Body Planes - Coronal / Sagittal / Transverse with orientation + examples |
| 5 | Directional Terms (Part 1) - 3 decision diamonds: Front/Back? Midline? Up/Down? |
| 6 | Directional Terms (Part 2) - Proximal/Distal, Cranial/Caudal, Rostral (3 mini-charts) |
| 7 | Superficial & Deep - YES/NO decision diamond + wound classification |
| 8 | All 13 Terms at a Glance - color-coded card grid with opposites |
Make quick reference laminated flashcards (generate as PDF)
~/anatomical-nomenclature-pptx/make_flashcards.py
"""
Anatomical Nomenclature – Laminated Flashcards PDF
Layout: 3 cards per row × 3 rows = 9 cards per A4 page, with cut marks
Card size: ~85mm × 55mm (standard credit-card / laminate size)
"""
from reportlab.lib.pagesizes import A4
from reportlab.lib.units import mm
from reportlab.lib import colors
from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.lib.colors import HexColor
import math
OUTPUT = "/home/daytona/workspace/anatomical-nomenclature-pptx/Anatomical_Nomenclature_Flashcards.pdf"
# ── Page setup ──────────────────────────────────────────────
PAGE_W, PAGE_H = A4 # 210 × 297 mm
CARD_W = 85 * mm
CARD_H = 54 * mm
COLS = 2
ROWS_PER_PAGE = 4
MARGIN_X = (PAGE_W - COLS * CARD_W) / 2
MARGIN_Y = 12 * mm
GAP_X = 0
GAP_Y = 5 * mm
# ── Palette ─────────────────────────────────────────────────
NAVY = HexColor("#0D1B2A")
TEAL = HexColor("#1B9AAA")
LTEAL = HexColor("#C4F1F9")
WHITE = HexColor("#FFFFFF")
CREAM = HexColor("#FFFEF5")
BLUE = HexColor("#2563EB")
LBLUE = HexColor("#DBEAFE")
GREEN = HexColor("#16A34A")
LGREEN = HexColor("#DCFCE7")
PURPLE = HexColor("#7C3AED")
LPURP = HexColor("#EDE9FE")
ORANGE = HexColor("#EA580C")
LORAN = HexColor("#FFEDD5")
GOLD = HexColor("#D97706")
LGOLD = HexColor("#FEF3C7")
RED = HexColor("#DC2626")
LRED = HexColor("#FEE2E2")
DARK = HexColor("#1E293B")
GRAY = HexColor("#64748B")
SILVER = HexColor("#F1F5F9")
# ── Flashcard data ────────────────────────────────────────────
# Each card: (header_text, header_bg, header_fg, body_items, back_text, accent_color)
# body_items: list of (label, value, label_color)
# Cards are grouped into sets of 8 per A4 page (2×4)
cards = [
# ── CARD 1: Title / Cover ─────────────────────────
{
"type": "cover",
"title": "Anatomical\nNomenclature",
"subtitle": "Quick Reference Flashcards",
"note": "Gray's Anatomy for Students",
"bg": NAVY,
"accent": TEAL,
},
# ── CARD 2: Anatomical Position ───────────────────
{
"type": "term",
"header": "Anatomical Position",
"header_bg": TEAL,
"header_fg": NAVY,
"tag": "REFERENCE POSTURE",
"rows": [
("Body", "Upright, standing straight"),
("Feet", "Together, toes forward"),
("Hands", "By sides, palms forward"),
("Face", "Looking forward, mouth closed"),
("Eyes", "Open, neutral expression"),
("Orbit", "Level with top of ear opening"),
],
"footer": "All anatomical terms are defined\nrelative to this position",
"footer_bg": LTEAL,
"footer_fg": NAVY,
},
# ── CARD 3: Body Planes ───────────────────────────
{
"type": "term",
"header": "Body Planes",
"header_bg": BLUE,
"header_fg": WHITE,
"tag": "3 MAJOR PLANES",
"rows": [
("Coronal", "Vertical — divides Anterior / Posterior"),
("Sagittal", "Vertical — divides Left / Right"),
("Median", "Sagittal through midline — equal halves"),
("Transverse", "Horizontal — divides Superior / Inferior"),
("Axial / Horizontal", "Same as transverse"),
],
"footer": "Planes are orientated relative to\nthe anatomical position",
"footer_bg": LBLUE,
"footer_fg": DARK,
},
# ── CARD 4: Anterior / Posterior ──────────────────
{
"type": "pair",
"header": "Anterior ↔ Posterior",
"header_bg": BLUE,
"header_fg": WHITE,
"tag": "DIRECTIONAL TERM",
"left_title": "ANTERIOR",
"left_sub": "(Ventral)",
"left_def": "Toward the FRONT of the body",
"left_eg": "Nose, sternum,\nabdominal wall",
"right_title": "POSTERIOR",
"right_sub": "(Dorsal)",
"right_def": "Toward the BACK of the body",
"right_eg": "Vertebral column,\nscapula",
"left_bg": LBLUE,
"right_bg": SILVER,
},
# ── CARD 5: Medial / Lateral ──────────────────────
{
"type": "pair",
"header": "Medial ↔ Lateral",
"header_bg": GREEN,
"header_fg": WHITE,
"tag": "DIRECTIONAL TERM",
"left_title": "MEDIAL",
"left_sub": "",
"left_def": "Closer to the MIDLINE\n(median sagittal plane)",
"left_eg": "Nose is medial\nto the eyes",
"right_title": "LATERAL",
"right_sub": "",
"right_def": "Farther from\nthe MIDLINE",
"right_eg": "Thumb is lateral\nto little finger",
"left_bg": LGREEN,
"right_bg": SILVER,
},
# ── CARD 6: Superior / Inferior ───────────────────
{
"type": "pair",
"header": "Superior ↔ Inferior",
"header_bg": PURPLE,
"header_fg": WHITE,
"tag": "DIRECTIONAL TERM",
"left_title": "SUPERIOR",
"left_sub": "",
"left_def": "Toward the TOP\n(toward the head)",
"left_eg": "Head is superior\nto the shoulders",
"right_title": "INFERIOR",
"right_sub": "",
"right_def": "Toward the BOTTOM\n(toward the feet)",
"right_eg": "Knee is inferior\nto the hip joint",
"left_bg": LPURP,
"right_bg": SILVER,
},
# ── CARD 7: Proximal / Distal ─────────────────────
{
"type": "pair",
"header": "Proximal ↔ Distal",
"header_bg": ORANGE,
"header_fg": WHITE,
"tag": "LIMB & BRANCHING TERM",
"left_title": "PROXIMAL",
"left_sub": "",
"left_def": "Closer to the ORIGIN\nor point of attachment",
"left_eg": "Shoulder is proximal\nto the elbow",
"right_title": "DISTAL",
"right_sub": "",
"right_def": "Farther from\nthe ORIGIN",
"right_eg": "Hand is distal\nto the elbow",
"left_bg": LORAN,
"right_bg": SILVER,
},
# ── CARD 8: Cranial / Caudal ──────────────────────
{
"type": "pair",
"header": "Cranial ↔ Caudal",
"header_bg": RED,
"header_fg": WHITE,
"tag": "DIRECTIONAL TERM",
"left_title": "CRANIAL",
"left_sub": "(toward head)",
"left_def": "Toward the HEAD end\nof the body",
"left_eg": "Brain is cranial to\nthe spinal cord",
"right_title": "CAUDAL",
"right_sub": "(toward tail)",
"right_def": "Toward the TAIL /\ninferior spine",
"right_eg": "Sacrum is caudal to\nlumbar vertebrae",
"left_bg": LRED,
"right_bg": SILVER,
},
# ── CARD 9: Rostral ───────────────────────────────
{
"type": "term",
"header": "Rostral",
"header_bg": PURPLE,
"header_fg": WHITE,
"tag": "HEAD / BRAIN TERM",
"rows": [
("Definition", "Toward the NOSE"),
("Used in", "Head & brain anatomy specifically"),
("Example", "Forebrain is rostral to hindbrain"),
("Note", "Not used for general body description"),
],
"footer": "Rostral = 'toward the beak/nose'\nFrom Latin: rostrum (beak)",
"footer_bg": LPURP,
"footer_fg": DARK,
},
# ── CARD 10: Superficial / Deep ───────────────────
{
"type": "pair",
"header": "Superficial ↔ Deep",
"header_bg": TEAL,
"header_fg": NAVY,
"tag": "DEPTH TERM",
"left_title": "SUPERFICIAL",
"left_sub": "(external to deep fascia)",
"left_def": "Closer to the\nbody surface",
"left_eg": "Skin, superficial fascia,\nmammary glands",
"right_title": "DEEP",
"right_sub": "(enclosed by deep fascia)",
"right_def": "Farther from\nbody surface",
"right_eg": "Skeletal muscles,\nviscera (organs)",
"left_bg": LTEAL,
"right_bg": SILVER,
},
# ── CARD 11: Wounds ───────────────────────────────
{
"type": "term",
"header": "Wound Depth Classification",
"header_bg": RED,
"header_fg": WHITE,
"tag": "CLINICAL APPLICATION",
"rows": [
("Superficial wound", "External to outer layer of deep fascia"),
("Deep wound", "Penetrates through deep fascia"),
("Key boundary", "Outer layer of DEEP FASCIA"),
("Clinical note", "Determines wound management and risk"),
],
"footer": "Sternum is SUPERFICIAL to heart\nStomach is DEEP to abdominal wall",
"footer_bg": LRED,
"footer_fg": DARK,
},
# ── CARD 12: Quick Summary Table ─────────────────
{
"type": "table",
"header": "All Terms — Summary",
"header_bg": NAVY,
"header_fg": WHITE,
"tag": "MASTER REFERENCE",
"pairs": [
("Anterior", "Posterior", BLUE),
("Medial", "Lateral", GREEN),
("Superior", "Inferior", PURPLE),
("Proximal", "Distal", ORANGE),
("Cranial", "Caudal", RED),
("Superficial", "Deep", TEAL),
],
"extra": "Rostral = toward nose (brain/head only)",
},
# ── CARD 13: Inclusive Terminology ───────────────
{
"type": "term",
"header": "Inclusive Terminology",
"header_bg": GREEN,
"header_fg": WHITE,
"tag": "CLINICAL PRACTICE",
"rows": [
("Upper body", "Instead of: Chest / Breast"),
("Erectile tissue", "Instead of: Penis / Clitoris"),
("Gonads", "Instead of: Testes / Ovaries"),
],
"footer": "Use patient-preferred terms.\nBase care on PRESENT ANATOMY,\nnot gender assumptions.",
"footer_bg": LGREEN,
"footer_fg": DARK,
},
# ── CARD 14: Planes Mnemonic ─────────────────────
{
"type": "mnemonic",
"header": "Memory Aids",
"header_bg": GOLD,
"header_fg": NAVY,
"tag": "STUDY TIPS",
"items": [
("Coronal", "Crown on HEAD → front/back split"),
("Sagittal", "Sagitta (arrow) flies left-right"),
("Transverse", "Trans = across → top/bottom split"),
("Proximal", "PROX = close, like proximity"),
("Distal", "DiSTAL = far from starting point"),
("Rostral", "Rostrum (beak) → toward nose"),
],
},
]
# ── Drawing functions ─────────────────────────────────────────
def rounded_rect(c, x, y, w, h, r, fill_color, stroke_color=None, stroke_width=0.5):
"""Draw a rounded rectangle."""
p = c.beginPath()
p.moveTo(x + r, y)
p.lineTo(x + w - r, y)
p.arcTo(x + w - r, y, x + w, y + r, 0, 90) # bottom-right
p.lineTo(x + w, y + h - r)
p.arcTo(x + w - r, y + h - r, x + w, y + h, 0, 90) # top-right
p.lineTo(x + r, y + h)
p.arcTo(x, y + h - r, x + r, y + h, 0, 90) # top-left
p.lineTo(x, y + r)
p.arcTo(x, y, x + r, y + r, 0, 90) # bottom-left
p.close()
c.setFillColor(fill_color)
if stroke_color:
c.setStrokeColor(stroke_color)
c.setLineWidth(stroke_width)
c.drawPath(p, fill=1, stroke=1)
else:
c.drawPath(p, fill=1, stroke=0)
def cut_marks(c, cx, cy, size=3*mm, gap=1.5*mm):
"""Draw small cross cut marks at corner positions."""
c.setStrokeColor(GRAY)
c.setLineWidth(0.3)
# horizontal
c.line(cx - size - gap, cy, cx - gap, cy)
c.line(cx + gap, cy, cx + size + gap, cy)
# vertical
c.line(cx, cy - size - gap, cx, cy - gap)
c.line(cx, cy + gap, cx, cy + size + gap)
def draw_card_base(c, x, y, w, h, bg=WHITE, border=TEAL):
"""Draw card background with shadow effect."""
# Shadow
rounded_rect(c, x+1.5, y-1.5, w, h, 4*mm, HexColor("#D0D0D0"))
# Card
rounded_rect(c, x, y, w, h, 4*mm, bg, border, 0.8)
def draw_header(c, x, y, w, header_text, bg, fg, tag=None):
"""Draw the colored header band."""
hh = 11 * mm
rounded_rect(c, x, y + CARD_H - hh, w, hh, 0, bg)
# fix corners
c.setFillColor(bg)
c.rect(x, y + CARD_H - hh, w, hh/2, fill=1, stroke=0)
# top-left/right round still from base card
c.setFillColor(bg)
c.rect(x, y + CARD_H - hh, w, hh, fill=1, stroke=0)
# Tag pill
if tag:
tag_w = 30 * mm
tag_h = 3.5 * mm
c.setFillColor(HexColor("#FFFFFF") if bg != WHITE else NAVY)
c.setFillAlpha(0.2)
c.roundRect(x + w - tag_w - 2*mm, y + CARD_H - 5*mm, tag_w, tag_h, 1.5*mm, fill=1, stroke=0)
c.setFillAlpha(1.0)
c.setFillColor(WHITE if bg.hexval() not in ("#fffef5","#f0f7ff") else NAVY)
c.setFont("Helvetica-Bold", 5.5)
c.drawCentredString(x + w - tag_w/2 - 2*mm, y + CARD_H - 4.2*mm, tag)
# Header text
c.setFillColor(fg)
lines = header_text.split("\n")
fs = 9 if len(lines) > 1 else 10
c.setFont("Helvetica-Bold", fs)
for i, line in enumerate(lines):
ty = y + CARD_H - 6.5*mm + (i * -3.8*mm) + ((len(lines)-1)*1.9*mm)
c.drawString(x + 3*mm, ty, line)
def text_wrapped(c, text, x, y, max_w, font, size, color, leading=None):
"""Draw text, wrapping at max_w."""
from reportlab.pdfbase.pdfmetrics import stringWidth
if leading is None:
leading = size * 1.3
c.setFont(font, size)
c.setFillColor(color)
words = text.split()
line = ""
cy = y
for word in words:
test = (line + " " + word).strip()
if stringWidth(test, font, size) <= max_w:
line = test
else:
if line:
c.drawString(x, cy, line)
cy -= leading
line = word
if line:
c.drawString(x, cy, line)
return cy - leading # return y after last line
# ── Card type renderers ────────────────────────────────────────
def render_cover(c, x, y, card):
draw_card_base(c, x, y, CARD_W, CARD_H, card["bg"], card["accent"])
# decorative circle
c.setFillColor(HexColor("#1B3A52"))
c.circle(x + CARD_W - 12*mm, y + CARD_H - 10*mm, 18*mm, fill=1, stroke=0)
c.setFillColor(HexColor("#0F2535"))
c.circle(x + 8*mm, y + 8*mm, 12*mm, fill=1, stroke=0)
# accent stripe
c.setFillColor(card["accent"])
c.rect(x, y + CARD_H*0.42, CARD_W, 1*mm, fill=1, stroke=0)
c.setFillColor(WHITE)
c.setFont("Helvetica-Bold", 15)
lines = card["title"].split("\n")
for i, l in enumerate(lines):
c.drawCentredString(x + CARD_W/2, y + CARD_H*0.7 - i*7*mm, l)
c.setFillColor(card["accent"])
c.setFont("Helvetica-Bold", 7)
c.drawCentredString(x + CARD_W/2, y + CARD_H*0.36, card["subtitle"])
c.setFillColor(GRAY)
c.setFont("Helvetica-Oblique", 5.5)
c.drawCentredString(x + CARD_W/2, y + 3*mm, card["note"])
def render_term(c, x, y, card):
draw_card_base(c, x, y, CARD_W, CARD_H, CREAM, HexColor(card["header_bg"].hexval()))
draw_header(c, x, y, CARD_W, card["header"], card["header_bg"], card["header_fg"], card.get("tag"))
header_h = 11 * mm
body_top = y + CARD_H - header_h - 2*mm
row_h = 7.2 * mm
pad = 3 * mm
for i, (label, value) in enumerate(card["rows"]):
ry = body_top - i * row_h
if ry < y + 12*mm:
break
# alternating row bg
bg_color = HexColor("#F8FAFC") if i % 2 == 0 else WHITE
c.setFillColor(bg_color)
c.rect(x + pad, ry - row_h + 1*mm, CARD_W - 2*pad, row_h - 1*mm, fill=1, stroke=0)
# label
c.setFillColor(card["header_bg"])
c.setFont("Helvetica-Bold", 6.5)
c.drawString(x + pad + 1*mm, ry - 4*mm, label)
# value
c.setFillColor(DARK)
c.setFont("Helvetica", 6.5)
# right side
vx = x + pad + 26*mm
c.drawString(vx, ry - 4*mm, value)
# footer
if "footer" in card:
fc = card.get("footer_bg", LTEAL)
ftc = card.get("footer_fg", DARK)
c.setFillColor(fc)
c.rect(x, y, CARD_W, 11*mm, fill=1, stroke=0)
c.setFillColor(ftc)
c.setFont("Helvetica-Oblique", 5.5)
lines = card["footer"].split("\n")
for i, l in enumerate(lines):
c.drawCentredString(x + CARD_W/2, y + 7.5*mm - i*3.5*mm, l)
def render_pair(c, x, y, card):
draw_card_base(c, x, y, CARD_W, CARD_H, CREAM, HexColor(card["header_bg"].hexval()))
draw_header(c, x, y, CARD_W, card["header"], card["header_bg"], card["header_fg"], card.get("tag"))
header_h = 11 * mm
body_top = y + CARD_H - header_h
half = (CARD_W - 2*mm) / 2
# Left panel
c.setFillColor(card["left_bg"])
c.rect(x + 1*mm, y + 11*mm, half, body_top - y - 11*mm - 1*mm, fill=1, stroke=0)
# Right panel
c.setFillColor(card["right_bg"])
c.rect(x + 1*mm + half, y + 11*mm, half, body_top - y - 11*mm - 1*mm, fill=1, stroke=0)
# Divider
c.setStrokeColor(GRAY)
c.setLineWidth(0.4)
c.line(x + CARD_W/2, y + 11*mm, x + CARD_W/2, body_top - 1*mm)
def draw_side(tx, title, sub, defn, eg, title_color):
c.setFillColor(title_color)
c.setFont("Helvetica-Bold", 8.5)
c.drawCentredString(tx + half/2, body_top - 5.5*mm, title)
if sub:
c.setFillColor(GRAY)
c.setFont("Helvetica-Oblique", 5.5)
c.drawCentredString(tx + half/2, body_top - 9*mm, sub)
# divider under title
c.setStrokeColor(title_color)
c.setLineWidth(0.6)
c.line(tx + 4*mm, body_top - 10.5*mm, tx + half - 4*mm, body_top - 10.5*mm)
c.setFillColor(DARK)
c.setFont("Helvetica-Bold", 6)
c.drawCentredString(tx + half/2, body_top - 14.5*mm, "Definition:")
c.setFillColor(DARK)
c.setFont("Helvetica", 6)
lines = defn.split("\n")
for i, l in enumerate(lines):
c.drawCentredString(tx + half/2, body_top - 18*mm - i*3.5*mm, l)
c.setFillColor(GOLD)
c.setFont("Helvetica-Bold", 5.5)
c.drawCentredString(tx + half/2, body_top - 28*mm, "e.g.")
c.setFillColor(HexColor("#92400E"))
c.setFont("Helvetica-Oblique", 5.5)
lines2 = eg.split("\n")
for i, l in enumerate(lines2):
c.drawCentredString(tx + half/2, body_top - 31.5*mm - i*3.2*mm, l)
draw_side(x + 1*mm, card["left_title"], card["left_sub"], card["left_def"], card["left_eg"], card["header_bg"])
draw_side(x + 1*mm + half, card["right_title"], card["right_sub"], card["right_def"], card["right_eg"], GRAY)
# Footer strip
c.setFillColor(HexColor("#F1F5F9"))
c.rect(x, y, CARD_W, 11*mm, fill=1, stroke=0)
c.setFillColor(GRAY)
c.setFont("Helvetica-Oblique", 5)
c.drawCentredString(x + CARD_W/2, y + 6.5*mm, "These terms describe relative position,")
c.drawCentredString(x + CARD_W/2, y + 3.5*mm, "always referenced to the anatomical position.")
def render_table(c, x, y, card):
draw_card_base(c, x, y, CARD_W, CARD_H, CREAM, card["header_bg"])
draw_header(c, x, y, CARD_W, card["header"], card["header_bg"], card["header_fg"], card.get("tag"))
header_h = 11 * mm
body_top = y + CARD_H - header_h - 1*mm
row_h = 6.2 * mm
pad = 3 * mm
col_mid = CARD_W / 2
# column headings
c.setFillColor(DARK)
c.setFont("Helvetica-Bold", 6.5)
c.drawCentredString(x + col_mid/2, body_top - 3*mm, "TERM A")
c.drawCentredString(x + col_mid + col_mid/2, body_top - 3*mm, "OPPOSITE")
c.setStrokeColor(GRAY)
c.setLineWidth(0.4)
c.line(x + pad, body_top - 4.5*mm, x + CARD_W - pad, body_top - 4.5*mm)
c.line(x + col_mid, body_top - 1*mm, x + col_mid, y + 11*mm)
for i, (a, b, clr) in enumerate(card["pairs"]):
ry = body_top - 5.5*mm - i * row_h
bg = HexColor("#F8FAFC") if i % 2 == 0 else WHITE
c.setFillColor(bg)
c.rect(x + pad, ry - row_h + 1.5*mm, CARD_W - 2*pad, row_h - 1*mm, fill=1, stroke=0)
# colored dot
c.setFillColor(clr)
c.circle(x + pad + 2.5*mm, ry - 2.2*mm, 2*mm, fill=1, stroke=0)
c.setFillColor(clr)
c.setFont("Helvetica-Bold", 7)
c.drawString(x + pad + 6*mm, ry - 3.5*mm, a)
c.setFillColor(DARK)
c.setFont("Helvetica", 7)
c.drawString(x + col_mid + 3*mm, ry - 3.5*mm, b)
# extra note
c.setFillColor(LGOLD)
c.rect(x, y, CARD_W, 11*mm, fill=1, stroke=0)
c.setFillColor(GOLD)
c.setFont("Helvetica-Bold", 6)
c.drawString(x + 3*mm, y + 7*mm, "Note:")
c.setFillColor(DARK)
c.setFont("Helvetica-Oblique", 6)
c.drawString(x + 12*mm, y + 7*mm, card["extra"])
def render_mnemonic(c, x, y, card):
draw_card_base(c, x, y, CARD_W, CARD_H, LGOLD, GOLD)
draw_header(c, x, y, CARD_W, card["header"], card["header_bg"], card["header_fg"], card.get("tag"))
header_h = 11 * mm
body_top = y + CARD_H - header_h - 1.5*mm
row_h = 6.5 * mm
pad = 3 * mm
for i, (term, tip) in enumerate(card["items"]):
ry = body_top - i * row_h
if ry < y + 5*mm:
break
c.setFillColor(GOLD)
c.setFont("Helvetica-Bold", 7)
c.drawString(x + pad, ry - 3*mm, term + ":")
c.setFillColor(DARK)
c.setFont("Helvetica-Oblique", 6.5)
c.drawString(x + pad + 22*mm, ry - 3*mm, tip)
# light divider
c.setStrokeColor(HexColor("#E5C55A"))
c.setLineWidth(0.3)
c.line(x + pad, ry - row_h + 1.5*mm, x + CARD_W - pad, ry - row_h + 1.5*mm)
# ── Main rendering loop ───────────────────────────────────────
c = canvas.Canvas(OUTPUT, pagesize=A4)
c.setTitle("Anatomical Nomenclature Flashcards")
c.setAuthor("Gray's Anatomy for Students / Orris")
c.setSubject("Quick Reference Laminated Flashcards")
CARDS_PER_ROW = COLS
CARDS_PER_PAGE = COLS * ROWS_PER_PAGE
total_pages = math.ceil(len(cards) / CARDS_PER_PAGE)
for pg in range(total_pages):
page_cards = cards[pg * CARDS_PER_PAGE : (pg + 1) * CARDS_PER_PAGE]
# Page header
c.setFillColor(NAVY)
c.rect(0, PAGE_H - 8*mm, PAGE_W, 8*mm, fill=1, stroke=0)
c.setFillColor(WHITE)
c.setFont("Helvetica-Bold", 7)
c.drawString(5*mm, PAGE_H - 5.5*mm, "ANATOMICAL NOMENCLATURE · Quick Reference Flashcards")
c.setFont("Helvetica", 6)
c.drawRightString(PAGE_W - 5*mm, PAGE_H - 5.5*mm, f"Page {pg+1} of {total_pages} · Gray's Anatomy for Students")
c.setFillColor(TEAL)
c.rect(0, PAGE_H - 9*mm, PAGE_W, 1*mm, fill=1, stroke=0)
# Instruction text (page 1 only)
if pg == 0:
c.setFillColor(GRAY)
c.setFont("Helvetica-Oblique", 6)
c.drawCentredString(PAGE_W/2, PAGE_H - 12*mm,
"Print, cut along dotted lines, laminate for durable quick-reference cards.")
for ci, card in enumerate(page_cards):
col = ci % COLS
row = ci // COLS
cx = MARGIN_X + col * (CARD_W + GAP_X)
# from top: below header + instruction
top_offset = 14 * mm if pg == 0 else 12 * mm
cy = PAGE_H - top_offset - CARD_H - row * (CARD_H + GAP_Y)
# Cut marks at all 4 corners of the card
for dx in [0, CARD_W]:
for dy in [0, CARD_H]:
cut_marks(c, cx + dx, cy + dy)
# Render the card
t = card.get("type", "term")
if t == "cover":
render_cover(c, cx, cy, card)
elif t == "term":
render_term(c, cx, cy, card)
elif t == "pair":
render_pair(c, cx, cy, card)
elif t == "table":
render_table(c, cx, cy, card)
elif t == "mnemonic":
render_mnemonic(c, cx, cy, card)
c.showPage()
c.save()
print(f"DONE: {OUTPUT}")
cd /home/daytona/workspace/anatomical-nomenclature-pptx && python make_flashcards.py 2>&1
Anatomical Nomenclature Flashcards
PDF Document · PDF
| Card | Content | Style |
|---|---|---|
| 1 | Cover - Title card | Dark navy with teal accents |
| 2 | Anatomical Position - 6-step checklist | Teal header |
| 3 | Body Planes - All 3 planes with meanings | Blue header |
| 4 | Anterior ↔ Posterior | Split left/right panel |
| 5 | Medial ↔ Lateral | Split left/right panel |
| 6 | Superior ↔ Inferior | Split left/right panel |
| 7 | Proximal ↔ Distal | Split left/right panel |
| 8 | Cranial ↔ Caudal | Split left/right panel |
| 9 | Rostral - Definition + etymology | Purple header |
| 10 | Superficial ↔ Deep | Split left/right panel |
| 11 | Wound Depth Classification | Red header, clinical use |
| 12 | All Terms Master Table | Navy with colored dots |
| 13 | Inclusive Terminology | Green header |
| 14 | Memory Aids & Mnemonics | Gold header |
Make an anatomical body diagram poster showing all term relationships
A detailed anatomical nomenclature educational poster showing a full human body in anatomical position (standing upright, palms forward, feet together) as a clean medical illustration. The body is shown from the front with clear anatomical labels and directional arrows indicating all major anatomical terms: - SUPERIOR arrow pointing upward toward the head - INFERIOR arrow pointing downward toward the feet - ANTERIOR label on the front side of the body - POSTERIOR label on the back (shown with a small side silhouette) - MEDIAL arrows pointing toward the body midline with a dashed vertical centerline - LATERAL arrows pointing away from the midline on both sides - PROXIMAL and DISTAL labels on the arm and leg with arrows showing the direction toward and away from the body - CRANIAL arrow near the head, CAUDAL arrow near the base of the spine - ROSTRAL label near the nose/brain area Three body plane diagrams shown alongside the figure: - CORONAL PLANE (green) - vertical plane dividing front and back - SAGITTAL PLANE (blue) - vertical plane dividing left and right, with MEDIAN SAGITTAL highlighted - TRANSVERSE/AXIAL PLANE (purple) - horizontal plane dividing top and bottom SUPERFICIAL vs DEEP shown as a cross-section inset diagram of a body wall layer, with skin and fascia labeled as superficial, muscles and organs labeled as deep. Color scheme: clean white background, navy blue title, teal and blue accents, color-coded arrows. Medical textbook style, highly detailed, professional anatomy poster design with clean sans-serif labels and a legend box in the corner. Title at top: ANATOMICAL NOMENCLATURE - Standard Terms of Position & Direction
