Create a power point on topic suturing pattern on basis of standard vet saugery book

Reading File
Reading File
Searching the Web

veterinary surgery suturing patterns simple interrupted continuous mattress Lembert Cushing standard veterinary surgery textbook

Reading File
Finding Sources
Finding Sources
Searching PubMed

veterinary surgery AND suture patterns

Searching Images

veterinary surgical suture patterns simple interrupted continuous mattress diagram

Browsing Directory

~/

Running Command

mkdir -p "/tmp/workspace/veterinary-suturing-patterns/src" "/tmp/workspace/veterinary-suturing-patterns/output"

Writing File

~/veterinary-suturing-patterns/src/create_deck.py

from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.dml.color import RGBColor
from pptx.enum.shapes import MSO_SHAPE, MSO_CONNECTOR
from pptx.enum.text import PP_ALIGN, MSO_ANCHOR
from pptx.enum.dml import MSO_LINE_DASH_STYLE

# 16:9 teaching deck, all diagrams are original schematic drawings.
W,H = 13.333,7.5
NAVY=RGBColor(14,39,61); TEAL=RGBColor(17,133,135); MINT=RGBColor(199,235,225)
CREAM=RGBColor(248,247,242); INK=RGBColor(31,43,52); MUTED=RGBColor(93,108,116)
ORANGE=RGBColor(232,135,57); RED=RGBColor(184,71,66); WHITE=RGBColor(255,255,255)
GREY=RGBColor(220,227,229); DARKTEAL=RGBColor(8,92,96)
prs=Presentation(); prs.slide_width=Inches(W); prs.slide_height=Inches(H)
blank=prs.slide_layouts[6]

def rect(s,x,y,w,h,fill, line=None, radius=False):
    sh=s.shapes.add_shape(MSO_SHAPE.ROUNDED_RECTANGLE if radius else MSO_SHAPE.RECTANGLE, Inches(x), Inches(y), Inches(w), Inches(h))
    sh.fill.solid(); sh.fill.fore_color.rgb=fill
    sh.line.color.rgb=line if line else fill
    return sh

def line(s,x1,y1,x2,y2,color=INK,width=1.5,dash=None):
    sh=s.shapes.add_connector(MSO_CONNECTOR.STRAIGHT, Inches(x1), Inches(y1), Inches(x2), Inches(y2))
    sh.line.color.rgb=color; sh.line.width=Pt(width)
    if dash: sh.line.dash_style=dash
    return sh

def text(s,x,y,w,h,txt,size=18,color=INK,bold=False,align=PP_ALIGN.LEFT, font='Aptos', valign=MSO_ANCHOR.TOP):
    tb=s.shapes.add_textbox(Inches(x),Inches(y),Inches(w),Inches(h)); tf=tb.text_frame
    tf.clear(); tf.word_wrap=True; tf.margin_left=Inches(.04); tf.margin_right=Inches(.04); tf.margin_top=Inches(.02); tf.margin_bottom=Inches(.02); tf.vertical_anchor=valign
    for i,para in enumerate(txt.split('\n')):
        p=tf.paragraphs[0] if i==0 else tf.add_paragraph(); p.text=para; p.alignment=align; p.space_after=Pt(4)
        for r in p.runs:
            r.font.name=font; r.font.size=Pt(size); r.font.bold=bold; r.font.color.rgb=color
    return tb

def title(s, kicker, heading, sub=''):
    rect(s,0,0,W,H,CREAM); rect(s,0,0,W,.18,TEAL)
    text(s,.62,.40,12,.3,kicker.upper(),10,TEAL,True)
    text(s,.62,.73,12,0.55,heading,28,NAVY,True)
    if sub: text(s,.64,1.35,11.7,.35,sub,12,MUTED)

def foot(s,n):
    line(s,.62,7.12,12.72,7.12,GREY,.7); text(s,.64,7.19,8,.18,'VETERINARY SURGERY | SUTURING PATTERNS',8,MUTED,True); text(s,12.1,7.17,.6,.2,str(n).zfill(2),9,TEAL,True,PP_ALIGN.RIGHT)

def bullet(s,x,y,w,items,size=17, accent=TEAL):
    yy=y
    for it in items:
        rect(s,x,yy+.11,.10,.10,accent)
        text(s,x+.22,yy,w-.22,.48,it,size,INK)
        yy+=.58

