Mercurial > octave
annotate scripts/plot/draw/reducepatch.m @ 27978:a4268efb7334
maint: Eliminate single "Author:" lines from code base.
* color-picker.cc, color-picker.h, octave-qscintilla.cc, octave-qscintilla.h,
octave-txt-lexer.cc, octave-txt-lexer.h, balance.cc, kron.cc, lookup.cc,
ls-hdf5.cc, ls-mat5.cc, ls-oct-text.cc, sylvester.cc, tsearch.cc, jit-ir.cc,
jit-ir.h, jit-typeinfo.cc, jit-typeinfo.h, jit-util.cc, jit-util.h, pt-jit.cc,
pt-jit.h, Array-jit.cc, bsxfun.h, url-transfer.cc, url-transfer.h, acosd.m,
acotd.m, acscd.m, asecd.m, asind.m, atand.m, cosd.m, cotd.m, cscd.m, secd.m,
sind.m, tand.m, cart2pol.m, cart2sph.m, curl.m, del2.m, divergence.m, flip.m,
pol2cart.m, randi.m, sortrows.m, sph2cart.m, griddata3.m, griddatan.m,
rectint.m, voronoi.m, dialog.m, guidata.m, guihandles.m, __file_filter__.m,
__fltk_file_filter__.m, __get_funcname__.m, __is_function__.m,
__uigetdir_fltk__.m, __uigetfile_fltk__.m, __uiobject_split_args__.m,
__uiputfile_fltk__.m, uibuttongroup.m, uicontextmenu.m, uicontrol.m,
uigetdir.m, uigetfile.m, uimenu.m, uipanel.m, uipushtool.m, uiputfile.m,
uiresume.m, uitoggletool.m, uitoolbar.m, uiwait.m, doc.m, autumn.m, bone.m,
cmpermute.m, cmunique.m, cool.m, copper.m, cubehelix.m, flag.m, frame2im.m,
hot.m, hsv.m, hsv2rgb.m, im2frame.m, imfinfo.m, imformats.m, iscolormap.m,
jet.m, pink.m, prism.m, __imfinfo__.m, rainbow.m, rgb2hsv.m, spinmap.m,
spring.m, viridis.m, white.m, winter.m, importdata.m, strmatch.m, bandwidth.m,
isbanded.m, isdiag.m, istril.m, istriu.m, krylov.m, linsolve.m, logm.m,
lscov.m, subspace.m, bunzip2.m, compare_versions.m, edit.m, fullfile.m,
getfield.m, gunzip.m, inputParser.m, license.m, nargchk.m, narginchk.m,
nthargout.m, python.m, setfield.m, tar.m, unpack.m, ver.m, zip.m, odeplot.m,
fminbnd.m, fminunc.m, fsolve.m, fzero.m, glpk.m, humps.m, pathdef.m,
savepath.m, diffuse.m, lighting.m, material.m, shading.m, specular.m,
contour.m, ellipsoid.m, isocaps.m, isocolors.m, isonormals.m, isosurface.m,
light.m, pcolor.m, __interp_cube__.m, __marching_cube__.m, __patch__.m,
__stem__.m, reducepatch.m, reducevolume.m, ribbon.m, shrinkfaces.m, slice.m,
stem.m, surf.m, surfl.m, tetramesh.m, waterfall.m, __actual_axis_position__.m,
__next_line_color__.m, allchild.m, figure.m, findall.m, findobj.m, gcf.m,
hggroup.m, isprop.m, ndgrid.m, __add_default_menu__.m, saveas.m,
__splinefit__.m, prefdir.m, preferences.m, profexplore.m, profexport.m,
profile.m, profshow.m, setdiff.m, freqz.m, freqz_plot.m, sinc.m, unwrap.m,
pcr.m, qmr.m, sprandn.m, betaincinv.m, cosint.m, ellipke.m, factor.m,
gammaincinv.m, legendre.m, nchoosek.m, primes.m, invhilb.m, toeplitz.m,
erase.m, mat2str.m, strtrim.m, validatestring.m, fail.m, compare_plot_demos.m,
dump_demos.m, html_compare_plot_demos.m, addtodate.m, datenum.m, jit.tst:
Eliminate single "Author:" lines from code base.
author | Rik <rik@octave.org> |
---|---|
date | Tue, 21 Jan 2020 12:53:13 -0800 |
parents | c20b7290c778 |
children | 90fea9cc9caa 0a5b15007766 |
rev | line source |
---|---|
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
1 ######################################################################## |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
2 ## |
27919
1891570abac8
update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents:
27918
diff
changeset
|
3 ## Copyright (C) 2016-2020 The Octave Project Developers |
27918
b442ec6dda5c
use centralized file for copyright info for individual contributors
John W. Eaton <jwe@octave.org>
parents:
26691
diff
changeset
|
4 ## |
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
5 ## See the file COPYRIGHT.md in the top-level directory of this |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
6 ## distribution or <https://octave.org/copyright/>. |
22243
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
7 ## |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
8 ## This file is part of Octave. |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
9 ## |
24534
194eb4bd202b
maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents:
24423
diff
changeset
|
10 ## Octave is free software: you can redistribute it and/or modify it |
22243
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
11 ## under the terms of the GNU General Public License as published by |
24534
194eb4bd202b
maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents:
24423
diff
changeset
|
12 ## the Free Software Foundation, either version 3 of the License, or |
22755
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22295
diff
changeset
|
13 ## (at your option) any later version. |
22243
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
14 ## |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
15 ## Octave is distributed in the hope that it will be useful, but |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
16 ## WITHOUT ANY WARRANTY; without even the implied warranty of |
22755
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22295
diff
changeset
|
17 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22295
diff
changeset
|
18 ## GNU General Public License for more details. |
22243
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
19 ## |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
20 ## You should have received a copy of the GNU General Public License |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
21 ## along with Octave; see the file COPYING. If not, see |
24534
194eb4bd202b
maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents:
24423
diff
changeset
|
22 ## <https://www.gnu.org/licenses/>. |
27923
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
23 ## |
bd51beb6205e
update formatting of copyright notices
John W. Eaton <jwe@octave.org>
parents:
27919
diff
changeset
|
24 ######################################################################## |
22243
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
25 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
26 ## -*- texinfo -*- |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
27 ## @deftypefn {} {@var{reduced_fv} =} reducepatch (@var{fv}) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
28 ## @deftypefnx {} {@var{reduced_fv} =} reducepatch (@var{faces}, @var{vertices}) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
29 ## @deftypefnx {} {@var{reduced_fv} =} reducepatch (@var{patch_handle}) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
30 ## @deftypefnx {} {} reducepatch (@var{patch_handle}) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
31 ## @deftypefnx {} {@var{reduced_fv} =} reducepatch (@dots{}, @var{reduction_factor}) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
32 ## @deftypefnx {} {@var{reduced_fv} =} reducepatch (@dots{}, "fast") |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
33 ## @deftypefnx {} {@var{reduced_fv} =} reducepatch (@dots{}, "verbose") |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
34 ## @deftypefnx {} {[@var{reduced_faces}, @var{reduces_vertices}] =} reducepatch (@dots{}) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
35 ## |
22245
3d287a11ea18
doc: Clarify that reducepatch only works on patches, not surfaces.
Rik <rik@octave.org>
parents:
22243
diff
changeset
|
36 ## Reduce the number of faces and vertices in a patch object while retaining |
3d287a11ea18
doc: Clarify that reducepatch only works on patches, not surfaces.
Rik <rik@octave.org>
parents:
22243
diff
changeset
|
37 ## the overall shape of the patch. |
22243
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
38 ## |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
39 ## The input patch can be represented by a structure @var{fv} with the |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
40 ## fields @code{faces} and @code{vertices}, by two matrices @var{faces} and |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
41 ## @var{vertices} (see, e.g., the result of @code{isosurface}), or by a |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
42 ## handle to a patch object @var{patch_handle} (@pxref{XREFpatch,,patch}). |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
43 ## |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
44 ## The number of faces and vertices in the patch is reduced by iteratively |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
45 ## collapsing the shortest edge of the patch to its midpoint (as discussed, |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
46 ## e.g., here: |
25143
13fd0610480f
doc: Use https whenever possible in @url entries.
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
47 ## @url{https://libigl.github.io/libigl/tutorial/tutorial.html#meshdecimation}). |
22243
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
48 ## |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
49 ## Currently, only patches consisting of triangles are supported. The |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
50 ## resulting patch also consists only of triangles. |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
51 ## |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
52 ## If @code{reducepatch} is called with a handle to a valid patch |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
53 ## @var{patch_handle}, and without any output arguments, then the given |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
54 ## patch is updated immediately. |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
55 ## |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
56 ## If the @var{reduction_factor} is omitted, the resulting structure |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
57 ## @var{reduced_fv} includes approximately 50% of the faces of the original |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
58 ## patch. If @var{reduction_factor} is a fraction between 0 (excluded) and 1 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
59 ## (excluded), a patch with approximately the corresponding fraction of faces |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
60 ## is determined. |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
61 ## If @var{reduction_factor} is an integer greater than or equal to 1, the |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
62 ## resulting patch has approximately @var{reduction_factor} faces. Depending |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
63 ## on the geometry of the patch, the resulting number of faces can differ from |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
64 ## the given value of @var{reduction_factor}. This is especially true when |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
65 ## many shared vertices are detected. |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
66 ## |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
67 ## For the reduction, it is necessary that vertices of touching faces are |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
68 ## shared. Shared vertices are detected automatically. This detection can be |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
69 ## skipped by passing the optional string argument @qcode{"fast"}. |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
70 ## |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
71 ## With the optional string arguments @qcode{"verbose"}, additional status |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
72 ## messages are printed to the command window. |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
73 ## |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
74 ## Any string input arguments must be passed after all other arguments. |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
75 ## |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
76 ## If called with one output argument, the reduced faces and vertices are |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
77 ## returned in a structure @var{reduced_fv} with the fields @code{faces} and |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
78 ## @code{vertices} (see the one output option of @code{isosurface}). |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
79 ## |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
80 ## If called with two output arguments, the reduced faces and vertices are |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
81 ## returned in two separate matrices @var{reduced_faces} and |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
82 ## @var{reduced_vertices}. |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
83 ## |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
84 ## @seealso{isosurface, isonormals, reducevolume, patch} |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
85 ## @end deftypefn |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
86 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
87 ## FIXME: Convert faces to only triangles if necessary |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
88 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
89 function varargout = reducepatch (varargin) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
90 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
91 if (nargin < 1 || nargin > 5) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
92 print_usage (); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
93 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
94 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
95 [faces, vertices, max_faces, patch_handle, fast, verbose] = ... |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
96 __get_check_reducepatch_args__ (varargin{:}); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
97 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
98 if (verbose) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
99 printf (["reducepatch: before reduction of faces: ", ... |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
100 "%5d faces, %5d vertices\n"], rows (faces), rows (vertices)); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
101 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
102 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
103 if (max_faces >= rows (faces)) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
104 faces_reduced = faces; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
105 vertices_reduced = vertices; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
106 else |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
107 if (! fast) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
108 [faces, vertices] = __unite_shared_vertices__ (faces, vertices); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
109 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
110 if (verbose) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
111 printf (["reducepatch: after detection of shared vertices: ", ... |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
112 "%5d faces, %5d vertices\n"], rows (faces), rows (vertices)); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
113 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
114 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
115 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
116 [faces_reduced, vertices_reduced] = ... |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
117 __reducepatch__ (vertices, faces, max_faces, verbose); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
118 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
119 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
120 if (verbose) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
121 printf (["reducepatch: after reduction of faces: ", ... |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
122 "%5d faces, %5d vertices\n"], ... |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
123 rows (faces_reduced), rows (vertices_reduced)); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
124 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
125 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
126 ## output |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
127 if (! isempty (patch_handle) && nargout == 0) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
128 ## update patch object |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
129 set (patch_handle, "Faces", faces_reduced, "Vertices", vertices_reduced); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
130 elseif (nargout == 2) # faces, vertices |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
131 varargout{1} = faces_reduced; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
132 varargout{2} = vertices_reduced; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
133 else # fv structure |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
134 varargout{1}.faces = faces_reduced; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
135 varargout{1}.vertices = vertices_reduced; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
136 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
137 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
138 endfunction |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
139 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
140 ## assign input parameters and check their validity |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
141 function [faces, vertices, max_faces, patch_handle, fast, verbose] = ... |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
142 __get_check_reducepatch_args__ (varargin) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
143 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
144 ## default values |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
145 faces = vertices = max_faces = patch_handle = []; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
146 reduction_factor = 0.5; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
147 fast = verbose = false; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
148 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
149 num_string_inputs = 0; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
150 ## check whether last 2 input arguments are strings and assign parameters |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
151 valid_vals = nargin:-1:nargin-1; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
152 valid_vals(valid_vals < 1) = []; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
153 for arg = varargin(valid_vals) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
154 if (! ischar (arg{1})) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
155 break; # no string arguments at end, exit checking |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
156 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
157 switch (tolower (arg{1})) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
158 case {"f", "fast"} |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
159 fast = true; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
160 num_string_inputs += 1; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
161 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
162 case {"v", "verbose"} |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
163 verbose = true; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
164 num_string_inputs += 1; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
165 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
166 case "" |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
167 num_string_inputs++; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
168 ## silently ignore empty strings |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
169 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
170 otherwise |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
171 error ("reducepatch: parameter '%s' not supported", arg{1}); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
172 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
173 endswitch |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
174 endfor |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
175 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
176 ## get faces and vertices |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
177 i_fv = 1; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
178 arg1 = varargin{1}; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
179 if (isstruct (arg1)) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
180 if (all (isfield (arg1, {"vertices", "faces"}))) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
181 vertices = arg1.vertices; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
182 faces = arg1.faces; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
183 else |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
184 error (["reducepatch: struct FV must contain the fields ", ... |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
185 "'vertices' and 'faces'."]); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
186 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
187 elseif (isscalar (arg1)) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
188 patch_handle = arg1; |
24423
1d52db450db4
Change ishandle to return true for Java objects for Matlab compatibility.
Rik <rik@octave.org>
parents:
24188
diff
changeset
|
189 if (isgraphics (patch_handle, "patch")) |
22243
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
190 vertices = get (patch_handle, "Vertices"); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
191 faces = get (patch_handle, "Faces"); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
192 else |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
193 error ("reducepatch: PATCH_HANDLE must be a valid handle to a patch"); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
194 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
195 elseif (ismatrix (arg1)) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
196 faces = arg1; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
197 if (nargin - num_string_inputs > 1 && ismatrix (varargin{2})) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
198 vertices = varargin{2}; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
199 i_fv = 2; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
200 else |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
201 error (["reducepatch: If first argument is a matrix containing ", ... |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
202 "FACES, second argument must be a matrix containing VERTICES"]); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
203 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
204 else |
26691
f2bb4f2093b9
Fix print_usage() messages in subfunctions (bug #55599).
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
205 print_usage ("reducepatch"); |
22243
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
206 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
207 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
208 ## get reduction_factor |
22295
12f1d273d22a
maint: Remove trailing spaces from code.
Rik <rik@octave.org>
parents:
22245
diff
changeset
|
209 if (nargin - num_string_inputs > i_fv) |
22243
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
210 reduction_factor = varargin{i_fv + 1}; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
211 if (! isscalar (reduction_factor) || reduction_factor <= 0) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
212 error ("reducepatch: REDUCTION_FACTOR must be a positive scalar"); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
213 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
214 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
215 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
216 ## check faces and vertices |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
217 if (columns (vertices) != 3) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
218 error ("reducepatch: VERTICES must be an Mx3 matrix"); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
219 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
220 if (columns (faces) != 3) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
221 ## FIXME: Convert faces to only triangles if necessary |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
222 error ("reducepatch: Currently patches must consist of triangles only"); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
223 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
224 if (any (mod (faces(:), 1)) || any (faces(:) < 1)) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
225 error ("reducepatch: FACES must consist of positive integer indices only"); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
226 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
227 if (max (faces(:)) > rows (vertices)) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
228 error ("reducepatch: not enough VERTICES for given FACES"); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
229 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
230 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
231 ## get max_faces |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
232 num_faces = rows (faces); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
233 if (reduction_factor < 1) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
234 max_faces = floor (num_faces * reduction_factor); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
235 else |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
236 max_faces = reduction_factor; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
237 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
238 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
239 endfunction |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
240 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
241 ## actual function to reduce number of faces |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
242 function [faces_reduced, vertices_reduced] = ... |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
243 __reducepatch__ (vertices, faces, max_faces, verbose) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
244 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
245 num_faces = rows (faces); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
246 faces = sort (faces, 2); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
247 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
248 ## get all unique edges |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
249 all_edges = sort ([faces(:,1) faces(:,2); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
250 faces(:,2) faces(:,3); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
251 faces(:,3) faces(:,1)], 2); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
252 edges = unique (all_edges, "rows"); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
253 num_edges = rows (edges); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
254 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
255 ## calculate length of edges |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
256 edge_length = norm (vertices(edges(:,1),:) - vertices(edges(:,2),:), ... |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
257 2, "rows"); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
258 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
259 if (verbose) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
260 printf ("reducepatch: reducing number of faces"); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
261 ## do not spam the command window with dots if many faces are collapsed |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
262 verbose_stepwidth = (num_faces - max_faces) / 100; # max. 100 dots |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
263 verbose_counter = 0; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
264 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
265 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
266 ## reduce number of faces |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
267 clean_finish = true; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
268 do |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
269 ## find shortest edge |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
270 i_shortest_edge = find (edge_length == min (edge_length), 1, "first"); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
271 if (any (isinf (vertices(edges(i_shortest_edge,:),:)))) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
272 warning (["reducepatch: shortest edge is marked as deleted. ", ... |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
273 "This should never happen."]) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
274 clean_finish = false; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
275 break; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
276 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
277 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
278 start_point_idx = edges(i_shortest_edge,1); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
279 end_point_idx = edges(i_shortest_edge,2); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
280 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
281 ## collapse the edge to its midpoint |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
282 vertices(start_point_idx,:) = 0.5 * ... |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
283 (vertices(start_point_idx,:) + vertices(end_point_idx,:)); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
284 ## endpoint will be deleted later |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
285 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
286 ## remove collapsed edge info |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
287 edges(i_shortest_edge,:) = []; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
288 edge_length(i_shortest_edge) = []; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
289 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
290 ## unite collapsed edges of neighboring faces to one edge |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
291 faces_with_collapsed_edge = any (faces == start_point_idx, 2) & ... |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
292 any (faces == end_point_idx, 2); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
293 edges_of_collapsed_faces = faces(faces_with_collapsed_edge,:); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
294 ## get other vertex of collapsed faces |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
295 third_vertices = ... |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
296 edges_of_collapsed_faces(... |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
297 faces(faces_with_collapsed_edge,:) != start_point_idx & ... |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
298 faces(faces_with_collapsed_edge,:) != end_point_idx); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
299 if (! isempty (third_vertices)) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
300 ## delete edge of the collapsed faces which also has end_point |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
301 ## (keep the one with start_point) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
302 edges_to_delete = any (edges == end_point_idx, 2) & ... |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
303 any (any (bsxfun (@eq, edges, ... |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
304 reshape (third_vertices, 1, 1, [])), 3), 2); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
305 edges(edges_to_delete,:) = []; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
306 edge_length(edges_to_delete) = []; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
307 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
308 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
309 ## mark the faces that collapsed for later removal |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
310 faces(faces_with_collapsed_edge,:) = Inf; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
311 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
312 ## update the lengths of the moved edges |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
313 edges_with_moved_point = any (edges == start_point_idx, 2); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
314 edge_length(edges_with_moved_point) = ... |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
315 norm (vertices(edges(edges_with_moved_point,1),:) - ... |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
316 vertices(edges(edges_with_moved_point,2),:), 2, "rows"); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
317 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
318 ## replace all vertices that use end_point to use start_point |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
319 if (start_point_idx != end_point_idx) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
320 edges(edges == end_point_idx) = start_point_idx; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
321 faces(faces == end_point_idx) = start_point_idx; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
322 vertices(end_point_idx,:) = Inf; # mark vertex for later removal |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
323 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
324 |
27956
2310164737b3
fix many spelling errors (bug #57613)
John W. Eaton <jwe@octave.org>
parents:
26376
diff
changeset
|
325 ## Pretty print a row of dots while performing calculation |
22243
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
326 if (verbose && ++verbose_counter > verbose_stepwidth) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
327 printf ("."); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
328 verbose_counter = 0; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
329 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
330 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
331 until (max_faces > num_faces - sum (isinf (faces(:,1)))) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
332 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
333 if (verbose) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
334 printf ("\n"); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
335 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
336 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
337 if (! clean_finish) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
338 ## FIXME: What should be done in this case? |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
339 ## continue anyway? |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
340 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
341 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
342 ## finally, remove vertices and faces |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
343 removed_vertices = isinf (vertices(:,1)); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
344 vertices_reduced = vertices(! removed_vertices,:); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
345 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
346 faces_reduced = faces(! isinf (faces(:,1)),:); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
347 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
348 ## renumber vertices in faces with subsequent numbers |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
349 vertex_renum = ones (rows (vertices), 1); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
350 vertex_renum(removed_vertices) = 0; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
351 vertex_renum = cumsum (vertex_renum); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
352 faces_reduced = vertex_renum(faces_reduced); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
353 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
354 endfunction |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
355 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
356 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
357 %!demo |
24188
1253132e2173
Use "clf;" at beginning of all plot demos.
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
358 %! clf; |
22243
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
359 %! [x,y,z] = meshgrid (-2:0.5:2, -2:0.5:2, -2:0.5:2); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
360 %! val = x.^2 + y.^2 + z.^2; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
361 %! fv = isosurface (x, y, z, val, 1); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
362 %! ax1 = subplot (1, 2, 1); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
363 %! patch (fv, "FaceColor", "g"); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
364 %! view (3); axis equal; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
365 %! title ("Sphere with all faces"); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
366 %! ax2 = subplot(1, 2, 2); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
367 %! patch (reducepatch (fv, 72), "FaceColor", "g"); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
368 %! view (3); axis equal; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
369 %! title ("Sphere with reduced number of faces"); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
370 %! linkprop ([ax1, ax2], {"CameraPosition", "CameraUpVector"}); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
371 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
372 %!shared faces, vertices, fv, num_faces |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
373 %! [x,y,z] = meshgrid (-2:0.5:2, -2:0.5:2, -2:0.5:2); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
374 %! val = x.^2 + y.^2 + z.^2; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
375 %! [faces, vertices] = isosurface (x, y, z, val, 1); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
376 %! fv.faces = faces; fv.vertices = vertices; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
377 %! num_faces = rows (faces); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
378 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
379 ## one input (structure), one output |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
380 %!test |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
381 %! fv_reduced = reducepatch (fv); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
382 %! assert (size (fv_reduced.faces, 1), num_faces * .5, 3); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
383 %! assert (size (fv_reduced.faces, 2), 3); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
384 %! assert (size (fv_reduced.vertices, 2), 3); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
385 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
386 ## two inputs (faces, vertices), one output |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
387 %!test |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
388 %! fv_reduced = reducepatch (faces, vertices); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
389 %! assert (size (fv_reduced.faces, 1), num_faces * .5, 3); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
390 %! assert (size (fv_reduced.faces, 2), 3); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
391 %! assert (size (fv_reduced.vertices, 2), 3); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
392 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
393 ## two inputs (structure, reduction_factor > 1), two outputs |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
394 %!test |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
395 %! [faces_reduced, vertices_reduced] = reducepatch (fv, 20); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
396 %! assert (size (faces_reduced, 1), 20, 3); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
397 %! assert (size (faces_reduced, 2), 3); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
398 %! assert (size (vertices_reduced, 2), 3); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
399 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
400 ## three inputs (faces, vertices, reduction_factor < 1), two outputs |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
401 %!test |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
402 %! [faces_reduced, vertices_reduced] = reducepatch (faces, vertices, .5); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
403 %! assert (size (faces_reduced, 1), num_faces * .5, 3); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
404 %! assert (size (faces_reduced, 2), 3); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
405 %! assert (size (vertices_reduced, 2), 3); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
406 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
407 ## two inputs (structure, reduction_factor < 1) + one string, no outputs |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
408 ## (update patch object in figure) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
409 %!test |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
410 %! h_fig = figure ("visible", "off"); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
411 %! p = patch (fv); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
412 %! reducepatch (p, .35, "f"); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
413 %! assert (size (get (p, "Faces"), 1), num_faces * .35, 3); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
414 %! assert (size (get (p, "Faces"), 2), 3); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
415 %! assert (size (get (p, "Vertices"), 2), 3); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
416 %! close (h_fig); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
417 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
418 ## three inputs (faces, vertices, reduction_factor > 1) + one empty |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
419 ## string, one output |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
420 %!test |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
421 %! fv_reduced = reducepatch (faces, vertices, 52, ""); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
422 %! assert (size (fv_reduced.faces, 1), 52, 3); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
423 %! assert (size (fv_reduced.faces, 2), 3); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
424 %! assert (size (fv_reduced.vertices, 2), 3); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
425 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
426 ## two inputs (structure, reduction_factor < 1) + one string, two outputs |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
427 %!test |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
428 %! [faces_reduced, vertices_reduced] = reducepatch (fv, .4, "fast"); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
429 %! assert (size (faces_reduced, 1), num_faces * .4, 3); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
430 %! assert (size (faces_reduced, 2), 3); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
431 %! assert (size (vertices_reduced, 2), 3); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
432 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
433 ## one input (structure) + two (empty) strings, two outputs |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
434 %!test |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
435 %! [faces_reduced, vertices_reduced] = reducepatch (fv, "f", ""); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
436 %! assert (size (faces_reduced, 1), num_faces * .5, 3); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
437 %! assert (size (faces_reduced, 2), 3); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
438 %! assert (size (vertices_reduced, 2), 3); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
439 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
440 ## test for each error |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
441 %!error reducepatch () |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
442 %!error reducepatch (fv, faces, vertices, .5, "f", "v") |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
443 %!error <reducepatch: parameter 'foo' not supported> |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
444 %! fv_reduced = reducepatch (faces, vertices, .7, "foo"); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
445 %!error <struct FV must contain the fields 'vertices' and 'faces'> |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
446 %! fv_incomplete.faces = faces; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
447 %! reducepatch (fv_incomplete, .7); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
448 %!error <PATCH_HANDLE must be a valid handle to a patch> reducepatch (pi, .7) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
449 %!error <If first argument is a matrix containing FACES, second argument must be a matrix containing VERTICES> reducepatch (faces) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
450 %!error <REDUCTION_FACTOR must be a positive scalar> reducepatch (fv, [.7 .5]) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
451 %!error <REDUCTION_FACTOR must be a positive scalar> reducepatch (fv, -5) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
452 %!error <VERTICES must be an Mx3 matrix> reducepatch (faces, .7, "v") |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
453 %!error <reducepatch: Currently patches must consist of triangles only> |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
454 %! faces_new = NaN (size (faces, 1), 4); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
455 %! faces_new(:,1:3) = faces; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
456 %! faces_new(1,4) = 5; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
457 %! reducepatch (faces_new, vertices); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
458 %!error <reducepatch: not enough VERTICES for given FACES> |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
459 %! faces_new = faces; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
460 %! faces_new(1,3) = size (vertices, 1) + 1; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
461 %! reducepatch (faces_new, vertices); |