Create me poster on eye orbit to display in opthalmology class on eye orbit with these topics Vascular supply and clinical anatomy Arterial supply Venous drainage Lymphatic drainage

Reading File
Reading File
Finding Sources
Finding Sources
Searching Images

venous drainage of orbit superior ophthalmic vein cavernous sinus

**Imaging Modality:** Contrast-enhanced Computed Tomography (CT) of the head; axial section at the level of the skull base and orbits.

**Imaging Modality:** Contrast-enhanced Computed Tomography (CT) of the head; axial section at the level of the skull base and orbits.

**Imaging Modality:** Contrast-enhanced Computed Tomography (CT) of the head, axial section.

**Imaging Modality:** Contrast-enhanced Computed Tomography (CT) of the head, axial section.

**Imaging Modality:** Contrast-enhanced Computed Tomography (CT) of the head.

**Imaging Modality:** Contrast-enhanced Computed Tomography (CT) of the head.

**Imaging Modality:** Computed Tomography (CT) Angiogram, axial cross-section.

**Imaging Modality:** Computed Tomography (CT) Angiogram, axial cross-section.

This axial contrast-enhanced CT scan of the head focuses on the orbits and middle cranial fossa. The diagnostic image reveals significant vascular abnormalities secondary to intracranial venous hypertension. A prominent finding is the asymmetrical enlargement of the left cavernous sinus compared to the right. Associated with this is a markedly dilated and tortuous left superior ophthalmic vein (SOV), visible within the posterior aspect of the left orbit. The extraocular muscles on the left side appear relatively thicker than those on the right, suggesting congestive orbital changes. These features are characteristic of retrograde venous flow, often seen in cases of complex arteriovenous malformations (AVM) or dural arteriovenous fistulas where venous drainage is diverted through the cavernous sinus and ophthalmic system. The image serves as an educational example of the radiological signs of orbital venous congestion and cavernous sinus pathology.

This axial contrast-enhanced CT scan of the head focuses on the orbits and middle cranial fossa. The diagnostic image reveals significant vascular abnormalities secondary to intracranial venous hypertension. A prominent finding is the asymmetrical enlargement of the left cavernous sinus compared to the right. Associated with this is a markedly dilated and tortuous left superior ophthalmic vein (SOV), visible within the posterior aspect of the left orbit. The extraocular muscles on the left side appear relatively thicker than those on the right, suggesting congestive orbital changes. These features are characteristic of retrograde venous flow, often seen in cases of complex arteriovenous malformations (AVM) or dural arteriovenous fistulas where venous drainage is diverted through the cavernous sinus and ophthalmic system. The image serves as an educational example of the radiological signs of orbital venous congestion and cavernous sinus pathology.

This diagnostic image set consists of 3D time-of-flight (TOF) magnetic resonance (MR) angiography slices presented in a nine-panel grid, showing axial (1), coronal (2), and sagittal (3) views across three rows (A, B, C). The imaging demonstrates the venous drainage pathways of a sphenoid wing dural arteriovenous fistula (SW-DAVF). Row A utilizes yellow arrows to highlight a hyperintense superior ophthalmic vein (SOV), showing its anterior course within the superior orbit. Row B employs blue arrows to identify the inferior ophthalmic vein (IOV), coursing along the orbital floor from the cavernous sinus. Row C features red arrows marking the pterygoid plexus, appearing as a more diffuse, hyperintense vascular network at the skull base lateral to the cavernous sinus and posterior to the maxilla. These images serve as an educational comparison of intracranial-to-extracranial venous drainage patterns in cranial DAVFs, emphasizing the differential anatomy of the SOV, IOV, and pterygoid plexus as secondary efferent outlets.

This diagnostic image set consists of 3D time-of-flight (TOF) magnetic resonance (MR) angiography slices presented in a nine-panel grid, showing axial (1), coronal (2), and sagittal (3) views across three rows (A, B, C). The imaging demonstrates the venous drainage pathways of a sphenoid wing dural arteriovenous fistula (SW-DAVF). Row A utilizes yellow arrows to highlight a hyperintense superior ophthalmic vein (SOV), showing its anterior course within the superior orbit. Row B employs blue arrows to identify the inferior ophthalmic vein (IOV), coursing along the orbital floor from the cavernous sinus. Row C features red arrows marking the pterygoid plexus, appearing as a more diffuse, hyperintense vascular network at the skull base lateral to the cavernous sinus and posterior to the maxilla. These images serve as an educational comparison of intracranial-to-extracranial venous drainage patterns in cranial DAVFs, emphasizing the differential anatomy of the SOV, IOV, and pterygoid plexus as secondary efferent outlets.

Let me read the dedicated orbit vascular sections.
Reading File
Reading File
Finding Sources
Searching PubMed

orbit anatomy blood supply

Reading File
Reading File
Reading File
Finding Sources
Running Command

mkdir -p /tmp/workspace/orbit-poster/assets /tmp/workspace/orbit-poster/output && cd /tmp/workspace/orbit-poster/assets && curl -sL -o art.png https://cdn.orris.care/cdss_images/168b856a061f6ae4b3ccce920e875e94de0a657a624e5c9e997d5792375b132c.png && curl -sL -o ven.png https://cdn.orris.care/cdss_images/0d5447114623271d37902bed3799a4afcb2e89e381b7642c8129fecc7353e9b6.png && curl -sL -o lid.png https://cdn.orris.care/cdss_images/7f6185e4c206cd0cc95e48b6d42ff51a4842f4547ba6366c2be05be257226411.png && curl -sL -o cta.jpg https://cdn.orris.care/cdss_images/pmc_clinical_VQA_00c687e2d0d8b468960ad72752ce19cac248f12fae8c5cfddb556856717b5956.jpg && python3 -c " from PIL import Image import glob for f in glob.glob('*'): print(f, Image.open(f).size)"

Loading Image
Loading Image
Running Command

cd /tmp/workspace/orbit-poster && python3 -c " import matplotlib,os;p=os.path.join(matplotlib.get_data_path(),'fonts/ttf');print(p);print([f for f in os.listdir(p) if f.startswith('DejaVuSans')])"; python3 -c "import pypdfium2" 2>&1; python3 -c "import fitz" 2>&1 | tail -1; which pdftoppm

