attachment
attachment
attachment
attachment

Please give relevant answers for the given questions

Reading File
Finding Sources
Finding Sources
The library does not contain prosthodontics/dentistry textbooks. I'll answer all topics from established knowledge in complete denture prosthodontics.

Complete Denture Prosthodontics - Comprehensive Answers


1. Define Posterior Palatal Seal (PPS) Area - Techniques & Advantages

Definition: The posterior palatal seal area is the soft tissue area at or just beyond the junction of the hard and soft palate on which pressure within physiologic limits can be applied by the denture to aid in its retention. It lies along the vibrating line (AH line) and extends 1-2 mm posterior to it.
Techniques of Recording PPS:
  1. Scraping/Carving technique (arbitrary): After border molding, a groove is carved in the master cast along the vibrating line and posterior extent; the denture base then compresses this area when processed.
  2. Fluid wax technique: Fluid wax (e.g., Iowa wax) is added to the posterior border of the tray; patient performs functional movements to mold the seal area.
  3. Modeling plastic (impression compound) technique: Low-fusing compound is added to the posterior border of the tray and molded.
  4. Beading and boxing technique: The land area is trimmed and the periphery is beaded with rope wax to define the posterior border on the cast.
  5. Thomas's technique: Uses a T-burnisher to evaluate tissue compressibility clinically and marks the depth of the palatal soft tissue.
Advantages of Recording PPS:
  • Improves retention of the maxillary complete denture by creating a peripheral seal
  • Prevents food from going under the denture
  • Prevents the posterior edge from causing discomfort (no sharp posterior border)
  • Compensates for polymerization shrinkage of the acrylic denture base
  • Provides better fit along the vibrating line

2. Face Bow

A face bow is a caliper-like device used to record the relationship of the maxillary arch to the temporomandibular joints (or the hinge axis) and to transfer this relationship to an articulator so that the articulator mimics the movements of the patient's jaws.
Types:
  • Arbitrary face bow - locates an estimated hinge axis (12 mm anterior to the tragus on tragus-corner of eye line)
  • Kinematic (hinge bow) - locates the true transverse hinge axis
Parts: U-frame, bite fork, condylar rods/earpieces, orbital pointer, locking screws
Procedure: The bite fork loaded with wax/impression material is seated on the maxillary occlusal rim, condylar rods seated in the external auditory meati (or over the estimated hinge axis), and the orbital pointer contacts the infraorbital notch to establish a third reference point. The assembly is locked and transferred to the articulator.
Significance: Without a face bow, the arc of closure on the articulator does not match the patient's arc of closure, leading to occlusal errors.

3. Functional Reline Technique

A technique for relining complete dentures in which the denture is relined with a soft or fluid material while the patient performs functional jaw movements. The mucosa and surrounding tissues are recorded under functional load.
Steps:
  1. Prepare the tissue surface of the denture (roughen/remove ~2 mm of acrylic)
  2. Load denture with a soft relining material (e.g., Visco-gel, Coe-Comfort, or autopolymerizing resin)
  3. Insert the loaded denture and ask the patient to close into centric occlusion
  4. Patient performs functional movements: swallowing, smiling, puckering lips
  5. Excess material trimmed; borders molded by functional movements
Advantage: Captures the functional form of the denture foundation under occlusal load; good for immediate relining and tissue conditioning.

4. Muco-Compressive Impression Technique

An impression technique where pressure is applied to displace and compress the soft tissues of the denture-bearing area, recording them in a compressed or functional state.
  • Also called pressure impression technique or selective pressure technique
  • Used for flabby ridges, displaceable tissues
  • Materials: Zinc oxide-eugenol paste, impression plaster, or rubber base materials with custom trays having spaced/relief areas
  • Selective pressure is applied to primary stress-bearing areas while relief is provided over fragile areas (e.g., incisive papilla, mid-palatal raphae)
  • Results in a denture that seats and functions under load similar to the impression state
Contrasted with Mucostatic technique: Mucostatic records tissues at rest (minimal pressure); muco-compressive records under functional load.

5. Overdentures

Definition: A complete or partial denture supported by retained natural teeth roots, implants, or tooth preparation that is not removed by the patient except for cleaning.
Advantages:
  • Preservation of alveolar bone (proprioception via PDL retained)
  • Enhanced stability and retention
  • Psychological benefit (less trauma of full extraction)
  • Better control of occlusal vertical dimension
  • Retained roots serve as abutments
Abutment preparation: Teeth are decoronated to 2-3 mm above gingival level, endodontically treated (if needed), domed/copings placed
Types of attachments: Ball & socket, bar & clip (Dolder bar), stud attachments, magnet attachments
Disadvantage: Caries risk to retained roots; increased cost; more frequent maintenance

6. Hanau's Quint

Five factors described by Rudolph Hanau (1926) that must be in balance for harmonious complete denture occlusion:
FactorSymbol
1. Condylar guidance (incisal guidance)C
2. Incisal guidanceI
3. Plane of occlusionP
4. Cusp heightC
5. Compensating curveC
Hanau's formula: "CIPP-C" - Condylar guidance is fixed by the patient's anatomy; all other factors are adjusted by the dentist. Increasing condylar guidance requires increasing cusp height, steepening the compensating curve, or flattening the plane of occlusion.
Significance: Achieving balance among these five determinants produces bilaterally balanced occlusion in complete dentures.

7. Snap-on Denture

Also called implant-retained overdenture with snap (stud) attachments (e.g., Locator attachments, O-ring/ball attachments).
  • 2 or 4 implants placed in the edentulous arch (mandibular arch most common: 2 implants in canine region)
  • Male abutment (ball) screwed onto the implant; female (housing with nylon insert) incorporated in the denture
  • Denture "snaps" onto the implants
  • Significant improvement in retention, stability, and patient satisfaction over conventional complete dentures
  • McGill Consensus (2002): 2-implant retained mandibular overdenture is the minimum standard of care for edentulous mandible

8. Muscles of Mastication

Four paired muscles:
MuscleOriginInsertionAction
MasseterZygomatic archRamus/angle of mandibleElevation (closes jaw)
TemporalisTemporal fossaCoronoid processElevation; posterior fibers retract
Medial pterygoidMedial pterygoid plateMedial ramus/angleElevation, protrusion
Lateral pterygoidLateral pterygoid plate (superior/inferior heads)Condyle neck/discProtrusion, lateral excursions, opening
Nerve supply: All from mandibular nerve (V3), anterior division - motor branch of trigeminal nerve Blood supply: Maxillary artery branches

9. Combination Syndrome

Described by Kelly (1972). Occurs when a maxillary complete denture opposes a mandibular partial denture with only anterior teeth remaining.
Features (5 classic):
  1. Loss of bone in the anterior maxilla
  2. Overgrowth (hyperplasia) of the anterior maxillary tuberosity
  3. Papillary hyperplasia of the hard palate mucosa
  4. Extrusion of the mandibular anterior teeth
  5. Bone loss beneath the mandibular posterior denture bases
Cause: Anterior occlusal forces concentrated on the anterior maxilla; posterior lack of support leads to occlusal imbalance.
Treatment: Anterior occlusal stop correction, relining denture bases, surgical correction of bony exostosis/hyperplasia if needed.

10. Define Border Molding - One Technique

Definition: Border molding (muscle trimming) is the process of determining the exact shape, extent, and contour of the denture border areas by the functional or simulated functional movements of the tissues adjacent to the borders. It ensures the peripheral seal and proper extension of the final impression tray.
Green Stick Compound (Modeling Plastic) Technique:
  1. Custom tray is made with appropriate borders
  2. Low-fusing impression compound (green stick, Type I) is softened over a flame or in hot water (60-65°C)
  3. Applied in sections to the border of the custom tray
  4. Inserted in the patient's mouth; specific muscle movements are performed for each area:
    • Labial flange: lip stretched up-down and side-to-side
    • Buccal flange: cheeks distended and rotated
    • Posterior palatal seal: ask patient to say "Ah" (for the vibrating line)
    • Lingual flange (mandible): tongue movements - protrusion, lateral, touch roof of mouth
  5. Excess compound trimmed; process repeated until all areas are border molded

11. Factors Affecting Stability in Complete Dentures

Stability = resistance to horizontal/rotational displacing forces.
  1. Quality of denture foundation - flat or prominent ridges improve stability
  2. Denture base extension - maximum coverage of stress-bearing areas
  3. Accurate fit of denture base to the underlying tissues
  4. Occlusion - bilateral balanced occlusion prevents rocking
  5. Occlusal plane - at the level of the tongue and lower lip
  6. Polished surface contour - neutral zone concept; cheeks and tongue stabilize the denture
  7. Weight of denture - lighter base materials preferred
  8. Neuromuscular control - patient's masticatory muscle coordination
  9. Residual ridge height - more height = more stability
  10. Vertical dimension - correct VDO prevents anteroposterior slide

12. Retromolar Pad

A pear-shaped, soft tissue pad located at the distal end of the mandibular residual ridge (posterior to the last molar area).
Composition:
  • Loose connective tissue
  • Terminal fibers of the buccinator muscle (pterygomandibular raphe)
  • Superior pharyngeal constrictor fibers
  • Mucous glands
  • Loose fatty tissue
Significance in CD:
  • Landmark for posterior border extension of mandibular denture
  • Denture should cover the anterior 2/3 of the retromolar pad
  • Stable bony landmark for setting mandibular posterior teeth - occlusal plane at mid-point of retromolar pad
  • Bounded anteriorly by the retromolar fossa

13. Anterior Reference Points

