-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathkString.m
More file actions
225 lines (222 loc) · 8.6 KB
/
Copy pathkString.m
File metadata and controls
225 lines (222 loc) · 8.6 KB
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
218
219
220
221
222
223
224
225
%kString 'String Object Menuform'
% This MatLab function was automatically generated by a converter (KhorosToMatLab) from the Khoros String.pane file
%
% Parameters:
% String: stringString 'String', default: ' ': 'annotation string'
%
% Example: kString( {'stringString',' '})
%
% Khoros helpfile follows below:
% .begin tagged
%
% .item "The String Visual Object"
% A string visual object supports the display of a string annotation.
% The (x, y) location of the lower left corner of the string may be specified in
% device coordinates or world coordinates by the application. The menuform,
% however, displays the world coordinate location of the string,
% regardless of whether the application used world or device coordinates to
% specify that location. Attributes of the string object that can be
% interactively specified in addition to its world coordinate placement
% include its string contents, its justification, style, font, and colors.
%
% .item "String"
% This is the string to be displayed. It may be multi-line; use "\n" to
% represent a carriage return.
%
% .item "Justification"
% This attribute specifies the justification of the string "with respect to
% the width and height of the string object itself, not its parent". Thus,
% if the string object is just large enough to accomodate the string,
% justification will have little, if any, effect, as the string has no room to
% "move" within its boundaries. However, if the width and height are larger
% than what is necessary to display the string, the justification will take
% effect. Justification may be set to "Center", "Top", "Bottom", "Left", "Right",
% "TopRight", "TopLeft", "BottomRight", or "BottomLeft".
%
% .item "Fill Background"
% When set to true, this attribute indicates that the background of the string
% object should appear in the fill color (background color).
%
% .item "String Style"
% The string can be displayed in one of four styles: plain, emphasized, embossed
% in, or embossed out. When the "plain" style is used, the string is drawn once,
% in the foreground color. When the string is "emphasized", it is double-drawn
% using both the foreground and highlight colors; this causes it to have a bold,
% or emphasized, effect. When the "embossed in" style is used, the string will
% appear embossed "into" the background; both the foreground and highlight
% colors are used in embossing. The "embossed out" style also causes the string
% to appear embossed, but the string will seem to come "out of" rather than
% "into" the background.
%
% .item "Font"
% Some of the fonts that are most commonly used with the string object are
% available in the stringlist menu; or, you may provide your own in the text
% parameter box.
% .so $DESIGN/manual/shared/xvobjects/general/FontName.sec
%
% .item "Foreground Color"
% This stringlist selection lets you set the foreground color of
% the string object. The foreground color is always used to draw the string,
% regardless of the "String Style".
%
% .item "Background Color"
% This stringlist selection lets you set the background color (fill color) of
% the string object. It is only used when "Fill Background" is set to true.
%
% .item "Highlight Color"
% This stringlist selection lets you set the highlight color; the highlight
% color is an additional color used in drawing the string when the "String Style"
% is set to "Emphasized", "Embossed In", or "Embossed Out".
%
% .item "X Placement, Y Placement"
% This pair of double values specifies the (x, y) location of the lower left
% hand corner of the string in world coordinates.
%
% .end tagged
function varargout = kString(varargin)
Inputs={};
if nargin ==0
arglist={'',''};
elseif nargin ==1
arglist=varargin{1};
else error('Usage: [out1,..] = kString(arglist).');
end
if size(arglist,2)~=2
error('arglist must be of form {''ParameterTag1'',value1;''ParameterTag2'',value2}')
end
narglist={'stringString', ' '};
maxval={0};
minval={0};
istoggle=[0];
was_set=istoggle * 0;
paramtype={'String'};
% 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 'String" '],Inputs,narglist);