Writing File

~/orbit-poster/src/make_poster.py

import os
import matplotlib
from reportlab.pdfgen import canvas
from reportlab.lib.colors import HexColor, white
from reportlab.lib.styles import ParagraphStyle
from reportlab.platypus import Paragraph
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.lib.utils import ImageReader

FD = os.path.join(matplotlib.get_data_path(), 'fonts/ttf')
pdfmetrics.registerFont(TTFont('DV', os.path.join(FD, 'DejaVuSans.ttf')))
pdfmetrics.registerFont(TTFont('DVB', os.path.join(FD, 'DejaVuSans-Bold.ttf')))
pdfmetrics.registerFont(TTFont('DVI', os.path.join(FD, 'DejaVuSans-Oblique.ttf')))
pdfmetrics.registerFontFamily('DV', normal='DV', bold='DVB', italic='DVI', boldItalic='DVB')

A = '/tmp/workspace/orbit-poster/assets/'
OUT = '/tmp/workspace/orbit-poster/output/Orbit_Vascular_Supply_Poster.pdf'

W, H = 1684, 1191  # A2 landscape in points
M = 28
NAVY = HexColor('#12284a')
RED = HexColor('#b3262e')
BLUE = HexColor('#1f5fa8')
GREEN = HexColor('#2d7a5a')
AMBER = HexColor('#b8741a')
LIGHT = HexColor('#f4f6fa')
GREY = HexColor('#44505f')

c = canvas.Canvas(OUT, pagesize=(W, H))
c.setTitle('Vascular Supply and Clinical Anatomy of the Orbit')

def st(size=15, color=GREY, bold=False, lead=None, align=0):
    return ParagraphStyle('x', fontName='DVB' if bold else 'DV', fontSize=size,
                          leading=lead or size * 1.32, textColor=color, alignment=align)

def para(text, x, ytop, w, style):
    p = Paragraph(text, style)
    pw, ph = p.wrap(w, 10000)
    p.drawOn(c, x, ytop - ph)
    return ph

def pheight(text, w, style):
    p = Paragraph(text, style)
    return p.wrap(w, 10000)[1]

def section_bar(x, ytop, w, text, color, sub=None):
    h = 54
    c.setFillColor(color)
    c.roundRect(x, ytop - h, w, h, 8, fill=1, stroke=0)
    c.setFillColor(white)
    c.setFont('DVB', 27)
    c.drawString(x + 18, ytop - 37, text)
    if sub:
        c.setFont('DV', 15)
        c.drawRightString(x + w - 18, ytop - 35, sub)
    return ytop - h - 14

def image(path, x, ytop, w):
    ir = ImageReader(path)
    iw, ih = ir.getSize()
    h = w * ih / iw
    c.drawImage(ir, x, ytop - h, w, h, mask='auto')
    return h

def caption(text, x, ytop, w):
    return para(text, x, ytop, w, st(12, GREY, lead=15, align=0).clone('cap', fontName='DVI'))

def table(rows, x, ytop, w, c1w, color, size=14):
    y = ytop
    s1 = st(size, color, True, size * 1.3)
    s2 = st(size, GREY, False, size * 1.3)
    for i, (a, b) in enumerate(rows):
        h = max(pheight(a, c1w - 14, s1), pheight(b, w - c1w - 14, s2)) + 14
        c.setFillColor(LIGHT if i % 2 == 0 else white)
        c.rect(x, y - h, w, h, fill=1, stroke=0)
        para(a, x + 8, y - 7, c1w - 14, s1)
        para(b, x + c1w + 4, y - 7, w - c1w - 14, s2)
        y -= h
    c.setStrokeColor(color)
    c.setLineWidth(1.2)
    c.line(x, y, x + w, y)
    return ytop - y

def bullets(items, x, ytop, w, size=15, color=GREY, gap=6, bcolor=NAVY):
    y = ytop
    s = st(size, color, False, size * 1.32)
    for t in items:
        h = pheight(t, w - 20, s)
        c.setFillColor(bcolor)
        c.circle(x + 6, y - size * 0.7, 3, fill=1, stroke=0)
        para(t, x + 20, y, w - 20, s)
        y -= h + gap
    return ytop - y

# ---------------- background and header ----------------
c.setFillColor(white)
c.rect(0, 0, W, H, fill=1, stroke=0)
c.setFillColor(NAVY)
c.rect(0, H - 140, W, 140, fill=1, stroke=0)
c.setFillColor(RED)
c.rect(0, H - 148, W, 8, fill=1, stroke=0)
c.setFillColor(white)
c.setFont('DVB', 50)
c.drawString(M + 10, H - 70, 'THE ORBIT: VASCULAR SUPPLY & CLINICAL ANATOMY')
c.setFont('DV', 21)
c.setFillColor(HexColor('#cfd9ea'))
c.drawString(M + 12, H - 108, 'Arterial supply   |   Venous drainage   |   Lymphatic drainage   |   Clinical correlations')
c.setFont('DV', 15)
c.drawRightString(W - M - 10, H - 108, 'Ophthalmology teaching poster')

top = H - 148 - 22
gap = 24
cw = (W - 2 * M - 2 * gap) / 3
x1 = M
x2 = M + cw + gap
x3 = M + 2 * (cw + gap)