def stitch(s, x, y, kind='simple', scale=1):
    # wound sides
    L=x; R=x+2.0*scale; top=y
    line(s,L,top,L,top+1.25*scale,RED,2); line(s,R,top,R,top+1.25*scale,RED,2)
    # stylized suture thread
    if kind=='simple':
        line(s,L,top+.25*scale,R,top+.25*scale,NAVY,1.8); line(s,L-.12*scale,top+.25*scale,L+.12*scale,top+.25*scale,NAVY,1.8); line(s,L-.08*scale,top+.15*scale,L+.08*scale,top+.35*scale,NAVY,1.2)
    elif kind=='continuous':
        for p in [.18,.47,.76,1.05]:
            line(s,L,p*scale+top,R,p*scale+top,NAVY,1.4)
        line(s,R,top+.18*scale,R,top+.47*scale,NAVY,1.4); line(s,L,top+.47*scale,L,top+.76*scale,NAVY,1.4); line(s,R,top+.76*scale,R,top+1.05*scale,NAVY,1.4)
    elif kind=='horizontal':
        line(s,L,top+.25*scale,R,top+.25*scale,NAVY,1.8); line(s,L,top+.9*scale,R,top+.9*scale,NAVY,1.8); line(s,L,top+.25*scale,L,top+.9*scale,NAVY,1.5); line(s,R,top+.25*scale,R,top+.9*scale,NAVY,1.5)
    elif kind=='vertical':
        line(s,L,top+.18*scale,R,top+.18*scale,NAVY,1.5); line(s,R,top+.18*scale,R,top+1.05*scale,NAVY,1.5); line(s,R,top+1.05*scale,L,top+1.05*scale,NAVY,1.5); line(s,L,top+1.05*scale,L,top+.42*scale,NAVY,1.5); line(s,L,top+.42*scale,R,top+.42*scale,NAVY,1.5)
    elif kind=='cushing':
        # parallel bites on same side, inverting impression
        for p in [.18,.45,.72,.99]:
            line(s,L+.22*scale,top+p*scale,R-.18*scale,top+(p+.12)*scale,NAVY,1.5)
        line(s,R-.18*scale,top+.3*scale,R-.18*scale,top+.57*scale,NAVY,1.3)
        line(s,L+.22*scale,top+.57*scale,L+.22*scale,top+.84*scale,NAVY,1.3)
    elif kind=='lembert':
        for p in [.25,.7]:
            line(s,L+.25*scale,top+p*scale,R-.25*scale,top+p*scale,NAVY,1.7)
        line(s,L+.25*scale,top+.25*scale,L+.25*scale,top+.7*scale,NAVY,1.3); line(s,R-.25*scale,top+.25*scale,R-.25*scale,top+.7*scale,NAVY,1.3)

def pattern_card(s,x,y,label,kind,descriptor):
    rect(s,x,y,2.45,2.05,WHITE,GREY,True); stitch(s,x+.24,y+.48,kind,.85)
    text(s,x+.18,y+.08,2.1,.25,label,12,NAVY,True,PP_ALIGN.CENTER)
    text(s,x+.16,y+1.65,2.13,.28,descriptor,9,MUTED,False,PP_ALIGN.CENTER)

# 1
s=prs.slides.add_slide(blank); rect(s,0,0,W,H,NAVY); rect(s,0,0,.18,H,TEAL)
text(s,.83,.88,4.0,.34,'VETERINARY SURGERY',12,MINT,True)
text(s,.80,1.38,7.3,1.28,'Suturing\npatterns',40,WHITE,True)
text(s,.85,3.00,6.8,.72,'Selection, placement, tissue effect, and common applications',19,RGBColor(216,231,232))
# art
rect(s,8.55,.93,3.55,4.95,RGBColor(21,61,81),None,True)
stitch(s,9.30,1.70,'vertical',1.22); stitch(s,9.30,3.62,'cushing',1.22)
text(s,.84,6.47,6,.35,'Teaching deck based on standard veterinary surgery texts',13,MINT)
text(s,.84,6.86,7,.23,'For education under direct surgical supervision',9,RGBColor(186,208,209)); foot(s,1)

#2
s=prs.slides.add_slide(blank); title(s,'Learning outcomes','Choose the pattern to match the tissue')
items=[('1','Classify patterns by tissue effect','Apposition, inversion, eversion, tension relief'),('2','Match pattern to anatomy','Skin, fascia, hollow viscus, and attachment sites'),('3','Recognize common errors','Strangulation, poor apposition, unequal bites, excessive tension')]
for i,(num,h,d) in enumerate(items):
    x=.72+i*4.08; rect(s,x,2.15,3.64,2.75,WHITE,GREY,True); rect(s,x+.25,2.47,.56,.56,TEAL,None,True); text(s,x+.25,2.59,.56,.2,num,14,WHITE,True,PP_ALIGN.CENTER); text(s,x+.28,3.30,3.0,.4,h,18,NAVY,True); text(s,x+.28,3.88,3.0,.65,d,13,MUTED)
