Isotonic and isometric excercise,isokinetic exercises 10 mark pg orthopaedics answer with flow chart and images
isotonic isometric isokinetic exercises orthopaedics 10 marks differences physiology
https://www.mystphysio.com/types-of-muscle-contraction
Medical educational flowchart showing the classification and comparison of muscle exercises in orthopaedics. Title: "Types of Therapeutic Exercises in Orthopaedics". Three main branches: 1) ISOMETRIC EXERCISE - muscle contracts without joint movement, constant length, examples: quadriceps setting, straight leg raise, used in: acute phase, post-op, painful joints, advantages: no joint stress, can be done in cast, simple equipment, disadvantages: no full ROM, blood pressure rise, strength gains at fixed angle only. 2) ISOTONIC EXERCISE - muscle contracts with joint movement, two subtypes: Concentric (muscle shortens, lifting phase) and Eccentric (muscle lengthens, lowering phase), examples: bicep curl, squats, dumbbell exercises, advantages: functional movements, full ROM, builds bulk, disadvantages: variable resistance, joint stress. 3) ISOKINETIC EXERCISE - constant speed of movement, variable resistance throughout ROM, requires dynamometer machine (Cybex, Biodex), advantages: maximum resistance throughout ROM, safe, objective testing, disadvantages: expensive equipment, not functional movement. Bottom section: Clinical progression arrow showing Isometric (acute phase) -> Isotonic (subacute/rehab phase) -> Isokinetic (testing/advanced rehab). Clean medical diagram style with color coding: blue for isometric, green for isotonic, orange for isokinetic.
Medical educational diagram showing three types of muscle contractions side by side for orthopaedics students. Left panel labeled ISOMETRIC: shows a muscle fiber maintaining same length with arrows indicating force being generated but no movement, joint angle unchanged, example image of quadriceps setting exercise against a wall. Middle panel labeled ISOTONIC - CONCENTRIC: shows muscle fiber shortening, joint bending, dumbbell being lifted upward. Also shows ISOTONIC - ECCENTRIC: muscle fiber lengthening, dumbbell being lowered. Right panel labeled ISOKINETIC: shows a leg on a Cybex/Biodex dynamometer machine with constant velocity arrows, variable resistance shown by wavy resistance line throughout full ROM. Below each panel: key equation - Isometric: Tension increases, Length constant; Isotonic: Tension constant, Length changes; Isokinetic: Velocity constant, Resistance varies. Color scheme: isometric=blue, isotonic=green, isokinetic=red/orange. Clean white background, professional medical textbook style illustration.