# ---------------- COLUMN 1: ARTERIAL ----------------
y = section_bar(x1, top, cw, '1. Arterial supply', RED, 'All from the ophthalmic artery')
figw = 255
fh = image(A + 'art.png', x1, y, figw)
caption('Fig. 1. Arterial supply to the orbit and eyeball, superior view. Gray\'s Anatomy for Students, Fig. 8.102.', x1, y - fh - 4, figw)
tx = x1 + figw + 18
tw = cw - figw - 18
para('Course of the ophthalmic artery', tx, y, tw, st(17, RED, True))
yy = y - 28
bullets([
    'First major branch of the <b>internal carotid artery</b>, arising just after it leaves the cavernous sinus (anterior clinoid level).',
    'Enters the orbit through the <b>optic canal</b>, inferolateral to the optic nerve.',
    'Crosses <b>over</b> the optic nerve (superior to it) and runs forward along the <b>medial wall</b>.',
    'Ends as the <b>dorsal nasal</b> and <b>supratrochlear</b> arteries.',
], tx, yy, tw, size=14, bcolor=RED)
y = y - fh - 62
rows = [
    ('Central retinal a.', 'Pierces the optic nerve and runs in its centre to the retina. <b>End artery</b>; seen on ophthalmoscopy.'),
    ('Lacrimal a.', 'Along the lateral orbit: lacrimal gland, muscles, anterior ciliary branch, lateral eyelid.'),
    ('Long and short posterior ciliary aa.', 'Pierce the sclera posteriorly and supply structures inside the eyeball (uvea).'),
    ('Muscular aa.', 'Supply the extraocular muscles.'),
    ('Supra-orbital a.', 'Leaves via the supra-orbital foramen with the nerve: forehead and scalp.'),
    ('Posterior ethmoidal a.', 'Exits by the posterior ethmoidal foramen: ethmoid cells, nasal cavity.'),
    ('Anterior ethmoidal a.', 'Exits by the anterior ethmoidal foramen, gives the anterior meningeal branch, ends as nasal branches (septum and lateral wall).'),
    ('Medial palpebral aa.', 'Medial parts of the upper and lower eyelids.'),
    ('Dorsal nasal a. (terminal)', 'Leaves the orbit to supply the upper surface of the nose.'),
    ('Supratrochlear a. (terminal)', 'Leaves with the supratrochlear nerve: forehead.'),
]
para('Branches within the orbit', x1, y, cw, st(19, RED, True))
y -= 30
used = table(rows, x1, y, cw, 175, RED, size=13.5)
y -= used + 14
# anastomosis box
bh = 112
c.setFillColor(HexColor('#fbeeee'))
c.setStrokeColor(RED)
c.roundRect(x1, y - bh, cw, bh, 8, fill=1, stroke=1)
para('<b>Internal-external carotid link.</b> The eyelids also receive the <b>angular artery</b> (facial) and the '
     '<b>transverse facial</b> and other <b>superficial temporal</b> branches. Orbital branches such as the supratrochlear, '
     'supra-orbital and dorsal nasal arteries therefore anastomose with the external carotid system on the face and scalp.',
     x1 + 12, y - 9, cw - 24, st(13.5, GREY, lead=18))
y -= bh + 12
# CTA image
ih = image(A + 'cta.jpg', x1, y, 330)
caption('Fig. 2. CT angiography of the left orbit: ophthalmic artery crossing the optic nerve, with central retinal, lacrimal and supra-orbital branches.', x1 + 345, y - 6, cw - 345)

# ---------------- COLUMN 2: VENOUS + LYMPHATIC ----------------
y = section_bar(x2, top, cw, '2. Venous drainage', BLUE, 'Two ophthalmic veins')
figw = 290
fh = image(A + 'ven.png', x2, y, figw)
caption('Fig. 3. Venous drainage of the orbit and eyeball. Gray\'s Anatomy for Students, Fig. 8.103.', x2, y - fh - 4, figw)
tx = x2 + figw + 16
tw = cw - figw - 16
yy = y
para('Superior ophthalmic vein (SOV)', tx, yy, tw, st(16, BLUE, True))
yy -= 24
used = bullets([
    'Forms anteriorly from the <b>supra-orbital</b> and <b>angular</b> veins.',
    'Crosses the upper orbit, receiving tributaries from the veins accompanying ophthalmic artery branches and from the posterior eyeball.',
    'Leaves through the <b>superior orbital fissure</b> into the <b>cavernous sinus</b>.',
], tx, yy, tw, size=13.5, bcolor=BLUE, gap=4)
yy -= used + 8
para('Inferior ophthalmic vein (IOV)', tx, yy, tw, st(16, BLUE, True))
yy -= 24
bullets([
    'Smaller; begins anteriorly and crosses the orbital floor, taking muscle and posterior eyeball tributaries.',
    'Exit options: <b>(a)</b> joins the SOV, <b>(b)</b> passes through the superior orbital fissure to the cavernous sinus, or <b>(c)</b> passes through the <b>inferior orbital fissure</b> to the <b>pterygoid plexus</b>.',
], tx, yy, tw, size=13.5, bcolor=BLUE, gap=4)
y = y - fh - 52
# flow diagram
para('Drainage pathways', x2, y, cw, st(19, BLUE, True))
y -= 32
bw, bh2 = 138, 50
def box(x, yb, txt, col):
    c.setFillColor(col)
    c.roundRect(x, yb, bw, bh2, 7, fill=1, stroke=0)
    c.setFillColor(white)
    c.setFont('DVB', 12.5)
    lines = txt.split('\n')
    for i, ln in enumerate(lines):
        c.drawCentredString(x + bw / 2, yb + bh2 / 2 + (len(lines) - 1) * 7 - i * 15 - 4, ln)
def arrow(x0, y0, x1_, y1_):
    c.setStrokeColor(GREY)
    c.setLineWidth(2)
    c.line(x0, y0, x1_, y1_)
    import math
    a = math.atan2(y1_ - y0, x1_ - x0)
    for d in (2.6, -2.6):
        c.line(x1_, y1_, x1_ - 10 * math.cos(a + d * 0.12), y1_ - 10 * math.sin(a + d * 0.12))
