X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?p=CreaPhase.git;a=blobdiff_plain;f=octave_packages%2Fnurbs-1.3.6%2Fnrbtform.m;fp=octave_packages%2Fnurbs-1.3.6%2Fnrbtform.m;h=550dc073c7a04c4016c0e12e7af395ed1ee1aa03;hp=0000000000000000000000000000000000000000;hb=f5f7a74bd8a4900f0b797da6783be80e11a68d86;hpb=1705066eceaaea976f010f669ce8e972f3734b05 diff --git a/octave_packages/nurbs-1.3.6/nrbtform.m b/octave_packages/nurbs-1.3.6/nrbtform.m new file mode 100644 index 0000000..550dc07 --- /dev/null +++ b/octave_packages/nurbs-1.3.6/nrbtform.m @@ -0,0 +1,82 @@ +function nurbs = nrbtform(nurbs,tmat) +% +% NRBTFORM: Apply transformation matrix to the NURBS. +% +% Calling Sequence: +% +% tnurbs = nrbtform(nurbs,tmatrix); +% +% INPUT: +% +% nurbs : NURBS data structure (see nrbmak for details). +% +% tmatrix : Transformation matrix, a matrix of size (4,4) defining +% a single or multiple transformations. +% +% OUTPUT: +% +% tnurbs : The return transformed NURBS data structure. +% +% Description: +% +% The NURBS is transform as defined a transformation matrix of size (4,4), +% such as a rotation, translation or change in scale. The transformation +% matrix can define a single transformation or multiple series of +% transformations. The matrix can be simple constructed by the functions +% vecscale, vectrans, vecrotx, vecroty, and vecrotz. +% +% Examples: +% +% Rotate a square by 45 degrees about the z axis. +% +% rsqr = nrbtform(nrbrect(), vecrotz(deg2rad(45))); +% nrbplot(rsqr, 1000); +% +% See also: +% +% vecscale, vectrans, vecrotx, vecroty, vecrotz +% +% Copyright (C) 2000 Mark Spink +% Copyright (C) 2010 Rafael Vazquez +% +% 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 2 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 . + +if nargin < 2 + error('Not enough input arguments!'); +end; + +if iscell(nurbs.knots) + if size(nurbs.knots,2) == 2 + % NURBS is a surface + [dim,nu,nv] = size(nurbs.coefs); + nurbs.coefs = reshape(tmat*reshape(nurbs.coefs,dim,nu*nv),[dim nu nv]); + elseif size(nurbs.knots,2) == 3 + % NURBS is a volume + [dim,nu,nv,nw] = size(nurbs.coefs); + nurbs.coefs = reshape(tmat*reshape(nurbs.coefs,dim,nu*nv*nw),[dim nu nv nw]); + end +else + % NURBS is a curve + nurbs.coefs = tmat*nurbs.coefs; +end + +end + +%!demo +%! xx = vectrans([2.0 1.0])*vecroty(pi/8)*vecrotx(pi/4)*vecscale([1.0 2.0]); +%! c0 = nrbtform(nrbcirc, xx); +%! nrbplot(c0,50); +%! grid on +%! title('Construction of an ellipse by transforming a unit circle.'); +%! hold off \ No newline at end of file