isonormals.cpp

来自「实现VC与MATLAB的无缝对接」· C++ 代码 · 共 408 行 · 第 1/2 页

CPP
408
字号
  #include "matlib.h"
  #pragma hdrstop
  
  #include "isonormals.h"
  #include "parseargs.h"
  #include "xyzvcheck.h"
  
  
  
  Mm isonormals(Mm varargin) {
    begin_scope
    varargin.setname("varargin"); 
    dMm(nout); dMm(x); dMm(y); dMm(z); dMm(data); dMm(verts); dMm(negate); dMm(msg); dMm(sz); dMm(p); dMm(n); dMm( \
      hx); dMm(hy); dMm(hz); dMm(nx); dMm(ny); dMm(nz); 
    
    #line 1 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    call_stack_begin;
    #line 1 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    // nargin, nargout entry code
    double old_nargin=nargin_val; if (!nargin_set) nargin_val=0+varargin.size();
    nargin_set=0;
    double old_nargout=nargout_val; if (!nargout_set) nargout_val=1.0;
    nargout_set=0;
    
    // translated code
    
    #line 2 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    //ISONORMALS  Isosurface normals.
    #line 3 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    //   N = ISONORMALS(X,Y,Z,V,VERTICES) computes the normals of isosurface
    #line 4 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    //   vertices VERTICES by using the gradient of the data V. Arrays X, Y and Z
    #line 5 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    //   specify the points at which the data V is given. The normals are
    #line 6 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    //   returned in N. By default, the normals point in the direction of
    #line 7 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    //   smaller data values.
    #line 8 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    //   
    #line 9 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    //   N = ISONORMALS(V,VERTICES) assumes [X Y Z] = meshgrid(1:N, 1:M, 1:P)
    #line 10 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    //       where [M,N,P]=SIZE(V).
    #line 11 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    //   
    #line 12 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    //   N = ISONORMALS(V,P) or N = ISONORMALS(X,Y,Z,V,P) uses the vertices 
    #line 13 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    //       from patch P.
    #line 14 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    //   
    #line 15 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    //   N = ISONORMALS(..., 'negate') negates the computed normals.
    #line 16 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    //   
    #line 17 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    //   ISONORMALS(V,P) or ISONORMALS(X,Y,Z,V,P) sets the 'VertexNormals'
    #line 18 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    //   property of the patch specified in P with the computed normals.
    #line 19 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    //
    #line 20 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    //   Example:
    #line 21 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    //      data = cat(3, [0 .2 0; 0 .3 0; 0 0 0], ...
    #line 22 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    //                    [.1 .2 0; 0 1 0; .2 .7 0],...
    #line 23 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    //                    [0 .4 .2; .2 .4 0;.1 .1 0]);
    #line 24 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    //      data = interp3(data,3, 'cubic');
    #line 25 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    //      subplot(1,2,1)
    #line 26 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    //      p = patch(isosurface(data, .5), 'FaceColor', 'red', 'EdgeColor', 'none');
    #line 27 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    //      view(3); daspect([1 1 1]);axis tight
    #line 28 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    //      camlight;  camlight(-80,-10); lighting p; 
    #line 29 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    //      title('Triangle Normals')
    #line 30 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    //      subplot(1,2,2)
    #line 31 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    //      p = patch(isosurface(data, .5), 'FaceColor', 'red', 'EdgeColor', 'none');
    #line 32 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    //      isonormals(data,p)
    #line 33 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    //      view(3); daspect([1 1 1]); axis tight
    #line 34 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    //      camlight;  camlight(-80,-10); lighting phong; 
    #line 35 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    //      title('Data Normals')
    #line 36 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    //
    #line 37 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    //   See also ISOSURFACE, ISOCAPS, SMOOTH3, SUBVOLUME, REDUCEVOLUME,
    #line 38 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    //            REDUCEPATCH.
    
    #line 40 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    //   Copyright (c) 1984-98 by The MathWorks, Inc.
    #line 41 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    //   $Revision: 1.3 $  $Date: 1998/08/11 19:02:11 $
    
    #line 43 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
_   /*[x,y,z,data,verts,negate] = */parseargs(nargin(),varargin,i_o,x,y,z,data,verts,negate);
    
    #line 45 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    // Take this out when other data types are handled
    #line 46 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
_   data = mdouble(data);
    
    #line 48 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
_   /*[msg,x,y,z] = */xyzvcheck(x,y,z,data,i_o,msg,x,y,z);
    #line 48 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
_   display( error(msg) );
    
    
    #line 51 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
_   sz = size(data);
    #line 52 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
_   if (istrue(isempty(x))) {
      #line 53 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
_     /*[x,y,z] = */meshgrid(colon(1.0,1.0,sz(2.0)),colon(1.0,1.0,sz(1.0)),colon(1.0,1.0,sz(3.0)),i_o,x,y,z);
      #line 54 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    }
    
    
    #line 57 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
_   if (istrue(ishandle(verts))) {
      #line 58 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
_     if (istrue(strcmp(get(verts,TM("type")),TM("patch")))) {
        #line 59 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
_       p = verts;
        #line 60 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
_       verts = get(p,TM("vertices"));
        #line 61 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
      } else {
        
        #line 62 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
_       error(TM("The handle supplied must be a patch handle"));
        #line 63 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
      }
      #line 64 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    } else {
      
      #line 65 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
_     p = nop_M;
      #line 66 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    }
    
    #line 68 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
_   if (istrue(isempty(verts))) {
      #line 69 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
_     n = nop_M;
      #line 70 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    } else {
      
      #line 71 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
_     hx = x(1.0,c_p,1.0);
      
      #line 72 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
_     hy = y(c_p,1.0,1.0);
      
      #line 73 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
_     hz = z(1.0,1.0,c_p);
      
      #line 74 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
_     /*[nx,ny,nz] = */gradient(data,hx,hy,hz,i_o,nx,ny,nz);
      
      #line 76 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
_     n(c_p,1.0) = interp3(x,y,z,nx,verts(c_p,1.0),verts(c_p,2.0),verts(c_p,3.0));
      #line 77 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
_     n(c_p,2.0) = interp3(x,y,z,ny,verts(c_p,1.0),verts(c_p,2.0),verts(c_p,3.0));
      #line 78 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
_     n(c_p,3.0) = interp3(x,y,z,nz,verts(c_p,1.0),verts(c_p,2.0),verts(c_p,3.0));
      #line 79 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    }
    
    #line 81 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    // The default needs to negate the normals so that isosurfaces
    #line 82 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    // drawn in opengl with backfacelighting==reverselit will be lit
    #line 83 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    // (keep the normals consistent with the handedness)
    #line 84 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
_   if (istrue(!negate)) {
      #line 85 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
_     n = -n;
      #line 86 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
    }
    
    #line 88 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
_   if (istrue(nargout()==0.0)) {
      #line 89 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
_     if (istrue(!isempty(p))) {
        #line 90 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
_       display( set(p,(CL(TM("vertexnormals")),n)) );
        #line 91 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"
      } else {
        
        #line 92 "g:/matlabr11/toolbox/matlab/specgraph/isonormals.m"

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?