r1 = y - bh2
box(x2, r1, 'Angular v.\nSupra-orbital v.', HexColor('#5b86b8'))
box(x2 + 182, r1, 'Superior\nophthalmic v.', BLUE)
box(x2 + 364, r1, 'Cavernous\nsinus', NAVY)
arrow(x2 + bw + 2, r1 + bh2 / 2, x2 + 180, r1 + bh2 / 2)
arrow(x2 + 182 + bw + 2, r1 + bh2 / 2, x2 + 362, r1 + bh2 / 2)
r2 = r1 - 70
box(x2 + 182, r2, 'Inferior\nophthalmic v.', HexColor('#3f7cbf'))
box(x2 + 364, r2 + 0, 'Pterygoid\nplexus', HexColor('#5b86b8'))
arrow(x2 + 182 + bw / 2, r2 + bh2 + 2, x2 + 182 + bw / 2, r1 - 2)
arrow(x2 + 182 + bw + 2, r2 + bh2 / 2, x2 + 362, r2 + bh2 / 2)
c.setFont('DVI', 11.5)
c.setFillColor(GREY)
c.drawString(x2, r2 + 30, 'Also: central retinal vein')
c.drawString(x2, r2 + 14, 'drains to the cavernous sinus')
c.drawString(x2 + 182, r2 - 14, 'or joins SOV / enters cavernous sinus')
y = r2 - 36
bh = 78
c.setFillColor(HexColor('#e8f0fa'))
c.setStrokeColor(BLUE)
c.roundRect(x2, y - bh, cw, bh, 8, fill=1, stroke=1)
para('<b>Key point.</b> Because the ophthalmic veins communicate with the cavernous sinus, they act as a route by which infection '
     'can spread from the face and orbit into the cranial cavity (Gray\'s Anatomy for Students).',
     x2 + 12, y - 9, cw - 24, st(14, GREY, lead=18.5))
y -= bh + 22

# lymphatics
y = section_bar(x2, y, cw, '3. Lymphatic drainage', GREEN, 'Via eyelids and face')
figw = 215
fh = image(A + 'lid.png', x2 + cw - figw, y, figw)
caption('Fig. 4. Vasculature of the eyelids. Gray\'s Anatomy for Students, Fig. 8.84.', x2 + cw - figw, y - fh - 4, figw)
lw = cw - figw - 16
para('Where lymph from the orbital region goes', x2, y, lw, st(16, GREEN, True))
yy = y - 26
bullets([
    '<b>Most of the eyelids</b> (and the lateral conjunctiva): to the <b>pre-auricular and parotid nodes</b>.',
    '<b>Medial corner of the eye</b>, following the angular and facial vessels: to the <b>submandibular nodes</b>.',
    'Deep drainage from both groups continues to the <b>deep cervical nodes</b>.',
    'Teaching point: the orbit proper contains no classical lymph nodes. Orbital swelling is mainly a venous and soft tissue problem (see clinical box).',
], x2, yy, lw, size=13.5, bcolor=GREEN, gap=5)
ybot_l = y - fh - 50
# lymph table
rows = [
    ('Lateral eyelids, lateral conjunctiva', 'Pre-auricular and parotid nodes'),
    ('Medial canthus, medial eyelids', 'Submandibular nodes'),
    ('Next station (both)', 'Upper deep cervical nodes'),
]
table(rows, x2, ybot_l, cw, 235, GREEN, size=13.5)

# ---------------- COLUMN 3: CLINICAL ----------------
y = section_bar(x3, top, cw, '4. Clinical anatomy', AMBER, 'Why it matters')
cards = [
    ('Central retinal artery occlusion', RED,
     'The central retinal artery is an end artery inside the optic nerve. Occlusion of it, or of the ophthalmic artery, causes <b>sudden monocular blindness</b>. '
     'Retrobulbar haemorrhage can compress the ophthalmic artery and threaten vision (orbital compartment syndrome).'),
    ('Filler embolism', RED,
     'Branches of the ophthalmic artery (supratrochlear, supra-orbital, dorsal nasal) connect to the central retinal artery. '
     'Cosmetic filler injected in the glabella, forehead or nose can pass retrograde into the orbit and cause <b>blindness</b>.'),
    ('Cavernous sinus thrombosis', BLUE,
     'Facial infection can travel along the <b>angular vein, SOV</b> and to the cavernous sinus (also via the deep facial vein and pterygoid plexus). '
     'Signs: <b>chemosis, periorbital oedema, proptosis, progressive ophthalmoplegia</b>, visual impairment, headache, trigeminal paraesthesia. '
     'Orbital infection and sinusitis can cause septic thrombophlebitis of the SOV.'),
    ('Carotid-cavernous fistula / venous hypertension', BLUE,
     'Arterialised flow into the cavernous sinus gives a <b>dilated, tortuous SOV</b> on CT, enlarged cavernous sinus, thickened extraocular muscles '
     'and <b>dilated episcleral vessels</b>.'),
    ('Papilloedema', AMBER,
     'The optic nerve sheath is continuous with the subarachnoid space. Raised intracranial pressure impedes retinal venous return and causes <b>optic disc oedema</b>.'),
    ('Chemosis', GREEN,
     'Raised retro-orbital pressure obstructs venous and lymphatic drainage of the conjunctiva, producing a thickened, oedematous, crinkled conjunctiva.'),
    ('Horner syndrome (third-order neuron)', AMBER,
     'Sympathetic fibres travel with the internal carotid and enter the orbit with its branches. Carotid dissection or aneurysm, cavernous sinus or skull base lesions and orbital herpes zoster can interrupt them.'),
]
for title, col, body in cards:
    s = st(13.8, GREY, lead=18)
    h = pheight(body, cw - 36, s) + 44
    c.setFillColor(HexColor('#fafafa'))
    c.setStrokeColor(col)
    c.setLineWidth(1.5)
    c.roundRect(x3, y - h, cw, h, 8, fill=1, stroke=1)
    c.setFillColor(col)
    c.roundRect(x3, y - h, 8, h, 4, fill=1, stroke=0)
    c.setFont('DVB', 16)
    c.drawString(x3 + 20, y - 26, title)
    para(body, x3 + 20, y - 36, cw - 36, s)
    y -= h + 12

# key takeaway
bh = max(y - (M + 62), 100)
c.setFillColor(NAVY)
c.roundRect(x3, y - bh + 0, cw, bh, 8, fill=1, stroke=0)
c.setFillColor(white)
c.setFont('DVB', 17)
c.drawString(x3 + 18, y - 28, 'Remember')
para('Arteries: <b>ophthalmic artery</b> (ICA) via the optic canal.<br/>'
     'Veins: <b>SOV and IOV</b> to the cavernous sinus, no barrier to infection.<br/>'
     'Lymph: eyelids to <b>parotid</b> and <b>submandibular</b> nodes.',
     x3 + 18, y - 40, cw - 36, st(14.5, white, lead=21))

