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 + -
显示快捷键?