text(s,.77,5.65,11.4,.55,'Core rule: use the smallest suitable suture and the simplest pattern that provides accurate, secure healing.',19,DARKTEAL,True,PP_ALIGN.CENTER); foot(s,2)

#3
s=prs.slides.add_slide(blank); title(s,'Principles','What a sound closure must achieve')
left=['Accurate tissue apposition with minimal trauma','Even bite depth and spacing; distribute tension','Preserve perfusion: avoid tight loops and strangulation','Include the holding layer, not just the surface layer']
right=['Choose absorbable or nonabsorbable material based on tissue healing time','Place knots away from luminal surfaces where possible','Use aseptic technique and gentle tissue handling','Reassess alignment and tension before final tightening']
rect(s,.67,1.95,5.85,3.95,WHITE,GREY,True); rect(s,6.82,1.95,5.85,3.95,WHITE,GREY,True); text(s,.98,2.25,5,.3,'MECHANICS',12,TEAL,True); bullet(s,.98,2.78,5.12,left,15); text(s,7.13,2.25,5,.3,'BIOLOGY & TECHNIQUE',12,TEAL,True); bullet(s,7.13,2.78,5.12,right,15)
rect(s,.83,6.25,11.65,.43,MINT,None,True); text(s,.98,6.34,11.3,.16,'Do not use a pattern merely because it is fast. Tissue type, contamination, tension, and access govern selection.',12,NAVY,True,PP_ALIGN.CENTER); foot(s,3)

#4
s=prs.slides.add_slide(blank); title(s,'Pattern families','Tissue effect is the first decision')
cols=[('APPOSITION','Edges meet without turning','Simple interrupted\nSimple continuous\nCruciate',[TEAL]),('INVERSION','Edges turn inward','Cushing\nLembert\nPurse-string',[ORANGE]),('EVERSION','Edges turn outward','Vertical mattress\nHorizontal mattress',[RED]),('TENSION / RETENTION','Shares or relieves load','Far-near-near-far\nHorizontal mattress',[NAVY])]
for i,(h,desc,pats,co) in enumerate(cols):
 x=.65+i*3.08; rect(s,x,2.0,2.72,3.88,WHITE,GREY,True); rect(s,x,2.0,2.72,.16,co[0]); text(s,x+.2,2.39,2.3,.28,h,13,co[0],True); text(s,x+.2,2.84,2.25,.55,desc,14,NAVY,True); text(s,x+.2,3.72,2.25,1.25,pats,16,INK); text(s,x+.2,5.36,2.25,.25,'Effect must fit anatomy',10,MUTED,False,PP_ALIGN.CENTER)
foot(s,4)

#5
s=prs.slides.add_slide(blank); title(s,'Appositional patterns','Workhorse closures')
pattern_card(s,.78,1.9,'Simple interrupted','simple','Precise; each stitch independent')
pattern_card(s,3.42,1.9,'Simple continuous','continuous','Fast; distributes load')
pattern_card(s,6.06,1.9,'Cruciate','horizontal','Interrupted variant; fewer knots')
rect(s,8.9,1.90,3.58,3.9,WHITE,GREY,True); text(s,9.17,2.23,3,.3,'CLINICAL USE',13,TEAL,True); bullet(s,9.17,2.72,2.95,['Skin and subcutis','Linea alba or fascia when appropriate','Gastrointestinal apposition after correct bite placement','Interrupted pattern is preferred when contamination or localized failure is a concern'],13)
rect(s,.78,5.2,7.73,.6,MINT,None,True); text(s,1.0,5.39,7.3,.18,'Simple interrupted is forgiving: failure of one knot does not open the entire line.',13,NAVY,True); foot(s,5)

#6
s=prs.slides.add_slide(blank); title(s,'Mattress patterns','Tension management and edge control')
pattern_card(s,.77,1.85,'Horizontal mattress','horizontal','Spreads tension laterally')
pattern_card(s,3.42,1.85,'Vertical mattress','vertical','Promotes edge eversion')
rect(s,6.42,1.85,5.85,3.82,WHITE,GREY,True); text(s,6.7,2.18,5.2,.3,'HOW TO USE THEM SAFELY',13,TEAL,True); bullet(s,6.7,2.72,5.1,['Horizontal mattress can function as a tension-relieving or temporary retention stitch','Vertical mattress uses a far-far, near-near sequence and can improve skin-edge eversion','Use broad bites in strong tissue; tighten only enough to oppose','Add stents or bolsters if required to prevent pressure injury'],14)
rect(s,.77,5.98,11.5,.48,RGBColor(252,232,229),None,True); text(s,.98,6.13,11.0,.18,'Caution: excessive tension can compromise skin perfusion, cause pain, leave marks, or lead to necrosis.',13,RED,True,PP_ALIGN.CENTER); foot(s,6)