# footer
c.setFillColor(GREY)
c.setFont('DV', 11.5)
c.drawString(M, M + 4, 'Sources: Gray\'s Anatomy for Students (Orbit; Face; Lymphatic drainage); Grainger & Allison\'s Diagnostic Radiology; Scott-Brown\'s Otorhinolaryngology; '
             'Wills Eye Manual; Roberts and Hedges\' Clinical Procedures; Dermatology 5e (vascular anatomy).')
c.drawString(M, M - 10, 'Figures 1, 3 and 4 reproduced from Gray\'s Anatomy for Students for educational display. Figure 2: CT angiography of the left orbit (open-access case image).')
c.showPage()
c.save()
print('ok')
Running Command

cd /tmp/workspace/orbit-poster && python3 src/make_poster.py && pdftoppm -png -r 60 output/Orbit_Vascular_Supply_Poster.pdf output/preview && ls output

Reading File
Running Command

cd /tmp/workspace/orbit-poster/output && pdftoppm -jpeg -jpegopt quality=70 -r 55 Orbit_Vascular_Supply_Poster.pdf prev && ls -la

Reading File
Running Command

cd /tmp/workspace/orbit-poster/assets && curl -sL -o sov.jpg https://cdn.orris.care/cdss_images/pmc_clinical_VQA_2637c86ad52637d044d10332c716e777ce28945d6956d9de1fec77ed1fa23f01.jpg && python3 -c " from PIL import Image print(Image.open('sov.jpg').size)"

Running Command

cd /tmp/workspace/orbit-poster && python3 - <<'EOF' import re s = open('src/make_poster.py').read() # page size and columns s = s.replace("W, H = 1684, 1191 # A2 landscape in points", "W, H = 2384, 1684 # A1 landscape in points") s = s.replace("cw = (W - 2 * M - 2 * gap) / 3", "cw = (W - 2 * M - 3 * gap) / 4") s = s.replace("x3 = M + 2 * (cw + gap)", "x3 = M + 2 * (cw + gap)\nx4 = M + 3 * (cw + gap)") # section bar: taller, subtitle below s = s.replace(""" h = 54 c.setFillColor(color) c.roundRect(x, ytop - h, w, h, 8, fill=1, stroke=0) c.setFillColor(white) c.setFont('DVB', 27) c.drawString(x + 18, ytop - 37, text) if sub: c.setFont('DV', 15) c.drawRightString(x + w - 18, ytop - 35, sub)""", """ h = 74 c.setFillColor(color) c.roundRect(x, ytop - h, w, h, 8, fill=1, stroke=0) c.setFillColor(white) c.setFont('DVB', 28) c.drawString(x + 18, ytop - 36, text) if sub: c.setFont('DV', 15) c.drawString(x + 18, ytop - 60, sub)""") # header s = s.replace("c.setFont('DVB', 50)", "c.setFont('DVB', 56)") open('src/make_poster.py','w').write(s) EOF grep -n "COLUMN 1" src/make_poster.py

Running Command

