?? gmviz_vrmlplot.m
字號:
function gmviz_vrmlplot(handle1, bbox, pts, simps, cols, vizdim, thickness)
channel = handle1(1);
multiplier = handle1(2);
if vizdim == 0
if thickness(1) <= 1.000001
fprintf(channel, ' Separator {\n');
fprintf(channel, ' Material {\n');
fprintf(channel, ' diffuseColor [\n');
[m,scrap] = size(cols);
for i = 1 : m
if cols(i,4) > 0
fprintf(channel, ' %f %f %f,\n', cols(i,1), ...
cols(i,2), cols(i,3));
end
end
fprintf(channel, ' ] # end of diffusecolor\n');
fprintf(channel, ' transparency [\n');
for i = 1 : m
if cols(i,4) > 0
fprintf(channel, ' %f,\n', 1-cols(i,4));
end
end
fprintf(channel, ' ] # end of transparency\n');
fprintf(channel, ' } # end of Material\n');
fprintf(channel, ' MaterialBinding { value PER_FACE }\n');
fprintf(channel, ' Coordinate3 {\n');
fprintf(channel, ' point [\n');
[n,scrap] = size(pts);
for i = 1 : n
point = [pts(i,:),0,0,0];
if cols(i,4) > 0
fprintf(channel, ' %f %f %f,\n', point(1), point(2), point(3));
end
end
fprintf(channel, ' ] # end of point\n');
fprintf(channel, ' } # end of Coordinate3\n');
fprintf(channel, ' PointSet {startIndex 0 numPoints -1}\n');
fprintf(channel, ' } # end of Separator\n');
else % thick dim 0
[n,scrap] = size(pts);
thick0 = multiplier * thickness(1);
for i = 1 : n
if cols(i,4) > 0
point = [pts(i,:),0,0,0];
fprintf(channel, ' Separator {\n');
fprintf(channel, ' Material {\n');
fprintf(channel, ' diffuseColor %f %f %f\n', cols(i,1), ...
cols(i,2), cols(i,3));
fprintf(channel, ' transparency %f\n', 1 - cols(i,4));
fprintf(channel, ' }\n');
fprintf(channel, ' Transform { translation %f %f %f }\n',...
point(1), point(2), point(3));
fprintf(channel, ' Sphere { radius %f }\n', thick0);
fprintf(channel, ' }\n');
end
end
end
elseif vizdim == 1
if thickness(2) <= 1.000001
fprintf(channel, ' Separator {\n');
fprintf(channel, ' Material {\n');
fprintf(channel, ' diffuseColor [\n');
[m, scrap] = size(cols);
for i = 1 : m
if cols(i,4) > 0
fprintf(channel, ' %f %f %f,\n', cols(i,1), ...
cols(i,2), cols(i,3));
end
end
fprintf(channel, ' ] # end of diffuseColor\n');
fprintf(channel, ' transparency [\n');
for i = 1 : m
if cols(i,4) > 0
fprintf(channel, ' %f,\n', 1- cols(i,4));
end
end
fprintf(channel, ' ] # end of transparency\n');
fprintf(channel, ' } # end of Material\n');
fprintf(channel, ' MaterialBinding { value PER_FACE }\n');
fprintf(channel, ' Coordinate3 {\n');
fprintf(channel, ' point [\n');
[n,scrap] = size(pts);
for i = 1 : n
point = [pts(i,:),0,0,0];
fprintf(channel, ' %f %f %f,\n', point(1), point(2), ...
point(3));
end
fprintf(channel, ' ] # end of point\n');
fprintf(channel, ' } # end of Coordinate3\n');
fprintf(channel, ' IndexedLineSet {\n');
fprintf(channel, ' coordIndex [\n');
[m,scrap] = size(simps);
for i = 1 : m
if cols(i,4) > 0
fprintf(channel, ' %d, %d, -1,\n', simps(i,1), simps(i,2));
end
end
fprintf(channel, ' ] # end of coordIndex\n');
fprintf(channel, ' } # end of IndexedLineSet\n');
fprintf(channel, ' } # end of Separator\n');
else % thick dim 1
[m, scrap] = size(simps);
[scrap,di] = size(pts);
thick1 = multiplier * thickness(2);
for i = 1 : m
if cols(i,4) > 0
fprintf(channel, ' Separator {\n');
fprintf(channel, ' Material {\n');
fprintf(channel, ' diffuseColor %f %f %f\n', cols(i,1), ...
cols(i,2), cols(i,3));
fprintf(channel, ' transparency %f\n', 1 - cols(i,4));
fprintf(channel, ' }\n');
spind = simps(i,1);
epind = simps(i,2);
sp = [pts(spind+1,:), 0, 0, 0];
ep = [pts(epind+1,:), 0, 0, 0];
sp = sp(1:3);
ep = ep(1:3);
displ = sp - ep;
midp = (sp + ep) / 2;
sigma = sum(displ(2:3).^2);
hhtrans = displ';
if sigma == 0.0
beta = 1;
else
mu = sqrt(sigma + displ(1)^2);
if displ(1) < 0
hhtrans(1) = displ(1) - mu;
else
hhtrans(1) = -sigma / (displ(1) + mu);
end
beta = -1.0 / (mu * hhtrans(1));
end
hhmat = eye(3) - beta * hhtrans * hhtrans';
transformc = zeros(4,4);
transformc(1,1:3) = thick1 * hhmat(2,1:3);
transformc(2,1:3) = .5 * displ;
transformc(3,1:3) = thick1 * hhmat(3,1:3);
transformc(4,1:3) = midp;
transformc(4,4) = 1;
det1 = det(transformc(1:3,1:3));
if det1 < 0
transformc(1,:) = -transformc(1,:);
end
fprintf(channel, ' MatrixTransform { matrix \n');
for j = 1 : 4
fprintf(channel, ' %f %f %f %f\n', transformc(j,1), ...
transformc(j,2), transformc(j,3), transformc(j,4));
end
fprintf(channel, ' }\n');
fprintf(channel, ' Cylinder { }\n');
fprintf(channel, ' } # end of Separator\n');
end
end
end
else % vizdim == 2
fprintf(channel, ' Separator {\n');
fprintf(channel, ' Material {\n');
fprintf(channel, ' diffuseColor [\n');
[m,scrap] = size(cols);
for i = 1 : m
if cols(i,4) > 0
fprintf(channel, ' %f %f %f,\n', cols(i,1), cols(i,2), ...
cols(i,3));
end
end
fprintf(channel, ' ] # end of diffuseColor\n');
fprintf(channel, ' transparency [\n');
for i = 1 : m
if cols(i,4) > 0
fprintf(channel, ' %f,\n', 1-cols(i,4));
end
end
fprintf(channel, ' ] # end of transparency\n');
fprintf(channel, ' } # end of Material\n');
fprintf(channel, ' MaterialBinding { value PER_FACE }\n');
fprintf(channel, ' Coordinate3 {\n');
fprintf(channel, ' point [\n');
[n,scrap] = size(pts);
for i = 1 : n
point = [pts(i,:),0,0,0];
fprintf(channel, ' %f %f %f,\n', point(1), point(2),...
point(3));
end
fprintf(channel, ' ] # end of point\n');
fprintf(channel, ' } # end of Coordinate3\n');
fprintf(channel, ' IndexedFaceSet {\n');
fprintf(channel, ' coordIndex [\n');
for i = 1 : m
if cols(i, 4) > 0
fprintf(channel, ' %d, %d, %d, -1,\n', simps(i,1),...
simps(i,2), simps(i,3));
end
end
fprintf(channel, ' ] # end of coordIndex\n');
fprintf(channel, ' } # end of IndexedFaceSet\n');
fprintf(channel, ' } # end of Separator\n');
end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -