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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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);