#7
s=prs.slides.add_slide(blank); title(s,'Inverting patterns','For selected hollow-viscus closures')
pattern_card(s,.8,1.82,'Cushing','cushing','Parallel bites; does not enter lumen')
pattern_card(s,3.45,1.82,'Lembert','lembert','Interrupted or continuous seromuscular bites')
rect(s,6.4,1.82,5.9,4.0,WHITE,GREY,True); text(s,6.72,2.17,5.2,.3,'KEY POINTS',13,ORANGE,True); bullet(s,6.72,2.72,5.05,['Both are inverting patterns, commonly applied to stomach or urinary bladder where indicated','Cushing bites run parallel to the incision and should remain seromuscular','Lembert bites are placed perpendicular to the incision and create inversion','Do not narrow the lumen or compromise blood supply by over-inversion'],14,ORANGE)
text(s,.84,6.12,11.4,.25,'Pattern choice for gastrointestinal and urinary surgery depends on procedure, organ, lumen, contamination, and surgeon judgment.',12,MUTED,False,PP_ALIGN.CENTER); foot(s,7)

#8
s=prs.slides.add_slide(blank); title(s,'Pattern selection by site','A practical framework')
rows=[('Skin','Simple interrupted, simple continuous, vertical mattress','Need accurate alignment; use tension relief when needed'),('Subcutis','Simple continuous or interrupted','Eliminate dead space without strangulating tissue'),('Linea alba / fascia','Simple continuous or interrupted','Capture strong fascial tissue with secure bites'),('Stomach / bladder','Appositional or inverting pattern, procedure dependent','Avoid lumen narrowing and preserve perfusion'),('Intestine','Usually appositional technique','Meticulous atraumatic handling and mucosal apposition')]
rect(s,.72,1.78,11.9,.48,NAVY); heads=['TISSUE / SITE','COMMON OPTIONS','DECISION POINT']; xs=[.92,3.0,7.42]; ws=[1.75,4.1,4.75]
for x,w,h in zip(xs,ws,heads): text(s,x,1.91,w,.16,h,10,WHITE,True)
for i,row in enumerate(rows):
 y=2.27+i*.75; rect(s,.72,y,11.9,.72,WHITE if i%2==0 else RGBColor(237,242,241),GREY)
 for x,w,v in zip(xs,ws,row): text(s,x,y+.16,w,.39,v,13,INK, x==.92)
foot(s,8)

#9
s=prs.slides.add_slide(blank); title(s,'Placement rules','Spacing, bite size, and knots matter')
# schematic incision
rect(s,.9,2.0,5.55,3.85,WHITE,GREY,True); text(s,1.2,2.3,5,.25,'SIMPLE INTERRUPTED: CONSISTENT GEOMETRY',12,TEAL,True)
line(s,2.1,3.05,2.1,5.05,RED,3); line(s,4.9,3.05,4.9,5.05,RED,3)
for yy in [3.38,4.1,4.82]:
 line(s,2.1,yy,4.9,yy,NAVY,1.7); line(s,1.88,yy,2.12,yy,NAVY,1.3); line(s,4.88,yy,5.12,yy,NAVY,1.3)
line(s,2.1,5.35,4.9,5.35,TEAL,1.4); line(s,2.1,5.25,2.1,5.45,TEAL,1.4); line(s,4.9,5.25,4.9,5.45,TEAL,1.4); text(s,2.55,5.4,2,.2,'equal spacing',10,TEAL,True,PP_ALIGN.CENTER)
rect(s,6.8,2.0,5.54,3.85,WHITE,GREY,True); text(s,7.1,2.3,4.9,.25,'CHECK BEFORE YOU TIE',12,TEAL,True); bullet(s,7.15,2.83,4.75,['Bites are symmetric across the incision','Needle path is perpendicular when appropriate','Edges are apposed, not overlapped or gaping','Knot is secure but does not blanch tissue','Tail length and knot location are appropriate'],14)
foot(s,9)

