diff --git a/mainunit.dfm b/mainunit.dfm index f855eaf..e52cd1b 100755 --- a/mainunit.dfm +++ b/mainunit.dfm @@ -1411,6 +1411,12 @@ object GLForm1: TGLForm1 ShortCut = 83 OnClick = OrientMenuClick end + object RadiologicalMenu: TMenuItem + AutoCheck = True + Caption = 'Radiological (FlipLR)' + GroupIndex = 212 + OnClick = RadiologicalMenuClick + end end object View1: TMenuItem Caption = 'View' diff --git a/mainunit.pas b/mainunit.pas index b528d22..4447150 100755 --- a/mainunit.pas +++ b/mainunit.pas @@ -51,7 +51,6 @@ TGLForm1 = class(TForm) InterpolateAxialMenu: TMenuItem; InterpolateCoronalMenu: TMenuItem; InterpolateSagittalMenu: TMenuItem; - ShaderPanel: TPanel; QualityTrack: TTrackBar; S10Check: TCheckBox; @@ -156,7 +155,6 @@ TGLForm1 = class(TForm) MRU2: TMenuItem; MRU1: TMenuItem; StringGrid1: TStringGrid; - ToolPanel: TPanel; ClipBox: TGroupBox; Label4: TLabel; @@ -3517,6 +3515,7 @@ procedure TGLForm1.UpdateFont(initialSetup: boolean); else begin gText.ChangeFontName(p, GLBox); gClrBar.ChangeFontName(p, GLBox); + GLBox.Invalidate; end; end; @@ -3562,13 +3561,13 @@ procedure PrefMenuClick; bmpEdit.Parent:=PrefForm; //Font name FontCombo:=TComboBox.create(PrefForm); + FontCombo.Parent:=PrefForm; FontCombo.Left := 8; FontCombo.Top := 78; FontCombo.Width := PrefForm.Width -16; FontCombo.Items.Add('Default Font'); //add fonts FontCombo.ItemIndex:= 0; - if FindFirst(ClutDir+pathdelim+'*.fnt', faAnyFile, searchRec) = 0 then begin repeat s :=ParseFileName(ExtractFileName(searchRec.Name)); @@ -3580,8 +3579,6 @@ procedure PrefMenuClick; until (FindNext(searchRec) <> 0); end; //find fonts FindClose(searchRec); - //FontCombo.Items.Add('Quality: Better'); - //QualityCombo.Items.Add('Quality: Best'); FontCombo.Style := csDropDownList; FontCombo.Parent:=PrefForm; //Tiled Check diff --git a/nifti_foreign.pas b/nifti_foreign.pas index 5d0fc33..7ce407d 100755 --- a/nifti_foreign.pas +++ b/nifti_foreign.pas @@ -552,6 +552,76 @@ function parsePicString(s: string): single; sList.Free; end; +function nii_readVmr (var fname: string; var nhdr: TNIFTIhdr; var gzBytes: int64; var swapEndian: boolean): boolean; +//http://support.brainvoyager.com/automation-aamp-development/23-file-formats/385-developer-guide-26-the-format-of-vmr-files.html +Type + Tvmr_header = packed record //Next: PIC Format Header structure + ver, nx, ny, nz, nvol: word; // 0,4,8,12 + end; // Tbv_header; + Tvmr_tail = packed record // + Xoff,Yoff,Zoff,FramingCube: int16; + PosFlag,CoordSystem: int32; + X1, Y1, Z1,Xn,Yn,Zn, RXv,RYv,RZv, CXv,CYv,CZv: single; + nRmat, nCmat: int32; + Rfov, Cfov, Zthick, Zgap: single; + nTrans: int32; + LRconv, Ref: uint8; + vXres, vYres, vZres: single; + isResVerified, isTal: uint8; + min, mean, max: int32; + end; +var + vhdr : Tvmr_header; + vtail : Tvmr_tail; + lHdrFile: file; + nvox, FSz : integer; +begin + result := false; + {$I-} + AssignFile(lHdrFile, fname); + FileMode := 0; //Set file access to read only + Reset(lHdrFile, 1); + {$I+} + if ioresult <> 0 then begin + NSLog('Error in reading vmr header.'+inttostr(IOResult)); + FileMode := 2; + exit; + end; + FSz := Filesize(lHdrFile); + BlockRead(lHdrFile, vhdr, sizeof(Tvmr_header)); + nVox := vhdr.nx * vhdr.ny * vhdr.nz * vhdr.nvol * 4; //*4 as 32-bpp + if (vhdr.ver < 3) or (vhdr.ver > 255) or ((nVox + sizeof(Tvmr_header)+ sizeof(Tvmr_tail) ) > FSz) then begin //docs do not specify endian - wrong endian? + CloseFile(lHdrFile); + exit; + end; + seek(lHdrFile, nVox + sizeof(Tvmr_header)); + BlockRead(lHdrFile, vtail, sizeof(Tvmr_tail)); + CloseFile(lHdrFile); + swapEndian := false; + nhdr.dim[0]:=3;//3D + nhdr.dim[1]:=vhdr.nx; + nhdr.dim[2]:=vhdr.ny; + nhdr.dim[3]:=vhdr.nz; + nhdr.dim[4]:=1; + nhdr.pixdim[1]:=1.0; + nhdr.pixdim[2]:=1.0; + nhdr.pixdim[3]:=1.0; + //Need examples + //if vtail.isResVerified > 0 then begin + // showmessage(format('%g %g %g',[vtail.X1, vtail.Y1, vtail.Z1])); + //end; + nhdr.datatype := kDT_UNSIGNED_CHAR; + nhdr.vox_offset := sizeof(Tvmr_header); + nhdr.sform_code := 1; + nhdr.srow_x[0]:=nhdr.pixdim[1];nhdr.srow_x[1]:=0.0;nhdr.srow_x[2]:=0.0;nhdr.srow_x[3]:=0.0; + nhdr.srow_y[0]:=0.0;nhdr.srow_y[1]:=nhdr.pixdim[2];nhdr.srow_y[2]:=0.0;nhdr.srow_y[3]:=0.0; + nhdr.srow_z[0]:=0.0;nhdr.srow_z[1]:=0.0;nhdr.srow_z[2]:=-nhdr.pixdim[3];nhdr.srow_z[3]:=0.0; + convertForeignToNifti(nhdr); + //nhdr.scl_inter:= 1; + //nhdr.scl_slope := -1; + result := true; +end; //nii_readVmr() + function nii_readBVox (var fname: string; var nhdr: TNIFTIhdr; var gzBytes: int64; var swapEndian: boolean): boolean; //http://pythology.blogspot.com/2014/08/you-can-do-cool-stuff-with-manual.html Type @@ -2101,6 +2171,8 @@ function readForeignHeader (var lFilename: string; var lHdr: TNIFTIhdr; var gzBy result := nii_readDeltaVision(lFilename, lHdr, gzBytes, swapEndian) else if (lExt = '.V') then result := nii_readEcat(lFilename, lHdr, gzBytes, swapEndian) + else if (lExt = '.VMR') then + result := nii_readVmr(lFilename, lHdr, gzBytes, swapEndian) else if (lExt = '.BVOX') then result := nii_readBVox(lFilename, lHdr, gzBytes, swapEndian) else if (lExt = '.GIPL') then diff --git a/simplelaz.lpi b/simplelaz.lpi index cbd83d9..2acedd6 100644 --- a/simplelaz.lpi +++ b/simplelaz.lpi @@ -226,10 +226,11 @@ if TargetOS='darwin' then - - + + + @@ -307,7 +308,7 @@ if TargetOS='darwin' then - + @@ -317,21 +318,22 @@ if TargetOS='darwin' then - + + - - + + - + - + @@ -416,7 +418,7 @@ if TargetOS='darwin' then - + @@ -448,11 +450,12 @@ if TargetOS='darwin' then - + - - - + + + + @@ -480,11 +483,12 @@ if TargetOS='darwin' then - + - - - + + + + @@ -576,7 +580,7 @@ if TargetOS='darwin' then - + @@ -742,174 +746,172 @@ if TargetOS='darwin' then - + - + - + - - + + - - + - - + + - + - - + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + +