Skip to content

Commit 5900753

Browse files
Merge pull request #29 from groupeLIAMG/devOOP
Dev oop
2 parents d2d944d + 2017162 commit 5900753

File tree

282 files changed

+30293
-9134
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

282 files changed

+30293
-9134
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
*~
2+
.DS_Store

README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ ray-based 2D and 3D tomography software package.
88
Copy the files in the bh_tomo directory somewhere in your MATLABPATH or add
99
the bh_tomo directory to your MATLABPATH.
1010

11+
### Compatibility
12+
13+
This version requires Matlab 2015b and onward.
14+
1115
### MEX files
1216

1317
You might need to compile mex files if not already available for
@@ -20,6 +24,7 @@ mex -O -largeArrayDims Lsr2da.c
2024
mex -O -largeArrayDims ttcr2d.cpp
2125
mex -O -largeArrayDims ttcr2da.cpp
2226
mex -O -largeArrayDims ttcr2daa.cpp
27+
mex -O -largeArrayDims grid2d_mex.cpp
2328
mex -O -largeArrayDims grid3d_mex.cpp
2429
mex -O -largeArrayDims read_segy_b_header.c
2530
mex -O -largeArrayDims read_segy_tr_headers.c

bh_tomo/@ModelUI/ModelUI.m

Lines changed: 298 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,298 @@
1+
classdef ModelUI < handle
2+
%MODELUI User interface to manage 2D and 3D models
3+
4+
properties
5+
models
6+
end
7+
properties (Dependent)
8+
Position
9+
FontSize % should be within [10 11 12]
10+
end
11+
properties (Access=private)
12+
handles
13+
end
14+
properties (SetAccess=immutable,Hidden=true)
15+
bhUI
16+
mogUI
17+
end
18+
events
19+
modelAdded, modelDeleted, modelEdited
20+
end
21+
22+
methods
23+
function obj = ModelUI(b,m,varargin)
24+
if isa(b,'BoreholeUI')
25+
obj.bhUI = b;
26+
else
27+
error('Give BoreholeUI object as input')
28+
end
29+
if isa(m,'MogUI')
30+
obj.mogUI = m;
31+
else
32+
error('Give BoreholeUI object as input')
33+
end
34+
obj.models = Model.empty;
35+
obj.handles.hp = uipanel(varargin{:},...
36+
'Title','Models',...
37+
'Visible','off',...
38+
'SizeChangedFcn', @obj.resizeUI);
39+
40+
obj.addComponents();
41+
obj.handles.hp.Visible = 'on';
42+
end
43+
function set.models(obj,m)
44+
if isa(m, 'Model')
45+
obj.models = m;
46+
else
47+
error('Models should be objects of class Model')
48+
end
49+
obj.updateList(1)
50+
end
51+
function set.Position(obj, p)
52+
obj.handles.hp.Position = p;
53+
end
54+
function set.FontSize(obj, s)
55+
obj.handles.hp.FontSize = s+1;
56+
obj.handles.addModel.FontSize = s;
57+
obj.handles.removeModel.FontSize = s;
58+
obj.handles.listModels.FontSize = s;
59+
obj.handles.grid.FontSize = s;
60+
obj.handles.createGrid.FontSize = s;
61+
obj.handles.editGrid.FontSize = s;
62+
obj.handles.mogs.FontSize = s;
63+
obj.handles.addMOG.FontSize = s;
64+
obj.handles.removeMOG.FontSize = s;
65+
obj.handles.listMOGs.FontSize = s;
66+
end
67+
end
68+
69+
methods (Access=private)
70+
g = gridEditor(obj,no,varargin)
71+
c = constraintsEditor(obj,varargin)
72+
function addComponents(obj)
73+
74+
obj.handles.addModel = uicontrol('Style','pushbutton',...
75+
'String','Add Model',...
76+
'Units','points',...
77+
'Callback',@obj.addModel,...
78+
'Parent',obj.handles.hp);
79+
obj.handles.removeModel = uicontrol('Style','pushbutton',...
80+
'String','Remove Model',...
81+
'Units','points',...
82+
'Callback',@obj.removeModel,...
83+
'Parent',obj.handles.hp);
84+
85+
obj.handles.listModels = uicontrol('Style','listbox',...
86+
'Max',1,'Min',0,...
87+
'Units','points',...
88+
'Callback',@obj.listModels,...
89+
'Parent',obj.handles.hp);
90+
91+
obj.handles.grid = uipanel(obj.handles.hp,'Title','Grid',...
92+
'Units','points');
93+
94+
obj.handles.createGrid = uicontrol('Style','pushbutton',...
95+
'String','Create',...
96+
'Units','points',...
97+
'Callback',@obj.createGrid,...
98+
'Parent',obj.handles.grid);
99+
obj.handles.editGrid = uicontrol('Style','pushbutton',...
100+
'String','Edit',...
101+
'Units','points',...
102+
'Callback',@obj.editGrid,...
103+
'Parent',obj.handles.grid);
104+
105+
obj.handles.mogs = uipanel(obj.handles.hp,'Title','MOGs',...
106+
'Units','points');
107+
obj.handles.addMOG = uicontrol('Style','pushbutton',...
108+
'String','Add MOG',...
109+
'Units','points',...
110+
'Callback',@obj.addMOG,...
111+
'Parent',obj.handles.mogs);
112+
obj.handles.removeMOG = uicontrol('Style','pushbutton',...
113+
'String','Remove MOG',...
114+
'Units','points',...
115+
'Callback',@obj.removeMOG,...
116+
'Parent',obj.handles.mogs);
117+
obj.handles.listMOGs = uicontrol('Style','listbox',...
118+
'Max',1,'Min',0,...
119+
'Units','points',...
120+
'Parent',obj.handles.mogs);
121+
122+
end
123+
function resizeUI(obj,varargin)
124+
if isempty(obj.handles.hp)
125+
return
126+
end
127+
obj.handles.hp.Visible = 'off';
128+
oldUnits = obj.handles.hp.Units;
129+
obj.handles.hp.Units = 'points';
130+
131+
p = obj.handles.hp.Position;
132+
width = p(3); % prefered: 630
133+
height = p(4); % prefered: 380
134+
135+
hSize = width/7;
136+
hSpace = width/120;
137+
hBorder = width/30;
138+
139+
vFac = 0.8*height/360;
140+
if vFac<1
141+
vFac = 1;
142+
end
143+
if ispc
144+
vFac = 0.81*vFac;
145+
end
146+
vSize = 22*vFac;
147+
vSpace = 5*vFac;
148+
vBorderTop = 45*vFac;
149+
vBorder = 15*vFac;
150+
151+
obj.handles.addModel.Position = [hBorder height-1.2*vBorderTop 1.5*hSize vSize];
152+
obj.handles.removeModel.Position = [hBorder+2*hSpace+1.5*hSize height-1.2*vBorderTop 1.5*hSize vSize];
153+
154+
obj.handles.listModels.Position = [1.5*hBorder 3*vSpace+vBorder+2.5*vSize 2*hSpace+3*hSize-hBorder height-2*vBorder-vBorderTop-3.5*vSize];
155+
156+
hSize2 = 2*hSpace+3*hSize;
157+
obj.handles.grid.Position = [hBorder vBorder hSize2 2.5*vSize];
158+
obj.handles.createGrid.Position = [hBorder vSize/2 hSize2/2-3/2*hBorder vSize];
159+
obj.handles.editGrid.Position = [hSize2/2+hBorder/2 vSize/2 hSize2/2-3/2*hBorder vSize];
160+
161+
hSize2 = width-hSize2-3*hBorder;
162+
vSize2 = height-3*vBorder;
163+
obj.handles.mogs.Position = [2*hBorder+2*hSpace+3*hSize vBorder hSize2 height-3*vBorder];
164+
165+
obj.handles.addMOG.Position = [hBorder vSize2-vBorderTop hSize2/2-3/2*hBorder vSize];
166+
obj.handles.removeMOG.Position = [hSize2/2+hBorder/2 vSize2-vBorderTop hSize2/2-3/2*hBorder vSize];
167+
obj.handles.listMOGs.Position = [1.5*hBorder vBorder hSize2-3*hBorder vSize2-2*vBorder-vBorderTop];
168+
169+
obj.handles.hp.Visible = 'on';
170+
obj.handles.hp.Units = oldUnits;
171+
end
172+
173+
function addModel(obj,varargin)
174+
name = myinputdlg('Model name');
175+
if isempty(name)
176+
return;
177+
end
178+
if isempty(char(name))
179+
return;
180+
end
181+
if isempty(obj.models)
182+
obj.models = Model(char(name));
183+
else
184+
obj.models(end+1) = Model(char(name));
185+
end
186+
obj.updateList()
187+
obj.notify('modelAdded')
188+
end
189+
function removeModel(obj,varargin)
190+
no = obj.handles.listModels.Value;
191+
ind=1:length(obj.models);
192+
ind = ind~=no;
193+
194+
obj.models = obj.models(ind);
195+
obj.updateList()
196+
obj.notify('modelDeleted')
197+
end
198+
function createGrid(obj,varargin)
199+
no = obj.handles.listModels.Value;
200+
if no>0 && no<=numel(obj.models)
201+
g = obj.gridEditor(no);
202+
if ~isempty(g)
203+
obj.models(no).grid = g;
204+
end
205+
end
206+
end
207+
function editGrid(obj,varargin)
208+
no = obj.handles.listModels.Value;
209+
if no>0 && no<=numel(obj.models)
210+
g = obj.gridEditor(no,obj.models(no).grid);
211+
if ~isempty(g)
212+
obj.models(no).grid = g;
213+
end
214+
end
215+
end
216+
function addMOG(obj,varargin)
217+
no = obj.handles.listModels.Value;
218+
if no>0 && no<=numel(obj.models)
219+
no_mog = chooseMOG(obj.mogUI);
220+
if no_mog==0
221+
return
222+
end
223+
for n=1:numel(obj.models(no).mogs)
224+
if obj.mogUI.mogs(no_mog).ID == obj.mogUI.mogs(obj.models(no).mogs(n)).ID
225+
warndlg('MOG already added to model')
226+
return
227+
end
228+
end
229+
if ~isempty(obj.models(no).grid)
230+
warndlg('Mog added: model grid must be recreated')
231+
obj.models(no).grid = Grid.empty;
232+
end
233+
234+
obj.models(no).mogs(end+1) = no_mog;
235+
obj.models(no).boreholes = unique([obj.models(no).boreholes ...
236+
obj.mogUI.mogs(no_mog).Tx obj.mogUI.mogs(no_mog).Rx]);
237+
obj.updateListMog()
238+
obj.notify('modelEdited')
239+
end
240+
end
241+
function removeMOG(obj,varargin)
242+
no = obj.handles.listModels.Value;
243+
if no>0 && no<=numel(obj.models)
244+
no_mog = obj.handles.listMOGs.Value;
245+
ind=1:length(obj.models(no).mogs);
246+
ind = ind~=no_mog;
247+
obj.models(no).mogs = obj.models(no).mogs(ind);
248+
obj.handles.listMOGs.Value = 1;
249+
obj.updateListMog()
250+
obj.notify('modelEdited')
251+
end
252+
end
253+
function listModels(obj,varargin)
254+
obj.handles.listMOGs.Value = 1;
255+
obj.updateListMog();
256+
end
257+
258+
function updateList(obj,varargin)
259+
value = [];
260+
if nargin==2
261+
value = varargin{1};
262+
end
263+
if ~isempty(obj.models)
264+
names = cell(1,length(obj.models));
265+
for n=1:length(obj.models)
266+
names{n} = obj.models(n).name;
267+
end
268+
obj.handles.listModels.String = names;
269+
obj.handles.listModels.Value = length(obj.models);
270+
else
271+
obj.handles.listModels.String = '';
272+
obj.handles.listModels.Value = 1;
273+
end
274+
if ~isempty(value)
275+
obj.handles.listModels.Value = value;
276+
end
277+
obj.updateListMog()
278+
end
279+
function updateListMog(obj,varargin)
280+
no = obj.handles.listModels.Value;
281+
if no>0 && no<=numel(obj.models)
282+
names_mog = cell(1,length(obj.models(no).mogs));
283+
for n=1:length(obj.models(no).mogs)
284+
if isempty(obj.mogUI.mogs( obj.models(no).mogs(n) ).date)
285+
names_mog{n} = obj.mogUI.mogs( obj.models(no).mogs(n) ).name;
286+
else
287+
names_mog{n} = [obj.mogUI.mogs( obj.models(no).mogs(n) ).name,' - ',...
288+
obj.mogUI.mogs( obj.models(no).mogs(n) ).date];
289+
end
290+
end
291+
obj.handles.listMOGs.String = names_mog;
292+
end
293+
end
294+
295+
end
296+
297+
end
298+

0 commit comments

Comments
 (0)