-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathkPlot2D.m
217 lines (214 loc) · 8.73 KB
/
kPlot2D.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
%kPlot2D '2D Plot Object Menuform'
% This MatLab function was automatically generated by a converter (KhorosToMatLab) from the Khoros Plot2D.pane file
%
% Parameters:
% MultiChoice: plot2DXOrientation 'X Orientation', default: 1: 'x orientation'
% Choices are:
% 1: 'Width'
% 2: 'Height'
% 3: 'Depth'
% 4: 'Time'
% 5: 'Elements'
% Integer: plot2DWidthOffset 'Width Offset', default: 0: 'width offset'
% Integer: plot2DHeightOffset 'Height Offset', default: 0: 'height offset'
% Integer: plot2DDepthOffset 'Depth Offset', default: 0: 'depth offset'
% Integer: plot2DTimeOffset 'Time Offset', default: 0: 'time offset'
% Integer: plot2DElementsOffset 'Elements Offset', default: 0: 'elements offset'
%
% Example: kPlot2D( {'plot2DXOrientation',1;'plot2DWidthOffset',0;'plot2DHeightOffset',0;'plot2DDepthOffset',0;'plot2DTimeOffset',0;'plot2DElementsOffset',0})
%
% Khoros helpfile follows below:
%
% A 2D plot visual object supports the display of a 2D plot.
% .begin tagged
% .item "Plot Type"
% This list selection lets you set the plot type of the 2D plot object.
% Choices include: "Line Plot," "Discrete," "Bar Graph," "Polymarker," and
% "Line Marker." Line Plot is a simple line graph. Discrete displays a set of
% vertical lines, from each (x,y) point down to the X axis. Bar Graph
% displays the usual bar graph. Polymarker displays a single marker at
% each (x,y) location. Line Marker is a combination of Line Plot and
% Polymarker, resulting in a "connect the dots" display.
% .item "Line Type"
% There are seven line types available: "Solid," "Dotted," "Dot Dash,"
% "Short Dash," "Long Dash," "Odd Dash," and "Grid Dotted." The line
% type is not used with Polymarker or color marker plots.
% .item "Marker Type"
% This list selection allows you to control the marker type that is used
% with Polymarker, line marker, and colormarker plots. There is a wide
% variety of marker types that may be used.
% .item "Color Origination"
% When this attribute is set to "Use Foreground Color," the plot is colored in
% the foreground color. When set to "Use Data Values," the plot is colored
% according to the plot data.
% .item "Foreground Color"
% This string list lets you select (or type) the foreground color of the
% 2D plot. It is not used with plot types that are automatically
% colored according to the "D" values in the plot data, which include
% color marker and colorline plots.
% .item "X Orientation"
% This toggle only takes effect when the plot data input is provided via
% a data object (as opposed to an array of Coords). Furthermore, it
% only applies when the plot data is stored in the value segment of the
% data object (as opposed to the location segment of the data object).
% It dictates how the 2D plot data is to be extracted from the value
% segment of the data object. The 2D plot data is always extracted as a
% single line, but that line may be oriented by width, height, depth,
% time, or elements (see manual for more details).
% .item "Width, Height, Depth, Time, And Elements Offsets"
% These integer values may be set in conjunction with the "X
% Orientation" toggle. When "X Orientation" is "not" set to
% "Width," the "Width Offset" may be used to specify the width offset at
% which the line of plot data is to be extracted. Similarly, "Height
% Offset," "Depth Offset," "Time Offset," and "Elements Offset" may be
% used to specify offsets into height, depth, time, and elements. Note
% that an offset may only be used when that dimension of the value data
% is greater than 1.
% .end tagged
function varargout = kPlot2D(varargin)
Inputs={};
if nargin ==0
arglist={'',''};
elseif nargin ==1
arglist=varargin{1};
else error('Usage: [out1,..] = kPlot2D(arglist).');
end
if size(arglist,2)~=2
error('arglist must be of form {''ParameterTag1'',value1;''ParameterTag2'',value2}')
end
narglist={'plot2DXOrientation', 1;'plot2DWidthOffset', 0;'plot2DHeightOffset', 0;'plot2DDepthOffset', 0;'plot2DTimeOffset', 0;'plot2DElementsOffset', 0};
maxval={0,1,1,1,1,1};
minval={0,1,1,1,1,1};
istoggle=[0,0,0,0,0,0];
was_set=istoggle * 0;
paramtype={'MultiChoice','Integer','Integer','Integer','Integer','Integer'};
% identify the input arrays and assign them to the arguments as stated by the user
if ~iscell(Inputs)
Inputs = {Inputs};
end
NumReqOutputs=0; nextinput=1; nextoutput=1;
for ii=1:size(arglist,1)
wasmatched=0;
for jj=1:size(narglist,1)
if strcmp(arglist{ii,1},narglist{jj,1}) % a given argument was matched to the possible arguments
wasmatched = 1;
was_set(jj) = 1;
if strcmp(narglist{jj,2}, '__input')
if (nextinput > length(Inputs))
error(['Input ' narglist{jj,1} ' has no corresponding input!']);
end
narglist{jj,2} = 'OK_in';
nextinput = nextinput + 1;
elseif strcmp(narglist{jj,2}, '__output')
if (nextoutput > nargout)
error(['Output nr. ' narglist{jj,1} ' is not present in the assignment list of outputs !']);
end
if (isempty(arglist{ii,2}))
narglist{jj,2} = 'OK_out';
else
narglist{jj,2} = arglist{ii,2};
end
nextoutput = nextoutput + 1;
if (minval{jj} == 0)
NumReqOutputs = NumReqOutputs - 1;
end
elseif isstr(arglist{ii,2})
narglist{jj,2} = arglist{ii,2};
else
if strcmp(paramtype{jj}, 'Integer') & (round(arglist{ii,2}) ~= arglist{ii,2})
error(['Argument ' arglist{ii,1} ' is of integer type but non-integer number ' arglist{ii,2} ' was supplied']);
end
if (minval{jj} ~= 0 | maxval{jj} ~= 0)
if (minval{jj} == 1 & maxval{jj} == 1 & arglist{ii,2} < 0)
error(['Argument ' arglist{ii,1} ' must be bigger or equal to zero!']);
elseif (minval{jj} == -1 & maxval{jj} == -1 & arglist{ii,2} > 0)
error(['Argument ' arglist{ii,1} ' must be smaller or equal to zero!']);
elseif (minval{jj} == 2 & maxval{jj} == 2 & arglist{ii,2} <= 0)
error(['Argument ' arglist{ii,1} ' must be bigger than zero!']);
elseif (minval{jj} == -2 & maxval{jj} == -2 & arglist{ii,2} >= 0)
error(['Argument ' arglist{ii,1} ' must be smaller than zero!']);
elseif (minval{jj} ~= maxval{jj} & arglist{ii,2} < minval{jj})
error(['Argument ' arglist{ii,1} ' must be bigger than ' num2str(minval{jj})]);
elseif (minval{jj} ~= maxval{jj} & arglist{ii,2} > maxval{jj})
error(['Argument ' arglist{ii,1} ' must be smaller than ' num2str(maxval{jj})]);
end
end
end
if ~strcmp(narglist{jj,2},'OK_out') & ~strcmp(narglist{jj,2},'OK_in')
narglist{jj,2} = arglist{ii,2};
end
end
end
if (wasmatched == 0 & ~strcmp(arglist{ii,1},''))
error(['Argument ' arglist{ii,1} ' is not a valid argument for this function']);
end
end
% match the remaining inputs/outputs to the unused arguments and test for missing required inputs
for jj=1:size(narglist,1)
if strcmp(paramtype{jj}, 'Toggle')
if (narglist{jj,2} ==0)
narglist{jj,1} = '';
end;
narglist{jj,2} = '';
end;
if ~strcmp(narglist{jj,2},'__input') && ~strcmp(narglist{jj,2},'__output') && istoggle(jj) && ~ was_set(jj)
narglist{jj,1} = '';
narglist{jj,2} = '';
end;
if strcmp(narglist{jj,2}, '__input')
if (minval{jj} == 0) % meaning this input is required
if (nextinput > size(Inputs))
error(['Required input ' narglist{jj,1} ' has no corresponding input in the list!']);
else
narglist{jj,2} = 'OK_in';
nextinput = nextinput + 1;
end
else % this is an optional input
if (nextinput <= length(Inputs))
narglist{jj,2} = 'OK_in';
nextinput = nextinput + 1;
else
narglist{jj,1} = '';
narglist{jj,2} = '';
end;
end;
else
if strcmp(narglist{jj,2}, '__output')
if (minval{jj} == 0) % this is a required output
if (nextoutput > nargout & nargout > 1)
error(['Required output ' narglist{jj,1} ' is not stated in the assignment list!']);
else
narglist{jj,2} = 'OK_out';
nextoutput = nextoutput + 1;
NumReqOutputs = NumReqOutputs-1;
end
else % this is an optional output
if (nargout - nextoutput >= NumReqOutputs)
narglist{jj,2} = 'OK_out';
nextoutput = nextoutput + 1;
else
narglist{jj,1} = '';
narglist{jj,2} = '';
end;
end
end
end
end
if nargout
varargout = cell(1,nargout);
else
varargout = cell(0);
end
if ispc
w='"C:\Program Files\dip\khorosBin\';
else
[s,w] = system('which cantata');
w=['"' w(1:end-8)];
end
global KhorosRoot
if exist('KhorosRoot')
if ~isempty(KhorosRoot)
w=['"' KhorosRoot];
end
end
callKhoros([w 'Plot2D" '],Inputs,narglist);