X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?p=CreaPhase.git;a=blobdiff_plain;f=octave_packages%2Fvrml-1.0.13%2Fvrml_arrow.m;fp=octave_packages%2Fvrml-1.0.13%2Fvrml_arrow.m;h=949fd9587578d473e09d8257ba8f256adeda11d1;hp=0000000000000000000000000000000000000000;hb=f5f7a74bd8a4900f0b797da6783be80e11a68d86;hpb=1705066eceaaea976f010f669ce8e972f3734b05 diff --git a/octave_packages/vrml-1.0.13/vrml_arrow.m b/octave_packages/vrml-1.0.13/vrml_arrow.m new file mode 100644 index 0000000..949fd95 --- /dev/null +++ b/octave_packages/vrml-1.0.13/vrml_arrow.m @@ -0,0 +1,118 @@ +## Copyright (C) 2002-2012 Etienne Grossmann +## +## 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 . + +## s = vrml_arrow (sz, col) - Arrow pointing in "y" direction +## +## INPUT : +## ------- +## Arguments are optional. NaN's are replaced by default values. +## +## sz = [len, alen, dc, dr] has size 1, 2, 3 or 4, where +## +## len : total length <1> +## alen : If positive: length of cone/total length <1/4> +## If negative: -(length of cone) +## dc : If positive: diameter of cone base/total len <1/16> +## If negative: -(diameter of cone) +## dr : If positive: diameter of rod/total length +## If negative: -(diameter of rod) +## +## col : 3 or 3x2 : Color of body and cone <[0.3 0.4 0.9]> +## +## OUTPUT : +## -------- +## s : string : vrml representation of an arrow (a rod and a cone) + +function v = vrml_arrow (sz, col, emit) + +if nargin < 3, emit = 1; end + +if nargin<2 || isempty (col), col = [0.3 0.4 0.9;0.3 0.4 0.9]; +elseif prod (size (col)) == 3, col = [1;1]*col(:)'; +elseif all (size (col) == [3,2]), col = col'; +elseif any (size (col) != [2,3]), + error("vrml_arrow : col has size %dx%d (should be 3 or 3x2)\n",size(col)); + ## keyboard +end +col = col' ; + +s0 = [1, 1/4, 1/16, 1/32]; + # Get absolute size +if nargin<1 || isempty (sz) || isnan (sz), sz = s0 ; +elseif length (sz) == 4, sz = [sz(1),sz(2),sz(3),sz(4)]; +elseif length (sz) == 3, sz = [sz(1),sz(2),sz(3),s0(4)]; +elseif length (sz) == 2, sz = [sz(1),sz(2),s0(3),s0(4)]; +elseif length (sz) == 1, sz = [sz(1),s0(2),s0(3),s0(4)]; +else + error ("vrml_arrow : sz has size %dx%d. (should be in 1-4)\n", size(sz)); + ## keyboard +end + +assert (sz(1) > 0) + +if !isempty (tmp = find(isnan(sz))), sz(tmp) = s0(tmp) ; end + +for i = 2:4 + if sz(i) >= 0 + sz(i) *= sz(1); + else + sz(i) = -sz(i); + endif +endfor + + # Do material nodes +smat1 = vrml_material (col(:,1), emit); +smat2 = vrml_material (col(:,2), emit); + +v = sprintf (["Group {\n",\ + " children [\n",\ + " Transform {\n",\ + " translation %8.3g %8.3g %8.3g\n",\ + " children [\n",\ + " Shape {\n",\ + " appearance Appearance {\n",\ + smat1,\ + " }\n"\ + " geometry Cylinder {\n",\ + " radius %8.3g\n",\ + " height %8.3g\n",\ + " }\n",\ + " }\n",\ + " ]\n",\ + " }\n",\ + " Transform {\n",\ + " translation %8.3g %8.3g %8.3g\n",\ + " children [\n",\ + " Shape {\n",\ + " appearance Appearance {\n",\ + smat2,\ + " }\n",\ + " geometry Cone { \n",\ + " bottomRadius %8.3g \n",\ + " height %8.3g\n",\ + " }\n",\ + " }\n",\ + " ]\n",\ + " }\n",\ + " ]\n",\ + "}\n"],\ + [0,(sz(1)-sz(2))/2,0],\ + sz(4),\ + sz(1)-sz(2),\ + [0,sz(2)/2+sz(1)-sz(2),0],\ + sz(3),\ + sz(2)); +endfunction +