amfStruct2xml
Below is a demonstration of the features of the amfStruct2xml function
Contents
clear; close all; clc;
Syntax
[domNode]=amfStruct2xml(amf,fileName,optionStruct);
Description
This function provides the basis for coding AMF files.
Example:
Create example mesh
[F,V]=geoSphere(2,50); %Faces and vertices c=[1 0 0]; %RGB Color volume1_Name='sphere'; material1_Name='sphere material';
cFigure; title('Model to export to AMF') gpatch(F,V,c); axisGeom; camlight headlight; drawnow;
Define file name
defaultFolder = fileparts(fileparts(mfilename('fullpath'))); savePath=fullfile(defaultFolder,'data','temp'); fileName=fullfile(savePath,'tempModel.amf');
Create AMF structure
% Define AMF units and version amf.ATTR.unit='mm'; %Set units amf.ATTR.version='1.1'; %Set AMF version % Add optional metadata here amf.metadata{1}.ATTR.type='name'; amf.metadata{1}.VAL='Sphere mesh'; amf.metadata{2}.ATTR.type='author'; amf.metadata{2}.VAL='GIBBON'; % object definition %-> vertices amf.object{1}.ATTR.id=1; for q=1:1:size(V,1) %Loop over all vertices amf.object{1}.mesh.vertices.vertex{q}.coordinates.x=V(q,1); amf.object{1}.mesh.vertices.vertex{q}.coordinates.y=V(q,2); amf.object{1}.mesh.vertices.vertex{q}.coordinates.z=V(q,3); end %-> volume -> triangle amf.object{1}.mesh.volume{1}.ATTR.materialid=1; amf.object{1}.mesh.volume{1}.metadata{1}.ATTR.type='name'; amf.object{1}.mesh.volume{1}.metadata{1}.VAL=volume1_Name; for q=1:1:size(F,1) %Loop over all triangles (note zero indexing hence -1) amf.object{1}.mesh.volume{1}.triangle{q}.v1=F(q,1)-1; amf.object{1}.mesh.volume{1}.triangle{q}.v2=F(q,2)-1; amf.object{1}.mesh.volume{1}.triangle{q}.v3=F(q,3)-1; end % material amf.material{1}.ATTR.id=1; amf.material{1}.metadata.ATTR.type='name'; amf.material{1}.metadata.VAL=material1_Name; amf.material{1}.color.r=c(1); amf.material{1}.color.g=c(2); amf.material{1}.color.b=c(3);
Export xml
amfStruct2xml(amf,fileName);
zip file
[pathName,fileNameClean,c]=fileparts(fileName);
zipName=fullfile(pathName,[fileNameClean,'.zip']);
zip(zipName,fileName);
movefile(zipName,fileName);