Reference points used to establish the occlusal plane and in face bow transfer:
  1. Infraorbital notch (Camper's point) - used in Camper's plane (ala-tragus line)
  2. Nasion - used in Frankfurt horizontal plane
  3. Glabella - used for esthetic positioning
  4. Incisal edge of maxillary central incisors - reference for occlusal plane anteriorly
  5. Incisive papilla - lies 8-10 mm posterior to the facial surface of maxillary central incisors; used when original tooth positions are unknown
In articulators, the orbitale (infraorbital point) is the anterior reference point used with the transverse hinge axis to establish the Frankfort horizontal plane.

14. Disinfecting Dentures

Methods:
MethodAgentDuration
Soaking1% sodium hypochlorite5-10 min (max 15 min, longer causes bleaching)
Soaking2% glutaraldehyde (Cidex)10-30 min
Soaking0.2% chlorhexidine10-30 min
MicrowaveWater in microwave at 650W3-5 min
UV lightUV chamber5-10 min
Chemical tabletsAlkaline peroxide tablets15-30 min overnight
Precautions:
  • Prolonged hypochlorite causes bleaching and corrosion of metal parts
  • Glutaraldehyde is toxic - use in ventilated areas
  • Do not use alcohol (causes crazing of acrylic)
  • Rinse thoroughly after chemical disinfection

15. Primary Stress-Bearing Areas

Areas that can withstand masticatory forces without causing injury:
Maxillary arch:
  • Posterior hard palate (horizontal palatine process)
  • Slopes of the residual ridge (buccal and palatal)
Mandibular arch:
  • Buccal shelf area (primary stress-bearing area of mandible) - bounded by the external oblique ridge laterally and the residual ridge crest medially; covered by cortical bone; nearly horizontal
  • Residual ridge crest (secondary)

16. Secondary Stress-Bearing Areas

Areas that supplement load distribution but cannot bear the primary masticatory forces:
Maxillary:
  • Anterior hard palate
  • Rugae area
  • Residual ridge crest
Mandibular:
  • Residual ridge crest
  • Slopes of the residual ridge
  • Retromolar pad (minor contribution)

17. Preliminary Impression Materials

Used for making the primary/study cast to fabricate the custom tray.
  1. Irreversible hydrocolloid (Alginate) - most commonly used; elastic; good detail; must be poured immediately
  2. Impression compound (Type I, green stick) - older material; thermoplastic; used in stock trays for preliminary impressions in complete dentures
  3. Impression plaster - rigid; rarely used today; excellent wettability
  4. Zinc oxide-eugenol (ZOE) impression paste - rigid; historically used for preliminary impressions (Surgeon's paste)

18. Trial Denture Base (Record Base / Baseplate)

A temporary denture base made to hold the wax occlusal rims during jaw relation records and tooth arrangement try-in.
Requirements:
  • Accurate adaptation to the master cast
  • Rigidity (no flexion during function)
  • Stability (no rocking or displacement)
  • Comfort to the patient
Materials:
  1. Shellac baseplates (historically)
  2. Self-cured/heat-cured acrylic resin (most stable)
  3. Thermoplastic materials (Triad VLC)
  4. Light-cured resin
Uses:
  • Supporting wax rims for jaw relation recording
  • Try-in of denture teeth arrangements
  • Patient approval of esthetics and phonetics

19. Disinfection of Impressions

Impressions must be disinfected before sending to the laboratory to prevent cross-infection.
Steps (ADA recommended):
  1. Rinse impression under running water to remove blood/saliva
  2. Spray or immerse in disinfectant
Materials and times:
Impression MaterialDisinfectantMethodTime
Alginate1% sodium hypochloriteSpray (not soak - distortion)10 min
Polyvinyl siloxane2% glutaraldehyde or hypochloriteSoak or spray10-30 min
Polyether1% sodium hypochloriteSpray only10 min
ZOE paste2% glutaraldehydeSoak10 min
Impression plaster1% hypochloriteSpray10 min

20. Dual Arch Impression (Dual Bite / Twin Mix Technique)

A single impression technique that simultaneously records both arches and the centric occlusion relationship in one step.
Technique:
  • A triple tray (dual arch tray) is used - has a mesh screen between two impression material-filled sides
  • Records maxillary and mandibular arches simultaneously
  • Patient closes in centric occlusion during the impression
Advantages: Fewer impressions needed; accurate interocclusal relationship; efficient Limitations: Not suitable for extensive restorations; may distort if patient movement occurs; limited in complete denture use (primarily for fixed partial dentures)

21. Hardy's Posterior Teeth

Hardy posterior teeth (also called non-anatomic/zero-degree/flat posterior teeth):
  • Cusp inclination: 0 degrees
  • Designed by Hardy
  • Used in complete dentures to minimize horizontal forces on the residual ridge
  • Favored for patients with flabby ridges, Class III jaw relations, unfavorable ridge relationships
  • Monoplane occlusion concept: lingualized occlusion or flat plane occlusion

22. Witch's Chin

A descriptive term for a clinical condition where the chin appears pointed and forward due to excessive resorption of the anterior mandibular ridge and consequent loss of vertical dimension.
Also refers to a prosthetic complication where the chin drops inferiorly, giving a ptotic, witch-like appearance - seen in patients with severely resorbed mandibular ridges where the mentalis muscle attachment area becomes the most prominent point of the chin.

23. Classify Hard and Soft Palate

Hard Palate (Palatal Tori - Anatomical Variants):
Schreinemakers classification of palatal contour (for CD):
  • Class I: Flat - best support
  • Class II: Slightly curved - good support
  • Class III: Vault-shaped - moderate support
  • Class IV: U-shaped/deep vault - difficult; requires special impression techniques
Soft Palate Classification (based on inclination angle):
  • Class I: Nearly horizontal (0-20°) - best posterior seal possible
  • Class II: 45° angulation - moderate seal
  • Class III: Steep/vertical (>70°) - poor posterior seal; difficult to seal

24. Pound's Triangle

A geometric guide described by Pound for positioning mandibular anterior teeth:
The mandibular canines should be positioned in a triangle formed by:
  • A line from the distal surface of the canine on one side to the distal surface of the canine on the other side (anteriorly)
  • The lines extending posteriorly to the tips of the retromolar pads
Rule: Mandibular posterior teeth should be set within this triangle to ensure stability of the mandibular denture. Teeth placed outside the triangle destabilize the denture.

25. Mean Value Articulator

An articulator set with average (mean) values of condylar inclination and other parameters, representing the average of a population, without individualization via face bow or interocclusal records.
Settings:
  • Condylar inclination: 30°
  • Bennett angle: 15°
  • Incisal guidance: 10°
Examples: Hanau Model H, Whip Mix articulator (at mean settings)
Advantages: Simple, economical, no face bow needed Disadvantages: May not represent the individual patient; errors in balancing occlusion

26. Gothic Arch Tracing (Needle Point Tracing / Arrow Point Tracing)

A method for recording centric relation and lateral jaw movements by tracing the path of mandibular movement relative to the maxilla.
Components:
  • Maxillary plate (recording plate) with coated surface
  • Mandibular stylus (pointer) attached to the mandibular occlusal rim
Tracing: Lateral and protrusive movements produce a gothic arch (arrow/chevron shape). The apex of the arch represents centric relation.
Uses:
  • Verifying centric relation in CD patients
  • Recording lateral excursions
  • Useful when patient cannot reliably follow verbal commands for jaw positioning

27. Denture Cleansers

Types:
TypeExamplesMechanism
MechanicalToothbrush, denture brushPhysical removal
Chemical soakingAlkaline peroxide tablets (Steradent, Polident)Oxidative; effervescent
Chemical immersionDilute NaOCl (1%), dilute acidsBleaching/cleaning
UltrasonicUltrasonic baths with cleaning solutionCavitation + chemical
EnzymaticProteolytic, glucoamylaseBreak down organic deposits
Most recommended: Alkaline peroxide tablets + brushing Avoid: Abrasive pastes (scratch acrylic); full-strength bleach (corrodes metal parts); alcohol (crazes acrylic)

28. Neutro-Centric Occlusion

A concept of complete denture occlusion where posterior teeth are set in the neutral zone (the area between the cheeks/lips and tongue where forces are in equilibrium).
  • Anterior teeth in neutral position
  • Posterior teeth set where the tongue and cheeks exert equal and opposing forces
  • Provides natural stability to the denture base
  • Related to lingualized occlusion and balanced occlusion concepts

29. Rest Position of Mandible

The position of the mandible when the masticatory muscles are in a state of minimal tonic activity (physiologic rest). All muscles are at their resting length.
  • Also called Postural position or Physiologic rest position
  • No teeth contact occurs
  • Free-way space (2-4 mm typically) exists between upper and lower teeth
  • Used as a reference to establish correct vertical dimension of occlusion (VDO = VDR - freeway space)
  • Recorded clinically by: phonetics, swallowing, relaxation techniques

30. Putty-Wash Impression (Two-Stage Impression Technique)

A technique used mainly with vinyl polysiloxane (VPS) materials:
Stage 1: A putty (heavy body/high viscosity) impression is made in a stock tray. A spacer (cellophane/polyethylene sheet) is placed over the putty or preliminary impression is relieved.
Stage 2: Light-body (wash) material is placed in the putty impression and reinserted for the final detail impression.
Advantages:
  • Custom tray effect from putty
  • Excellent detail from wash material
  • Minimal distortion
  • No custom tray needed

31. Incisal Guidance

The influence of the contacting surfaces of the maxillary and mandibular anterior teeth on mandibular movements. Determined by:
  • Vertical overlap (overbite) and horizontal overlap (overjet) of anterior teeth
Incisal guidance angle: The angle formed between the occlusal plane and the line connecting the incisal edges of maxillary and mandibular incisors during protrusive movement (typically 10-20° in complete dentures; reduced compared to natural dentition).
Importance in CD: Steep incisal guidance disrupts posterior balance - must be reduced in complete dentures to achieve bilaterally balanced occlusion.

32. Denture Rebasing

The process of replacing the entire denture base material of an existing denture with new acrylic resin, while retaining the original denture teeth and their positions.
Indications:
  • Severe residual ridge resorption requiring more than relining can correct
  • Excessively porous, stained, or deteriorated denture base
  • When the existing teeth are still satisfactory
Steps: Remounting the denture on an articulator, removing the old base material, processing new denture base resin with existing teeth
Rebasing vs. Relining:
  • Relining: Adding material to the tissue surface only
  • Rebasing: Replacing all the denture base material

33. Palatal Defects

Defects of the hard/soft palate requiring obturator prostheses.
Classification (Aramany, 1978):
  • Class I: Resection crosses midline; remaining teeth on one side
  • Class II: Resection unilateral; teeth on ipsilateral side remain
  • Class III: Central defect in hard palate; teeth on both sides remain
  • Class IV: Crosses midline; bilateral; teeth remaining posteriorly
  • Class V: Bilateral posterior defect
  • Class VI: Anterior defect
Causes: Cleft palate (congenital), tumor resection, trauma, infection
Prosthesis: Obturator - surgical, interim, or definitive. Seals the defect and restores speech, swallowing, and esthetics.

34. Retromolar Papilla

A small, rounded elevation of mucosal tissue at the distal end of each side of the mandibular arch, located just anterior to the retromolar pad.
  • Also called pear-shaped pad or part of the retromolar pad complex
  • Composed of dense fibrous connective tissue
  • Landmark for determining occlusal plane height
  • Used for positioning mandibular posterior teeth

35. Relief Area in Maxilla

Areas of the maxilla that must be relieved (given space) in the denture base to prevent pressure and pain:
  1. Incisive papilla - most important; lies over the nasopalatine foramen; excessive pressure causes numbness of anterior palate (nasopalatine nerve compression)
  2. Mid-palatal raphae (palatine torus/torus palatinus if present) - thin mucosa; poor resilience
  3. Torus palatinus - if prominent, requires surgical removal or relief in the denture
  4. Sharp or undercut areas of the residual ridge

36. Relining and Rebasing

Relining: Adding new base material to the tissue surface of an existing denture to re-adapt it to the changed ridge form.
Methods of Relining:
  • Chair-side (direct): Autopolymerizing resins or soft reliners applied and adapted while wearing
  • Laboratory (indirect): Denture sent to lab for heat-processed reline
Rebasing: Replacement of the entire denture base while retaining existing teeth.
Indications for relining/rebasing: Ridge resorption, poor retention, ill-fitting denture (not due to occlusal or vertical dimension errors)

37. Mental Attitude of Edentulous Patients

House Classification (1950):
ClassDescriptionPrognosis
I - PhilosophicalUnderstands problem; accepts limitations; cooperativeExcellent
II - ExactingMeticulous; hard to please but rationalGood with patience
III - HystericalEmotional; unrealistic expectations; blames dentistGuarded
IV - IndifferentDoes not care; minimal cooperation; wears denture out of social pressurePoor
Significance: Mental attitude significantly affects treatment outcome and patient satisfaction with complete dentures.

38. Incisive Papilla

A small, oval-shaped, fibrous pad of tissue located at the anterior end of the mid-palatal raphae, just posterior to the maxillary central incisors.
Clinical significance:
  • Lies over the nasopalatine foramen (incisive canal); contains nasopalatine nerve and vessels
  • Must be relieved in the denture base to avoid pressure
  • Used as a landmark: centers of maxillary canines are approximately 11 mm from the center of the incisive papilla bilaterally
  • The labial surface of maxillary central incisors is approximately 8-10 mm anterior to the center of the incisive papilla

39. Plane of Occlusion

An imaginary flat (or slightly curved) surface that relates the maxillary and mandibular occlusal contacts in three planes of space.
Orientation:
  • Anteriorly: at the level of the lower border of the upper lip (or at the vermillion border) or at the level of the middle of the retromolar pad in the mandible
  • Posteriorly: at the level of the middle of the retromolar pad (mandible) and parallel to the ala-tragus (Camper's) line (maxilla)
Ala-tragus (Camper's plane): Line from the inferior border of the ala of the nose to the superior border of the tragus of the ear - roughly parallel to the occlusal plane.

40. Compression Molding Method

A method of denture base processing (also called Compression molding / Compression packing):
  • Uses a flask (denture flask) divided into two halves
  • Wax denture trial is packed in dental stone/plaster
  • Wax is eliminated by boiling water
  • Dough-stage heat-polymerizing acrylic resin (PMMA) is packed in the flask under compression
  • Flask placed in a hydraulic press; cured in hot water bath at 74°C for 8 hours or 100°C for 30 minutes (terminal cure)
Advantages: Economical; widely used; good aesthetic results Disadvantages: Polymerization shrinkage; porosity if under-packed or over-packed; dimensional change

41. Phonetics in Complete Dentures

The study of speech sounds is used for:
  1. Determining vertical dimension: At rest and "closest speaking space" (see below)
  2. Anterior tooth position:
    • "F" and "V" sounds: maxillary incisal edges lightly contact the lower lip vermillion border
    • "S" sound (sibilants): tests closest speaking space (0.5-1 mm space between upper and lower anterior teeth)
    • "M" sound: tests rest position
    • "TH" sound: tongue touches the lingual of upper anteriors
    • Bilabial sounds (P, B, M): tests lip relationship

42. Advantages of Immediate Complete Dentures

  1. No period of edentulousness (esthetic advantage)
  2. Serves as a surgical stent/bandage - aids in hemostasis and wound healing
  3. Patient does not have to learn chewing, speaking without teeth
  4. Ridge maintained; less resorption immediately post-extraction
  5. Existing jaw relations and occlusion can be used as reference
  6. Psychological benefit
Disadvantages: Cannot try-in before delivery; more resorption occurs; requires many adjustments; more expensive

43. Tube Impression / Syringe Impression

A technique for making impressions of severely resorbed ridges using a syringe or tube:
  • Low-viscosity impression material (light-body, fluid ZOE) loaded in a syringe
  • Injected along the ridge before seating the tray
  • Ensures no air entrapment; excellent adaptation to the atrophied ridge
Fluid wax technique (Massad/Levin): Low-fusing wax or impression plaster used in similar syringe method for very flat ridges.

44. Free-Way Space (Interocclusal Rest Space)

The vertical distance between the occlusal surfaces of the maxillary and mandibular teeth when the mandible is in the rest position.
Normal value: 2-4 mm (average 3 mm)
Formula: VDR = VDO + FWS
  • VDR (Vertical Dimension at Rest) = VDO + FWS
Clinical significance:
  • If FWS is lost (VDO too high): muscle fatigue, clicking sounds, bone resorption
  • If FWS is excessive (VDO too low): cosmetic problem, loss of masticatory efficiency

45. Eccentric Jaw Relations

All jaw relations other than centric relation.
Types:
  1. Protrusive relation: Mandible moved forward from centric
  2. Lateral relation (working side and balancing side): Mandible moved to right or left
  3. Retruded lateral relations
  4. Combinations of above
Importance in CD: Recording eccentric jaw relations allows setting of condylar inclination on the articulator and achieving bilaterally balanced occlusion.

46. Tissue Conditioners

Soft, viscoelastic materials placed in the tissue surface of an ill-fitting denture to allow the traumatized, inflamed oral mucosa to heal before making a new impression or denture.
Properties: Soft, viscoelastic (not elastic); flows under function to adapt to the mucosa
Examples: Visco-gel (Dentsply), Coe-Comfort (GC), Fitt (Kerr)
Composition: Polymer powder (PMMA) + liquid (aromatic ester plasticizer + ethanol)
Uses:
  • Treating denture stomatitis
  • Conditioning abused tissues
  • Functional impression material
  • Temporary soft liner
Replace: Every 3-5 days as they stiffen over time

47. Selective Grinding (Equilibration)

Adjustment of the occlusal surfaces of denture teeth to achieve harmonious, balanced occlusion after delivery.
Methods:
  1. BULL rule (used in protrusive correction): Grind the Buccal cusps of Upper and Lingual cusps of Lower (for protrusive interferences)
  2. MUDL rule (for mediotrusive/non-working side): Grind Mesial inclines of Upper and Distal inclines of Lower
  3. LUBL: for lateratrusive/working side corrections
Steps:
  • Remount dentures on articulator using remount cast
  • Mark interferences with articulating paper
  • Grind selectively; do not alter centric stops
  • Polish after completion

48. Epulis Fissuratum (Inflammatory Fibrous Hyperplasia)

Inflammatory overgrowth of the oral mucosa related to chronic irritation from an ill-fitting denture flange.
Features:
  • Found in the vestibular sulcus (buccal/labial)
  • Folds of hyperplastic fibrous tissue with a groove/fissure where the denture flange impinges
  • Histology: stratified squamous epithelium, fibrous connective tissue, chronic inflammatory infiltrate
Treatment:
  1. Remove the offending denture flange irritation (adjust the denture)
  2. Tissue conditioning
  3. Surgical excision if hyperplasia persists
  4. Refit/remake denture after healing

49. Labial Frenum

A fold of mucous membrane that connects the lips/cheeks to the alveolar mucosa. In complete dentures:
Maxillary labial frenum:
  • Must be accommodated by a notch in the denture flange (frenal notch)
  • If prominent, may compromise retention and anterior extension
  • Frenectomy may be needed if it interferes with denture fit
Mandibular labial frenum:
  • Similar accommodation needed
  • Less clinical significance than lingual frenum

50. Realeff

Realeff is a chair-side soft relining material (a tissue conditioner/resilient liner).
  • Self-cure; applied at the chair-side
  • Provides a temporary soft, cushioned surface
  • Used for tissue conditioning and temporary relining

51. Use of Radiographs in Complete Dentures

  1. Pre-treatment assessment:
    • Detect residual root tips, impacted teeth, foreign bodies
    • Evaluate bone quality and quantity
    • Identify pathology (cysts, tumors, osteomyelitis)
    • Detect the mental foramen position (important for determining posterior extension of mandibular denture)
  2. During treatment: Monitor healing after extractions
  3. Post-delivery: Check for pathology; monitor ridge resorption
Types used: Panoramic OPG (most valuable), periapical radiographs, occlusal films

52. Denture Adhesives

Materials applied to the tissue surface of dentures to improve retention and stability.
Types:
  • Powders (Fixodent powder)
  • Pastes/creams (Fixodent, Poli-grip, Cushion Grip)
  • Pads/wafers (Seabond)
Composition: Karaya gum, methylcellulose, carboxymethylcellulose (CMC), polyvinylmethyl ether-maleic acid (Gantrez)
Indications: Transitional use during new denture adaptation; xerostomia patients; occasional use for social confidence
Contraindications: Should NOT be used as a substitute for proper denture fit; excessive use masks need for dental treatment; zinc-containing adhesives may cause zinc toxicity with long-term use

53. Christensen's Phenomenon

When the mandible moves into protrusion with the occlusal plane maintained, a space (wedge-shaped gap) opens between the posterior teeth bilaterally. This is the Christensen phenomenon.
Clinical significance:
  • Confirms that posterior teeth must have cuspal angles or compensating curves to maintain contact during protrusive movements
  • Basis for the need of compensating curves (Curve of Spee) and balanced occlusion in complete dentures

54. Lateral Throat Form

The posterior extension of the mandibular denture lingual flange in the region of the retromolar pad, bounded by the pterygomandibular raphe, superior pharyngeal constrictor, and buccinator.
Pound's classification of lateral throat form:
  • Class I: Vertical ramus, small space - limited posterior extension
  • Class II: Moderate space
  • Class III: Large space - greater posterior extension possible; best retention

55. Pterygomaxillary Notch (Hamular Notch)

A soft tissue depression located between the maxillary tuberosity and the hamulus (pterygoid hamulus) of the medial pterygoid plate.
In CD:
  • Marks the posterior border of the maxillary denture
  • The denture must seal across this notch bilaterally along with the posterior palatal seal
  • Palpated with a ball burnisher to locate and mark
  • Failure to extend to this area compromises retention

56. Bilabial Sounds

Sounds produced by approximating both lips: P, B, M
Significance in CD:
  • Test the inter-labial gap and lip relationship
  • Upper and lower lips should meet passively when saying "P" or "B"
  • If lips cannot meet: VDO too high, or teeth set too far forward
  • If lip unsupported and sunken: VDO too low or teeth too far posterior
  • Used to verify labial flange thickness and tooth position

57. Compensating Curves

Curves built into the occlusal plane of complete dentures to maintain posterior tooth contact during protrusive and lateral jaw movements (counteract Christensen's phenomenon).
  1. Curve of Spee (Antero-posterior compensating curve): A curve in the sagittal plane; posterior teeth are inclined so their cusp tips describe an arc; compensates for condylar inclination during protrusion
  2. Curve of Wilson (lateral/transverse compensating curve): In the frontal plane; posterior teeth inclined medially so lingual cusps are lower than buccal cusps; compensates for Bennett movement and lateral condylar inclination
Combined: Sphere of Monson (all cusps on a sphere of radius 4 inches = 10 cm)

58. Lip Lines

Reference lines established from the lip position:
  1. High lip line: The highest position of the upper lip during smiling - determines how much maxillary teeth and gingival flange must be visible
  2. Low lip line: The lowest position of the lower lip - determines how much mandibular teeth show
  3. Resting lip line: Position with the lips relaxed - determines the length and position of maxillary central incisors (incisal edge at or 1-2 mm below the resting upper lip)

59. Modiolus

A fibromuscular condensation point at the corner of the mouth where several muscles converge:
  • Orbicularis oris
  • Buccinator
  • Levator anguli oris
  • Depressor anguli oris
  • Zygomaticus major
  • Risorius
In CD: The denture flange must not displace or interfere with the modiolus. Proper flange thickness and contour in this area affects facial support, retention, and esthetics.

60. Bonwill's Equilateral Triangle Theory

W.G.A. Bonwill (1858) proposed that an equilateral triangle of side 4 inches (10 cm = 101.6 mm) connects:
  • The two condylar points (bilateral TMJ)
  • The mandibular central incisor contact point (mesial contact)
Significance:
  • Used to set the intercondylar distance on articulators
  • Basis for setting posterior teeth
  • Combined with Balkwill angle (26°) and Monson sphere (4 inch radius) in balanced occlusion

61. Closest Speaking Space

The minimal interocclusal distance that exists between the maxillary and mandibular anterior teeth during production of the sibilant ("S") sound.
Normal value: 0.5-1 mm (less than the freeway space of 2-4 mm)
Clinical use:
  • If closest speaking space is 0 (teeth touch when saying "S"): VDO is too high
  • If closest speaking space exceeds 2-3 mm: VDO may be too low
  • Helps determine and verify the vertical dimension of occlusion

62. Bull's Law / BULL Rule

A rule for selective grinding to correct protrusive interferences:
Buccal cusps of Upper teeth and Lingual cusps of Lower teeth are ground to eliminate protrusive interferences.
Explanation: In protrusive movement, the upper buccal cusp mesial inclines and lower lingual cusp distal inclines create premature contact - these are selectively reduced.
For non-working (balancing) side: Use MUDL rule - Mesial inclines of Upper and Distal inclines of Lower

63. Boundaries of Buccal Shelf Area

Medially: Crest of the mandibular residual ridge Laterally: External oblique ridge Anteriorly: Distobuccal area of the anterior ridge Posteriorly: Retromolar pad (anterior border)
The buccal shelf is covered with cortical bone, oriented nearly perpendicular to occlusal forces - making it the primary stress-bearing area of the mandibular arch.

64. Define Centric Relation

A jaw relationship (not a tooth contact position). Definitions have evolved:
Classic definition (GPT-8): "A maxillomandibular relationship in which the condyles articulate with the thinnest avascular portion of their respective discs with the complex in the anterior-superior position against the slopes of the articular eminences. This position is independent of tooth contact."
Older definition (Posselt): Most retruded, unstrained position of the mandible from which lateral movements can be made.
Key points:
  • A bone-to-bone (joint) relationship, not a tooth contact
  • Reproducible and repeatable
  • Used as a reference for recording jaw relations in CD

65. Bennett Shift (Bennett Movement)

The lateral bodily translation (side shift) of the mandible as it moves into a lateral excursion.
  • Named after Norman G. Bennett (1908)
  • The working side condyle moves laterally
  • The non-working (balancing side) condyle moves downward, forward, and medially (orbits around the working condyle)
Bennett angle: The angle between the sagittal plane and the average path of the advancing (non-working) condyle during lateral movement. Average: 15-17°.
Significance in CD: Must be incorporated into articulator settings to achieve balanced occlusion.

66. Articular Disc (Meniscus of TMJ)

A biconcave, oval fibrocartilaginous disc located between the condyle and the articular eminence of the temporal bone within the TMJ.
Structure:
  • Anterior band (thick): Attached to the joint capsule and superior head of lateral pterygoid
  • Intermediate zone (thinnest): The actual functional area between condyle and eminence
  • Posterior band (thickest): Connected to the retrodiscal bilaminar zone (elastic and collagen fibers)
Function:
  • Divides the joint into upper (temporodiscal) and lower (condylodiscal) compartments
  • Upper: gliding movements (translation/protrusion)
  • Lower: rotation (hinge movements - pure rotation during first 20-25 mm of opening)
  • Cushions and distributes forces on the condyle and eminence
Displacement: Anterior disc displacement (with or without reduction) is the most common TMJ internal derangement.

These answers cover all the topics from the question list visible in both images. Topics are from complete denture prosthodontics including impression techniques, occlusion, jaw relations, denture design, anatomy, and related clinical procedures.

Create a study guide PDF with diagrams of key CD concepts

Reading File
Running Command

mkdir -p /home/daytona/workspace/cd-study-guide && ls /home/daytona/workspace/

Writing File

~/cd-study-guide/generate_cd_guide.py

from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import cm, mm
from reportlab.platypus import (
    SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle,
    PageBreak, HRFlowable, KeepTogether
)
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_CENTER, TA_LEFT, TA_JUSTIFY
from reportlab.graphics.shapes import (
    Drawing, Rect, Circle, Ellipse, Line, Polygon, String, Arrow,
    Group, PolyLine
)
from reportlab.graphics import renderPDF
from reportlab.platypus.flowables import Flowable
import math

# ── Colour palette ──────────────────────────────────────────────────────────
NAVY    = colors.HexColor('#1B3A5C')
TEAL    = colors.HexColor('#2E7D8C')
GOLD    = colors.HexColor('#D4A843')
CREAM   = colors.HexColor('#FFF8EE')
LTBLUE  = colors.HexColor('#D6EAF8')
LTGREEN = colors.HexColor('#D5F5E3')
LTYELLOW= colors.HexColor('#FEFBD8')
LTRED   = colors.HexColor('#FADBD8')
LTPURP  = colors.HexColor('#E8DAEF')
GREY    = colors.HexColor('#ECF0F1')
DKGREY  = colors.HexColor('#5D6D7E')
WHITE   = colors.white
BLACK   = colors.black
RED     = colors.HexColor('#C0392B')
GREEN   = colors.HexColor('#1E8449')
PURPLE  = colors.HexColor('#6C3483')
ORANGE  = colors.HexColor('#D35400')

W, H = A4  # 595.27 x 841.89 pts

# ── Styles ───────────────────────────────────────────────────────────────────
styles = getSampleStyleSheet()

def make_style(name, parent='Normal', **kwargs):
    return ParagraphStyle(name, parent=styles[parent], **kwargs)

TITLE_STYLE = make_style('MainTitle', 'Title',
    fontSize=28, textColor=WHITE, alignment=TA_CENTER, spaceAfter=6,
    fontName='Helvetica-Bold')
SUBTITLE_STYLE = make_style('SubTitle', 'Normal',
    fontSize=13, textColor=GOLD, alignment=TA_CENTER, spaceAfter=4,
    fontName='Helvetica-Oblique')
H1 = make_style('H1', fontSize=16, textColor=WHITE, fontName='Helvetica-Bold',
    spaceAfter=6, spaceBefore=10, backColor=NAVY, leftIndent=-6, rightIndent=-6,
    leading=22)
H2 = make_style('H2', fontSize=13, textColor=NAVY, fontName='Helvetica-Bold',
    spaceAfter=4, spaceBefore=8, borderPad=2)
H3 = make_style('H3', fontSize=11, textColor=TEAL, fontName='Helvetica-Bold',
    spaceAfter=3, spaceBefore=5)
BODY = make_style('Body', fontSize=9.5, leading=14, spaceAfter=3,
    alignment=TA_JUSTIFY)
BULLET = make_style('Bullet', fontSize=9.5, leading=13, leftIndent=14,
    bulletIndent=4, spaceAfter=2)
SMALL = make_style('Small', fontSize=8.5, leading=12, textColor=DKGREY)
CAPTION = make_style('Caption', fontSize=8, textColor=DKGREY,
    alignment=TA_CENTER, fontName='Helvetica-Oblique')

# ── Helper: coloured banner paragraph ───────────────────────────────────────
def banner(text, style=H1, bg=NAVY, pad=6):
    d = Drawing(W - 80, 28)
    d.add(Rect(0, 0, W-80, 28, fillColor=bg, strokeColor=None, rx=4, ry=4))
    return [d, Paragraph(f'<font color="white"><b>{text}</b></font>', H2)]

def section_heading(text, bg=NAVY):
    d = Drawing(W - 80, 26)
    d.add(Rect(0, 0, W-80, 26, fillColor=bg, strokeColor=None, rx=3, ry=3))
    return d

# ── Cover Page Drawing ────────────────────────────────────────────────────────
def make_cover():
    d = Drawing(W, H)
    # background gradient-like blocks
    d.add(Rect(0, 0, W, H, fillColor=NAVY, strokeColor=None))
    d.add(Rect(0, H*0.55, W, H*0.45, fillColor=colors.HexColor('#0D2137'), strokeColor=None))
    # decorative circles
    for r, alpha in [(200,0.06),(140,0.09),(90,0.13)]:
        d.add(Circle(W*0.82, H*0.22, r, fillColor=TEAL, strokeColor=None,
                     fillOpacity=alpha))
    # gold accent bar
    d.add(Rect(50, H*0.53, W-100, 4, fillColor=GOLD, strokeColor=None))
    # tooth silhouette (simple molar outline)
    pts = [280,620, 260,580, 265,555, 290,545, 310,548,
           330,545, 355,555, 360,580, 340,620]
    d.add(Polygon(pts, fillColor=WHITE, strokeColor=GOLD, strokeWidth=1.5, fillOpacity=0.12))
    # denture arch (simplified half-arch)
    cx, cy, rx2, ry2 = W/2, 480, 160, 80
    arc_pts = []
    for angle in range(0, 181, 10):
        rad = math.radians(angle)
        arc_pts.extend([cx + rx2*math.cos(rad), cy - ry2*math.sin(rad)])
    d.add(PolyLine(arc_pts, strokeColor=GOLD, strokeWidth=2.5, strokeOpacity=0.5))
    # title text
    d.add(String(W/2, H*0.72, 'COMPLETE DENTURE',
                 fontSize=32, fillColor=WHITE, textAnchor='middle',
                 fontName='Helvetica-Bold'))
    d.add(String(W/2, H*0.66, 'PROSTHODONTICS',
                 fontSize=32, fillColor=GOLD, textAnchor='middle',
                 fontName='Helvetica-Bold'))
    d.add(String(W/2, H*0.60, 'STUDY GUIDE',
                 fontSize=20, fillColor=WHITE, textAnchor='middle',
                 fontName='Helvetica'))
    d.add(String(W/2, H*0.54, 'Key Concepts, Definitions & Diagrams',
                 fontSize=13, fillColor=colors.HexColor('#A9CCE3'),
                 textAnchor='middle', fontName='Helvetica-Oblique'))
    d.add(String(W/2, 60, 'BDS Prosthodontics  |  Complete Denture Series',
                 fontSize=10, fillColor=GOLD, textAnchor='middle',
                 fontName='Helvetica'))
    return d

# ── Diagram helper functions ─────────────────────────────────────────────────

def labeled_arrow(d, x1,y1,x2,y2,label='',color=NAVY,lsize=8):
    d.add(Line(x1,y1,x2,y2,strokeColor=color,strokeWidth=1.4))
    # arrowhead
    angle = math.atan2(y2-y1,x2-x1)
    aw=8
    for da in [0.4,-0.4]:
        d.add(Line(x2,y2,
                   x2-aw*math.cos(angle+da),
                   y2-aw*math.sin(angle+da),
                   strokeColor=color, strokeWidth=1.4))
    if label:
        d.add(String(x2+5, y2, label, fontSize=lsize, fillColor=color,
                     fontName='Helvetica'))

def rounded_box(d, x, y, w, h, text, fill=LTBLUE, stroke=NAVY, tsize=8.5):
    d.add(Rect(x, y, w, h, fillColor=fill, strokeColor=stroke,
               strokeWidth=1.2, rx=5, ry=5))
    # centre text (simple single line)
    d.add(String(x+w/2, y+h/2-tsize*0.4, text, fontSize=tsize,
                 fillColor=BLACK, textAnchor='middle',
                 fontName='Helvetica-Bold'))


# ═══════════════════════════════════════════════════════════════════════════
#  DIAGRAM 1 – Hanau's Quint
# ═══════════════════════════════════════════════════════════════════════════
def diag_hanau():
    dw, dh = 440, 200
    d = Drawing(dw, dh)
    d.add(Rect(0, 0, dw, dh, fillColor=CREAM, strokeColor=None, rx=8, ry=8))
    d.add(String(dw/2, dh-18, "Hanau's Quint – Five Factors of Balanced Occlusion",
                 fontSize=10, fillColor=NAVY, textAnchor='middle',
                 fontName='Helvetica-Bold'))
    items = [
        ('C', 'Condylar\nGuidance', LTBLUE, NAVY),
        ('I', 'Incisal\nGuidance', LTGREEN, GREEN),
        ('P', 'Plane of\nOcclusion', LTYELLOW, ORANGE),
        ('C', 'Cusp\nHeight', LTRED, RED),
        ('C', 'Compensating\nCurve', LTPURP, PURPLE),
    ]
    bw, bh, gap = 72, 70, 12
    total = len(items)*bw + (len(items)-1)*gap
    sx = (dw - total)/2
    sy = 30
    for i,(sym,label,fill,stroke) in enumerate(items):
        bx = sx + i*(bw+gap)
        d.add(Rect(bx, sy, bw, bh, fillColor=fill, strokeColor=stroke,
                   strokeWidth=2, rx=6, ry=6))
        d.add(String(bx+bw/2, sy+bh-16, sym, fontSize=22, fillColor=stroke,
                     textAnchor='middle', fontName='Helvetica-Bold'))
        # wrap label
        lines = label.split('\n')
        for li, ln in enumerate(lines):
            d.add(String(bx+bw/2, sy+20-li*11, ln, fontSize=7.5,
                         fillColor=stroke, textAnchor='middle',
                         fontName='Helvetica'))
        if i < len(items)-1:
            mx = bx+bw+gap/2
            d.add(String(mx, sy+bh/2-5, '⇄', fontSize=14,
                         fillColor=DKGREY, textAnchor='middle'))
    d.add(String(dw/2, 12, 'Condylar guidance is patient-determined; all others are adjusted by the clinician.',
                 fontSize=7.5, fillColor=DKGREY, textAnchor='middle',
                 fontName='Helvetica-Oblique'))
    return d


# ═══════════════════════════════════════════════════════════════════════════
#  DIAGRAM 2 – Muscles of Mastication
# ═══════════════════════════════════════════════════════════════════════════
def diag_muscles():
    dw, dh = 440, 220
    d = Drawing(dw, dh)
    d.add(Rect(0,0,dw,dh, fillColor=CREAM, strokeColor=None, rx=8, ry=8))
    d.add(String(dw/2, dh-16, 'Muscles of Mastication – Summary',
                 fontSize=10, fillColor=NAVY, textAnchor='middle',
                 fontName='Helvetica-Bold'))
    muscles = [
        ('Masseter',       'Zygomatic arch',         'Ramus / Angle',         'Elevation',           LTBLUE,  NAVY),
        ('Temporalis',     'Temporal fossa',          'Coronoid process',      'Elevation + Retract', LTGREEN, GREEN),
        ('Medial Ptery.',  'Med. pterygoid plate',    'Med. ramus / Angle',    'Elevation + Protrude',LTYELLOW,ORANGE),
        ('Lateral Ptery.', 'Lat. pterygoid plate',    'Condyle neck / Disc',   'Protrusion / Opening',LTRED,   RED),
    ]
    headers = ['Muscle','Origin','Insertion','Action']
    col_w = [90,110,115,105]
    row_h = 28
    sy = dh - 40
    # header row
    x0 = 20
    for ci,(h,cw) in enumerate(zip(headers,col_w)):
        cx2 = x0 + sum(col_w[:ci])
        d.add(Rect(cx2, sy-row_h, cw, row_h, fillColor=NAVY,
                   strokeColor=WHITE, strokeWidth=0.5))
        d.add(String(cx2+cw/2, sy-row_h+9, h, fontSize=8, fillColor=WHITE,
                     textAnchor='middle', fontName='Helvetica-Bold'))
    for ri, (m, org, ins, act, fill, stroke) in enumerate(muscles):
        ry2 = sy - row_h*(ri+2)
        vals = [m, org, ins, act]
        for ci,(val,cw) in enumerate(zip(vals,col_w)):
            cx2 = x0 + sum(col_w[:ci])
            bg = fill if ci==0 else WHITE
            d.add(Rect(cx2, ry2, cw, row_h, fillColor=bg,
                       strokeColor=colors.lightgrey, strokeWidth=0.5))
            d.add(String(cx2+cw/2, ry2+9, val, fontSize=7.5,
                         fillColor=stroke if ci==0 else BLACK,
                         textAnchor='middle',
                         fontName='Helvetica-Bold' if ci==0 else 'Helvetica'))
    d.add(String(dw/2, 8, 'All supplied by Mandibular nerve (V3) – Motor branch of Trigeminal nerve',
                 fontSize=7.5, fillColor=DKGREY, textAnchor='middle',
                 fontName='Helvetica-Oblique'))
    return d


# ═══════════════════════════════════════════════════════════════════════════
#  DIAGRAM 3 – Vertical Dimension (VDR / VDO / FWS)
# ═══════════════════════════════════════════════════════════════════════════
def diag_vd():
    dw, dh = 440, 210
    d = Drawing(dw, dh)
    d.add(Rect(0,0,dw,dh, fillColor=CREAM, strokeColor=None, rx=8, ry=8))
    d.add(String(dw/2, dh-16, 'Vertical Dimension – VDR, VDO & Free-Way Space',
                 fontSize=10, fillColor=NAVY, textAnchor='middle',
                 fontName='Helvetica-Bold'))

    # face outline (simplified)
    fx, fy = 70, 30
    # skull oval
    d.add(Ellipse(fx, fy+80, 50, 90, fillColor=colors.HexColor('#FDEBD0'),
                  strokeColor=DKGREY, strokeWidth=1.2))
    # chin
    d.add(Ellipse(fx, fy+5, 28, 18, fillColor=colors.HexColor('#FDEBD0'),
                  strokeColor=DKGREY, strokeWidth=1.2))
    # nose dot
    d.add(Circle(fx, fy+108, 3, fillColor=DKGREY, strokeColor=None))
    # eye
    d.add(Ellipse(fx+18, fy+130, 10, 6, fillColor=WHITE, strokeColor=DKGREY,
                  strokeWidth=1))

    # measurement bars on right side
    # VDR bar (nose to chin at rest)
    y_nose = fy + 108
    y_chin_rest = fy + 10
    y_chin_occ  = fy + 20   # chin slightly higher at VDO

    bx = fx + 70
    # VDR
    d.add(Line(bx, y_nose, bx, y_chin_rest, strokeColor=NAVY,
               strokeWidth=2, strokeDashArray=[4,3]))
    d.add(Line(bx-5, y_nose, bx+5, y_nose, strokeColor=NAVY, strokeWidth=1.5))
    d.add(Line(bx-5, y_chin_rest, bx+5, y_chin_rest, strokeColor=NAVY, strokeWidth=1.5))
    d.add(String(bx+8, (y_nose+y_chin_rest)/2, 'VDR', fontSize=8.5,
                 fillColor=NAVY, fontName='Helvetica-Bold'))

    # FWS brace
    fws_y1 = y_chin_rest
    fws_y2 = y_chin_occ
    d.add(Rect(bx+30, fws_y2, 46, fws_y1-fws_y2,
               fillColor=LTGREEN, strokeColor=GREEN, strokeWidth=1, rx=2))
    d.add(String(bx+53, fws_y2+(fws_y1-fws_y2)/2-4, 'FWS', fontSize=8,
                 fillColor=GREEN, textAnchor='middle',
                 fontName='Helvetica-Bold'))
    d.add(String(bx+53, fws_y2+(fws_y1-fws_y2)/2-14, '2-4mm', fontSize=7,
                 fillColor=GREEN, textAnchor='middle'))

    # VDO
    d.add(Line(bx+85, y_nose, bx+85, y_chin_occ, strokeColor=RED,
               strokeWidth=2))
    d.add(Line(bx+80, y_nose, bx+90, y_nose, strokeColor=RED, strokeWidth=1.5))
    d.add(Line(bx+80, y_chin_occ, bx+90, y_chin_occ, strokeColor=RED, strokeWidth=1.5))
    d.add(String(bx+93, (y_nose+y_chin_occ)/2, 'VDO', fontSize=8.5,
                 fillColor=RED, fontName='Helvetica-Bold'))

    # formula box
    d.add(Rect(250, 20, 170, 55, fillColor=LTBLUE, strokeColor=NAVY,
               strokeWidth=1.5, rx=6))
    d.add(String(335, 62, 'Key Formula', fontSize=9, fillColor=NAVY,
                 textAnchor='middle', fontName='Helvetica-Bold'))
    d.add(String(335, 49, 'VDR  =  VDO  +  FWS', fontSize=11, fillColor=NAVY,
                 textAnchor='middle', fontName='Helvetica-Bold'))
    d.add(String(335, 34, 'FWS (Free-way space) = 2–4 mm', fontSize=8.5,
                 fillColor=DKGREY, textAnchor='middle'))
    d.add(String(335, 24, '"S" sound = closest speaking space (0.5–1 mm)', fontSize=7.5,
                 fillColor=DKGREY, textAnchor='middle',
                 fontName='Helvetica-Oblique'))
    d.add(String(dw/2, 8, 'VDR = Vertical Dim. at Rest  |  VDO = Vertical Dim. of Occlusion  |  FWS = Freeway Space',
                 fontSize=7.5, fillColor=DKGREY, textAnchor='middle',
                 fontName='Helvetica-Oblique'))
    return d


# ═══════════════════════════════════════════════════════════════════════════
#  DIAGRAM 4 – Compensating Curves (Curve of Spee & Wilson)
# ═══════════════════════════════════════════════════════════════════════════
def diag_curves():
    dw, dh = 440, 210
    d = Drawing(dw, dh)
    d.add(Rect(0,0,dw,dh, fillColor=CREAM, strokeColor=None, rx=8, ry=8))
    d.add(String(dw/2, dh-16, 'Compensating Curves in Complete Dentures',
                 fontSize=10, fillColor=NAVY, textAnchor='middle',
                 fontName='Helvetica-Bold'))

    # --- Curve of Spee (sagittal view) ---
    d.add(String(110, dh-32, 'Curve of Spee (Sagittal)', fontSize=8.5,
                 fillColor=TEAL, textAnchor='middle',
                 fontName='Helvetica-Bold'))
    # Spee arc
    cx1, cy1, r1 = 110, 250, 140
    pts1 = []
    for ang in range(200, 340, 5):
        rad = math.radians(ang)
        pts1.extend([cx1+r1*math.cos(rad), cy1+r1*math.sin(rad)])
    d.add(PolyLine(pts1, strokeColor=NAVY, strokeWidth=2.5))
    # tooth bumps on curve
    for ang in range(205, 338, 18):
        rad = math.radians(ang)
        tx = cx1+r1*math.cos(rad)
        ty = cy1+r1*math.sin(rad)
        d.add(Circle(tx, ty, 5, fillColor=GOLD, strokeColor=NAVY,
                     strokeWidth=1))
    d.add(String(110, 22, 'Ant-Post curve, compensates\nfor condylar inclination (protrusion)',
                 fontSize=7, fillColor=DKGREY, textAnchor='middle'))

    # divider
    d.add(Line(220, 20, 220, dh-25, strokeColor=GREY, strokeWidth=1,
               strokeDashArray=[4,3]))

    # --- Curve of Wilson (frontal view) ---
    d.add(String(330, dh-32, 'Curve of Wilson (Frontal)', fontSize=8.5,
                 fillColor=PURPLE, textAnchor='middle',
                 fontName='Helvetica-Bold'))
    # Wilson arc (U-shape)
    cx2, cy2, r2x, r2y = 330, 170, 80, 35
    pts2 = []
    for ang in range(180, 361, 8):
        rad = math.radians(ang)
        pts2.extend([cx2+r2x*math.cos(rad), cy2+r2y*math.sin(rad)])
    d.add(PolyLine(pts2, strokeColor=PURPLE, strokeWidth=2.5))
    # teeth on Wilson
    for ang in range(185, 358, 30):
        rad = math.radians(ang)
        tx = cx2+r2x*math.cos(rad)
        ty = cy2+r2y*math.sin(rad)
        d.add(Circle(tx, ty, 5, fillColor=GOLD, strokeColor=PURPLE,
                     strokeWidth=1))
    # lingual lower label
    d.add(String(cx2-r2x-10, cy2, 'L', fontSize=9, fillColor=DKGREY,
                 textAnchor='middle', fontName='Helvetica-Bold'))
    d.add(String(cx2+r2x+10, cy2, 'B', fontSize=9, fillColor=DKGREY,
                 textAnchor='middle', fontName='Helvetica-Bold'))
    d.add(String(330, 22, 'Transverse curve, compensates\nfor Bennett movement (lateral excursion)',
                 fontSize=7, fillColor=DKGREY, textAnchor='middle'))
    return d


# ═══════════════════════════════════════════════════════════════════════════
#  DIAGRAM 5 – Gothic Arch Tracing
# ═══════════════════════════════════════════════════════════════════════════
def diag_gothic():
    dw, dh = 440, 200
    d = Drawing(dw, dh)
    d.add(Rect(0,0,dw,dh, fillColor=CREAM, strokeColor=None, rx=8, ry=8))
    d.add(String(dw/2, dh-16, 'Gothic Arch Tracing (Needle Point / Arrow Point Tracing)',
                 fontSize=10, fillColor=NAVY, textAnchor='middle',
                 fontName='Helvetica-Bold'))

    cx, cy = 160, 100
    # Left lateral line
    d.add(Line(cx, cy, cx-80, cy+55, strokeColor=RED, strokeWidth=2.5))
    # Right lateral line
    d.add(Line(cx, cy, cx+80, cy+55, strokeColor=RED, strokeWidth=2.5))
    # Left protrusion
    d.add(Line(cx, cy, cx-10, cy+65, strokeColor=NAVY, strokeWidth=1.5,
               strokeDashArray=[4,2]))
    # Right protrusion
    d.add(Line(cx, cy, cx+10, cy+65, strokeColor=NAVY, strokeWidth=1.5,
               strokeDashArray=[4,2]))

    # APEX dot
    d.add(Circle(cx, cy, 6, fillColor=GREEN, strokeColor=None))
    d.add(String(cx+10, cy+2, 'APEX = Centric Relation', fontSize=8.5,
                 fillColor=GREEN, fontName='Helvetica-Bold'))

    # labels
    d.add(String(cx-90, cy+60, 'L Lateral', fontSize=8, fillColor=RED,
                 textAnchor='middle'))
    d.add(String(cx+90, cy+60, 'R Lateral', fontSize=8, fillColor=RED,
                 textAnchor='middle'))
    d.add(String(cx, cy+75, 'Protrusive', fontSize=8, fillColor=NAVY,
                 textAnchor='middle'))
    # plate and stylus labels
    d.add(String(cx, cy-20, '▲ Stylus (on mandibular rim)', fontSize=8,
                 fillColor=DKGREY, textAnchor='middle'))
    d.add(String(cx, cy-32, 'Recording plate on maxillary rim (below)',
                 fontSize=7.5, fillColor=DKGREY, textAnchor='middle',
                 fontName='Helvetica-Oblique'))

    # right info box
    d.add(Rect(310, 30, 120, 130, fillColor=LTBLUE, strokeColor=NAVY,
               strokeWidth=1, rx=5))
    lines_txt = [
        ('Steps:', True),
        ('1. Attach stylus to lower', False),
        ('2. Plate on upper rim', False),
        ('3. Patient moves laterally', False),
        ('   & protrusively', False),
        ('4. Arrow shape traced', False),
        ('5. Apex = CR position', False),
        ('6. Lock at apex to record', False),
    ]
    for i,(txt,bold) in enumerate(lines_txt):
        d.add(String(316, 148-i*15, txt, fontSize=7.5,
                     fillColor=NAVY if bold else BLACK,
                     fontName='Helvetica-Bold' if bold else 'Helvetica'))
    return d


# ═══════════════════════════════════════════════════════════════════════════
#  DIAGRAM 6 – Stress-Bearing Areas
# ═══════════════════════════════════════════════════════════════════════════
def diag_stress_areas():
    dw, dh = 440, 210
    d = Drawing(dw, dh)
    d.add(Rect(0,0,dw,dh, fillColor=CREAM, strokeColor=None, rx=8, ry=8))
    d.add(String(dw/2, dh-16, 'Primary & Secondary Stress-Bearing Areas',
                 fontSize=10, fillColor=NAVY, textAnchor='middle',
                 fontName='Helvetica-Bold'))

    # MAXILLA (palate view – horseshoe shape)
    d.add(String(110, dh-32, 'MAXILLA (palatal view)', fontSize=8.5,
                 fillColor=TEAL, textAnchor='middle', fontName='Helvetica-Bold'))
    # palate outline
    for r2,fill2,alpha in [(70,LTBLUE,0.9),(55,CREAM,1)]:
        d.add(Ellipse(110, 90, r2, r2*0.7, fillColor=fill2,
                      strokeColor=TEAL, strokeWidth=1.5,
                      fillOpacity=alpha))
    # anterior arch gap
    d.add(Rect(80, 120, 60, 25, fillColor=CREAM, strokeColor=None))
    # primary = posterior palate (shaded green)
    d.add(Rect(65, 63, 90, 30, fillColor=LTGREEN, strokeColor=GREEN,
               strokeWidth=1.5, rx=4))
    d.add(String(110, 73, 'PRIMARY', fontSize=7, fillColor=GREEN,
                 textAnchor='middle', fontName='Helvetica-Bold'))
    d.add(String(110, 64, '(Post. hard palate, ridge slopes)', fontSize=6,
                 fillColor=GREEN, textAnchor='middle'))
    # secondary = anterior
    d.add(Rect(75, 95, 70, 22, fillColor=LTYELLOW, strokeColor=ORANGE,
               strokeWidth=1, rx=3))
    d.add(String(110, 102, 'SECONDARY', fontSize=7, fillColor=ORANGE,
                 textAnchor='middle', fontName='Helvetica-Bold'))
    # relief areas
    d.add(Circle(110, 132, 5, fillColor=LTRED, strokeColor=RED,
                 strokeWidth=1))
    d.add(String(110, 120, 'Relief: Incisive papilla', fontSize=6.5,
                 fillColor=RED, textAnchor='middle'))

    # divider
    d.add(Line(220, 20, 220, dh-25, strokeColor=GREY, strokeWidth=1,
               strokeDashArray=[4,3]))

    # MANDIBLE (occlusal view)
    d.add(String(330, dh-32, 'MANDIBLE (occlusal view)', fontSize=8.5,
                 fillColor=PURPLE, textAnchor='middle',
                 fontName='Helvetica-Bold'))
    # U-shaped arch
    for r2,fill2 in [(80, colors.HexColor('#F0F3FF')),(65,CREAM)]:
        pts_arch=[]
        for ang in range(0,181,10):
            rad=math.radians(ang)
            pts_arch.extend([330+r2*math.cos(rad),100+r2*0.6*math.sin(rad)])
        d.add(PolyLine(pts_arch, strokeColor=PURPLE, strokeWidth=2))
    # buccal shelf highlight
    d.add(Rect(248, 65, 25, 55, fillColor=LTGREEN, strokeColor=GREEN,
               strokeWidth=1.5, rx=3))
    d.add(String(261, 90, 'Buccal\nShelf', fontSize=6.5, fillColor=GREEN,
                 textAnchor='middle', fontName='Helvetica-Bold'))
    d.add(Rect(407, 65, 25, 55, fillColor=LTGREEN, strokeColor=GREEN,
               strokeWidth=1.5, rx=3))
    d.add(String(420, 90, 'Buccal\nShelf', fontSize=6.5, fillColor=GREEN,
                 textAnchor='middle', fontName='Helvetica-Bold'))
    d.add(String(330, 40, 'PRIMARY = Buccal Shelf', fontSize=8,
                 fillColor=GREEN, textAnchor='middle',
                 fontName='Helvetica-Bold'))
    d.add(String(330, 30, '(cortical bone, near-perpendicular to forces)', fontSize=7,
                 fillColor=DKGREY, textAnchor='middle'))
    # retromolar pad
    d.add(Circle(260, 50, 7, fillColor=GOLD, strokeColor=ORANGE, strokeWidth=1))
    d.add(Circle(400, 50, 7, fillColor=GOLD, strokeColor=ORANGE, strokeWidth=1))
    d.add(String(330, 17, 'Retromolar pad – cover anterior 2/3 with denture',
                 fontSize=7.5, fillColor=ORANGE, textAnchor='middle',
                 fontName='Helvetica-Oblique'))
    return d


# ═══════════════════════════════════════════════════════════════════════════
#  DIAGRAM 7 – House Classification (Mental Attitude)
# ═══════════════════════════════════════════════════════════════════════════
def diag_house():
    dw, dh = 440, 175
    d = Drawing(dw, dh)
    d.add(Rect(0,0,dw,dh, fillColor=CREAM, strokeColor=None, rx=8, ry=8))
    d.add(String(dw/2, dh-16, "House Classification – Mental Attitude of Edentulous Patients (1950)",
                 fontSize=9.5, fillColor=NAVY, textAnchor='middle',
                 fontName='Helvetica-Bold'))
    classes = [
        ('Class I', 'Philosophical', 'Cooperative, realistic\naccepts limitations',
         'Excellent', LTGREEN, GREEN),
        ('Class II', 'Exacting', 'Meticulous, rational\nbut hard to please',
         'Good', LTBLUE, NAVY),
        ('Class III', 'Hysterical', 'Emotional, unrealistic\nblames dentist',
         'Guarded', LTYELLOW, ORANGE),
        ('Class IV', 'Indifferent', 'Uncooperative,\nminimal motivation',
         'Poor', LTRED, RED),
    ]
    bw = 95; bh = 110; gap = 8
    total = 4*bw + 3*gap
    sx = (dw-total)/2
    sy = 30
    for i,(cls,name,desc,prog,fill,stroke) in enumerate(classes):
        bx = sx + i*(bw+gap)
        d.add(Rect(bx, sy, bw, bh, fillColor=fill, strokeColor=stroke,
                   strokeWidth=2, rx=6))
        d.add(String(bx+bw/2, sy+bh-12, cls, fontSize=9, fillColor=stroke,
                     textAnchor='middle', fontName='Helvetica-Bold'))
        d.add(Line(bx+8, sy+bh-18, bx+bw-8, sy+bh-18,
                   strokeColor=stroke, strokeWidth=0.8))
        d.add(String(bx+bw/2, sy+bh-28, name, fontSize=8.5, fillColor=stroke,
                     textAnchor='middle', fontName='Helvetica-Bold'))
        for li,ln in enumerate(desc.split('\n')):
            d.add(String(bx+bw/2, sy+bh-42-li*11, ln, fontSize=7,
                         fillColor=BLACK, textAnchor='middle'))
        d.add(Rect(bx+5, sy+4, bw-10, 20, fillColor=stroke,
                   strokeColor=None, rx=3))
        d.add(String(bx+bw/2, sy+9, 'Prognosis: '+prog, fontSize=7.5,
                     fillColor=WHITE, textAnchor='middle',
                     fontName='Helvetica-Bold'))
    return d


# ═══════════════════════════════════════════════════════════════════════════
#  DIAGRAM 8 – Bonwill's Equilateral Triangle
# ═══════════════════════════════════════════════════════════════════════════
def diag_bonwill():
    dw, dh = 440, 210
    d = Drawing(dw, dh)
    d.add(Rect(0,0,dw,dh, fillColor=CREAM, strokeColor=None, rx=8, ry=8))
    d.add(String(dw/2, dh-16, "Bonwill's Equilateral Triangle Theory",
                 fontSize=10, fillColor=NAVY, textAnchor='middle',
                 fontName='Helvetica-Bold'))

    # equilateral triangle
    side = 160
    cx, cy = 220, 100
    h_tri = side * math.sqrt(3)/2
    p1 = (cx, cy + h_tri*0.6)          # top (mandibular incisor contact)
    p2 = (cx - side/2, cy - h_tri*0.4) # bottom-left (L condyle)
    p3 = (cx + side/2, cy - h_tri*0.4) # bottom-right (R condyle)

    d.add(Polygon([p1[0],p1[1],p2[0],p2[1],p3[0],p3[1]],
                  fillColor=LTBLUE, strokeColor=NAVY, strokeWidth=2.5,
                  fillOpacity=0.5))

    # side labels (101.6 mm = 4 inches)
    def mid(a,b): return ((a[0]+b[0])/2, (a[1]+b[1])/2)
    for pa,pb in [(p1,p2),(p2,p3),(p1,p3)]:
        mx,my = mid(pa,pb)
        d.add(String(mx, my-6, '4 in (101.6 mm)', fontSize=7.5,
                     fillColor=TEAL, textAnchor='middle',
                     fontName='Helvetica-Bold'))

    # corner markers
    d.add(Circle(p1[0],p1[1],7, fillColor=GOLD, strokeColor=NAVY,
                 strokeWidth=1.5))
    d.add(Circle(p2[0],p2[1],7, fillColor=RED,  strokeColor=NAVY,
                 strokeWidth=1.5))
    d.add(Circle(p3[0],p3[1],7, fillColor=RED,  strokeColor=NAVY,
                 strokeWidth=1.5))
    d.add(String(p1[0], p1[1]+12, 'Mandibular incisor\ncontact point',
                 fontSize=7.5, fillColor=NAVY, textAnchor='middle'))
    d.add(String(p2[0]-5, p2[1]-20, 'L Condyle', fontSize=7.5,
                 fillColor=RED, textAnchor='middle'))
    d.add(String(p3[0]+5, p3[1]-20, 'R Condyle', fontSize=7.5,
                 fillColor=RED, textAnchor='middle'))

    # info box
    d.add(Rect(6, 8, 130, 55, fillColor=LTGREEN, strokeColor=GREEN,
               strokeWidth=1, rx=5))
    d.add(String(70, 52, 'Clinical Use', fontSize=8.5, fillColor=GREEN,
                 textAnchor='middle', fontName='Helvetica-Bold'))
    for i,txt in enumerate(['- Sets intercondylar distance',
                             '- Basis for posterior tooth setting',
                             '- Combined with Balkwill angle (26°)',
                             '- Monson sphere radius = 4 in']):
        d.add(String(10, 42-i*11, txt, fontSize=7, fillColor=BLACK))
    return d


# ═══════════════════════════════════════════════════════════════════════════
#  DIAGRAM 9 – Combination Syndrome
# ═══════════════════════════════════════════════════════════════════════════
def diag_combination_syndrome():
    dw, dh = 440, 215
    d = Drawing(dw, dh)
    d.add(Rect(0,0,dw,dh, fillColor=CREAM, strokeColor=None, rx=8, ry=8))
    d.add(String(dw/2, dh-16, 'Combination Syndrome (Kelly, 1972)',
                 fontSize=10, fillColor=NAVY, textAnchor='middle',
                 fontName='Helvetica-Bold'))

    # Setup label
    d.add(String(dw/2, dh-32, 'Maxillary CD opposing mandibular RPD (only anterior teeth remaining)',
                 fontSize=8, fillColor=DKGREY, textAnchor='middle',
                 fontName='Helvetica-Oblique'))

    features = [
        ('1', 'Bone loss – ant. maxilla', RED, LTRED),
        ('2', 'Tuberosity overgrowth', ORANGE, LTYELLOW),
        ('3', 'Papillary hyperplasia', PURPLE, LTPURP),
        ('4', 'Extrusion – mand. anteriors', NAVY, LTBLUE),
        ('5', 'Bone loss – mand. post. ridges', GREEN, LTGREEN),
    ]
    bw2 = 74; bh2 = 50; gap2 = 8
    total2 = 5*bw2 + 4*gap2
    sx2 = (dw-total2)/2
    for i,(num,feat,stroke2,fill2) in enumerate(features):
        bx2 = sx2 + i*(bw2+gap2)
        d.add(Rect(bx2, 80, bw2, bh2, fillColor=fill2, strokeColor=stroke2,
                   strokeWidth=2, rx=5))
        d.add(String(bx2+bw2/2, 80+bh2-12, num, fontSize=16, fillColor=stroke2,
                     textAnchor='middle', fontName='Helvetica-Bold'))
        lines_f = feat.split('–')
        d.add(String(bx2+bw2/2, 88, lines_f[0].strip(), fontSize=7,
                     fillColor=stroke2, textAnchor='middle',
                     fontName='Helvetica-Bold'))
        if len(lines_f) > 1:
            d.add(String(bx2+bw2/2, 79, lines_f[1].strip(), fontSize=6.5,
                         fillColor=stroke2, textAnchor='middle'))

    # arch illustration (simplified)
    # maxilla
    d.add(String(40, 68, 'MAXILLA', fontSize=7.5, fillColor=TEAL,
                 fontName='Helvetica-Bold'))
    d.add(Ellipse(80, 50, 70, 22, fillColor=LTBLUE, strokeColor=TEAL,
                  strokeWidth=1.5, fillOpacity=0.7))
    d.add(String(80, 46, 'Max CD', fontSize=7, fillColor=TEAL,
                 textAnchor='middle'))
    # mandible
    d.add(String(300, 68, 'MANDIBLE', fontSize=7.5, fillColor=PURPLE,
                 fontName='Helvetica-Bold'))
    # anterior teeth only
    for xi in range(3):
        d.add(Rect(340+xi*12, 50, 9, 18, fillColor=LTYELLOW,
                   strokeColor=PURPLE, strokeWidth=1, rx=2))
    d.add(String(350, 42, 'Ant. teeth only', fontSize=7, fillColor=PURPLE,
                 textAnchor='middle'))
    # edentulous post
    d.add(Line(370, 58, 415, 58, strokeColor=RED, strokeWidth=2,
               strokeDashArray=[3,2]))
    d.add(String(392, 47, 'Edentulous (RPD)', fontSize=7, fillColor=RED,
                 textAnchor='middle'))

    d.add(String(dw/2, 15, 'Cause: Anterior force concentration on maxilla → unopposed occlusal load imbalance',
                 fontSize=7.5, fillColor=DKGREY, textAnchor='middle',
                 fontName='Helvetica-Oblique'))
    d.add(String(dw/2, 6, 'Rx: Occlusal stop correction, relining, surgical correction if needed',
                 fontSize=7.5, fillColor=GREEN, textAnchor='middle',
                 fontName='Helvetica-Bold'))
    return d


# ═══════════════════════════════════════════════════════════════════════════
#  DIAGRAM 10 – Posterior Palatal Seal Area
# ═══════════════════════════════════════════════════════════════════════════
def diag_pps():
    dw, dh = 440, 210
    d = Drawing(dw, dh)
    d.add(Rect(0,0,dw,dh, fillColor=CREAM, strokeColor=None, rx=8, ry=8))
    d.add(String(dw/2, dh-16, 'Posterior Palatal Seal (PPS) Area',
                 fontSize=10, fillColor=NAVY, textAnchor='middle',
                 fontName='Helvetica-Bold'))

    # palate outline from below
    cx2, cy2 = 160, 100
    # hard palate oval
    d.add(Ellipse(cx2, cy2, 110, 80, fillColor=colors.HexColor('#F0F8FF'),
                  strokeColor=NAVY, strokeWidth=1.5))
    # soft palate
    d.add(Ellipse(cx2, cy2-85, 90, 20, fillColor=colors.HexColor('#FDEDEC'),
                  strokeColor=RED, strokeWidth=1.5))
    d.add(String(cx2, cy2-83, 'Soft Palate', fontSize=7.5, fillColor=RED,
                 textAnchor='middle'))

    # vibrating line (AH line)
    d.add(Line(cx2-100, cy2-65, cx2+100, cy2-65, strokeColor=RED,
               strokeWidth=2.5, strokeDashArray=[6,3]))
    d.add(String(cx2+85, cy2-57, 'AH line\n(Vibrating line)', fontSize=7,
                 fillColor=RED, fontName='Helvetica-Bold'))

    # PPS zone (shaded area)
    d.add(Rect(cx2-95, cy2-78, 190, 16, fillColor=LTGREEN,
               strokeColor=GREEN, strokeWidth=1.5,
               fillOpacity=0.7))
    d.add(String(cx2, cy2-72, 'PPS Zone (1-2 mm posterior to AH line)',
                 fontSize=7.5, fillColor=GREEN, textAnchor='middle',
                 fontName='Helvetica-Bold'))

    # hamular notch markers
    d.add(Circle(cx2-95, cy2-65, 5, fillColor=GOLD, strokeColor=ORANGE,
                 strokeWidth=1.5))
    d.add(Circle(cx2+95, cy2-65, 5, fillColor=GOLD, strokeColor=ORANGE,
                 strokeWidth=1.5))
    d.add(String(cx2-95, cy2-52, 'Hamular\nNotch', fontSize=6.5,
                 fillColor=ORANGE, textAnchor='middle'))
    d.add(String(cx2+95, cy2-52, 'Hamular\nNotch', fontSize=6.5,
                 fillColor=ORANGE, textAnchor='middle'))

    # mid-palatal raphae
    d.add(Line(cx2, cy2+75, cx2, cy2-65, strokeColor=DKGREY,
               strokeWidth=1, strokeDashArray=[3,3]))
    d.add(String(cx2+5, cy2+55, 'Mid-palatal\nraphae', fontSize=7,
                 fillColor=DKGREY))

    # fovea palatinae
    d.add(Circle(cx2-8, cy2-62, 3, fillColor=PURPLE, strokeColor=None))
    d.add(Circle(cx2+8, cy2-62, 3, fillColor=PURPLE, strokeColor=None))
    d.add(String(cx2, cy2-42, '● Fovea palatinae', fontSize=7,
                 fillColor=PURPLE, textAnchor='middle'))

    # info box
    d.add(Rect(295, 20, 140, 165, fillColor=LTBLUE, strokeColor=NAVY,
               strokeWidth=1, rx=5))
    d.add(String(365, 174, 'Advantages of PPS', fontSize=8.5, fillColor=NAVY,
                 textAnchor='middle', fontName='Helvetica-Bold'))
    items2 = [
        '• Improves retention (peripheral seal)',
        '• Prevents food ingress',
        '• Avoids sharp posterior edge',
        '• Compensates for shrinkage',
        '• Better adaptation at AH line',
    ]
    for i,txt in enumerate(items2):
        d.add(String(300, 160-i*18, txt, fontSize=7.5, fillColor=BLACK))
    d.add(String(365, 30, 'Techniques:', fontSize=8, fillColor=NAVY,
                 textAnchor='middle', fontName='Helvetica-Bold'))
    for i,txt in enumerate(['Scraping/Carving', 'Fluid wax', 'Compound',
                             'Beading & boxing', 'Thomas technique']):
        d.add(String(365, 22-i*0, txt, fontSize=0, fillColor=BLACK))
    # compact technique list
    tech_txt = 'Scraping | Fluid wax | Compound | Beading-boxing | Thomas'
    d.add(String(365, 22, tech_txt, fontSize=6.5, fillColor=DKGREY,
                 textAnchor='middle'))
    return d


# ═══════════════════════════════════════════════════════════════════════════
#  BUILD THE DOCUMENT
# ═══════════════════════════════════════════════════════════════════════════
class DrawingFlowable(Flowable):
    """Wraps a ReportLab Drawing so it can be placed in a Platypus story."""
    def __init__(self, drawing, hAlign='CENTER'):
        super().__init__()
        self.drawing = drawing
        self.hAlign = hAlign
        self._width  = drawing.width
        self._height = drawing.height

    def wrap(self, availWidth, availHeight):
        scale = min(1.0, availWidth / self._width)
        return self._width*scale, self._height*scale

    def draw(self):
        scale = min(1.0, self.canv._pagesize[0] / self._width)
        self.canv.saveState()
        self.canv.scale(scale, scale)
        renderPDF.draw(self.drawing, self.canv, 0, 0)
        self.canv.restoreState()


def build_pdf(outpath):
    doc = SimpleDocTemplate(
        outpath,
        pagesize=A4,
        rightMargin=2*cm, leftMargin=2*cm,
        topMargin=2*cm,   bottomMargin=2*cm,
        title='Complete Denture Prosthodontics – Study Guide',
        author='Orris Study Guide Generator',
    )

    story = []

    # ── COVER PAGE ────────────────────────────────────────────────────────
    story.append(DrawingFlowable(make_cover()))
    story.append(PageBreak())

    # ── TABLE OF CONTENTS ────────────────────────────────────────────────
    story.append(Paragraph('<b>TABLE OF CONTENTS</b>', H1))
    story.append(Spacer(1, 6))
    toc_data = [
        ['1.', 'Posterior Palatal Seal (PPS) Area',         '3'],
        ['2.', "Hanau's Quint",                              '3'],
        ['3.', 'Muscles of Mastication',                     '4'],
        ['4.', 'Vertical Dimension: VDR, VDO & Free-way Space','4'],
        ['5.', 'Compensating Curves',                        '5'],
        ['6.', 'Gothic Arch Tracing',                        '5'],
        ['7.', 'Stress-Bearing Areas',                       '6'],
        ['8.', 'House Classification (Mental Attitude)',      '6'],
        ['9.', "Bonwill's Equilateral Triangle",             '7'],
        ['10.', 'Combination Syndrome',                      '7'],
        ['11.', 'Key Definitions & Short Notes',             '8'],
        ['12.', 'Border Molding',                            '9'],
        ['13.', 'Overdentures',                              '9'],
        ['14.', 'Jaw Relations & Centric Relation',          '10'],
        ['15.', 'Selective Grinding (BULL Rule)',            '10'],
    ]
    toc_table = Table(toc_data, colWidths=[1.2*cm, 11.5*cm, 1.5*cm])
    toc_table.setStyle(TableStyle([
        ('FONTNAME',  (0,0),(-1,-1), 'Helvetica'),
        ('FONTSIZE',  (0,0),(-1,-1), 10),
        ('FONTNAME',  (0,0),(0,-1),  'Helvetica-Bold'),
        ('TEXTCOLOR', (0,0),(0,-1),  NAVY),
        ('TEXTCOLOR', (2,0),(2,-1),  TEAL),
        ('ROWBACKGROUNDS', (0,0),(-1,-1), [WHITE, GREY]),
        ('TOPPADDING', (0,0),(-1,-1), 5),
        ('BOTTOMPADDING', (0,0),(-1,-1), 5),
        ('LINEBELOW', (0,-1),(-1,-1), 1, NAVY),
    ]))
    story.append(toc_table)
    story.append(PageBreak())

    # ─────────────────────────────────────────────────────────────────────
    # PAGE 1 – PPS + Hanau
    # ─────────────────────────────────────────────────────────────────────
    story.append(Paragraph('1. Posterior Palatal Seal (PPS) Area', H1))
    story.append(DrawingFlowable(diag_pps()))
    story.append(Spacer(1, 4))
    story.append(Paragraph(
        '<b>Definition:</b> The soft tissue area at or just beyond the junction of hard and soft palate '
        'on which pressure within physiologic limits can be applied by the denture to improve retention. '
        'Lies along the <b>vibrating line (AH line)</b>, extending 1-2 mm posterior to it.',
        BODY))
    story.append(Spacer(1, 12))

    story.append(Paragraph("2. Hanau's Quint", H1))
    story.append(DrawingFlowable(diag_hanau()))
    story.append(Spacer(1, 4))
    story.append(Paragraph(
        "<b>Hanau's formula:</b> Five factors must be balanced for harmonious complete denture occlusion. "
        "Condylar guidance is fixed by anatomy; the dentist adjusts the remaining four. "
        "Increasing condylar guidance requires increasing cusp height and/or steepening the compensating curve.",
        BODY))
    story.append(PageBreak())

    # ─────────────────────────────────────────────────────────────────────
    # PAGE 2 – Muscles + VD
    # ─────────────────────────────────────────────────────────────────────
    story.append(Paragraph('3. Muscles of Mastication', H1))
    story.append(DrawingFlowable(diag_muscles()))
    story.append(Spacer(1, 4))
    story.append(Paragraph(
        'All four muscles are supplied by the <b>mandibular nerve (V3)</b>, anterior division – '
        'motor branch of the trigeminal nerve. The lateral pterygoid is the only muscle that opens '
        'the mouth (protrusion + depression via inferior head). '
        'Blood supply: branches of the <b>maxillary artery</b>.',
        BODY))
    story.append(Spacer(1, 12))

    story.append(Paragraph('4. Vertical Dimension – VDR, VDO & Free-Way Space', H1))
    story.append(DrawingFlowable(diag_vd()))
    story.append(Spacer(1, 4))
    story.append(Paragraph(
        '<b>VDR</b> (Rest) = <b>VDO</b> (Occlusion) + <b>FWS</b> (Free-way space 2-4 mm). '
        'Rest position is recorded by phonetics ("M" sound, swallowing). '
        'Closest speaking space for "S" = 0.5-1 mm. '
        'If FWS = 0 during "S" sound: VDO is too high.',
        BODY))
    story.append(PageBreak())

    # ─────────────────────────────────────────────────────────────────────
    # PAGE 3 – Compensating curves + Gothic arch
    # ─────────────────────────────────────────────────────────────────────
    story.append(Paragraph('5. Compensating Curves', H1))
    story.append(DrawingFlowable(diag_curves()))
    story.append(Spacer(1, 4))
    story.append(Paragraph(
        '<b>Curve of Spee</b>: Sagittal plane; compensates condylar inclination during protrusion. '
        '<b>Curve of Wilson</b>: Frontal plane; lingual cusps lower than buccal; compensates Bennett movement. '
        '<b>Monson sphere</b>: All cusp tips on a sphere of 4-inch (10 cm) radius. '
        '<b>Christensen phenomenon</b>: Posterior gap on protrusion – compensating curves prevent this.',
        BODY))
    story.append(Spacer(1, 12))

    story.append(Paragraph('6. Gothic Arch Tracing (Arrow Point Tracing)', H1))
    story.append(DrawingFlowable(diag_gothic()))
    story.append(Spacer(1, 4))
    story.append(Paragraph(
        'Records centric relation and mandibular movement paths. '
        '<b>Apex of the arrow</b> = centric relation. '
        'A stylus on the mandibular rim traces on a coated plate on the maxillary rim. '
        'Useful when patient cannot reliably respond to verbal commands.',
        BODY))
    story.append(PageBreak())

    # ─────────────────────────────────────────────────────────────────────
    # PAGE 4 – Stress areas + House
    # ─────────────────────────────────────────────────────────────────────
    story.append(Paragraph('7. Primary & Secondary Stress-Bearing Areas', H1))
    story.append(DrawingFlowable(diag_stress_areas()))
    story.append(Spacer(1, 4))
    sb_data = [
        ['Arch', 'Primary', 'Secondary', 'Relief Areas'],
        ['Maxilla', 'Posterior hard palate, slopes of ridge',
         'Anterior hard palate, rugae, ridge crest',
         'Incisive papilla, mid-palatal raphae, torus'],
        ['Mandible', 'Buccal shelf (cortical bone)',
         'Ridge crest, slopes, retromolar pad',
         'Mental foramen, mylohyoid ridge, genial tubercles'],
    ]
    sb_table = Table(sb_data, colWidths=[2.2*cm, 4.2*cm, 4.2*cm, 3.2*cm])
    sb_table.setStyle(TableStyle([
        ('BACKGROUND', (0,0),(-1,0), NAVY),
        ('TEXTCOLOR',  (0,0),(-1,0), WHITE),
        ('FONTNAME',   (0,0),(-1,0), 'Helvetica-Bold'),
        ('FONTSIZE',   (0,0),(-1,-1), 8.5),
        ('ROWBACKGROUNDS', (0,1),(-1,-1), [LTBLUE, LTGREEN]),
        ('TOPPADDING', (0,0),(-1,-1), 4),
        ('BOTTOMPADDING', (0,0),(-1,-1), 4),
        ('GRID', (0,0),(-1,-1), 0.5, colors.grey),
        ('VALIGN', (0,0),(-1,-1), 'MIDDLE'),
    ]))
    story.append(sb_table)
    story.append(Spacer(1, 12))

    story.append(Paragraph('8. House Classification – Mental Attitude', H1))
    story.append(DrawingFlowable(diag_house()))
    story.append(PageBreak())

    # ─────────────────────────────────────────────────────────────────────
    # PAGE 5 – Bonwill + Combination syndrome
    # ─────────────────────────────────────────────────────────────────────
    story.append(Paragraph("9. Bonwill's Equilateral Triangle", H1))
    story.append(DrawingFlowable(diag_bonwill()))
    story.append(Spacer(1, 4))
    story.append(Paragraph(
        'W.G.A. Bonwill (1858): An equilateral triangle of side <b>4 inches (101.6 mm)</b> connects '
        'the two condylar points and the mandibular central incisor contact point. '
        'Used to set intercondylar distances on articulators and for posterior tooth arrangement.',
        BODY))
    story.append(Spacer(1, 12))

    story.append(Paragraph('10. Combination Syndrome (Kelly, 1972)', H1))
    story.append(DrawingFlowable(diag_combination_syndrome()))
    story.append(PageBreak())

    # ─────────────────────────────────────────────────────────────────────
    # PAGE 6 – Key Definitions table
    # ─────────────────────────────────────────────────────────────────────
    story.append(Paragraph('11. Key Definitions & Short Notes', H1))
    story.append(Spacer(1, 4))
    defs = [
        ['Term', 'Definition / Key Points'],
        ['Face Bow', 'Caliper device recording maxillary arch-to-TMJ relationship for articulator transfer. Types: Arbitrary (12 mm anterior to tragus) and Kinematic (true hinge axis).'],
        ['Free-Way Space', 'Gap between teeth at rest position = 2-4 mm. VDR = VDO + FWS. Phonetic "S" = closest speaking space (0.5-1 mm).'],
        ['Retromolar Pad', 'Pear-shaped soft tissue pad at distal end of mandibular ridge. Cover anterior 2/3. Landmark for occlusal plane and tooth placement.'],
        ['Border Molding', 'Shaping tray borders using tissue movements. Materials: green-stick compound, silicone. Sections: labial, buccal, lingual, posterior.'],
        ['Overdentures', 'Denture supported by retained roots/implants. Preserves bone, provides proprioception. Attachments: ball, bar-clip, magnets.'],
        ["Hanau's Quint", 'C-I-P-C-C: Condylar guidance, Incisal guidance, Plane of occlusion, Cusp height, Compensating curve. Condylar guidance is fixed.'],
        ['Gothic Arch Tracing', 'Arrow-shaped tracing. Apex = centric relation. Uses stylus (lower) on coated plate (upper).'],
        ['Centric Relation', 'Condyles in anterior-superior position on articular eminence, thinnest disc. Bone-to-bone, tooth-independent, reproducible.'],
        ['Bennett Shift', 'Lateral bodily translation of mandible in lateral excursion. Bennett angle = 15-17° (non-working condyle path vs sagittal plane).'],
        ['Epulis Fissuratum', 'Inflammatory fibrous hyperplasia from ill-fitting flange. Rx: adjust flange, tissue condition, surgical excision if persists.'],
        ['Snap-on Denture', '2-implant retained mandibular overdenture. Ball abutment + nylon insert in denture. McGill Consensus 2002: minimum standard of care.'],
        ['Christensen Phenom.', 'Posterior gap on protrusion when teeth occlude anteriorly. Basis for compensating curves in CD.'],
        ['Modiolus', 'Fibromuscular condensation at corner of mouth. Converging point for: orbicularis oris, buccinator, zygomaticus major, risorius, levator/depressor anguli oris.'],
        ['Tissue Conditioners', 'Viscoelastic soft liners (Visco-gel, Coe-Comfort). Treat abused mucosa before relining/new denture. Replace every 3-5 days.'],
    ]
    def_table = Table(defs, colWidths=[4.5*cm, 11.3*cm])
    def_table.setStyle(TableStyle([
        ('BACKGROUND', (0,0),(-1,0), NAVY),
        ('TEXTCOLOR',  (0,0),(-1,0), WHITE),
        ('FONTNAME',   (0,0),(-1,0), 'Helvetica-Bold'),
        ('FONTNAME',   (0,1),(0,-1), 'Helvetica-Bold'),
        ('TEXTCOLOR',  (0,1),(0,-1), NAVY),
        ('FONTSIZE',   (0,0),(-1,-1), 8.5),
        ('ROWBACKGROUNDS', (0,1),(-1,-1), [WHITE, GREY]),
        ('TOPPADDING', (0,0),(-1,-1), 5),
        ('BOTTOMPADDING', (0,0),(-1,-1), 5),
        ('GRID', (0,0),(-1,-1), 0.4, colors.lightgrey),
        ('VALIGN', (0,0),(-1,-1), 'TOP'),
        ('WORDWRAP', (0,0),(-1,-1), True),
    ]))
    story.append(def_table)
    story.append(PageBreak())

    # ─────────────────────────────────────────────────────────────────────
    # PAGE 7 – Border Molding + Overdentures
    # ─────────────────────────────────────────────────────────────────────
    story.append(Paragraph('12. Border Molding – Green Stick Compound Technique', H1))
    story.append(Spacer(1, 4))
    bm_steps = [
        ['Step', 'Action', 'Movement Performed'],
        ['1', 'Soften green stick (60-65°C)', 'N/A - preparation'],
        ['2', 'Apply to labial flange (upper)', 'Stretch lip up, down, side-to-side'],
        ['3', 'Buccal flange (upper + lower)', 'Cheeks distended, rotated inward'],
        ['4', 'Posterior palatal area (upper)', 'Say "Ah" – locates vibrating line'],
        ['5', 'Lingual flange (lower)', 'Tongue: protrusion, lateral, touch palate'],
        ['6', 'Distolingual extension', 'Swallowing motion'],
        ['7', 'Trim excess; repeat sections', 'Verify extension and seal'],
    ]
    bm_table = Table(bm_steps, colWidths=[1.2*cm, 6.5*cm, 6.1*cm])
    bm_table.setStyle(TableStyle([
        ('BACKGROUND', (0,0),(-1,0), TEAL),
        ('TEXTCOLOR',  (0,0),(-1,0), WHITE),
        ('FONTNAME',   (0,0),(-1,0), 'Helvetica-Bold'),
        ('FONTSIZE',   (0,0),(-1,-1), 8.5),
        ('ROWBACKGROUNDS', (0,1),(-1,-1), [WHITE, LTBLUE]),
        ('TOPPADDING', (0,0),(-1,-1), 5),
        ('BOTTOMPADDING', (0,0),(-1,-1), 5),
        ('GRID', (0,0),(-1,-1), 0.4, colors.lightgrey),
        ('VALIGN', (0,0),(-1,-1), 'MIDDLE'),
        ('FONTNAME', (0,1),(0,-1), 'Helvetica-Bold'),
        ('TEXTCOLOR', (0,1),(0,-1), TEAL),
    ]))
    story.append(bm_table)
    story.append(Spacer(1, 10))

    story.append(Paragraph('13. Overdentures', H1))
    story.append(Spacer(1, 4))
    od_data = [
        ['Aspect', 'Details'],
        ['Definition', 'CD/RPD supported by retained roots, natural teeth, or implants'],
        ['Advantage', 'Bone preservation via PDL, proprioception, better stability'],
        ['Root prep', 'Decrown to 2-3 mm above gingiva, dome-shaped or coping'],
        ['Attachments', 'Ball & socket, Dolder bar-clip, stud (Locator), magnet'],
        ['Snap-on (implant)', '2 implants (canine region) + Locator/O-ring. McGill 2002 = standard of care'],
        ['Disadvantage', 'Root caries risk, higher cost, more maintenance visits'],
    ]
    od_table = Table(od_data, colWidths=[3.5*cm, 12.3*cm])
    od_table.setStyle(TableStyle([
        ('BACKGROUND', (0,0),(-1,0), PURPLE),
        ('TEXTCOLOR',  (0,0),(-1,0), WHITE),
        ('FONTNAME',   (0,0),(-1,0), 'Helvetica-Bold'),
        ('FONTNAME',   (0,1),(0,-1), 'Helvetica-Bold'),
        ('TEXTCOLOR',  (0,1),(0,-1), PURPLE),
        ('FONTSIZE',   (0,0),(-1,-1), 8.5),
        ('ROWBACKGROUNDS', (0,1),(-1,-1), [WHITE, LTPURP]),
        ('TOPPADDING', (0,0),(-1,-1), 5),
        ('BOTTOMPADDING', (0,0),(-1,-1), 5),
        ('GRID', (0,0),(-1,-1), 0.4, colors.lightgrey),
    ]))
    story.append(od_table)
    story.append(PageBreak())

    # ─────────────────────────────────────────────────────────────────────
    # PAGE 8 – Jaw Relations + Selective Grinding
    # ─────────────────────────────────────────────────────────────────────
    story.append(Paragraph('14. Jaw Relations & Centric Relation', H1))
    story.append(Spacer(1, 4))
    jr_data = [
        ['Type', 'Definition', 'Clinical Use'],
        ['Centric Relation (CR)',
         'Condyles in anterior-superior position on disc/eminence; bone-to-bone, tooth-independent',
         'Reference for CD occlusal records; reproducible'],
        ['Vertical Dimension',
         'Facial height at a given jaw position (VDO = with teeth; VDR = at rest)',
         'Establishing correct VDO prevents over-/under-closure'],
        ['Centric Occlusion (CO)',
         'Maximum intercuspation of teeth (may not coincide with CR)',
         'In CD: CR = CO (both coincide)'],
        ['Eccentric Relations',
         'All jaw positions other than CR: protrusive, lateral (working/balancing)',
         'Used to set condylar inclination; achieve balanced occlusion'],
        ['Rest Position',
         'Minimal muscle tone; no tooth contact; FWS = 2-4 mm',
         'Baseline for VDO determination'],
    ]
    jr_table = Table(jr_data, colWidths=[3.8*cm, 6.5*cm, 5.5*cm])
    jr_table.setStyle(TableStyle([
        ('BACKGROUND', (0,0),(-1,0), ORANGE),
        ('TEXTCOLOR',  (0,0),(-1,0), WHITE),
        ('FONTNAME',   (0,0),(-1,0), 'Helvetica-Bold'),
        ('FONTNAME',   (0,1),(0,-1), 'Helvetica-Bold'),
        ('TEXTCOLOR',  (0,1),(0,-1), ORANGE),
        ('FONTSIZE',   (0,0),(-1,-1), 8),
        ('ROWBACKGROUNDS', (0,1),(-1,-1), [WHITE, LTYELLOW]),
        ('TOPPADDING', (0,0),(-1,-1), 5),
        ('BOTTOMPADDING', (0,0),(-1,-1), 5),
        ('GRID', (0,0),(-1,-1), 0.4, colors.lightgrey),
        ('VALIGN', (0,0),(-1,-1), 'TOP'),
    ]))
    story.append(jr_table)
    story.append(Spacer(1, 10))

    story.append(Paragraph('15. Selective Grinding – BULL Rule', H1))
    story.append(Spacer(1, 4))
    sg_data = [
        ['Interference Type', 'Surfaces to Grind', 'Mnemonic'],
        ['Protrusive (P)',
         'Buccal inclines of Upper posteriors\n+ Lingual inclines of Lower posteriors',
         'BULL\n(Buccal Upper, Lingual Lower)'],
        ['Non-working / Balancing side',
         'Mesial inclines of Upper\n+ Distal inclines of Lower',
         'MUDL\n(Mesial Upper, Distal Lower)'],
        ['Working / Laterotrusive side',
         'Mesial inclines of Lower buccal cusps\n+ Distal inclines of Upper buccal cusps',
         'LUBL'],
        ['General rule',
         'Never remove centric stops;\npolish after grinding;\nremount after adjustments',
         'Preserve CR contacts'],
    ]
    sg_table = Table(sg_data, colWidths=[4*cm, 7.2*cm, 4.6*cm])
    sg_table.setStyle(TableStyle([
        ('BACKGROUND', (0,0),(-1,0), RED),
        ('TEXTCOLOR',  (0,0),(-1,0), WHITE),
        ('FONTNAME',   (0,0),(-1,0), 'Helvetica-Bold'),
        ('FONTNAME',   (0,1),(0,-1), 'Helvetica-Bold'),
        ('TEXTCOLOR',  (0,1),(0,-1), RED),
        ('FONTNAME',   (2,1),(2,-1), 'Helvetica-Bold'),
        ('TEXTCOLOR',  (2,1),(2,-1), NAVY),
        ('FONTSIZE',   (0,0),(-1,-1), 8.5),
        ('ROWBACKGROUNDS', (0,1),(-1,-1), [WHITE, LTRED]),
        ('TOPPADDING', (0,0),(-1,-1), 6),
        ('BOTTOMPADDING', (0,0),(-1,-1), 6),
        ('GRID', (0,0),(-1,-1), 0.4, colors.lightgrey),
        ('VALIGN', (0,0),(-1,-1), 'TOP'),
    ]))
    story.append(sg_table)

    story.append(Spacer(1, 14))
    story.append(HRFlowable(width='100%', thickness=2, color=GOLD))
    story.append(Spacer(1, 6))
    story.append(Paragraph(
        '<b>Complete Denture Prosthodontics Study Guide</b> &nbsp;|&nbsp; '
        'Covers: PPS, Hanau Quint, VD, Curves, Gothic Arch, Stress Areas, '
        'House Classification, Bonwill Triangle, Combination Syndrome, '
        'Border Molding, Overdentures, Jaw Relations, Selective Grinding.',
        CAPTION))

    doc.build(story)
    print(f'PDF saved to: {outpath}')


if __name__ == '__main__':
    out = '/home/daytona/workspace/cd-study-guide/CD_Prosthodontics_Study_Guide.pdf'
    build_pdf(out)
Running Command

cd /home/daytona/workspace/cd-study-guide && python generate_cd_guide.py 2>&1

Editing File

~/cd-study-guide/generate_cd_guide.py

Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/cd-study-guide/generate_cd_guide.py'
Running Command

cd /home/daytona/workspace/cd-study-guide && python generate_cd_guide.py 2>&1

Running Command

ls -lh /home/daytona/workspace/cd-study-guide/

Your study guide PDF is ready! Here's a summary of what's included:

Complete Denture Prosthodontics - Study Guide PDF

CD Prosthodontics Study Guide

PDF Document · PDF


What's inside (10 pages):

PageContent
CoverStyled title page with denture arch illustration
TOCTable of contents with 15 sections
P3Diagram: Posterior Palatal Seal Area (AH line, PPS zone, hamular notch, fovea palatinae) + Hanau's Quint (5 color-coded boxes)
P4Diagram: Muscles of Mastication (4-column table) + Vertical Dimension (VDR/VDO/FWS with face illustration and formula box)
P5Diagram: Compensating Curves - Curve of Spee (sagittal) and Curve of Wilson (frontal) + Gothic Arch Tracing (arrow-point tracing with apex = CR)
P6Diagram: Primary & Secondary Stress-Bearing Areas (maxilla palatal view + mandible occlusal view) + House Classification (4 colored class boxes)
P7Diagram: Bonwill's Equilateral Triangle (labeled geometric diagram) + Combination Syndrome (Kelly 1972, 5 features)
P8Key Definitions Table - 15 terms from the question list
P9Border Molding step-by-step table + Overdentures summary table
P10Jaw Relations & Centric Relation table + Selective Grinding BULL/MUDL rules table
This is a shared conversation. Sign in to Orris to start your own chat.