diff options
Diffstat (limited to 'hyp2mat/matlab/GetHyperLynxPort.m')
-rw-r--r-- | hyp2mat/matlab/GetHyperLynxPort.m | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/hyp2mat/matlab/GetHyperLynxPort.m b/hyp2mat/matlab/GetHyperLynxPort.m new file mode 100644 index 0000000..2e62cf0 --- /dev/null +++ b/hyp2mat/matlab/GetHyperLynxPort.m @@ -0,0 +1,84 @@ +% [side, start, stop, centre ] = GetHyperLynxPort(CSX, port_ref) +% Obtain coordinates of HyperLynx pin or pad. +% +% CSX: CSX-object created by ImportHyperLynx() +% port_ref: port reference from HyperLynx file. +% If an invalid port reference is given, all valid port references are printed. +% +% side: board side, 'top', 'bottom' or ''. +% start: 3D port start coordinates +% stop: 3D port stop coordinates +% centre: 3D port centre coordinates + +% Example: +% place an excitation at pin 1 of component 'CON1': +% CSX = AddMaterial(CSX, 'PEC'); +% [port_material, port_start, port_stop] = GetHyperLynxPort(CSX, 'CON1.1'); +% [CSX,portstruct] = AddMSLPort( CSX, 999, 1, 'PEC', port_start, port_stop, 0, [0 0 -1], 'ExcitePort', 'excite'); +% +% See hyp2mat(1) - convert hyperlynx files to matlab scripts. + +% Copyright 2012 Koen De Vleeschauwer. +% +% This file is part of hyp2mat. +% +% This program is free software: you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation, either version 3 of the License, or +% (at your option) any later version. +% +% This program is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with this program. If not, see <http://www.gnu.org/licenses/>. + +function [side, start, stop, centre] = GetHyperLynxPort(CSX, port_ref) + + % the openEMS AddMSLPort, AddCurvePort functions require a port to be + % a rectangular prism with sides parallel to the axis, + % which is what this function returns. + + % Check CSX contains HyperLynx port list. + if (~isfield(CSX, 'HyperLynxPort')) + error('CSX not created by ImportHyperLynx()'); + end + + % find port + port_found = 0; + for i = 1:length(CSX.HyperLynxPort) + if (~port_found && strcmp(port_ref, CSX.HyperLynxPort{i}.ref)) + port_found = 1; + port = CSX.HyperLynxPort{i}; + port_index = i; + end + end + + % exit if port not found + if (~port_found) + % display valid port names + portnames = {}; + for i = 1:length(CSX.HyperLynxPort) + portnames(end+1) = CSX.HyperLynxPort{i}.ref; + end + portnames = sort(portnames); + fprintf('Valid ports:'); + for i = 1:length(portnames) + fprintf(' %s', portnames{i}); + end + fprintf('\n'); + % exit with error message + error(['port not found: ' port_ref ]); + end + + % return values + side = port.position; + start = [ port.x1 port.y1 port.z ]; + stop = [ port.x2 port.y2 port.z ]; + centre = [ port.xc port.yc port.z ]; + +end + +% not truncated |