#10
s=prs.slides.add_slide(blank); title(s,'Avoidable errors','What complications often look like')
errs=[('Too tight','Blanching, edema, pressure injury','Reduce tension; use a different pattern or add tension-relief strategy'),('Too shallow','Suture pulls through / dehiscence','Engage the holding layer with adequate bite size'),('Unequal bites','Step-off, poor apposition, leak risk','Reposition needle and maintain symmetric geometry'),('Wrong tissue effect','Inversion/eversion where not wanted','Return to anatomy and intended healing goal')]
for i,(a,b,c) in enumerate(errs):
 y=1.92+i*1.05; rect(s,.76,y,11.76,.83,WHITE,GREY,True); rect(s,.76,y,.16,.83,RED); text(s,1.12,y+.16,2.1,.24,a,15,NAVY,True); text(s,3.25,y+.12,3.05,.48,b,13,RED); text(s,6.45,y+.12,5.55,.48,c,13,INK)
text(s,1.12,6.31,11.1,.25,'If you are uncertain, stop and reassess tissue quality, exposure, pattern, material, and tension rather than “rescuing” a poor stitch.',13,DARKTEAL,True,PP_ALIGN.CENTER); foot(s,10)

#11
s=prs.slides.add_slide(blank); title(s,'Decision ladder','From wound assessment to final check')
steps=[('1','Identify tissue and holding layer'),('2','Assess contamination, vascularity, tension, and access'),('3','Choose desired tissue effect: appose, invert, evert, or relieve tension'),('4','Select material, needle, bite size, and pattern'),('5','Place consistently, reassess alignment, then tie securely')]
for i,(n,st) in enumerate(steps):
 y=1.75+i*.86; rect(s,1.05,y,.56,.56,TEAL,None,True); text(s,1.05,y+.13,.56,.18,n,13,WHITE,True,PP_ALIGN.CENTER); line(s,1.33,y+.56,1.33,y+.87,GREY,1.4) if i<4 else None; text(s,1.95,y+.12,9.8,.28,st,18,NAVY,True)
rect(s,1.03,6.15,11.0,.48,MINT,None,True); text(s,1.2,6.30,10.65,.15,'The correct pattern is the one that meets the biologic and mechanical needs of this specific closure.',12,NAVY,True,PP_ALIGN.CENTER); foot(s,11)

#12
s=prs.slides.add_slide(blank); title(s,'References & take-home points','Use this deck alongside supervised skills training')
text(s,.8,1.82,11.8,.3,'TAKE-HOME',12,TEAL,True); bullet(s,.82,2.25,11.25,['Appositional patterns are the standard workhorse for many veterinary closures.','Mattress patterns improve tension distribution or eversion but can injure tissue if overtightened.','Cushing and Lembert are inverting patterns for selected hollow-viscus applications.','Precision, atraumatic handling, and tension control are as important as the named pattern.'],15)
text(s,.8,4.9,11.7,.25,'STANDARD REFERENCES',12,TEAL,True)
refs=['Tobias KM, Johnston SA, eds. Veterinary Surgery: Small Animal. 2nd ed. Elsevier; 2018.','Fossum TW. Small Animal Surgery. 6th ed. Elsevier; 2024.','Hendrickson DA. Techniques in Large Animal Surgery. 5th ed. Wiley-Blackwell; 2013.','Supplementary example: WSAVA proceedings note use of Cushing/Lembert inversion to reinforce selected gastric closures.']
for i,r in enumerate(refs): text(s,.88,5.28+i*.34,11.4,.23,r,11,INK)
text(s,.84,6.83,11.5,.17,'Educational schematic diagrams created for this presentation. Not a substitute for a surgeon’s procedural instructions or local protocol.',9,MUTED,False,PP_ALIGN.CENTER); foot(s,12)

out='/tmp/workspace/veterinary-suturing-patterns/output/Veterinary_Suturing_Patterns.pptx'
prs.save(out)
print(out)
Running Command

python "/tmp/workspace/veterinary-suturing-patterns/src/create_deck.py" && python -c "from pptx import Presentation; p=Presentation('/tmp/workspace/veterinary-suturing-patterns/output/Veterinary_Suturing_Patterns.pptx'); print('slides',len(p.slides)); print([sum(1 for sh in s.shapes if getattr(sh,'has_text_frame',False)) for s in p.slides])" && ls -lh "/tmp/workspace/veterinary-suturing-patterns/output/Veterinary_Suturing_Patterns.pptx"

Created a 12-slide veterinary surgery PowerPoint on suturing patterns. It covers appositional, mattress, and inverting patterns, pattern selection by tissue site, placement rules, common errors, and standard references. Original schematic diagrams are included.

Veterinary Suturing Patterns

Presentation · PPTX

This is a shared conversation. Sign in to Orris to start your own chat.