procedure CheckForStack; begin if nPics=0 then begin PutMessage('This macro requires a stack.'); exit; end; if nSlices=0 then begin PutMessage('This window is not a stack.'); exit end; end; procedure CheckForSelection; var x1,y1,x2,y2,LineWidth:integer; begin GetRoi(RoiLeft,RoiTop,RoiWidth,RoiHeight); GetLine(x1,y1,x2,y2,LineWidth); if (RoiWidth=0) or (x1>=0) then begin PutMessage('Please make a rectangular selection.'); exit; end; end; procedure ResliceMRI(srcHorizontal,dstHorizontal:boolean); var stack1,stack2,width,height:integer; RoiLeft,RoiTop,RoiWidth,RoiHeight,max:integer; loc,PixelSpacing:real; InputSpacing,OutputSpacing:real; {mm} scale:real; {pixels/mm} FirstTime:boolean; begin scale:=1.0666; {Assumes 256x256 slices and 240mm field of view} RequiresVersion(1.45); CheckForStack; CheckForSelection; SaveState; SetScale(scale,'mm'); SetBackground(0); SetBackground(255); stack1:=PicNumber; InputSpacing:=GetSliceSpacing/scale; if InputSpacing<=0 then InputSpacing:=1.5; InputSpacing:=GetNumber('Input Slice Spacing (mm):',InputSpacing); SetSliceSpacing(InputSpacing*scale); OutputSpacing:=InputSpacing; OutputSpacing:=GetNumber('Output Slice Spacing (mm):', OutputSpacing); PixelSpacing:=OutputSpacing*scale; FirstTime:=true; GetRoi(RoiLeft,RoiTop,RoiWidth,RoiHeight); if srcHorizontal then begin loc:=RoiTop+PixelSpacing; max:=RoiTop+RoiHeight; end else begin loc:=RoiLeft+PixelSpacing; max:=RoiLeft+RoiWidth; end; while locfirst then AddSlice; n:=n+1; Paste; end; end; macro '(-' begin end; macro 'Sagitals to CoronalsÉ'; begin ResliceMRI(false,false) end; macro 'Sagitals to AxialsÉ'; begin ResliceMRI(true,false) end; macro 'Coronals to SagitalsÉ'; begin ResliceMRI(false,false) end; macro 'Coronals to AxialsÉ'; begin ResliceMRI(true,true) end; macro 'Axials to CoronalsÉ'; begin ResliceMRI(true, true) end; macro 'Axials to SagitalsÉ'; begin ResliceMRI(false, true) end; macro '(-' begin end; procedure flip(vertical:boolean); var i:integer; SliceSpacing:real; begin CheckForStack; for i:= 1 to nSlices do begin SelectSlice(i); if vertical then FlipVertical else FlipHorizontal; end; end; macro 'Flip Vertical'; begin flip(true) end; macro 'Flip Horizontal'; begin flip(false) end;