⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gmviz_vrmlplot.m

📁 matlab有限元分析工具,比经较全面的一个手册,请大家下载呀
💻 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 + -