cd /tmp/workspace/orbit-poster && head -n 119 src/make_poster.py > src/p2.py && cat >> src/p2.py <<'EOF' import math LIM = M + 52 # content must stay above this def h_head(text, x, y, w, col, size=16): s = st(size, col, True) h = para(text, x, y, w, s) return h + 6 # ================= COLUMN 1: ARTERIAL ================= y = section_bar(x1, top, cw, '1. Arterial supply', RED, 'All branches arise from the ophthalmic artery') figw = 270 fh = image(A + 'art.png', x1, y, figw) caption('Fig. 1. Arterial supply to the orbit and eyeball (superior view). Gray\'s Anatomy for Students, Fig. 8.102.', x1, y - fh - 4, figw) tx = x1 + figw + 18 tw = cw - figw - 18 yy = y - h_head('Course of the ophthalmic artery', tx, y, tw, RED) bullets([ 'First major branch of the <b>internal carotid artery</b>, arising just after it leaves the cavernous sinus.', 'Enters the orbit through the <b>optic canal</b>, inferolateral to the optic nerve.', 'Crosses <b>over</b> the optic nerve and runs forward along the <b>medial wall</b>.', 'Ends as the <b>dorsal nasal</b> and <b>supratrochlear</b> arteries.', ], tx, yy, tw, size=14, bcolor=RED) y = y - fh - 66 rows = [ ('Central retinal a.', 'Pierces the optic nerve and runs in its centre to the retina. <b>End artery</b>; seen on ophthalmoscopy.'), ('Lacrimal a.', 'Along the lateral orbit: lacrimal gland, muscles, anterior ciliary branch, lateral eyelid.'), ('Long and short posterior ciliary aa.', 'Pierce the sclera posteriorly and supply structures inside the eyeball.'), ('Muscular aa.', 'Supply the extraocular muscles.'), ('Supra-orbital a.', 'Leaves via the supra-orbital foramen with the nerve: forehead and scalp.'), ('Posterior ethmoidal a.', 'Exits by the posterior ethmoidal foramen: ethmoid cells, nasal cavity.'), ('Anterior ethmoidal a.', 'Exits by the anterior ethmoidal foramen, gives the anterior meningeal branch, ends in the septum and lateral nasal wall.'), ('Medial palpebral aa.', 'Medial parts of the upper and lower eyelids.'), ('Dorsal nasal a. (terminal)', 'Leaves the orbit to supply the upper surface of the nose.'), ('Supratrochlear a. (terminal)', 'Leaves with the supratrochlear nerve: forehead.'), ] y -= para('Branches within the orbit', x1, y, cw, st(19, RED, True)) + 8 used = table(rows, x1, y, cw, 190, RED, size=14) y -= used + 16 bh = 125 c.setFillColor(HexColor('#fbeeee')) c.setStrokeColor(RED) c.roundRect(x1, y - bh, cw, bh, 8, fill=1, stroke=1) para('<b>Internal-external carotid link.</b> The eyelids also receive the <b>angular artery</b> (facial) and the ' '<b>transverse facial</b> and other <b>superficial temporal</b> branches. The supratrochlear, ' 'supra-orbital and dorsal nasal arteries therefore anastomose with the external carotid system on the face and scalp.', x1 + 12, y - 10, cw - 24, st(14, GREY, lead=19)) print('col1 bottom', y - bh, 'limit', LIM) # ================= COLUMN 2: VENOUS ================= y = section_bar(x2, top, cw, '2. Venous drainage', BLUE, 'Superior and inferior ophthalmic veins') figw = 400 fh = image(A + 'ven.png', x2, y, figw) caption('Fig. 2. Venous drainage of the orbit and eyeball. Gray\'s Anatomy for Students, Fig. 8.103.', x2, y - fh - 4, figw) # short side note beside the figure sx = x2 + figw + 14 sw = cw - figw - 14 para('<b>Valveless</b> veins link the face, orbit and cavernous sinus.', sx, y - 10, sw, st(13, BLUE, True, lead=18)) y = y - fh - 52 colw = (cw - 16) / 2 yA = y - h_head('Superior ophthalmic vein', x2, y, colw, BLUE, 15) usedA = bullets([ 'Forms anteriorly from the <b>supra-orbital</b> and <b>angular</b> veins.', 'Crosses the upper orbit, taking tributaries from veins that accompany ophthalmic artery branches and from the posterior eyeball.', 'Leaves through the <b>superior orbital fissure</b> into the <b>cavernous sinus</b>.', ], x2, yA, colw, size=13, bcolor=BLUE, gap=4) xB = x2 + colw + 16 yB = y - h_head('Inferior ophthalmic vein', xB, y, colw, BLUE, 15) usedB = bullets([ 'Smaller; begins anteriorly and crosses the orbital floor, taking muscle and posterior eyeball tributaries.', 'Exits by <b>(a)</b> joining the SOV, <b>(b)</b> the superior orbital fissure to the cavernous sinus, or <b>(c)</b> the <b>inferior orbital fissure</b> to the <b>pterygoid plexus</b>.', ], xB, yB, colw, size=13, bcolor=BLUE, gap=4) y = min(yA - usedA, yB - usedB) - 14 y -= para('Drainage pathways', x2, y, cw, st(19, BLUE, True)) + 10 bw, bh2 = 150, 50 def box(x, yb, txt, col): c.setFillColor(col) c.roundRect(x, yb, bw, bh2, 7, fill=1, stroke=0) c.setFillColor(white) c.setFont('DVB', 12.5) lines = txt.split('\n') for i, ln in enumerate(lines): c.drawCentredString(x + bw / 2, yb + bh2 / 2 + (len(lines) - 1) * 7 - i * 15 - 4, ln) def arrow(x0, y0, x1_, y1_): c.setStrokeColor(GREY); c.setFillColor(GREY); c.setLineWidth(2) c.line(x0, y0, x1_, y1_) a = math.atan2(y1_ - y0, x1_ - x0) p = c.beginPath() p.moveTo(x1_, y1_) p.lineTo(x1_ - 11 * math.cos(a - 0.4), y1_ - 11 * math.sin(a - 0.4)) p.lineTo(x1_ - 11 * math.cos(a + 0.4), y1_ - 11 * math.sin(a + 0.4)) p.close(); c.drawPath(p, fill=1, stroke=0) gx = [x2, x2 + 207, x2 + 414] r1 = y - bh2 box(gx[0], r1, 'Angular v.\nSupra-orbital v.', HexColor('#5b86b8')) box(gx[1], r1, 'Superior\nophthalmic v.', BLUE) box(gx[2], r1, 'Cavernous\nsinus', NAVY) arrow(gx[0] + bw + 3, r1 + bh2 / 2, gx[1] - 3, r1 + bh2 / 2) arrow(gx[1] + bw + 3, r1 + bh2 / 2, gx[2] - 3, r1 + bh2 / 2) r2 = r1 - 78 box(gx[1], r2, 'Inferior\nophthalmic v.', HexColor('#3f7cbf')) box(gx[2], r2, 'Pterygoid\nplexus', HexColor('#5b86b8')) arrow(gx[1] + bw / 2, r2 + bh2 + 3, gx[1] + bw / 2, r1 - 3) arrow(gx[1] + bw + 3, r2 + bh2 / 2, gx[2] - 3, r2 + bh2 / 2) c.setFont('DVI', 12); c.setFillColor(GREY) c.drawString(gx[0], r2 + 34, 'Inferior ophthalmic v. may also') c.drawString(gx[0], r2 + 18, 'enter the cavernous sinus directly') y = r2 - 22 bh = 92 c.setFillColor(HexColor('#e8f0fa')); c.setStrokeColor(BLUE) c.roundRect(x2, y - bh, cw, bh, 8, fill=1, stroke=1) para('<b>Key point.</b> Because the ophthalmic veins communicate with the cavernous sinus, they act as a route by which infection ' 'can spread from outside to inside the cranial cavity (Gray\'s Anatomy for Students).', x2 + 12, y - 10, cw - 24, st(14, GREY, lead=19)) y -= bh + 16 iw = 330 ih = image(A + 'sov.jpg', x2, y, iw) caption('Fig. 3. Axial contrast CT: dilated, tortuous left superior ophthalmic vein and enlarged left cavernous sinus with thickened extraocular muscles (venous hypertension / dural AV fistula).', x2 + iw + 14, y - 4, cw - iw - 14) print('col2 bottom', y - ih, 'limit', LIM) # ================= COLUMN 3: LYMPHATIC + IMAGING + REMEMBER ================= y = section_bar(x3, top, cw, '3. Lymphatic drainage', GREEN, 'Via the eyelids and face') figw = 235 fh = image(A + 'lid.png', x3 + cw - figw, y, figw) caption('Fig. 4. Vasculature of the eyelids. Gray\'s Anatomy for Students, Fig. 8.84.', x3 + cw - figw, y - fh - 4, figw) lw = cw - figw - 16 yy = y - h_head('Where lymph from the orbital region goes', x3, y, lw, GREEN, 15) used = bullets([ '<b>Most of the eyelids</b> drain to the <b>pre-auricular and parotid nodes</b>.', 'The <b>medial corner of the eye</b>, along the angular and facial vessels, drains to the <b>submandibular nodes</b>.', 'Both groups continue to the <b>deep cervical nodes</b>.', 'Teaching point: the orbit proper has no classical lymph nodes; drainage is through the eyelids and conjunctiva.', ], x3, yy, lw, size=13.5, bcolor=GREEN, gap=5) y = min(yy - used, y - fh - 54) - 10 rows = [ ('Lateral eyelids, lateral conjunctiva', 'Pre-auricular and parotid nodes'), ('Medial canthus, medial eyelids', 'Submandibular nodes'), ('Next station (both)', 'Upper deep cervical nodes'), ] used = table(rows, x3, y, cw, 250, GREEN, size=13.5) y -= used + 34 y = section_bar(x3, y, cw, 'Imaging correlate', NAVY, 'The ophthalmic artery on CT angiography') ih = image(A + 'cta.jpg', x3, y, cw) y -= ih + 4 y -= caption('Fig. 5. CTA of the left orbit: ophthalmic artery entering the orbit and crossing the optic nerve from temporal to nasal side. ' 'Central retinal artery (B); lacrimal and supra-orbital arteries (C); posterior ciliary arteries (F).', x3, y, cw) + 24 bh = 150 c.setFillColor(NAVY) c.roundRect(x3, y - bh, cw, bh, 8, fill=1, stroke=0) c.setFillColor(white); c.setFont('DVB', 18) c.drawString(x3 + 18, y - 30, 'Remember') para('<b>Arteries:</b> ophthalmic artery (from the ICA) via the optic canal.<br/>' '<b>Veins:</b> SOV and IOV to the cavernous sinus, with a route for infection.<br/>' '<b>Lymph:</b> eyelids to parotid and submandibular nodes.', x3 + 18, y - 44, cw - 36, st(14.5, white, lead=22)) print('col3 bottom', y - bh, 'limit', LIM) # ================= COLUMN 4: CLINICAL ================= y = section_bar(x4, top, cw, '4. Clinical anatomy', AMBER, 'Why the vascular anatomy matters') cards = [ ('Central retinal artery occlusion', RED, 'The central retinal artery is an end artery inside the optic nerve. Occlusion of it, or of the ophthalmic artery, causes <b>sudden monocular blindness</b>. ' 'Retrobulbar haemorrhage can compress the ophthalmic artery and threaten vision.'), ('Filler embolism', RED, 'Ophthalmic artery branches (supratrochlear, supra-orbital, dorsal nasal) connect with the central retinal artery. ' 'Cosmetic filler injected in the glabella, forehead or nose can pass retrograde into the orbit and cause <b>blindness</b>.'), ('Cavernous sinus thrombosis', BLUE, 'Facial infection can travel along the <b>angular vein and SOV</b> to the cavernous sinus (also via the deep facial vein and pterygoid plexus). ' 'Signs: <b>chemosis, periorbital oedema, proptosis, progressive ophthalmoplegia</b>, visual impairment, headache and trigeminal paraesthesia. ' 'Orbital infection and sinusitis can cause septic thrombophlebitis of the SOV.'), ('Carotid-cavernous fistula', BLUE, 'Arterialised flow into the cavernous sinus gives a <b>dilated, tortuous SOV</b>, an enlarged cavernous sinus, thickened extraocular muscles ' 'and <b>dilated episcleral vessels</b>.'), ('Papilloedema', AMBER, 'The optic nerve sheath is continuous with the subarachnoid space. Raised intracranial pressure impedes retinal venous return and causes <b>optic disc oedema</b>.'), ('Chemosis', GREEN, 'Raised retro-orbital pressure obstructs venous and lymphatic drainage of the conjunctiva, giving an oedematous, thickened, crinkled conjunctiva.'), ('Horner syndrome (third-order neuron)', AMBER, 'Carotid dissection or aneurysm, cavernous sinus or skull base lesions and orbital herpes zoster can interrupt the sympathetic supply as it travels with the internal carotid system.'), ] for title, col, body in cards: s = st(14, GREY, lead=18.5) h = pheight(body, cw - 36, s) + 46 c.setFillColor(HexColor('#fafafa')); c.setStrokeColor(col); c.setLineWidth(1.5) c.roundRect(x4, y - h, cw, h, 8, fill=1, stroke=1) c.setFillColor(col) c.roundRect(x4, y - h, 8, h, 4, fill=1, stroke=0) c.setFont('DVB', 16) c.drawString(x4 + 20, y - 27, title) para(body, x4 + 20, y - 38, cw - 36, s) y -= h + 13 print('col4 bottom', y, 'limit', LIM) # footer c.setFillColor(NAVY) c.rect(0, 0, W, M + 34, fill=1, stroke=0) c.setFillColor(HexColor('#cfd9ea')) c.setFont('DV', 12) c.drawString(M, M + 16, 'Sources: Gray\'s Anatomy for Students (Orbit; Face); Grainger & Allison\'s Diagnostic Radiology; Scott-Brown\'s Otorhinolaryngology; Wills Eye Manual; Roberts and Hedges\' Clinical Procedures; Dermatology 5e; S Das Clinical Surgery.') c.drawString(M, M + 1, 'Figures 1, 2 and 4 are from Gray\'s Anatomy for Students, shown for educational display. Figures 3 and 5 are open-access case images.') c.showPage(); c.save() print('ok') EOF python3 src/p2.py && cd output && rm -f prev* preview* && pdftoppm -jpeg -jpegopt quality=70 -r 40 Orbit_Vascular_Supply_Poster.pdf prev && ls

