annotate scripts/plot/draw/reducepatch.m @ 30236:628f26e122d9

maint: use rows() or columns() instead of size(__, 1 | 2) for clarity. * ccolamd.cc, colamd.cc, Map.m, material.m, isocolors.m, isonormals.m, isosurface.m, light.m, reducepatch.m, reducevolume.m, movfun.m, ilu.m, __alltohandles__.m, dump_demos.m, mk-sparse-tst.sh: Use rows() or columns() instead of size(__, 1 | 2) for clarity.
author Rik <rik@octave.org>
date Mon, 11 Oct 2021 20:09:59 -0700
parents 7854d5752dd2
children 796f54d4ddbf
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 ##
29358
0a5b15007766 update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents: 27978
diff changeset
3 ## Copyright (C) 2016-2021 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
28959
5394d688d456 doc: Use @code{} within alternate text for @xref,@pxref macros for better Info display.
Rik <rik@octave.org>
parents: 28912
diff changeset
42 ## handle to a patch object @var{patch_handle}
5394d688d456 doc: Use @code{} within alternate text for @xref,@pxref macros for better Info display.
Rik <rik@octave.org>
parents: 28912
diff changeset
43 ## (@pxref{XREFpatch,,@code{patch}}).
22243
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
44 ##
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
45 ## 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
46 ## 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
47 ## e.g., here:
25143
13fd0610480f doc: Use https whenever possible in @url entries.
Rik <rik@octave.org>
parents: 25054
diff changeset
48 ## @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
49 ##
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
50 ## Currently, only patches consisting of triangles are supported. The
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
51 ## resulting patch also consists only of triangles.
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
52 ##
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
53 ## 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
54 ## @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
55 ## patch is updated immediately.
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
56 ##
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
57 ## 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
58 ## @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
59 ## 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
60 ## (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
61 ## is determined.
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
62 ## 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
63 ## resulting patch has approximately @var{reduction_factor} faces. Depending
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
64 ## 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
65 ## 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
66 ## many shared vertices are detected.
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
67 ##
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
68 ## 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
69 ## 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
70 ## skipped by passing the optional string argument @qcode{"fast"}.
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
71 ##
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
72 ## With the optional string arguments @qcode{"verbose"}, additional status
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
73 ## messages are printed to the command window.
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
74 ##
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
75 ## 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
76 ##
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
77 ## 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
78 ## 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
79 ## @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
80 ##
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
81 ## 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
82 ## returned in two separate matrices @var{reduced_faces} and
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
83 ## @var{reduced_vertices}.
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
84 ##
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
85 ## @seealso{isosurface, isonormals, reducevolume, patch}
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
86 ## @end deftypefn
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
87
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
88 ## FIXME: Convert faces to only triangles if necessary
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
89
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
90 function varargout = reducepatch (varargin)
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
91
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
92 if (nargin < 1 || nargin > 5)
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
93 print_usage ();
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
94 endif
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
95
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
96 [faces, vertices, max_faces, patch_handle, fast, verbose] = ...
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
97 __get_check_reducepatch_args__ (varargin{:});
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
98
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
99 if (verbose)
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
100 printf (["reducepatch: before reduction of faces: ", ...
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
101 "%5d faces, %5d vertices\n"], rows (faces), rows (vertices));
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
102 endif
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
103
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
104 if (max_faces >= rows (faces))
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
105 faces_reduced = faces;
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
106 vertices_reduced = vertices;
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
107 else
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
108 if (! fast)
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
109 [faces, vertices] = __unite_shared_vertices__ (faces, vertices);
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
110
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
111 if (verbose)
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
112 printf (["reducepatch: after detection of shared vertices: ", ...
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
113 "%5d faces, %5d vertices\n"], rows (faces), rows (vertices));
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 endif
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
116
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
117 [faces_reduced, vertices_reduced] = ...
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
118 __reducepatch__ (vertices, faces, max_faces, verbose);
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
119 endif
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
120
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
121 if (verbose)
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
122 printf (["reducepatch: after reduction of faces: ", ...
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
123 "%5d faces, %5d vertices\n"], ...
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
124 rows (faces_reduced), rows (vertices_reduced));
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
125 endif
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
126
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
127 ## output
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
128 if (! isempty (patch_handle) && nargout == 0)
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
129 ## update patch object
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
130 set (patch_handle, "Faces", faces_reduced, "Vertices", vertices_reduced);
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
131 elseif (nargout == 2) # faces, vertices
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
132 varargout{1} = faces_reduced;
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
133 varargout{2} = vertices_reduced;
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
134 else # fv structure
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
135 varargout{1}.faces = faces_reduced;
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
136 varargout{1}.vertices = vertices_reduced;
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
137 endif
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
138
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
139 endfunction
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
140
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
141 ## assign input parameters and check their validity
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
142 function [faces, vertices, max_faces, patch_handle, fast, verbose] = ...
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
143 __get_check_reducepatch_args__ (varargin)
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
144
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
145 ## default values
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
146 faces = vertices = max_faces = patch_handle = [];
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
147 reduction_factor = 0.5;
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
148 fast = verbose = false;
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
149
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
150 num_string_inputs = 0;
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
151 ## 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
152 valid_vals = nargin:-1:nargin-1;
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
153 valid_vals(valid_vals < 1) = [];
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
154 for arg = varargin(valid_vals)
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
155 if (! ischar (arg{1}))
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
156 break; # no string arguments at end, exit checking
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
157 endif
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
158 switch (tolower (arg{1}))
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
159 case {"f", "fast"}
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
160 fast = true;
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
161 num_string_inputs += 1;
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
162
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
163 case {"v", "verbose"}
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
164 verbose = true;
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
165 num_string_inputs += 1;
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
166
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
167 case ""
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
168 num_string_inputs++;
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
169 ## silently ignore empty strings
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
170
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
171 otherwise
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
172 error ("reducepatch: parameter '%s' not supported", arg{1});
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
173
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
174 endswitch
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
175 endfor
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
176
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
177 ## get faces and vertices
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
178 i_fv = 1;
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
179 arg1 = varargin{1};
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
180 if (isstruct (arg1))
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
181 if (all (isfield (arg1, {"vertices", "faces"})))
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
182 vertices = arg1.vertices;
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
183 faces = arg1.faces;
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
184 else
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
185 error (["reducepatch: struct FV must contain the fields ", ...
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
186 "'vertices' and 'faces'."]);
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
187 endif
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
188 elseif (isscalar (arg1))
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
189 patch_handle = arg1;
24423
1d52db450db4 Change ishandle to return true for Java objects for Matlab compatibility.
Rik <rik@octave.org>
parents: 24188
diff changeset
190 if (isgraphics (patch_handle, "patch"))
22243
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
191 vertices = get (patch_handle, "Vertices");
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
192 faces = get (patch_handle, "Faces");
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
193 else
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
194 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
195 endif
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
196 elseif (ismatrix (arg1))
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
197 faces = arg1;
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
198 if (nargin - num_string_inputs > 1 && ismatrix (varargin{2}))
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
199 vertices = varargin{2};
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
200 i_fv = 2;
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
201 else
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
202 error (["reducepatch: If first argument is a matrix containing ", ...
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
203 "FACES, second argument must be a matrix containing VERTICES"]);
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
204 endif
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
205 else
26691
f2bb4f2093b9 Fix print_usage() messages in subfunctions (bug #55599).
Rik <rik@octave.org>
parents: 26376
diff changeset
206 print_usage ("reducepatch");
22243
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
207 endif
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
208
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
209 ## get reduction_factor
22295
12f1d273d22a maint: Remove trailing spaces from code.
Rik <rik@octave.org>
parents: 22245
diff changeset
210 if (nargin - num_string_inputs > i_fv)
22243
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
211 reduction_factor = varargin{i_fv + 1};
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
212 if (! isscalar (reduction_factor) || reduction_factor <= 0)
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
213 error ("reducepatch: REDUCTION_FACTOR must be a positive scalar");
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 endif
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
216
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
217 ## check faces and vertices
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
218 if (columns (vertices) != 3)
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
219 error ("reducepatch: VERTICES must be an Mx3 matrix");
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
220 endif
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
221 if (columns (faces) != 3)
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
222 ## FIXME: Convert faces to only triangles if necessary
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
223 error ("reducepatch: Currently patches must consist of triangles only");
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
224 endif
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
225 if (any (mod (faces(:), 1)) || any (faces(:) < 1))
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
226 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
227 endif
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
228 if (max (faces(:)) > rows (vertices))
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
229 error ("reducepatch: not enough VERTICES for given FACES");
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
230 endif
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
231
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
232 ## get max_faces
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
233 num_faces = rows (faces);
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
234 if (reduction_factor < 1)
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
235 max_faces = floor (num_faces * reduction_factor);
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
236 else
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
237 max_faces = reduction_factor;
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
238 endif
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
239
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
240 endfunction
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
241
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
242 ## actual function to reduce number of faces
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
243 function [faces_reduced, vertices_reduced] = ...
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
244 __reducepatch__ (vertices, faces, max_faces, verbose)
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
245
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
246 num_faces = rows (faces);
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
247 faces = sort (faces, 2);
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
248
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
249 ## get all unique edges
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
250 all_edges = sort ([faces(:,1) faces(:,2);
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
251 faces(:,2) faces(:,3);
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
252 faces(:,3) faces(:,1)], 2);
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
253 edges = unique (all_edges, "rows");
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
254 num_edges = rows (edges);
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
255
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
256 ## calculate length of edges
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
257 edge_length = norm (vertices(edges(:,1),:) - vertices(edges(:,2),:), ...
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
258 2, "rows");
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
259
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
260 if (verbose)
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
261 printf ("reducepatch: reducing number of faces");
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
262 ## 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
263 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
264 verbose_counter = 0;
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
265 endif
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
266
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
267 ## reduce number of faces
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
268 clean_finish = true;
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
269 do
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
270 ## find shortest edge
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
271 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
272 if (any (isinf (vertices(edges(i_shortest_edge,:),:))))
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
273 warning (["reducepatch: shortest edge is marked as deleted. ", ...
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
274 "This should never happen."])
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
275 clean_finish = false;
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
276 break;
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
277 endif
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
278
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
279 start_point_idx = edges(i_shortest_edge,1);
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
280 end_point_idx = edges(i_shortest_edge,2);
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
281
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
282 ## collapse the edge to its midpoint
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
283 vertices(start_point_idx,:) = 0.5 * ...
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
284 (vertices(start_point_idx,:) + vertices(end_point_idx,:));
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
285 ## endpoint will be deleted later
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
286
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
287 ## remove collapsed edge info
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
288 edges(i_shortest_edge,:) = [];
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
289 edge_length(i_shortest_edge) = [];
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
290
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
291 ## unite collapsed edges of neighboring faces to one edge
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
292 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
293 any (faces == end_point_idx, 2);
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
294 edges_of_collapsed_faces = faces(faces_with_collapsed_edge,:);
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
295 ## get other vertex of collapsed faces
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
296 third_vertices = ...
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
297 edges_of_collapsed_faces(...
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
298 faces(faces_with_collapsed_edge,:) != start_point_idx & ...
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
299 faces(faces_with_collapsed_edge,:) != end_point_idx);
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
300 if (! isempty (third_vertices))
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
301 ## 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
302 ## (keep the one with start_point)
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
303 edges_to_delete = any (edges == end_point_idx, 2) & ...
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
304 any (any (bsxfun (@eq, edges, ...
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
305 reshape (third_vertices, 1, 1, [])), 3), 2);
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
306 edges(edges_to_delete,:) = [];
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
307 edge_length(edges_to_delete) = [];
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
308 endif
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
309
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
310 ## mark the faces that collapsed for later removal
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
311 faces(faces_with_collapsed_edge,:) = Inf;
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
312
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
313 ## update the lengths of the moved edges
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
314 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
315 edge_length(edges_with_moved_point) = ...
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
316 norm (vertices(edges(edges_with_moved_point,1),:) - ...
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
317 vertices(edges(edges_with_moved_point,2),:), 2, "rows");
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
318
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
319 ## 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
320 if (start_point_idx != end_point_idx)
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
321 edges(edges == end_point_idx) = start_point_idx;
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
322 faces(faces == end_point_idx) = start_point_idx;
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
323 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
324 endif
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
325
27956
2310164737b3 fix many spelling errors (bug #57613)
John W. Eaton <jwe@octave.org>
parents: 26376
diff changeset
326 ## 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
327 if (verbose && ++verbose_counter > verbose_stepwidth)
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
328 printf (".");
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
329 verbose_counter = 0;
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
330 endif
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
331
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
332 until (max_faces > num_faces - sum (isinf (faces(:,1))))
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
333
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
334 if (verbose)
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
335 printf ("\n");
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
336 endif
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
337
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
338 if (! clean_finish)
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
339 ## FIXME: What should be done in this case?
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
340 ## continue anyway?
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
341 endif
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
342
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
343 ## finally, remove vertices and faces
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
344 removed_vertices = isinf (vertices(:,1));
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
345 vertices_reduced = vertices(! removed_vertices,:);
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
346
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
347 faces_reduced = faces(! isinf (faces(:,1)),:);
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
348
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
349 ## renumber vertices in faces with subsequent numbers
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
350 vertex_renum = ones (rows (vertices), 1);
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
351 vertex_renum(removed_vertices) = 0;
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
352 vertex_renum = cumsum (vertex_renum);
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
353 faces_reduced = vertex_renum(faces_reduced);
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
354
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
355 endfunction
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
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
358 %!demo
24188
1253132e2173 Use "clf;" at beginning of all plot demos.
Rik <rik@octave.org>
parents: 23220
diff changeset
359 %! clf;
22243
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
360 %! [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
361 %! val = x.^2 + y.^2 + z.^2;
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
362 %! fv = isosurface (x, y, z, val, 1);
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
363 %! ax1 = subplot (1, 2, 1);
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
364 %! patch (fv, "FaceColor", "g");
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
365 %! view (3); axis equal;
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
366 %! title ("Sphere with all faces");
28912
0de38a6ef693 maint: Use Octave convention of space after function name in scripts dir.
Rik <rik@octave.org>
parents: 28896
diff changeset
367 %! ax2 = subplot (1, 2, 2);
22243
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
368 %! patch (reducepatch (fv, 72), "FaceColor", "g");
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
369 %! view (3); axis equal;
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
370 %! title ("Sphere with reduced number of faces");
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
371 %! linkprop ([ax1, ax2], {"CameraPosition", "CameraUpVector"});
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
372
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
373 %!shared faces, vertices, fv, num_faces
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
374 %! [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
375 %! val = x.^2 + y.^2 + z.^2;
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
376 %! [faces, vertices] = isosurface (x, y, z, val, 1);
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
377 %! fv.faces = faces; fv.vertices = vertices;
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
378 %! num_faces = rows (faces);
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
379
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
380 ## one input (structure), one output
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
381 %!test
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
382 %! fv_reduced = reducepatch (fv);
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
383 %! 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
384 %! assert (size (fv_reduced.faces, 2), 3);
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
385 %! assert (size (fv_reduced.vertices, 2), 3);
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
386
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
387 ## two inputs (faces, vertices), one output
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
388 %!test
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
389 %! fv_reduced = reducepatch (faces, vertices);
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
390 %! 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
391 %! assert (size (fv_reduced.faces, 2), 3);
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
392 %! assert (size (fv_reduced.vertices, 2), 3);
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
393
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
394 ## two inputs (structure, reduction_factor > 1), two outputs
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
395 %!test
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
396 %! [faces_reduced, vertices_reduced] = reducepatch (fv, 20);
30236
628f26e122d9 maint: use rows() or columns() instead of size(__, 1 | 2) for clarity.
Rik <rik@octave.org>
parents: 29359
diff changeset
397 %! assert (rows (faces_reduced), 20, 3);
628f26e122d9 maint: use rows() or columns() instead of size(__, 1 | 2) for clarity.
Rik <rik@octave.org>
parents: 29359
diff changeset
398 %! assert (columns (faces_reduced), 3);
628f26e122d9 maint: use rows() or columns() instead of size(__, 1 | 2) for clarity.
Rik <rik@octave.org>
parents: 29359
diff changeset
399 %! assert (columns (vertices_reduced), 3);
22243
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
400
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
401 ## three inputs (faces, vertices, reduction_factor < 1), two outputs
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
402 %!test
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
403 %! [faces_reduced, vertices_reduced] = reducepatch (faces, vertices, .5);
30236
628f26e122d9 maint: use rows() or columns() instead of size(__, 1 | 2) for clarity.
Rik <rik@octave.org>
parents: 29359
diff changeset
404 %! assert (rows (faces_reduced), num_faces * .5, 3);
628f26e122d9 maint: use rows() or columns() instead of size(__, 1 | 2) for clarity.
Rik <rik@octave.org>
parents: 29359
diff changeset
405 %! assert (columns (faces_reduced), 3);
628f26e122d9 maint: use rows() or columns() instead of size(__, 1 | 2) for clarity.
Rik <rik@octave.org>
parents: 29359
diff changeset
406 %! assert (columns (vertices_reduced), 3);
22243
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
407
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
408 ## 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
409 ## (update patch object in figure)
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
410 %!test
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
411 %! h_fig = figure ("visible", "off");
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
412 %! p = patch (fv);
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
413 %! reducepatch (p, .35, "f");
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
414 %! 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
415 %! assert (size (get (p, "Faces"), 2), 3);
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
416 %! assert (size (get (p, "Vertices"), 2), 3);
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
417 %! close (h_fig);
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
418
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
419 ## three inputs (faces, vertices, reduction_factor > 1) + one empty
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
420 ## string, one output
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
421 %!test
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
422 %! fv_reduced = reducepatch (faces, vertices, 52, "");
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
423 %! assert (size (fv_reduced.faces, 1), 52, 3);
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
424 %! assert (size (fv_reduced.faces, 2), 3);
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
425 %! assert (size (fv_reduced.vertices, 2), 3);
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
426
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
427 ## 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
428 %!test
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
429 %! [faces_reduced, vertices_reduced] = reducepatch (fv, .4, "fast");
30236
628f26e122d9 maint: use rows() or columns() instead of size(__, 1 | 2) for clarity.
Rik <rik@octave.org>
parents: 29359
diff changeset
430 %! assert (rows (faces_reduced), num_faces * .4, 3);
628f26e122d9 maint: use rows() or columns() instead of size(__, 1 | 2) for clarity.
Rik <rik@octave.org>
parents: 29359
diff changeset
431 %! assert (columns (faces_reduced), 3);
628f26e122d9 maint: use rows() or columns() instead of size(__, 1 | 2) for clarity.
Rik <rik@octave.org>
parents: 29359
diff changeset
432 %! assert (columns (vertices_reduced), 3);
22243
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
433
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
434 ## one input (structure) + two (empty) strings, two outputs
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
435 %!test
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
436 %! [faces_reduced, vertices_reduced] = reducepatch (fv, "f", "");
30236
628f26e122d9 maint: use rows() or columns() instead of size(__, 1 | 2) for clarity.
Rik <rik@octave.org>
parents: 29359
diff changeset
437 %! assert (rows (faces_reduced), num_faces * .5, 3);
628f26e122d9 maint: use rows() or columns() instead of size(__, 1 | 2) for clarity.
Rik <rik@octave.org>
parents: 29359
diff changeset
438 %! assert (columns (faces_reduced), 3);
628f26e122d9 maint: use rows() or columns() instead of size(__, 1 | 2) for clarity.
Rik <rik@octave.org>
parents: 29359
diff changeset
439 %! assert (columns (vertices_reduced), 3);
22243
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
440
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
441 ## test for each error
28896
90fea9cc9caa test: Add expected error message <Invalid call> to BIST tests for nargin.
Rik <rik@octave.org>
parents: 27978
diff changeset
442 %!error <Invalid call> reducepatch ()
90fea9cc9caa test: Add expected error message <Invalid call> to BIST tests for nargin.
Rik <rik@octave.org>
parents: 27978
diff changeset
443 %!error <Invalid call> reducepatch (fv, faces, vertices, .5, "f", "v")
22243
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
444 %!error <reducepatch: parameter 'foo' not supported>
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
445 %! fv_reduced = reducepatch (faces, vertices, .7, "foo");
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
446 %!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
447 %! fv_incomplete.faces = faces;
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
448 %! reducepatch (fv_incomplete, .7);
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
449 %!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
450 %!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
451 %!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
452 %!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
453 %!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
454 %!error <reducepatch: Currently patches must consist of triangles only>
30236
628f26e122d9 maint: use rows() or columns() instead of size(__, 1 | 2) for clarity.
Rik <rik@octave.org>
parents: 29359
diff changeset
455 %! faces_new = NaN (rows (faces), 4);
22243
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
456 %! faces_new(:,1:3) = faces;
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
457 %! faces_new(1,4) = 5;
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
458 %! reducepatch (faces_new, vertices);
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
459 %!error <reducepatch: not enough VERTICES for given FACES>
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
460 %! faces_new = faces;
30236
628f26e122d9 maint: use rows() or columns() instead of size(__, 1 | 2) for clarity.
Rik <rik@octave.org>
parents: 29359
diff changeset
461 %! faces_new(1,3) = rows (vertices) + 1;
22243
654de580bdb3 Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff changeset
462 %! reducepatch (faces_new, vertices);