image thumbnail

Matlab 3D figure to 3D (X)HTML

by

 

13 Jul 2011 (Updated )

Converts 3D objects of a Matlab figure to XHTML embedded X3D file. Interactive 3D website graphics.

Editor's Notes:

This file was selected as MATLAB Central Pick of the Week

[data,loc]=XMLaddNode(name,data,loc)
function [data,loc]=XMLaddNode(name,data,loc)
if(nargin<2)
    data=struct(); n1=0;
else
    if(isfieldempty(data,'node')), n1=length(data.node); else n1=0; end
end
if(nargin<3)
    loc=0;
end
if(loc==0);
    data.node(n1+1).name=name;
else
    if(isfieldempty(data.node(n1),'node')), n2=length(data.node(n1).node); else n2=0; end
    if(loc==1)
        data.node(n1).node(n2+1).name=name;
    else
        if(isfieldempty(data.node(n1).node(n2),'node')), n3=length(data.node(n1).node(n2).node); else n3=0; end
        if(loc==2)
            data.node(n1).node(n2).node(n3+1).name=name;
        else
            if(isfieldempty(data.node(n1).node(n2).node(n3),'node')), n4=length(data.node(n1).node(n2).node(n3).node); else n4=0; end
            if(loc==3)
                data.node(n1).node(n2).node(n3).node(n4+1).name=name;
            else
                if(isfieldempty(data.node(n1).node(n2).node(n3).node(n4),'node')), n5=length(data.node(n1).node(n2).node(n3).node(n4).node); else n5=0; end
                if(loc==4)
                    data.node(n1).node(n2).node(n3).node(n4).node(n5+1).name=name;
                else
                    if(isfieldempty(data.node(n1).node(n2).node(n3).node(n4).node(n5),'node')), n6=length(data.node(n1).node(n2).node(n3).node(n4).node(n5).node); else n6=0; end
                    if(loc==5)
                        data.node(n1).node(n2).node(n3).node(n4).node(n5).node(n6+1).name=name;
                    else
                        if(isfieldempty(data.node(n1).node(n2).node(n3).node(n4).node(n5).node(n6),'node')), n7=length(data.node(n1).node(n2).node(n3).node(n4).node(n5).node(n6).node); else n7=0; end
                        if(loc==6)
                            data.node(n1).node(n2).node(n3).node(n4).node(n5).node(n6).node(n7+1).name=name;
                        else
                            if(isfieldempty(data.node(n1).node(n2).node(n3).node(n4).node(n5).node(n6).node(n7),'node')), n8=length(data.node(n1).node(n2).node(n3).node(n4).node(n5).node(n6).node(n7).node); else n8=0; end
                            if(loc==7)
                                data.node(n1).node(n2).node(n3).node(n4).node(n5).node(n6).node(n7).node(n8+1).name=name;
                            else
                                if(isfieldempty(data.node(n1).node(n2).node(n3).node(n4).node(n5).node(n6).node(n7).node(n8),'node')), n9=length(data.node(n1).node(n2).node(n3).node(n4).node(n5).node(n6).node(n7).node(n8).node); else n9=0; end
                                if(loc==8)
                                    data.node(n1).node(n2).node(n3).node(n4).node(n5).node(n6).node(n7).node(n8).node(n9+1).name=name;
                                else
                                        if(isfieldempty(data.node(n1).node(n2).node(n3).node(n4).node(n5).node(n6).node(n7).node(n8).node(n9),'node')), n10=length(data.node(n1).node(n2).node(n3).node(n4).node(n5).node(n6).node(n7).node(n8).node(n9).node); else n10=0; end
                                        if(loc==9)
                                            data.node(n1).node(n2).node(n3).node(n4).node(n5).node(n6).node(n7).node(n8).node(n9).node(n10+1).name=name;
                                        else
                                            disp('reached maximum recursion limit');
                                        end
                                end

                            end
                        end
                    end
                end
            end
        end
    end
end

function a=isfieldempty(data,str)
a=isfield(data,str)&&(~isempty(data.(str)));

Contact us