Reading File
Running Command

cd /tmp/workspace/orbit-poster && sed -i 's/W, H = 2384, 1684 # A1 landscape in points/W, H = 2384, 1500/; s/ih = image(A + .cta.jpg., x3, y, cw)/ih = image(A + "cta.jpg", x3, y, cw - 60)/' src/p2.py && python3 src/p2.py && cd output && rm -f prev* && pdftoppm -jpeg -jpegopt quality=70 -r 40 Orbit_Vascular_Supply_Poster.pdf prev && pdftoppm -png -r 50 Orbit_Vascular_Supply_Poster.pdf /tmp/workspace/orbit-poster/output/Orbit_Poster_preview && ls -la

Running Command

cd /tmp/workspace/orbit-poster && sed -i 's/^iw = 330/iw = 220/; s/^figw = 400/figw = 370/' src/p2.py && python3 src/p2.py && cd output && rm -f prev* Orbit_Poster_preview* && pdftoppm -png -r 50 Orbit_Vascular_Supply_Poster.pdf Orbit_Poster_preview && ls

The orbit poster is finished. It is a single-page A1-width landscape PDF (about 2384 × 1500 pt) in four panels, one for each of your topics plus a clinical panel. I checked the layout by rendering a preview, then shrank two images to stop one column running into the footer. I did not re-view the final render, so check the bottom of each column before you print.

