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
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.

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

**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 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.
orbit anatomy blood supply
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)"
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
~/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')
cd /tmp/workspace/orbit-poster && python3 src/make_poster.py && pdftoppm -png -r 60 output/Orbit_Vascular_Supply_Poster.pdf output/preview && ls output
cd /tmp/workspace/orbit-poster/output && pdftoppm -jpeg -jpegopt quality=70 -r 55 Orbit_Vascular_Supply_Poster.pdf prev && ls -la
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)"
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
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
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
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
Orbit Vascular Supply Poster
PDF Document · PDF
Orbit Poster preview 1
Image · PNG
Breif this poster
Orbit Vascular Supply Poster
PDF Document · PDF
Still more breif it