digrams wtever previous asked in ur platform prosthesis and otrthosis list in pdf to draw
What should the PDF include? · Which items should I cover?
Create a PDF with both labelled diagrams and blank drawing boxes
common upper limb lower limb orthoses prostheses types rehabilitation
prosthetics orthotics AND rehabilitation
~/
~/
mkdir -p "/tmp/workspace/prosthesis-orthosis-drawing-pdf/src" "/tmp/workspace/prosthesis-orthosis-drawing-pdf/output" && python - <<'PY' from pathlib import Path p=Path('/tmp/workspace/prosthesis-orthosis-drawing-pdf/src/create_pdf.py') p.write_text(r'''from reportlab.pdfgen import canvas from reportlab.lib.pagesizes import A4 from reportlab.lib import colors from reportlab.lib.units import mm from reportlab.pdfbase.pdfmetrics import stringWidth from pypdf import PdfReader OUT='/tmp/workspace/prosthesis-orthosis-drawing-pdf/output/Prostheses_Orthoses_Drawing_Practice.pdf' W,H=A4 NAVY=colors.HexColor('#17365D'); BLUE=colors.HexColor('#367BB7'); PALE=colors.HexColor('#EAF3F8'); GREY=colors.HexColor('#52606D') def text(c,s,x,y,size=10,font='Helvetica',color=colors.black): c.setFont(font,size); c.setFillColor(color); c.drawString(x,y,s) def wrap(c,s,x,y,width,size=10,leading=14,font='Helvetica',color=colors.black): c.setFont(font,size); c.setFillColor(color); words=s.split(); line=''; yy=y for wd in words: test=(line+' '+wd).strip() if stringWidth(test,font,size)>width: c.drawString(x,yy,line); yy-=leading; line=wd else: line=test if line: c.drawString(x,yy,line); yy-=leading return yy def header(c,title,sub): c.setFillColor(NAVY); c.rect(0,H-35*mm,W,35*mm,stroke=0,fill=1) text(c,title,16*mm,H-17*mm,18,'Helvetica-Bold',colors.white) text(c,sub,16*mm,H-25*mm,9,'Helvetica',colors.white) def footer(c,num): c.setStrokeColor(colors.HexColor('#C8D3DC')); c.line(14*mm,14*mm,W-14*mm,14*mm) text(c,'Prostheses and Orthoses - Drawing Practice',14*mm,8*mm,8,'Helvetica',GREY) text(c,str(num),W-18*mm,8*mm,8,'Helvetica',GREY) def label(c,txt,px,py,lx,ly): c.setStrokeColor(BLUE); c.setLineWidth(0.8); c.line(px,py,lx,ly) c.setFillColor(BLUE); c.circle(px,py,1.5,stroke=0,fill=1) c.setFillColor(colors.white); c.roundRect(lx-2,ly-4,54,12,3,stroke=0,fill=1) text(c,txt,lx,ly,7,'Helvetica-Bold',NAVY) def limb(c,x,y,scale=1,upper=True): c.setStrokeColor(colors.HexColor('#263645')); c.setLineWidth(4) # stylised lower limb or arm skeleton, muted background outline if upper: c.line(x,y+150*scale,x+10*scale,y+105*scale); c.line(x+10*scale,y+105*scale,x-4*scale,y+57*scale) c.setLineWidth(2); c.line(x-4*scale,y+57*scale,x-10*scale,y+23*scale) c.circle(x,y+150*scale,8*scale,stroke=1,fill=0); c.circle(x+10*scale,y+105*scale,6*scale,stroke=1,fill=0); c.circle(x-4*scale,y+57*scale,5*scale,stroke=1,fill=0) else: c.line(x,y+170*scale,x+5*scale,y+100*scale); c.line(x+5*scale,y+100*scale,x,y+30*scale) c.setLineWidth(2); c.line(x,y+30*scale,x+25*scale,y+18*scale) c.circle(x,y+170*scale,9*scale,stroke=1,fill=0); c.circle(x+5*scale,y+100*scale,7*scale,stroke=1,fill=0); c.circle(x,y+30*scale,5*scale,stroke=1,fill=0) def draw_afo(c,x,y): # posterior leaf and footplate c.setStrokeColor(NAVY); c.setFillColor(PALE); c.setLineWidth(2) p=c.beginPath(); p.moveTo(x-10,y+135); p.curveTo(x-24,y+92,x-20,y+53,x-14,y+30); p.lineTo(x+48,y+24); p.lineTo(x+61,y+12); p.lineTo(x-20,y+12); p.lineTo(x-27,y+36); p.curveTo(x-33,y+80,x-24,y+118,x-10,y+135); c.drawPath(p,stroke=1,fill=1) c.setStrokeColor(BLUE); c.line(x-19,y+75,x+34,y+75); c.line(x-23,y+46,x+25,y+46) label(c,'calf shell',x-15,y+110,x+55,y+120); label(c,'ankle section',x-22,y+56,x+55,y+61); label(c,'foot plate',x+24,y+18,x+75,y+23) def draw_kafo(c,x,y): c.setStrokeColor(NAVY); c.setLineWidth(3); c.line(x-22,y+155,x-22,y+28); c.line(x+22,y+155,x+22,y+28); c.setFillColor(PALE); c.roundRect(x-35,y+130,70,25,4,stroke=1,fill=1); c.roundRect(x-30,y+67,60,22,4,stroke=1,fill=1); c.line(x-30,y+28,x+50,y+18); c.circle(x-22,y+102,6,stroke=1,fill=0); c.circle(x+22,y+102,6,stroke=1,fill=0) label(c,'thigh band',x+20,y+145,x+58,y+153); label(c,'knee joint',x+22,y+102,x+58,y+105); label(c,'ankle uprights',x+22,y+48,x+58,y+52); label(c,'foot plate',x+25,y+25,x+72,y+28) def draw_whfo(c,x,y): c.setStrokeColor(NAVY); c.setFillColor(PALE); c.setLineWidth(2) c.roundRect(x-25,y+63,55,72,6,stroke=1,fill=1); c.roundRect(x-35,y+40,73,26,5,stroke=1,fill=1) for dx in (-22,-8,6,20): c.line(x+dx,y+40,x+dx+5,y+15) c.setStrokeColor(BLUE); c.line(x-25,y+105,x+30,y+105) label(c,'forearm shell',x+27,y+115,x+58,y+123); label(c,'wrist support',x+32,y+62,x+58,y+67); label(c,'hand/finger pan',x+11,y+36,x+58,y+38) def draw_elbow(c,x,y): c.setStrokeColor(NAVY); c.setLineWidth(3); c.line(x-16,y+150,x-16,y+25); c.line(x+16,y+150,x+16,y+25); c.setFillColor(PALE); c.roundRect(x-32,y+121,64,26,4,stroke=1,fill=1); c.roundRect(x-30,y+42,60,25,4,stroke=1,fill=1); c.circle(x-16,y+92,6,stroke=1,fill=0); c.circle(x+16,y+92,6,stroke=1,fill=0) label(c,'upper arm cuff',x+20,y+134,x+55,y+142); label(c,'hinge',x+16,y+92,x+55,y+95); label(c,'forearm cuff',x+20,y+52,x+55,y+56) def draw_tt(c,x,y): c.setStrokeColor(NAVY); c.setFillColor(PALE); c.setLineWidth(2) c.roundRect(x-28,y+108,56,70,7,stroke=1,fill=1); c.setFillColor(colors.white); c.roundRect(x-17,y+112,34,58,5,stroke=1,fill=1) c.setStrokeColor(NAVY); c.setLineWidth(4); c.line(x,y+108,x,y+44); c.setFillColor(PALE); c.roundRect(x-10,y+37,20,15,3,stroke=1,fill=1); c.roundRect(x-12,y+11,52,20,5,stroke=1,fill=1) label(c,'socket',x+25,y+150,x+58,y+158); label(c,'pylon',x,y+75,x+58,y+78); label(c,'foot',x+25,y+22,x+58,y+25) def draw_tf(c,x,y): c.setStrokeColor(NAVY); c.setFillColor(PALE); c.setLineWidth(2) c.roundRect(x-31,y+130,62,58,7,stroke=1,fill=1); c.setStrokeColor(NAVY); c.setLineWidth(4); c.line(x,y+130,x,y+93); c.setFillColor(PALE); c.circle(x,y+85,12,stroke=1,fill=1); c.setStrokeColor(NAVY); c.setLineWidth(4); c.line(x,y+73,x,y+40); c.setFillColor(PALE); c.roundRect(x-12,y+12,54,20,5,stroke=1,fill=1) label(c,'socket',x+28,y+160,x+60,y+168); label(c,'knee unit',x+12,y+85,x+60,y+89); label(c,'pylon',x,y+55,x+60,y+58); label(c,'foot',x+28,y+22,x+60,y+25) def draw_tr(c,x,y): c.setStrokeColor(NAVY); c.setFillColor(PALE); c.setLineWidth(2) c.roundRect(x-26,y+110,52,65,7,stroke=1,fill=1); c.setStrokeColor(NAVY); c.setLineWidth(4); c.line(x,y+110,x,y+56); c.setFillColor(PALE); c.circle(x,y+48,9,stroke=1,fill=1); c.roundRect(x-18,y+11,36,32,8,stroke=1,fill=1) label(c,'socket',x+25,y+150,x+57,y+158); label(c,'forearm frame',x,y+76,x+57,y+80); label(c,'wrist unit',x+8,y+48,x+57,y+51); label(c,'terminal device',x+18,y+24,x+57,y+27) def sheet(c,title,description,drawfun,kind,page): header(c,title,kind) wrap(c,description,16*mm,H-47*mm,W-32*mm,9,12,'Helvetica',GREY) # diagram area c.setStrokeColor(colors.HexColor('#BFCED9')); c.setFillColor(colors.HexColor('#F8FBFD')); c.roundRect(16*mm,88*mm,82*mm,100*mm,7,stroke=1,fill=1) text(c,'LABELLED SCHEMATIC',21*mm,181*mm,8,'Helvetica-Bold',NAVY) drawfun(c,55*mm,100*mm) # blank practice box c.setStrokeColor(BLUE); c.setLineWidth(1.2); c.setFillColor(colors.white); c.roundRect(108*mm,88*mm,86*mm,100*mm,7,stroke=1,fill=1) text(c,'YOUR DRAWING',113*mm,181*mm,8,'Helvetica-Bold',NAVY) c.setDash(2,3); c.setStrokeColor(colors.HexColor('#AABBC7')); c.line(151*mm,96*mm,151*mm,174*mm); c.line(114*mm,136*mm,188*mm,136*mm); c.setDash() text(c,'Copy the overall outline, then add labels.',112*mm,93*mm,7,'Helvetica-Oblique',GREY) # notes text(c,'Notes / key parts:',16*mm,70*mm,9,'Helvetica-Bold',NAVY); c.setStrokeColor(colors.HexColor('#BFCED9')); c.roundRect(16*mm,23*mm,W-32*mm,40*mm,4,stroke=1,fill=0) footer(c,page); c.showPage() c=canvas.Canvas(OUT,pagesize=A4); c.setTitle('Prostheses and Orthoses Drawing Practice') header(c,'Prostheses and Orthoses','Labelled schematic diagrams and blank drawing boxes') text(c,'Drawing Practice Workbook',16*mm,H-58*mm,23,'Helvetica-Bold',NAVY) wrap(c,'Use each page in two stages: first identify the labelled components in the left-hand schematic. Then reproduce a simplified outline in the blank box and add your own labels.',16*mm,H-72*mm,W-32*mm,11,15,'Helvetica',GREY) text(c,'Included items',16*mm,H-108*mm,13,'Helvetica-Bold',NAVY) items=['Lower-limb orthoses: Ankle-foot orthosis (AFO) and Knee-ankle-foot orthosis (KAFO).','Upper-limb orthoses: Wrist-hand-finger orthosis (WHFO) and elbow orthosis.','Lower-limb prostheses: Transtibial (below-knee) and transfemoral (above-knee).','Upper-limb prosthesis: Transradial (below-elbow).'] y=H-120*mm for i,it in enumerate(items,1): text(c,str(i)+'.',18*mm,y,10,'Helvetica-Bold',BLUE); y=wrap(c,it,25*mm,y,W-43*mm,10,14,'Helvetica',colors.black)-3*mm text(c,'Study note',16*mm,45*mm,10,'Helvetica-Bold',NAVY) wrap(c,'These are simplified teaching schematics, not prescription or fabrication templates. Actual devices are individually assessed and fitted by qualified prosthetists and orthotists.',16*mm,38*mm,W-32*mm,9,12,'Helvetica',GREY) footer(c,1); c.showPage() sheet(c,'Ankle-Foot Orthosis (AFO)','An AFO supports the ankle and foot. Common visual elements are the calf section, ankle region and foot plate.',draw_afo,'LOWER-LIMB ORTHOSIS',2) sheet(c,'Knee-Ankle-Foot Orthosis (KAFO)','A KAFO extends from the thigh to the foot. Notice the knee joints, uprights, bands and foot plate.',draw_kafo,'LOWER-LIMB ORTHOSIS',3) sheet(c,'Wrist-Hand-Finger Orthosis (WHFO)','A WHFO supports the wrist and hand. Draw the forearm shell first, then the wrist and finger support.',draw_whfo,'UPPER-LIMB ORTHOSIS',4) sheet(c,'Elbow Orthosis','An elbow orthosis commonly uses upper-arm and forearm cuffs connected by a hinge.',draw_elbow,'UPPER-LIMB ORTHOSIS',5) sheet(c,'Transtibial Prosthesis','A transtibial prosthesis is used below the knee. Its key components are socket, pylon and foot.',draw_tt,'LOWER-LIMB PROSTHESIS',6) sheet(c,'Transfemoral Prosthesis','A transfemoral prosthesis is used above the knee. In addition to socket, pylon and foot, it includes a knee unit.',draw_tf,'LOWER-LIMB PROSTHESIS',7) sheet(c,'Transradial Prosthesis','A transradial prosthesis is used below the elbow. Identify the socket, forearm frame, wrist unit and terminal device.',draw_tr,'UPPER-LIMB PROSTHESIS',8) c.save() reader=PdfReader(OUT) assert len(reader.pages)==8, len(reader.pages) assert Path(OUT).stat().st_size > 20000 print(OUT, len(reader.pages), Path(OUT).stat().st_size) ''') PY python "/tmp/workspace/prosthesis-orthosis-drawing-pdf/src/create_pdf.py"
~/prosthesis-orthosis-drawing-pdf/output
~/prosthesis-orthosis-drawing-pdf/src/create_pdf.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/prosthesis-orthosis-drawing-pdf/src/create_pdf.py'
python "/tmp/workspace/prosthesis-orthosis-drawing-pdf/src/create_pdf.py" && python - <<'PY' from pypdf import PdfReader from pathlib import Path p=Path('/tmp/workspace/prosthesis-orthosis-drawing-pdf/output/Prostheses_Orthoses_Drawing_Practice.pdf') r=PdfReader(str(p)) print({'exists':p.exists(),'bytes':p.stat().st_size,'pages':len(r.pages),'title':r.metadata.title}) print(r.pages[1].extract_text()[:300]) PY
Prostheses Orthoses Drawing Practice
PDF Document · PDF
in previous chats u have given me collect all taAT AND PUT INTO PDF
prostheses orthoses common types drawing practice
Combine everything into one labelled PDF
~/prosthesis-orthosis-drawing-pdf/output
Prostheses Orthoses Drawing Practice
PDF Document · PDF
NOT THESE DIGRAMA PLEASE CHECK PREVIOUS CHATSall realistric diagrams
orthoses prostheses clinical diagrams AFO KAFO upper limb prosthesis illustrations
Can you extract the exact diagram list from my images?
Upload the previous-chat images for exact diagram extraction
like this all diagrams of prosthesis and orthosis in pdf
common orthosis prosthesis types AFO KAFO WHO TLSO transtibial transfemoral diagrams
labelled carbon graphite AFO functional electrical stimulation AFO articulated ankle foot orthosis diagram
For the realistic labelled PDF, which coverage do you want?
Prostheses Orthoses Drawing Practice
PDF Document · PDF
Prostheses Orthoses Drawing Practice
PDF Document · PDF
Create the complete realistic labelled prosthesis-and-orthosis PDF
orthotic prosthetic device types AFO KAFO HKAFO TLSO transradial transtibial transfemoral components
Educational clinical line-art plate showing three realistic lower-limb orthoses worn on a human lower leg: a custom foot orthosis in shoe, a solid ankle-foot orthosis, and an articulated metal-upright ankle-foot orthosis. Plain white background. No text or labels.
Educational clinical line-art plate showing three realistic lower-limb orthoses worn on human legs: a knee orthosis, a knee-ankle-foot orthosis with metal uprights, and a hip-knee-ankle-foot orthosis with pelvic band. Plain white background. No text or labels.
Educational clinical line-art plate showing three realistic upper-limb orthoses worn on a human upper limb: wrist-hand orthosis, wrist-hand-finger orthosis, and elbow orthosis with hinge. Plain white background. No text or labels.
Educational clinical line-art plate showing three realistic spinal orthoses worn on a human torso: cervical collar, cervicothoracic orthosis, and thoracolumbosacral orthosis. Plain white background. No text or labels.
Educational clinical line-art plate showing three realistic lower-limb prostheses worn on a human residual limb: partial foot prosthesis, transtibial prosthesis with socket pylon and prosthetic foot, and transfemoral prosthesis with socket knee unit pylon and foot. Plain white background. No text or labels.
Educational clinical line-art plate showing three realistic upper-limb prostheses worn on a human residual limb: partial hand prosthesis, transradial prosthesis with socket forearm frame wrist and terminal device, and transhumeral prosthesis with socket elbow unit forearm and terminal device. Plain white background. No text or labels.
~/
mkdir -p "/tmp/workspace/complete-realistic-prosthesis-orthosis-pdf/assets" "/tmp/workspace/complete-realistic-prosthesis-orthosis-pdf/src" "/tmp/workspace/complete-realistic-prosthesis-orthosis-pdf/output" && curl -L "https://cdn.orris.care/image-gen/1c8cc0bebcce41e9bb3f6db1d19b724a.png" -o "/tmp/workspace/complete-realistic-prosthesis-orthosis-pdf/assets/lower_orthoses_1.png" && curl -L "https://cdn.orris.care/image-gen/2a7d5a7b90f9427ea84c468cbfc11abb.png" -o "/tmp/workspace/complete-realistic-prosthesis-orthosis-pdf/assets/lower_orthoses_2.png" && curl -L "https://cdn.orris.care/image-gen/d30943148a584eef8611ed3022ed6012.png" -o "/tmp/workspace/complete-realistic-prosthesis-orthosis-pdf/assets/upper_orthoses.png" && curl -L "https://cdn.orris.care/image-gen/55fb8f485fe043549bfa8d74d15b34b3.png" -o "/tmp/workspace/complete-realistic-prosthesis-orthosis-pdf/assets/spinal_orthoses.png" && curl -L "https://cdn.orris.care/image-gen/b62e83c8030f423bbbb5846f310a9173.png" -o "/tmp/workspace/complete-realistic-prosthesis-orthosis-pdf/assets/lower_prostheses.png" && curl -L "https://cdn.orris.care/image-gen/d62258de021f4441b5ea8f2770e66047.png" -o "/tmp/workspace/complete-realistic-prosthesis-orthosis-pdf/assets/upper_prostheses.png" && ls -lh "/tmp/workspace/complete-realistic-prosthesis-orthosis-pdf/assets"
python - <<'PY' from pathlib import Path p=Path('/tmp/workspace/complete-realistic-prosthesis-orthosis-pdf/src/create_reference.py') p.write_text(r'''from reportlab.pdfgen import canvas from reportlab.lib.pagesizes import A4 from reportlab.lib import colors from reportlab.lib.units import mm from reportlab.lib.utils import ImageReader from reportlab.pdfbase.pdfmetrics import stringWidth from PIL import Image from pypdf import PdfReader ROOT='/tmp/workspace/complete-realistic-prosthesis-orthosis-pdf' OUT=ROOT+'/output/Complete_Realistic_Prosthesis_Orthosis_Atlas.pdf' W,H=A4 NAVY=colors.HexColor('#17365D'); TEAL=colors.HexColor('#237A8B'); PALE=colors.HexColor('#EAF4F5'); GREY=colors.HexColor('#46525C') def tx(c,s,x,y,size=9,font='Helvetica',color=colors.black): c.setFont(font,size);c.setFillColor(color);c.drawString(x,y,s) def para(c,s,x,y,w,size=9,leading=12,font='Helvetica',color=GREY): c.setFont(font,size);c.setFillColor(color); words=s.split();line='';yy=y for a in words: t=(line+' '+a).strip() if stringWidth(t,font,size)>w: c.drawString(x,yy,line);yy-=leading;line=a else:line=t if line:c.drawString(x,yy,line);yy-=leading return yy def hdr(c,title,section): c.setFillColor(NAVY);c.rect(0,H-28*mm,W,28*mm,0,1) tx(c,section.upper(),15*mm,H-10*mm,8,'Helvetica-Bold',colors.HexColor('#BCE7E9')) tx(c,title,15*mm,H-20*mm,16,'Helvetica-Bold',colors.white) def ftr(c,n): c.setStrokeColor(colors.HexColor('#B9C8CF'));c.line(15*mm,13*mm,W-15*mm,13*mm) tx(c,'Realistic Prosthesis and Orthosis Atlas | Educational reference',15*mm,8*mm,7,'Helvetica',GREY);tx(c,str(n),W-18*mm,8*mm,8,'Helvetica-Bold',NAVY) def image_fit(c,path,x,y,w,h): im=Image.open(path); iw,ih=im.size; ratio=min(w/iw,h/ih); nw,nh=iw*ratio,ih*ratio c.drawImage(ImageReader(im),x+(w-nw)/2,y+(h-nh)/2,nw,nh,mask='auto') def component_box(c,heading,components,uses,x,y,w,h): c.setFillColor(PALE);c.roundRect(x,y,w,h,4,0,1) tx(c,heading,x+4*mm,y+h-7*mm,9,'Helvetica-Bold',NAVY) yy=para(c,'Key labelled parts: '+components,x+4*mm,y+h-13*mm,w-8*mm,7.7,9,'Helvetica',GREY) para(c,'Clinical use: '+uses,x+4*mm,yy-1*mm,w-8*mm,7.7,9,'Helvetica',GREY) def page(c,num,title,section,img,devices): hdr(c,title,section) # panel image c.setFillColor(colors.white); c.setStrokeColor(colors.HexColor('#B8C6CF'));c.roundRect(12*mm,88*mm,W-24*mm,165*mm,6,1,1) image_fit(c,ROOT+'/assets/'+img,18*mm,95*mm,W-36*mm,150*mm) # three clear labels width=(W-30*mm)/3 for i,(name,components,uses) in enumerate(devices): x=15*mm+i*width; component_box(c,name,components,uses,x,25*mm,width-4*mm,55*mm) ftr(c,num);c.showPage() c=canvas.Canvas(OUT,pagesize=A4);c.setTitle('Complete Realistic Prosthesis and Orthosis Atlas') hdr(c,'Complete Realistic Prosthesis and Orthosis Atlas','Illustrated study reference') tx(c,'Realistic labelled study plates',15*mm,H-51*mm,22,'Helvetica-Bold',NAVY) para(c,'This atlas uses realistic clinical-style illustrations of devices worn on the body. Each plate is followed by the device name, key visible components and common educational indications. It is designed for identification and drawing study, not for device prescription or fabrication.',15*mm,H-65*mm,W-30*mm,10,14) tx(c,'Included sections',15*mm,H-109*mm,12,'Helvetica-Bold',NAVY) items=['Lower-limb orthoses: foot orthosis, AFO, articulated AFO, knee orthosis, KAFO and HKAFO.','Upper-limb orthoses: wrist-hand orthosis, wrist-hand-finger orthosis and elbow orthosis.','Spinal orthoses: cervical collar, CTO and TLSO.','Lower-limb prostheses: partial-foot, transtibial and transfemoral.','Upper-limb prostheses: partial-hand, transradial and transhumeral.'] y=H-121*mm for i,a in enumerate(items,1): tx(c,str(i)+'.',17*mm,y,9,'Helvetica-Bold',TEAL);y=para(c,a,24*mm,y,W-40*mm,9,13)-3*mm tx(c,'Important',15*mm,48*mm,10,'Helvetica-Bold',NAVY) para(c,'Orthoses support, align or protect body segments. Prostheses replace an absent body part. Individual devices and components differ by person, diagnosis and professional fitting.',15*mm,40*mm,W-30*mm,8.5,11) ftr(c,1);c.showPage() page(c,2,'Foot and Ankle Orthoses','Lower-limb orthoses','lower_orthoses_1.png',[ ('Foot orthosis (FO)','custom insole, heel cup, arch contour, top cover','foot alignment, pressure distribution and comfort'), ('Solid AFO','calf shell, ankle section, straps, full foot plate','foot drop, ankle instability or positioning'), ('Articulated AFO','calf band, ankle hinge, uprights, stirrup and shoe attachment','controlled ankle motion and gait support')]) page(c,3,'Knee and Hip Orthoses','Lower-limb orthoses','lower_orthoses_2.png',[ ('Knee orthosis (KO)','thigh and calf cuffs, hinges, straps','knee support and motion control'), ('KAFO','thigh band, knee joint, uprights, ankle section and foot plate','knee and ankle instability with limb weakness'), ('HKAFO','pelvic band, hip joints, KAFO uprights, knee joints and foot plates','hip, knee and ankle control in selected paralysis')]) page(c,4,'Hand, Wrist and Elbow Orthoses','Upper-limb orthoses','upper_orthoses.png',[ ('Wrist-hand orthosis (WHO)','forearm trough, wrist support, palmar bar and straps','wrist positioning and support'), ('Wrist-hand-finger orthosis (WHFO)','forearm shell, wrist section, hand pan and finger supports','hand positioning and contracture management'), ('Elbow orthosis (EO)','upper arm cuff, elbow hinge, forearm cuff and straps','controlled elbow motion or protection')]) page(c,5,'Cervical and Thoracolumbar Orthoses','Spinal orthoses','spinal_orthoses.png',[ ('Cervical orthosis','chin support, occipital support, anterior and posterior shell','cervical motion restriction and support'), ('Cervicothoracic orthosis (CTO)','cervical collar, chest panel, thoracic uprights and straps','additional cervical and upper thoracic control'), ('TLSO','anterior shell, posterior shell, abdominal closure and thoracic extension','thoracolumbar support and motion limitation')]) page(c,6,'Lower-limb Prostheses','Lower-limb prostheses','lower_prostheses.png',[ ('Partial-foot prosthesis','toe/forefoot replacement, in-shoe shell and filler','replacement after partial-foot loss'), ('Transtibial prosthesis','socket, liner/interface, pylon and prosthetic foot','replacement below the knee'), ('Transfemoral prosthesis','socket, knee unit, pylon and prosthetic foot','replacement above the knee')]) page(c,7,'Upper-limb Prostheses','Upper-limb prostheses','upper_prostheses.png',[ ('Partial-hand prosthesis','custom socket, replacement digits and suspension','replacement of absent fingers or part of hand'), ('Transradial prosthesis','socket, forearm frame, wrist unit and terminal device','replacement below the elbow'), ('Transhumeral prosthesis','socket, elbow unit, forearm section, wrist and terminal device','replacement above the elbow')]) # Drawing checklist page hdr(c,'Drawing Checklist','Practice page') para(c,'Use this page while copying the clinical-style plates. Draw the body outline first, then device outline, attachment points, joints and labels.',15*mm,H-43*mm,W-30*mm,10,13) sections=[('Orthoses',['Foot orthosis','Solid AFO','Articulated AFO','Knee orthosis','KAFO','HKAFO','WHO','WHFO','Elbow orthosis','Cervical orthosis','CTO','TLSO']),('Prostheses',['Partial-foot','Transtibial','Transfemoral','Partial-hand','Transradial','Transhumeral'])] y=H-66*mm for title,arr in sections: tx(c,title,15*mm,y,13,'Helvetica-Bold',NAVY);y-=9*mm for a in arr: c.setStrokeColor(TEAL);c.rect(16*mm,y-2*mm,4*mm,4*mm,1,0);tx(c,a,24*mm,y-1*mm,10,'Helvetica',colors.black);c.setStrokeColor(colors.HexColor('#C6D1D7'));c.line(75*mm,y,195*mm,y);y-=8*mm y-=4*mm ftr(c,8);c.showPage();c.save() r=PdfReader(OUT);assert len(r.pages)==8 assert __import__('os').path.getsize(OUT)>300000 print(OUT,len(r.pages),__import__('os').path.getsize(OUT)) ''') PY python "/tmp/workspace/complete-realistic-prosthesis-orthosis-pdf/src/create_reference.py" && python - <<'PY' from pypdf import PdfReader p='/tmp/workspace/complete-realistic-prosthesis-orthosis-pdf/output/Complete_Realistic_Prosthesis_Orthosis_Atlas.pdf' r=PdfReader(p);print('pages',len(r.pages),'size',__import__('os').path.getsize(p));print(r.pages[5].extract_text()[:700]) PY
python - <<'PY' import fitz p='/tmp/workspace/complete-realistic-prosthesis-orthosis-pdf/output/Complete_Realistic_Prosthesis_Orthosis_Atlas.pdf' doc=fitz.open(p) pix=doc[5].get_pixmap(matrix=fitz.Matrix(1.2,1.2), alpha=False) out='/tmp/workspace/complete-realistic-prosthesis-orthosis-pdf/output/page_6_preview.png' pix.save(out) print(out, pix.width, pix.height) PY
Complete Realistic Prosthesis Orthosis Atlas
PDF Document · PDF
digarams tio draw walking frames and alos walking aids
walking aids cane crutches walker rollator components rehabilitation guidance
walking aids AND rehabilitation
clinical diagrams walking frame walker rollator cane crutches components
A clean realistic clinical rehabilitation line-art illustration plate, plain white background, no text. Show three ambulatory walking aids from a front three-quarter view: a single-point cane, a quad cane with four-prong base, and forearm crutches with cuff, hand grip, shaft and rubber tip. Include subtle human hand/forearm only where helpful. Medical textbook illustration quality, accurate proportions.
A clean realistic clinical rehabilitation line-art illustration plate, plain white background, no text. Show three walking frames from a front three-quarter view: a standard pickup walker with four rubber ferrules, a two-wheeled walker with rear ferrules, and a four-wheeled rollator with hand brakes, seat, basket and wheels. Medical textbook illustration quality, accurate components.
~/
mkdir -p "/tmp/workspace/walking-aids-drawing-pdf/assets" "/tmp/workspace/walking-aids-drawing-pdf/src" "/tmp/workspace/walking-aids-drawing-pdf/output" && curl -L "https://cdn.orris.care/image-gen/9358c73ae1bd471594d5e82515ee3ed7.png" -o "/tmp/workspace/walking-aids-drawing-pdf/assets/canes_crutches.png" && curl -L "https://cdn.orris.care/image-gen/44cdb43ae2a14449a9900707e9a2bf3c.png" -o "/tmp/workspace/walking-aids-drawing-pdf/assets/walkers_rollator.png" && python - <<'PY' from pathlib import Path p=Path('/tmp/workspace/walking-aids-drawing-pdf/src/create_pdf.py') p.write_text(r'''from reportlab.pdfgen import canvas from reportlab.lib.pagesizes import A4 from reportlab.lib import colors from reportlab.lib.units import mm from reportlab.lib.utils import ImageReader from reportlab.pdfbase.pdfmetrics import stringWidth from PIL import Image from pypdf import PdfReader from os.path import getsize ROOT='/tmp/workspace/walking-aids-drawing-pdf'; OUT=ROOT+'/output/Walking_Aids_and_Walking_Frames_Realistic_Labelled_Atlas.pdf'; W,H=A4 NAVY=colors.HexColor('#17365D'); TEAL=colors.HexColor('#237A8B'); PALE=colors.HexColor('#EAF4F5'); GREY=colors.HexColor('#46525C') def tx(c,s,x,y,z=9,f='Helvetica',col=colors.black): c.setFont(f,z);c.setFillColor(col);c.drawString(x,y,s) def wrap(c,s,x,y,w,z=9,lead=12,f='Helvetica',col=GREY): c.setFont(f,z); c.setFillColor(col); words=s.split(); line=''; yy=y for v in words: a=(line+' '+v).strip() if stringWidth(a,f,z)>w: c.drawString(x,yy,line); yy-=lead;line=v else:line=a if line:c.drawString(x,yy,line);yy-=lead return yy def hdr(c,title,sub): c.setFillColor(NAVY);c.rect(0,H-29*mm,W,29*mm,0,1);tx(c,sub.upper(),15*mm,H-10*mm,8,'Helvetica-Bold',colors.HexColor('#BAE9EA'));tx(c,title,15*mm,H-21*mm,16,'Helvetica-Bold',colors.white) def ftr(c,n): c.setStrokeColor(colors.HexColor('#BCCBD2'));c.line(15*mm,13*mm,W-15*mm,13*mm);tx(c,'Walking aids and frames | Realistic labelled drawing reference',15*mm,8*mm,7,'Helvetica',GREY);tx(c,str(n),W-18*mm,8*mm,8,'Helvetica-Bold',NAVY) def img(c,file,x,y,w,h): I=Image.open(ROOT+'/assets/'+file);iw,ih=I.size;r=min(w/iw,h/ih); c.drawImage(ImageReader(I),x+(w-iw*r)/2,y+(h-ih*r)/2,iw*r,ih*r,mask='auto') def box(c,x,y,w,h,name,parts,use): c.setFillColor(PALE);c.roundRect(x,y,w,h,4,0,1);tx(c,name,x+4*mm,y+h-7*mm,9,'Helvetica-Bold',NAVY);q=wrap(c,'Parts to label: '+parts,x+4*mm,y+h-13*mm,w-8*mm,7.5,9);wrap(c,'Main use: '+use,x+4*mm,q-1*mm,w-8*mm,7.5,9) def page(c,n,title,sub,file,dat): hdr(c,title,sub);c.setFillColor(colors.white);c.setStrokeColor(colors.HexColor('#B8C7CF'));c.roundRect(12*mm,93*mm,W-24*mm,160*mm,6,1,1);img(c,file,16*mm,99*mm,W-32*mm,148*mm) bw=(W-30*mm)/3 for i,d in enumerate(dat):box(c,15*mm+i*bw,25*mm,bw-4*mm,60*mm,*d) ftr(c,n);c.showPage() c=canvas.Canvas(OUT,pagesize=A4);c.setTitle('Walking Aids and Walking Frames: Realistic Labelled Atlas') hdr(c,'Walking Aids and Walking Frames','Realistic labelled drawing reference') tx(c,'Study diagrams for drawing practice',15*mm,H-54*mm,21,'Helvetica-Bold',NAVY) wrap(c,'Realistic clinical-style illustrations of commonly used walking aids. Learn the external components first, then use the final pages to practise drawing and labelling each aid.',15*mm,H-68*mm,W-30*mm,10,14) tx(c,'Included aids',15*mm,H-107*mm,12,'Helvetica-Bold',NAVY) items=['Single-point cane and quad cane','Forearm crutches and axillary crutches','Standard pickup walking frame','Two-wheeled walking frame','Four-wheeled rollator'] y=H-120*mm for i,a in enumerate(items,1):tx(c,str(i)+'.',17*mm,y,9,'Helvetica-Bold',TEAL);tx(c,a,25*mm,y,9);y-=11*mm tx(c,'Safety note',15*mm,55*mm,10,'Helvetica-Bold',NAVY) wrap(c,'A walking aid must be selected, sized and taught by a qualified clinician. Incorrect height, worn ferrules, faulty brakes or unsuitable use can increase fall risk.',15*mm,47*mm,W-30*mm,8.5,11) ftr(c,1);c.showPage() page(c,2,'Canes and Crutches','Walking aids','canes_crutches.png',[ ('Single-point cane','handle, adjustable shaft, height-adjustment holes and rubber ferrule','mild balance support or partial unloading'), ('Quad cane','handle, shaft, four-point base and rubber tips','a wider base of support than a single-point cane'), ('Forearm crutches','forearm cuff, hand grip, shaft, adjustment holes and rubber tip','upper-limb weight bearing and mobility support')]) # second walker page plus axillary info page(c,3,'Walking Frames and Rollators','Walking frames','walkers_rollator.png',[ ('Pickup walking frame','hand grips, side frames, crossbar, legs and rubber ferrules','maximum basic stability; lifted for each step'), ('Two-wheeled walker','hand grips, frame, front wheels, rear legs and ferrules','support with easier forward progression'), ('Four-wheeled rollator','hand grips, brake levers, frame, wheels, seat and basket','community mobility for users needing support and rest')]) hdr(c,'Additional Aid: Axillary Crutches','Walking aids') tx(c,'Axillary crutches',15*mm,H-46*mm,16,'Helvetica-Bold',NAVY) wrap(c,'Draw a pair of axillary crutches as two parallel supports. Include an axillary pad, handgrip, side uprights, telescoping lower shaft, adjustment holes and rubber tip. The axillary pad should not be used to bear body weight.',15*mm,H-58*mm,W-30*mm,9.5,13) # diagram box c.setFillColor(colors.white);c.setStrokeColor(colors.HexColor('#B8C7CF'));c.roundRect(18*mm,95*mm,80*mm,100*mm,6,1,1) # realistic line art axillary crutch pair c.setStrokeColor(NAVY);c.setLineWidth(3) for dx in [0,32*mm]: x=43*mm+dx;c.roundRect(x-10*mm,172*mm,20*mm,8*mm,4,1,0);c.line(x-8*mm,172*mm,x-6*mm,115*mm);c.line(x+8*mm,172*mm,x+6*mm,115*mm);c.setLineWidth(2);c.line(x-6*mm,139*mm,x+6*mm,139*mm);c.setLineWidth(3);c.line(x-6*mm,115*mm,x-4*mm,105*mm);c.line(x+6*mm,115*mm,x+4*mm,105*mm);c.circle(x,102*mm,3*mm,1,0) # labels for a,b,cx,cy in [('axillary pad',43,176),('handgrip',43,141),('uprights',43,121),('rubber tip',43,100)]: c.setStrokeColor(TEAL);c.line(cx*mm,cy*mm,105*mm,(cy+4)*mm);tx(c,a,108*mm,(cy+2)*mm,8,'Helvetica-Bold',NAVY) box(c,108*mm,134*mm,84*mm,61*mm,'Axillary crutches','axillary pad, handgrip, side uprights, adjustment holes and rubber tip','temporary non-weight-bearing or partial-weight-bearing mobility when adequate upper-limb strength is present') tx(c,'Your drawing practice',18*mm,82*mm,10,'Helvetica-Bold',NAVY);c.setDash(3,3);c.setStrokeColor(colors.HexColor('#AABDC5'));c.rect(18*mm,25*mm,174*mm,48*mm,1,0);c.setDash();tx(c,'Draw a pair of axillary crutches and label all five components.',23*mm,29*mm,8,'Helvetica-Oblique',GREY);ftr(c,4);c.showPage() hdr(c,'Drawing Checklist','Practice page') wrap(c,'Copy each aid from the reference plates. Use simple construction lines first: handles or grips, main shaft/frame, lower supports, wheels or ferrules, then labels.',15*mm,H-44*mm,W-30*mm,9.5,13) aids=['Single-point cane','Quad cane','Forearm crutch','Axillary crutch','Pickup walking frame','Two-wheeled walker','Four-wheeled rollator'] y=H-70*mm for a in aids: c.setStrokeColor(TEAL);c.rect(16*mm,y-2*mm,4*mm,4*mm,1,0);tx(c,a,24*mm,y-1*mm,10);c.setStrokeColor(colors.HexColor('#C6D1D7'));c.line(75*mm,y,195*mm,y);y-=12*mm tx(c,'Labeling prompt',15*mm,y-3*mm,11,'Helvetica-Bold',NAVY);wrap(c,'For each diagram, label the point where the person holds the device, the height-adjustment section, the weight-bearing base, and any safety part such as a brake or ferrule.',15*mm,y-12*mm,W-30*mm,9,12) ftr(c,5);c.showPage();c.save() r=PdfReader(OUT);assert len(r.pages)==5 and getsize(OUT)>200000 print(OUT,len(r.pages),getsize(OUT)) ''') PY python "/tmp/workspace/walking-aids-drawing-pdf/src/create_pdf.py" && python - <<'PY' from pypdf import PdfReader from os.path import getsize p='/tmp/workspace/walking-aids-drawing-pdf/output/Walking_Aids_and_Walking_Frames_Realistic_Labelled_Atlas.pdf';r=PdfReader(p);print(len(r.pages),getsize(p));print(r.pages[2].extract_text()[:600]) PY
~/walking-aids-drawing-pdf/src/create_pdf.py
Successfully replaced 1 instance(s) of the string in '/tmp/workspace/walking-aids-drawing-pdf/src/create_pdf.py'