Orbit Vascular Supply Poster

PDF Document · PDF

Orbit Poster preview 1

Image · PNG

What is on it
  1. Arterial supply. It has Gray's Fig. 8.102 and the course of the ophthalmic artery: from the internal carotid, through the optic canal, over the optic nerve, along the medial wall. A table lists the orbital branches and what each supplies, followed by a note on the link between the internal and external carotid systems through the eyelid vessels.
  2. Venous drainage. It has Gray's Fig. 8.103, the superior and inferior ophthalmic veins and their three exit routes, and a pathway flow diagram. It also has a key-point box on the route for infection into the cranial cavity, and a CT showing a dilated superior ophthalmic vein.
  3. Lymphatic drainage. It has the eyelid vasculature figure and a table of drainage routes. Most of the eyelids drain to the pre-auricular and parotid nodes, and the medial corner of the eye drains to the submandibular nodes. Below that are an "Imaging correlate" panel with a CT angiogram of the ophthalmic artery and a "Remember" summary box.
  4. Clinical anatomy. Seven cards cover:
    • central retinal artery occlusion
    • filler embolism
    • cavernous sinus thrombosis
    • carotid-cavernous fistula
    • papilloedema
    • chemosis
    • Horner syndrome
Sources
  • The anatomy comes from Gray's Anatomy for Students.
  • The clinical points come from Scott-Brown's, Wills Eye Manual, Roberts and Hedges, the Dermatology text and Grainger & Allison's.
  • The poster footer lists these sources.
Checks before display
  • The statement that the orbit proper has no classical lymph nodes is general teaching, not taken from the library texts. Please check it against your course notes. Some recent papers describe lymphatics in the lacrimal gland and optic nerve dura.
  • The deep cervical node step and the "valveless veins" label are also standard teaching that I did not confirm in the library texts.
  • A quick PubMed check of the last two years of systematic reviews found nothing that contradicts this content.
  • Figures 1, 2 and 4 come from Gray's Anatomy for Students. Check you have permission to reproduce them if the poster goes beyond in-class display.
I can make a portrait version, trim it to fewer panels, or add an anatomy overview of the orbit (bones, fissures, foramina) if you want one.

Breif this poster

Poster brief: Vascular supply and clinical anatomy of the orbit
Arterial supply
  • Everything comes from the ophthalmic artery, the first major branch of the internal carotid artery.
  • It enters through the optic canal, crosses over the optic nerve, and runs along the medial wall.
  • Main branches:
    • Central retinal artery. This is an end artery and supplies the retina.
    • Lacrimal artery. It supplies the lacrimal gland and the lateral eyelid.
    • Posterior ciliary arteries. They supply the structures inside the globe.
    • Muscular arteries.
    • Supra-orbital and supratrochlear arteries. They supply the forehead and scalp.
    • Ethmoidal arteries. They supply the ethmoid cells and nose.
    • Dorsal nasal artery.
  • The supratrochlear, supra-orbital and dorsal nasal arteries connect with the external carotid system on the face and scalp.
Venous drainage
  • The superior ophthalmic vein forms from the supra-orbital and angular veins. It leaves through the superior orbital fissure into the cavernous sinus.
  • The inferior ophthalmic vein is smaller. It drains to the superior ophthalmic vein, to the cavernous sinus, or through the inferior orbital fissure to the pterygoid plexus.
  • These veins link the face to the cavernous sinus, so infection can spread into the cranial cavity.
Lymphatic drainage
  • The orbit proper has no classical lymph nodes. Drainage is through the eyelids and conjunctiva.
  • Most of the eyelids drain to the pre-auricular and parotid nodes.
  • The medial corner of the eye drains to the submandibular nodes.
  • Both groups continue to the deep cervical nodes.
Clinical points
  • Central retinal artery or ophthalmic artery occlusion causes sudden monocular blindness.
  • Filler embolism. Filler injected in the glabella, forehead or nose can pass retrograde into the orbit and cause blindness.
  • Cavernous sinus thrombosis. Facial infection spreads along the angular vein and superior ophthalmic vein. Signs are chemosis, proptosis, periorbital oedema and ophthalmoplegia.
  • Carotid-cavernous fistula. It gives a dilated superior ophthalmic vein and dilated episcleral vessels.
  • Papilloedema. Raised intracranial pressure impedes retinal venous return and causes optic disc oedema.
  • Chemosis. Raised retro-orbital pressure obstructs conjunctival venous and lymphatic drainage.
Three points to remember
  1. Arteries: the ophthalmic artery enters through the optic canal.
  2. Veins: the superior and inferior ophthalmic veins drain to the cavernous sinus, which gives infection a route inward.
  3. Lymph: the eyelids drain to the parotid and submandibular nodes.
The poster file is at

Orbit Vascular Supply Poster

PDF Document · PDF

.

Still more breif it

Orbit: vascular supply and clinical anatomy
  • Arteries: The ophthalmic artery (from the internal carotid) enters through the optic canal. Its branches are the central retinal, lacrimal, ciliary, muscular, supra-orbital, supratrochlear, ethmoidal and dorsal nasal arteries.
  • Veins: The superior and inferior ophthalmic veins drain to the cavernous sinus. Infection can spread along them into the cranial cavity.
  • Lymph: The orbit proper has no classical lymph nodes. The eyelids drain to the parotid nodes, and the medial corner of the eye drains to the submandibular nodes.
  • Clinical:
    • Central retinal artery occlusion causes sudden blindness.
    • Filler embolism can cause blindness.
    • Cavernous sinus thrombosis follows facial infection.
    • Papilloedema, chemosis and carotid-cavernous fistula are the other conditions on the poster.
This is a shared conversation. Sign in to Orris to start your own chat.