| Example | Muscle Worked |
|---|---|
| Quadriceps setting (tightening quad while lying flat) | Quadriceps |
| Straight leg raise (held) | Hip flexors + quad |
| Pressing palm against wall | Shoulder muscles |
| Gluteal setting | Gluteus maximus |
| Short arc quads | Quadriceps |
| Exercise | Type |
|---|---|
| Bicep curl | Isotonic - concentric + eccentric |
| Squats | Isotonic |
| Free weights | Isotonic |
| Resistance bands | Isotonic |
| Step-ups | Isotonic |
| Parameter | Isometric | Isotonic | Isokinetic |
|---|---|---|---|
| Muscle length | Unchanged | Changes | Changes |
| Joint movement | None | Present | Present |
| Muscle tension | Increases | Constant | Variable (accommodating) |
| Velocity | None | Variable | Constant (preset) |
| Resistance | Fixed | Constant | Variable (accommodating) |
| Equipment | None | Minimal (weights) | Dynamometer machine |
| Phase of rehab | Acute | Subacute/Chronic | Advanced/Testing |
| ROM strength | Single angle | Full ROM | Full ROM |
| Joint stress | Minimal | Moderate | Low (controlled) |
| Cost | Nil | Low | High |
| Functional carryover | Low | High | Moderate |
INJURY / SURGERY
↓
ACUTE PHASE (Day 0-2 weeks)
↓
ISOMETRIC EXERCISE
(In cast, acute pain, no ROM allowed)
- Quad sets, glut sets, static holds
↓
SUBACUTE PHASE (2-6 weeks)
↓
ISOTONIC EXERCISE - Concentric + Eccentric
(ROM improving, pain reducing)
- Free weights, resistance bands, squats
↓
LATE REHABILITATION (6-12+ weeks)
↓
ISOKINETIC EXERCISE
(Strength testing, return to sport assessment)
- Cybex machine, H:Q ratio testing
↓
RETURN TO SPORT / FULL ACTIVITY
| Type | Key Word |
|---|---|
| ISometric | "IS still" - no movement |
| ISotonic | "IS moving with equal TONe" - movement at constant tension |
| ISokinetic | "IS moving at equal KINEtic speed" - constant velocity |
Generate a study guide PDF with this content for exam prep
mkdir -p /home/daytona/workspace/ortho-exercises-studyguide && ls /home/daytona/…
cd /home/daytona/workspace/ortho-exercises-studyguide && curl -s -o flowchart.pn…
~/ortho-exercises-studyguide/generate_pdf.py
from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import cm, mm
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.platypus import (
SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
Image, HRFlowable, PageBreak, KeepTogether
)
from reportlab.platypus.flowables import HRFlowable
from reportlab.lib.colors import HexColor
import os
# ── colour palette ──────────────────────────────────────────────────────────
DARK_BLUE = HexColor("#1a3a5c")
MED_BLUE = HexColor("#2e6da4")
LIGHT_BLUE = HexColor("#dce9f7")
GREEN = HexColor("#1d6e3d")
LIGHT_GREEN = HexColor("#d6f0e0")
ORANGE = HexColor("#b85c00")
LIGHT_ORANGE= HexColor("#fde9d4")
GRAY = HexColor("#555555")
LIGHT_GRAY = HexColor("#f5f5f5")
WHITE = colors.white
BLACK = colors.black
TABLE_HEADER= HexColor("#1a3a5c")
TABLE_ALT = HexColor("#edf4fb")
# ── page setup ───────────────────────────────────────────────────────────────
OUTPUT = "/home/daytona/workspace/ortho-exercises-studyguide/Ortho_Exercises_StudyGuide.pdf"
doc = SimpleDocTemplate(
OUTPUT, pagesize=A4,
leftMargin=2*cm, rightMargin=2*cm,
topMargin=2.2*cm, bottomMargin=2.2*cm
)
# ── styles ───────────────────────────────────────────────────────────────────
styles = getSampleStyleSheet()
def S(name, **kw):
return ParagraphStyle(name, **kw)
TITLE = S("MyTitle", fontSize=22, textColor=WHITE, alignment=TA_CENTER, spaceAfter=4, fontName="Helvetica-Bold")
SUB = S("MySub", fontSize=12, textColor=LIGHT_BLUE, alignment=TA_CENTER, spaceAfter=6, fontName="Helvetica")
H1 = S("MyH1", fontSize=14, textColor=WHITE, spaceBefore=8, spaceAfter=4, fontName="Helvetica-Bold", leading=18)
H2 = S("MyH2", fontSize=12, textColor=DARK_BLUE, spaceBefore=10, spaceAfter=3, fontName="Helvetica-Bold", leading=16)
H3 = S("MyH3", fontSize=10, textColor=MED_BLUE, spaceBefore=6, spaceAfter=2, fontName="Helvetica-Bold")
BODY = S("MyBody", fontSize=9.5, textColor=BLACK, spaceAfter=4, leading=14, fontName="Helvetica", alignment=TA_JUSTIFY)
BULLET = S("MyBullet", fontSize=9.5, textColor=BLACK, spaceAfter=3, leading=14, fontName="Helvetica",
leftIndent=14, firstLineIndent=-10)
BOLD = S("MyBold", fontSize=9.5, textColor=BLACK, spaceAfter=3, leading=14, fontName="Helvetica-Bold")
CAPTION= S("Caption", fontSize=8.5, textColor=GRAY, alignment=TA_CENTER, spaceAfter=6, fontName="Helvetica-Oblique")
MNEMONIC=S("Mnemonic", fontSize=9.5, textColor=DARK_BLUE, spaceAfter=3, leading=14, fontName="Helvetica",
leftIndent=10, backColor=LIGHT_BLUE, borderPadding=5)
def colored_heading(text, bg_color, text_color=WHITE):
"""Return a Table that acts as a colored section heading."""
t = Table([[Paragraph(text, S("hdr", fontSize=12, textColor=text_color,
fontName="Helvetica-Bold", spaceAfter=0, spaceBefore=0))]],
colWidths=[17*cm])
t.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg_color),
("TOPPADDING", (0,0), (-1,-1), 6),
("BOTTOMPADDING",(0,0), (-1,-1), 6),
("LEFTPADDING", (0,0), (-1,-1), 10),
("ROUNDEDCORNERS", [4]),
]))
return t
def section_box(content_items, bg_color=LIGHT_BLUE, border_color=MED_BLUE):
"""Wrap a list of flowables in a coloured box via a 1-cell table."""
inner = Table([[item] for item in content_items], colWidths=[16.4*cm])
inner.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), bg_color),
("LEFTPADDING", (0,0), (-1,-1), 8),
("RIGHTPADDING", (0,0), (-1,-1), 8),
("TOPPADDING", (0,0), (-1,-1), 3),
("BOTTOMPADDING",(0,0), (-1,-1), 3),
]))
return inner
def make_table(headers, rows, col_widths, alt_color=TABLE_ALT):
data = [headers] + rows
t = Table(data, colWidths=col_widths)
style = [
("BACKGROUND", (0, 0), (-1, 0), TABLE_HEADER),
("TEXTCOLOR", (0, 0), (-1, 0), WHITE),
("FONTNAME", (0, 0), (-1, 0), "Helvetica-Bold"),
("FONTSIZE", (0, 0), (-1,-1), 8.5),
("ALIGN", (0, 0), (-1,-1), "LEFT"),
("VALIGN", (0, 0), (-1,-1), "MIDDLE"),
("TOPPADDING", (0, 0), (-1,-1), 5),
("BOTTOMPADDING",(0, 0), (-1,-1), 5),
("LEFTPADDING", (0, 0), (-1,-1), 6),
("GRID", (0, 0), (-1,-1), 0.4, HexColor("#cccccc")),
("ROWBACKGROUNDS",(0, 1), (-1,-1), [WHITE, alt_color]),
]
t.setStyle(TableStyle(style))
return t
def bp(text, bullet="•"):
return Paragraph(f"{bullet} {text}", BULLET)
def bold_p(text):
return Paragraph(f"<b>{text}</b>", BODY)
# ── cover banner helper ───────────────────────────────────────────────────────
def cover_banner(story):
banner_data = [[
Paragraph("ORTHOPAEDIC REHABILITATION", TITLE),
Paragraph("Isotonic · Isometric · Isokinetic Exercises", SUB),
Paragraph("10-Mark Exam Study Guide | PG Orthopaedics", SUB),
]]
banner = Table(banner_data, colWidths=[17*cm])
banner.setStyle(TableStyle([
("BACKGROUND", (0,0), (-1,-1), DARK_BLUE),
("TOPPADDING", (0,0), (-1,-1), 18),
("BOTTOMPADDING",(0,0), (-1,-1), 18),
("LEFTPADDING", (0,0), (-1,-1), 14),
("ROUNDEDCORNERS", [6]),
]))
story.append(banner)
story.append(Spacer(1, 0.4*cm))
# ════════════════════════════════════════════════════════════════════════════
# BUILD STORY
# ════════════════════════════════════════════════════════════════════════════
story = []
# ── COVER ────────────────────────────────────────────────────────────────────
cover_banner(story)
story.append(Paragraph(
"This guide provides a complete exam-ready answer to the 10-mark question on types of "
"therapeutic muscle exercises. Covers definitions, mechanisms, clinical indications, "
"advantages, disadvantages, and orthopaedic applications with comparison tables and diagrams.",
BODY))
story.append(Spacer(1, 0.3*cm))
story.append(HRFlowable(width="100%", thickness=1, color=MED_BLUE))
story.append(Spacer(1, 0.2*cm))
# ── INTRO ────────────────────────────────────────────────────────────────────
story.append(colored_heading("INTRODUCTION", MED_BLUE))
story.append(Spacer(1, 0.15*cm))
story.append(Paragraph(
"Therapeutic exercises in orthopaedics are classified based on the nature of muscle "
"contraction and whether joint movement occurs. The three major types are:", BODY))
story.append(bp("<b>Isometric</b> - muscle contracts, no joint movement, no length change"))
story.append(bp("<b>Isotonic</b> - muscle contracts with joint movement (concentric + eccentric)"))
story.append(bp("<b>Isokinetic</b> - muscle contracts at constant velocity, accommodating resistance"))
story.append(Spacer(1, 0.2*cm))
# ── FLOWCHART IMAGE ───────────────────────────────────────────────────────────
story.append(colored_heading("CLASSIFICATION FLOWCHART", DARK_BLUE))
story.append(Spacer(1, 0.2*cm))
fc_img = Image("/home/daytona/workspace/ortho-exercises-studyguide/flowchart.png",
width=16.5*cm, height=11*cm, kind="proportional")
story.append(fc_img)
story.append(Paragraph("Fig 1. Classification and comparison of therapeutic exercise types in orthopaedics", CAPTION))
story.append(Spacer(1, 0.3*cm))
# ── DIAGRAM IMAGE ─────────────────────────────────────────────────────────────
story.append(colored_heading("MUSCLE CONTRACTION MECHANICS", DARK_BLUE))
story.append(Spacer(1, 0.2*cm))
diag_img = Image("/home/daytona/workspace/ortho-exercises-studyguide/diagram.png",
width=16.5*cm, height=11*cm, kind="proportional")
story.append(diag_img)
story.append(Paragraph("Fig 2. Side-by-side comparison of isometric, isotonic, and isokinetic contractions", CAPTION))
story.append(PageBreak())
# ════════════════════════════════════════════════════════════════════════════
# SECTION 1: ISOMETRIC
# ════════════════════════════════════════════════════════════════════════════
cover_banner(story)
story.append(colored_heading("1. ISOMETRIC EXERCISE", MED_BLUE))
story.append(Spacer(1, 0.15*cm))
story.append(Paragraph(
'<b>Definition:</b> Muscle contraction occurs <b>without change in muscle length</b> or '
'joint movement. Tension is generated within the muscle but no external mechanical work is performed. '
'"Iso" = same, "metric" = length.', BODY))
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph("<b>Mechanism</b>", H3))
story.append(bp("Motor units are recruited; tension rises within the muscle"))
story.append(bp("No shortening or lengthening of muscle fibres"))
story.append(bp("No joint movement; joint held in a fixed position"))
story.append(bp("Blood flow temporarily impeded during sustained contraction"))
story.append(Spacer(1, 0.2*cm))
# Examples table
story.append(Paragraph("<b>Common Examples</b>", H3))
ex_table = make_table(
[Paragraph("<b>Exercise</b>", S("th", textColor=WHITE, fontName="Helvetica-Bold", fontSize=8.5)),
Paragraph("<b>Muscle Group</b>", S("th", textColor=WHITE, fontName="Helvetica-Bold", fontSize=8.5))],
[["Quadriceps setting (quad set)", "Quadriceps femoris"],
["Straight leg raise (held static)", "Hip flexors + Quadriceps"],
["Gluteal setting", "Gluteus maximus"],
["Pressing palm against wall", "Shoulder muscles"],
["Ankle pumps (static hold)", "Tibialis anterior / Calf"],
["Short arc quads", "Quadriceps"]],
[9*cm, 8*cm]
)
story.append(ex_table)
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph("<b>Indications in Orthopaedics</b>", H3))
story.append(bp("Acute phase after injury/surgery (Day 0-2 post-op)"))
story.append(bp("Limb immobilised in plaster cast or splint"))
story.append(bp("Acute joint inflammation - rheumatoid arthritis, acute OA flare"))
story.append(bp("Prevention of disuse atrophy during immobilisation"))
story.append(bp("Post-fracture immobilisation (e.g., femur fracture in traction)"))
story.append(bp("Tendinopathy - exercise-induced hypoalgesia effect"))
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph("<b>Prescription Guidelines</b>", H3))
presc_t = make_table(
[Paragraph("<b>Parameter</b>", S("th", textColor=WHITE, fontName="Helvetica-Bold", fontSize=8.5)),
Paragraph("<b>Value</b>", S("th", textColor=WHITE, fontName="Helvetica-Bold", fontSize=8.5))],
[["Intensity", "40-60% of maximum voluntary contraction (MVC)"],
["Hold duration", "1-6 seconds per contraction"],
["Volume", "1-10 submaximal contractions per key muscle group"],
["Frequency", "Daily"]],
[6*cm, 11*cm]
)
story.append(presc_t)
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph("<b>Advantages</b>", H3))
for a in ["Minimal joint stress - safest in acute phase",
"Can be performed with limb in cast or brace",
"No special equipment required",
"Prevents disuse muscle atrophy",
"Reduces pain via exercise-induced hypoalgesia",
"Simple to teach; good patient compliance"]:
story.append(bp(a, "✓"))
story.append(Spacer(1, 0.15*cm))
story.append(Paragraph("<b>Disadvantages</b>", H3))
for d in ["Strength gains are angle-specific (only at trained joint angle)",
"No improvement in range of motion",
"Transiently raises blood pressure - caution in hypertensives",
"Not functional - does not simulate daily activities",
"No cardiovascular benefit",
"No muscle bulk gain (hypertrophy)"]:
story.append(bp(d, "✗"))
story.append(Spacer(1, 0.3*cm))
# ════════════════════════════════════════════════════════════════════════════
# SECTION 2: ISOTONIC
# ════════════════════════════════════════════════════════════════════════════
story.append(PageBreak())
cover_banner(story)
story.append(colored_heading("2. ISOTONIC EXERCISE", GREEN))
story.append(Spacer(1, 0.15*cm))
story.append(Paragraph(
'<b>Definition:</b> Muscle contraction occurs <b>with joint movement</b>. The muscle tension '
'remains relatively constant ("equal tension") while muscle length changes. '
'"Iso" = same, "tonic" = tension. Includes both concentric and eccentric subtypes.', BODY))
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph("<b>Two Subtypes</b>", H2))
# Concentric
story.append(Paragraph("<b>A. Concentric Contraction</b>", H3))
story.append(bp("Muscle shortens as it contracts"))
story.append(bp("Positive work - moves against gravity/resistance"))
story.append(bp("Example: Lifting a dumbbell upward (elbow flexion)"))
story.append(bp("More efficient, less muscle damage"))
story.append(Spacer(1, 0.15*cm))
# Eccentric
story.append(Paragraph("<b>B. Eccentric Contraction</b>", H3))
story.append(bp("Muscle lengthens as it contracts (controls movement)"))
story.append(bp("Negative work - lowers against gravity"))
story.append(bp("Example: Lowering a dumbbell slowly"))
story.append(bp("Greater force generated per motor unit than concentric"))
story.append(bp("More prone to delayed onset muscle soreness (DOMS)"))
story.append(bp("KEY USE: Tendon rehabilitation - Alfredson protocol (Achilles tendinopathy)"))
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph("<b>Common Examples</b>", H3))
ex2_table = make_table(
[Paragraph("<b>Exercise</b>", S("th", textColor=WHITE, fontName="Helvetica-Bold", fontSize=8.5)),
Paragraph("<b>Type</b>", S("th", textColor=WHITE, fontName="Helvetica-Bold", fontSize=8.5)),
Paragraph("<b>Muscle Group</b>", S("th", textColor=WHITE, fontName="Helvetica-Bold", fontSize=8.5))],
[["Bicep curl", "Concentric + Eccentric", "Biceps brachii"],
["Squats", "Concentric + Eccentric", "Quadriceps, Glutes"],
["Free weights", "Concentric + Eccentric", "Variable"],
["Resistance bands", "Concentric + Eccentric", "Variable"],
["Heel drops (Alfredson)", "Eccentric", "Gastrocnemius/Soleus"],
["Step-ups/Step-downs", "Concentric/Eccentric", "Quads, Glutes"]],
[5.5*cm, 4.5*cm, 7*cm]
)
story.append(ex2_table)
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph("<b>Prescription Guidelines</b>", H3))
presc2_t = make_table(
[Paragraph("<b>Intensity</b>", S("th", textColor=WHITE, fontName="Helvetica-Bold", fontSize=8.5)),
Paragraph("<b>Reps</b>", S("th", textColor=WHITE, fontName="Helvetica-Bold", fontSize=8.5)),
Paragraph("<b>Sets</b>", S("th", textColor=WHITE, fontName="Helvetica-Bold", fontSize=8.5)),
Paragraph("<b>Frequency</b>", S("th", textColor=WHITE, fontName="Helvetica-Bold", fontSize=8.5))],
[["Low: 40% 1 RM", "10-15 reps", "1-3 sets", "2-3 days/week"],
["Moderate: 40-60% 1 RM", "8-10 reps", "1-3 sets", "2-3 days/week"],
["High: >60% 1 RM", "6-8 reps", "1-3 sets", "2-3 days/week"]],
[4.5*cm, 3.5*cm, 3.5*cm, 5.5*cm]
)
story.append(presc2_t)
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph("<b>Indications in Orthopaedics</b>", H3))
story.append(bp("Subacute and chronic phase of rehabilitation"))
story.append(bp("Post-fracture after cast removal"))
story.append(bp("Post-arthroplasty (total knee/hip replacement) from week 2 onwards"))
story.append(bp("ACL/ligament reconstruction rehabilitation"))
story.append(bp("Muscle strengthening programs for OA (pain-free period)"))
story.append(bp("Eccentric: Achilles tendinopathy, patellar tendinopathy"))
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph("<b>Advantages</b>", H3))
for a in ["Mimics real-life functional movements",
"Improves strength through full ROM",
"Builds muscle bulk (hypertrophy)",
"Improves neuromuscular coordination",
"Inexpensive - uses free weights, bands",
"Provides cardiovascular benefit"]:
story.append(bp(a, "✓"))
story.append(Spacer(1, 0.15*cm))
story.append(Paragraph("<b>Disadvantages</b>", H3))
for d in ["Variable resistance throughout ROM (weakest at mechanical disadvantage points)",
"Greater joint stress than isometric",
"Risk of injury with poor technique",
"Not appropriate in acute phase",
"DOMS more common with eccentric phase"]:
story.append(bp(d, "✗"))
# ════════════════════════════════════════════════════════════════════════════
# SECTION 3: ISOKINETIC
# ════════════════════════════════════════════════════════════════════════════
story.append(PageBreak())
cover_banner(story)
story.append(colored_heading("3. ISOKINETIC EXERCISE", ORANGE))
story.append(Spacer(1, 0.15*cm))
story.append(Paragraph(
'<b>Definition:</b> Muscle contraction at a <b>constant angular velocity</b> (constant speed) '
'throughout the full range of motion. The resistance automatically varies (accommodating resistance) '
'to match the force applied at each point in the arc. '
'"Iso" = same, "kinetic" = movement/velocity. Requires a specialised dynamometer.', BODY))
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph("<b>Mechanism</b>", H3))
story.append(bp("Patient moves against machine at a preset angular speed (typically 60-300°/sec)"))
story.append(bp("Machine provides accommodating resistance - matches the force patient exerts"))
story.append(bp("Maximal resistance applied at every point through the ROM"))
story.append(bp("Muscle is maximally loaded throughout the entire arc of movement"))
story.append(bp("Both concentric and eccentric components can be tested and trained"))
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph("<b>Equipment</b>", H3))
equip_t = make_table(
[Paragraph("<b>Machine</b>", S("th", textColor=WHITE, fontName="Helvetica-Bold", fontSize=8.5)),
Paragraph("<b>Notes</b>", S("th", textColor=WHITE, fontName="Helvetica-Bold", fontSize=8.5))],
[["Cybex Dynamometer", "Most widely cited; gold standard for isokinetic testing"],
["Biodex System", "Widely used in sports medicine and rehabilitation"],
["Kin-Com", "Also used for clinical isokinetic testing"],
["HumacNorm", "Research and clinical use"]],
[5.5*cm, 11.5*cm]
)
story.append(equip_t)
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph("<b>Indications in Orthopaedics</b>", H3))
story.append(bp("Advanced rehabilitation phase (ACL reconstruction, total knee replacement)"))
story.append(bp("Objective muscle strength testing and documentation"))
story.append(bp("Identifying muscle imbalances - hamstring:quadriceps ratio assessment"))
story.append(bp("Return-to-sport readiness testing (when H:Q ratio >60% confirms readiness)"))
story.append(bp("Sports medicine settings for athlete monitoring"))
story.append(bp("Research and clinical trials requiring quantifiable strength data"))
story.append(Spacer(1, 0.2*cm))
story.append(Paragraph("<b>Advantages</b>", H3))
for a in ["Maximum resistance throughout entire ROM - most efficient strengthening",
"Accommodating resistance - inherently safe (cannot exceed patient's force)",
"Built-in safety net: prevents overexertion, reduces reinjury risk",
"Objective, quantifiable data: torque, power, work, endurance ratios",
"Can test both concentric and eccentric components separately",
"Useful for identifying limb-to-limb asymmetries"]:
story.append(bp(a, "✓"))
story.append(Spacer(1, 0.15*cm))
story.append(Paragraph("<b>Disadvantages</b>", H3))
for d in ["Expensive equipment - not available in most community clinics",
"Not a natural/functional movement pattern",
"Requires trained personnel to administer and interpret",
"Limited to clinic or hospital setting",
"Not suitable for acute-phase rehabilitation"]:
story.append(bp(d, "✗"))
story.append(Spacer(1, 0.3*cm))
# ════════════════════════════════════════════════════════════════════════════
# COMPARISON TABLE
# ════════════════════════════════════════════════════════════════════════════
story.append(PageBreak())
cover_banner(story)
story.append(colored_heading("MASTER COMPARISON TABLE", DARK_BLUE))
story.append(Spacer(1, 0.2*cm))
comp_headers = [
Paragraph("<b>Parameter</b>", S("th", textColor=WHITE, fontName="Helvetica-Bold", fontSize=8)),
Paragraph("<b>Isometric</b>", S("th", textColor=WHITE, fontName="Helvetica-Bold", fontSize=8)),
Paragraph("<b>Isotonic</b>", S("th", textColor=WHITE, fontName="Helvetica-Bold", fontSize=8)),
Paragraph("<b>Isokinetic</b>", S("th", textColor=WHITE, fontName="Helvetica-Bold", fontSize=8)),
]
comp_rows = [
["Muscle length", "Unchanged", "Changes", "Changes"],
["Joint movement", "None", "Present", "Present"],
["Tension/Force", "Increases", "Constant", "Variable (accommodating)"],
["Velocity", "None (static)", "Variable", "Constant (preset)"],
["Resistance", "Fixed", "Constant", "Accommodating (variable)"],
["Equipment", "None", "Weights / Bands", "Dynamometer (Cybex/Biodex)"],
["Phase of rehab", "Acute (Day 0-2 wks)", "Subacute / Chronic", "Advanced / Testing"],
["ROM strength gain", "Single angle only", "Full ROM", "Full ROM"],
["Joint stress", "Minimal", "Moderate", "Low (controlled)"],
["Cost", "Nil", "Low", "High"],
["Functional carryover", "Low", "High", "Moderate"],
["Equipment needed", "None", "Minimal", "Specialised machine"],
["Muscle bulk gain", "Minimal", "Yes (hypertrophy)", "Yes"],
["BP effect", "Rises during effort", "Moderate rise", "Controlled"],
["Objective data", "No", "Limited", "Yes (torque values)"],
]
comp_table = make_table(comp_headers, comp_rows,
[4.5*cm, 3.8*cm, 4.2*cm, 4.5*cm])
story.append(comp_table)
story.append(Spacer(1, 0.3*cm))
# ════════════════════════════════════════════════════════════════════════════
# REHAB PROGRESSION
# ════════════════════════════════════════════════════════════════════════════
story.append(colored_heading("REHABILITATION PROGRESSION", MED_BLUE))
story.append(Spacer(1, 0.15*cm))
prog_data = [
[Paragraph("<b>Phase</b>", S("ph", textColor=WHITE, fontName="Helvetica-Bold", fontSize=9)),
Paragraph("<b>Timing</b>", S("ph", textColor=WHITE, fontName="Helvetica-Bold", fontSize=9)),
Paragraph("<b>Exercise Type</b>", S("ph", textColor=WHITE, fontName="Helvetica-Bold", fontSize=9)),
Paragraph("<b>Examples</b>", S("ph", textColor=WHITE, fontName="Helvetica-Bold", fontSize=9))],
["Acute", "Day 0 - 2 weeks", "ISOMETRIC", "Quad sets, glut sets, ankle pumps"],
["Subacute", "2 - 6 weeks", "ISOTONIC (Concentric)", "Leg raises, step-ups, light weights"],
["Rehabilitation", "6 - 12 weeks", "ISOTONIC (Eccentric +\nConcentric)", "Squats, resistance bands, eccentric heel drops"],
["Late Rehab /\nReturn to Sport", ">12 weeks", "ISOKINETIC (Testing\n+ Training)", "Cybex H:Q ratio testing, dynamometer training"],
]
prog_t = Table(prog_data, colWidths=[3.5*cm, 3*cm, 4.5*cm, 6*cm])
prog_t.setStyle(TableStyle([
("BACKGROUND", (0, 0), (-1, 0), TABLE_HEADER),
("TEXTCOLOR", (0, 0), (-1, 0), WHITE),
("FONTNAME", (0, 0), (-1, 0), "Helvetica-Bold"),
("FONTSIZE", (0, 0), (-1,-1), 8.5),
("ALIGN", (0, 0), (-1,-1), "LEFT"),
("VALIGN", (0, 0), (-1,-1), "MIDDLE"),
("TOPPADDING", (0, 0), (-1,-1), 5),
("BOTTOMPADDING", (0, 0), (-1,-1), 5),
("LEFTPADDING", (0, 0), (-1,-1), 6),
("GRID", (0, 0), (-1,-1), 0.4, HexColor("#cccccc")),
("BACKGROUND", (0, 1), (-1, 1), LIGHT_BLUE),
("BACKGROUND", (0, 2), (-1, 2), LIGHT_GREEN),
("BACKGROUND", (0, 3), (-1, 3), LIGHT_GREEN),
("BACKGROUND", (0, 4), (-1, 4), LIGHT_ORANGE),
]))
story.append(prog_t)
story.append(Spacer(1, 0.3*cm))
# ════════════════════════════════════════════════════════════════════════════
# CLINICAL APPLICATIONS
# ════════════════════════════════════════════════════════════════════════════
story.append(colored_heading("ORTHOPAEDIC CLINICAL APPLICATIONS", DARK_BLUE))
story.append(Spacer(1, 0.15*cm))
clin_data = [
[Paragraph("<b>Condition</b>", S("ph", textColor=WHITE, fontName="Helvetica-Bold", fontSize=9)),
Paragraph("<b>Acute Phase</b>", S("ph", textColor=WHITE, fontName="Helvetica-Bold", fontSize=9)),
Paragraph("<b>Subacute Phase</b>", S("ph", textColor=WHITE, fontName="Helvetica-Bold", fontSize=9)),
Paragraph("<b>Late Phase</b>", S("ph", textColor=WHITE, fontName="Helvetica-Bold", fontSize=9))],
["Post-fracture (in cast)", "Isometric only", "Isotonic after cast off", "Isokinetic if athlete"],
["ACL Reconstruction", "Isometric quad sets", "Isotonic (CKC exercises)", "Isokinetic testing for RTS"],
["Total Knee Replacement", "Isometric Day 1-2", "Isotonic from Week 2-3", "Isokinetic (selected pts)"],
["Achilles Tendinopathy", "Isometric holds", "Eccentric isotonic (Alfredson)", "Full isotonic loading"],
["Knee OA (painful flare)", "Isometric or aquatic", "Isotonic (low load)", "Aerobic + isotonic"],
["Patellar Tendinopathy", "Isometric holds", "Eccentric isotonic", "Progressive isotonic load"],
]
clin_t = Table(clin_data, colWidths=[4.5*cm, 3.5*cm, 4.5*cm, 4.5*cm])
clin_t.setStyle(TableStyle([
("BACKGROUND", (0, 0), (-1, 0), TABLE_HEADER),
("TEXTCOLOR", (0, 0), (-1, 0), WHITE),
("FONTNAME", (0, 0), (-1, 0), "Helvetica-Bold"),
("FONTSIZE", (0, 0), (-1,-1), 8),
("ALIGN", (0, 0), (-1,-1), "LEFT"),
("VALIGN", (0, 0), (-1,-1), "MIDDLE"),
("TOPPADDING", (0, 0), (-1,-1), 5),
("BOTTOMPADDING", (0, 0), (-1,-1), 5),
("LEFTPADDING", (0, 0), (-1,-1), 6),
("GRID", (0, 0), (-1,-1), 0.4, HexColor("#cccccc")),
("ROWBACKGROUNDS",(0, 1), (-1,-1), [WHITE, TABLE_ALT]),
]))
story.append(clin_t)
story.append(Spacer(1, 0.3*cm))
# ════════════════════════════════════════════════════════════════════════════
# MNEMONICS & QUICK RECALL
# ════════════════════════════════════════════════════════════════════════════
story.append(colored_heading("MNEMONICS & QUICK RECALL", HexColor("#5a3a8c")))
story.append(Spacer(1, 0.15*cm))
mn_data = [
[Paragraph("<b>Type</b>", S("ph", textColor=WHITE, fontName="Helvetica-Bold", fontSize=9)),
Paragraph("<b>Key Word</b>", S("ph", textColor=WHITE, fontName="Helvetica-Bold", fontSize=9)),
Paragraph("<b>Memory Hook</b>", S("ph", textColor=WHITE, fontName="Helvetica-Bold", fontSize=9))],
["Isometric", '"IS still"', "IS-ometric = IS-stationary. No movement."],
["Isotonic", '"IS moving with equal TONe"', "ISO-tonic = same tension, moving joint."],
["Isokinetic", '"IS moving at equal KINETIC speed"', "ISO-kinetic = same velocity, variable resistance."],
]
mn_t = Table(mn_data, colWidths=[3.5*cm, 5*cm, 8.5*cm])
mn_t.setStyle(TableStyle([
("BACKGROUND", (0, 0), (-1, 0), HexColor("#5a3a8c")),
("TEXTCOLOR", (0, 0), (-1, 0), WHITE),
("FONTNAME", (0, 0), (-1, 0), "Helvetica-Bold"),
("FONTSIZE", (0, 0), (-1,-1), 8.5),
("ALIGN", (0, 0), (-1,-1), "LEFT"),
("VALIGN", (0, 0), (-1,-1), "MIDDLE"),
("TOPPADDING", (0, 0), (-1,-1), 6),
("BOTTOMPADDING", (0, 0), (-1,-1), 6),
("LEFTPADDING", (0, 0), (-1,-1), 6),
("GRID", (0, 0), (-1,-1), 0.4, HexColor("#cccccc")),
("ROWBACKGROUNDS",(0, 1), (-1,-1), [HexColor("#f3eeff"), WHITE]),
]))
story.append(mn_t)
story.append(Spacer(1, 0.3*cm))
# ── KEY POINTS BOX ────────────────────────────────────────────────────────────
story.append(colored_heading("HIGH-YIELD EXAM KEY POINTS", HexColor("#c00000")))
story.append(Spacer(1, 0.15*cm))
kp_items = [
"Isometric = no movement, no ROM benefit, angle-specific strength, BEST in acute phase",
"Isotonic = full ROM, functional, concentric + eccentric subtypes, workhorse of rehab",
"Eccentric isotonic = GREATER force per motor unit; cornerstone of tendinopathy rehab",
"Isokinetic = constant velocity, accommodating resistance, needs Cybex/Biodex machine",
"Isokinetic provides OBJECTIVE data - torque values, H:Q ratio for return-to-sport",
"Alfredson protocol (eccentric heel drops) = gold standard for Achilles tendinopathy",
"H:Q ratio (Hamstring:Quadriceps) >60% = criteria for ACL rehab return-to-sport clearance",
"All three types produce substantial strength gains; no single method proven superior overall",
"Progression: Isometric → Isotonic (concentric) → Isotonic (eccentric) → Isokinetic",
]
for k in kp_items:
story.append(Paragraph(f"★ {k}", S("kp", fontSize=9, textColor=HexColor("#c00000"),
fontName="Helvetica", spaceAfter=4, leading=14, leftIndent=10)))
story.append(Spacer(1, 0.2*cm))
# ── footer note ───────────────────────────────────────────────────────────────
story.append(HRFlowable(width="100%", thickness=0.5, color=GRAY))
story.append(Paragraph(
"Sources: Rheumatology 2-Volume Set (Elsevier 2022), Table 53.1 | Ganong's Review of Medical Physiology 26e | "
"MystPhysio Clinical Review | BTE Technologies Rehabilitation Guide | PubMed PMID 22178252",
S("src", fontSize=7.5, textColor=GRAY, alignment=TA_CENTER, spaceAfter=0)))
# ── BUILD ─────────────────────────────────────────────────────────────────────
doc.build(story)
print(f"PDF created: {OUTPUT}")
cd /home/daytona/workspace/ortho-exercises-studyguide && python generate_pdf.py …
ls -lh /home/daytona/workspace/ortho-exercises-studyguide/Ortho_Exercises_StudyG…
Ortho Exercises StudyGuide
PDF Document · PDF
| Page | Content |
|---|---|
| 1 | Cover banner + Introduction + Classification Flowchart (Fig 1) |
| 2 | Muscle Contraction Mechanics Diagram (Fig 2) |
| 3 | Isometric Exercise - full section (mechanism, examples table, indications, prescription, advantages/disadvantages) |
| 4 | Isotonic Exercise - full section (concentric + eccentric subtypes, examples table, Alfredson protocol) |
| 5 | Isokinetic Exercise - full section (mechanism, equipment table, indications) |
| 6-10 | Master Comparison Table (15 parameters) + Rehab Progression Table + Clinical Applications Table + Mnemonics Table + High-Yield Exam Key Points |
Acl rehab 10 marks pg orthopaedics answer with flow chart and images
ACL rehabilitation protocol phases orthopaedics 10 marks PG exam answer criteria
Medical educational flowchart for ACL (Anterior Cruciate Ligament) Rehabilitation - PG Orthopaedics exam answer. Title at top: "ACL REHABILITATION PROTOCOL". Show a vertical timeline with 6 phases as colored boxes connected by arrows: PHASE 1 (blue, Week 0-2): "Acute Phase - PRICE, Knee immobiliser, Isometric quads, SLR, ROM 0-90°, Crutch walking". PHASE 2 (teal, Week 2-6): "Subacute - ROM 0-120°, Isotonic strengthening, Stationary bike, Pool walking, No brace". PHASE 3 (green, Week 6-12): "Strengthening - Full ROM, OKC/CKC exercises, Proprioception, Leg press, Step-ups". PHASE 4 (yellow-green, Month 3-6): "Neuromuscular - Jogging, Agility drills, Plyometrics, Running program, Sport-specific training". PHASE 5 (orange, Month 6-9): "Pre-Return to Sport - Isokinetic testing H:Q ratio >66%, Hop tests >90% LSI, Sport drills". PHASE 6 (red, Month 9-12): "Return to Sport - Full training, Contact sports cleared, Quad index >95%". On the right side show: "GRAFT OPTIONS" box listing: BPTB (Gold standard), Hamstring, Quadriceps tendon, Allograft. At the bottom show "RETURN TO SPORT CRITERIA" box: Quad strength >90% LSI, Hop test >90%, H:Q ratio >66%, Psychological readiness (ACL-RSI >65). Clean white background, professional medical style with color coding per phase.
Medical educational anatomy and surgery diagram for ACL injury and reconstruction for orthopaedics students. Left panel: Anatomy of the knee showing ACL (anterior cruciate ligament) in red label, PCL, medial and lateral meniscus, labeled femur, tibia, fibula. Show ACL torn with jagged line. Middle panel: ACL reconstruction surgery diagram showing bone-patellar tendon-bone graft (BPTB) technique - show the graft being placed through femoral tunnel and tibial tunnel with interference screws fixation. Label: femoral tunnel at 10-11 o'clock position, tibial tunnel at 55 degrees. Right panel: Hamstring graft (4-strand semitendinosus/gracilis) preparation showing quadrupled tendon bundle. Bottom panel: Open kinetic chain (OKC) vs Closed kinetic chain (CKC) exercises - OKC shows knee extension on table (stress on graft, avoid 0-60°); CKC shows leg press/squat (safe, preferred). Clean white background, professional medical textbook illustration style, labeled anatomy.
429 Too Many Requests. {'message': '{\n "error": {\n "code": 429,\n "message": "Resource exhausted. Please try again later. Please refer to https://cloud.google.com/vertex-ai/generative-ai/docs/error-code-429 for more details.",\n "status": "RESOURCE_EXHAUSTED"\n }\n}\n', 'status': 'Too Many Requests'}
We encountered an error while processing your request. Please try again or reach out to us for help.
Retry
An error occurred (ValidationException) when calling the ConverseStream operation: Expected toolResult blocks at messages.38.content for the following Ids: tooluse_ll9Om9XW3vkSg0jOUM26nS
We encountered an error while processing your request. Please try again or reach out to us for help.
Retry
An error occurred (ValidationException) when calling the ConverseStream operation: Expected toolResult blocks at messages.38.content for the following Ids: tooluse_ll9Om9XW3vkSg0jOUM26nS
We encountered an error while processing your request. Please try again or reach out to us for help.