Mercurial > octave
annotate scripts/plot/draw/reducepatch.m @ 27919:1891570abac8
update Octave Project Developers copyright for the new year
In files that have the "Octave Project Developers" copyright notice,
update for 2020.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Mon, 06 Jan 2020 22:29:51 -0500 |
parents | b442ec6dda5c |
children | bd51beb6205e |
rev | line source |
---|---|
27919
1891570abac8
update Octave Project Developers copyright for the new year
John W. Eaton <jwe@octave.org>
parents:
27918
diff
changeset
|
1 ## 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
|
2 ## |
b442ec6dda5c
use centralized file for copyright info for individual contributors
John W. Eaton <jwe@octave.org>
parents:
26691
diff
changeset
|
3 ## See the file COPYRIGHT.md in the top-level directory of this distribution |
b442ec6dda5c
use centralized file for copyright info for individual contributors
John W. Eaton <jwe@octave.org>
parents:
26691
diff
changeset
|
4 ## or <https://octave.org/COPYRIGHT.html/>. |
b442ec6dda5c
use centralized file for copyright info for individual contributors
John W. Eaton <jwe@octave.org>
parents:
26691
diff
changeset
|
5 ## |
22243
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
6 ## |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
7 ## This file is part of Octave. |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
8 ## |
24534
194eb4bd202b
maint: Update punctuation for GPL v3 license text.
Rik <rik@octave.org>
parents:
24423
diff
changeset
|
9 ## 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
|
10 ## 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
|
11 ## 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
|
12 ## (at your option) any later version. |
22243
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
13 ## |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
14 ## 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
|
15 ## WITHOUT ANY WARRANTY; without even the implied warranty of |
22755
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22295
diff
changeset
|
16 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
3a2b891d0b33
maint: Standardize Copyright formatting.
Rik <rik@octave.org>
parents:
22295
diff
changeset
|
17 ## GNU General Public License for more details. |
22243
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
18 ## |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
19 ## 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
|
20 ## 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
|
21 ## <https://www.gnu.org/licenses/>. |
22243
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
22 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
23 ## -*- texinfo -*- |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
24 ## @deftypefn {} {@var{reduced_fv} =} reducepatch (@var{fv}) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
25 ## @deftypefnx {} {@var{reduced_fv} =} reducepatch (@var{faces}, @var{vertices}) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
26 ## @deftypefnx {} {@var{reduced_fv} =} reducepatch (@var{patch_handle}) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
27 ## @deftypefnx {} {} reducepatch (@var{patch_handle}) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
28 ## @deftypefnx {} {@var{reduced_fv} =} reducepatch (@dots{}, @var{reduction_factor}) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
29 ## @deftypefnx {} {@var{reduced_fv} =} reducepatch (@dots{}, "fast") |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
30 ## @deftypefnx {} {@var{reduced_fv} =} reducepatch (@dots{}, "verbose") |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
31 ## @deftypefnx {} {[@var{reduced_faces}, @var{reduces_vertices}] =} reducepatch (@dots{}) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
32 ## |
22245
3d287a11ea18
doc: Clarify that reducepatch only works on patches, not surfaces.
Rik <rik@octave.org>
parents:
22243
diff
changeset
|
33 ## 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
|
34 ## the overall shape of the patch. |
22243
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
35 ## |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
36 ## 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
|
37 ## 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
|
38 ## @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
|
39 ## 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
|
40 ## |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
41 ## 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
|
42 ## 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
|
43 ## e.g., here: |
25143
13fd0610480f
doc: Use https whenever possible in @url entries.
Rik <rik@octave.org>
parents:
25054
diff
changeset
|
44 ## @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
|
45 ## |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
46 ## Currently, only patches consisting of triangles are supported. The |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
47 ## resulting patch also consists only of triangles. |
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 ## 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
|
50 ## @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
|
51 ## patch is updated immediately. |
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 the @var{reduction_factor} is omitted, the resulting structure |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
54 ## @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
|
55 ## 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
|
56 ## (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
|
57 ## is determined. |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
58 ## 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
|
59 ## resulting patch has approximately @var{reduction_factor} faces. Depending |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
60 ## 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
|
61 ## 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
|
62 ## many shared vertices are detected. |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
63 ## |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
64 ## 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
|
65 ## 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
|
66 ## skipped by passing the optional string argument @qcode{"fast"}. |
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 ## With the optional string arguments @qcode{"verbose"}, additional status |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
69 ## messages are printed to the command window. |
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 ## 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
|
72 ## |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
73 ## 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
|
74 ## 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
|
75 ## @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
|
76 ## |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
77 ## 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
|
78 ## returned in two separate matrices @var{reduced_faces} and |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
79 ## @var{reduced_vertices}. |
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 ## @seealso{isosurface, isonormals, reducevolume, patch} |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
82 ## @end deftypefn |
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 ## Author: mmuetzel |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
85 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
86 ## FIXME: Convert faces to only triangles if necessary |
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 function varargout = reducepatch (varargin) |
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 if (nargin < 1 || nargin > 5) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
91 print_usage (); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
92 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
93 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
94 [faces, vertices, max_faces, patch_handle, fast, verbose] = ... |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
95 __get_check_reducepatch_args__ (varargin{:}); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
96 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
97 if (verbose) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
98 printf (["reducepatch: before reduction of faces: ", ... |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
99 "%5d faces, %5d vertices\n"], rows (faces), rows (vertices)); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
100 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
101 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
102 if (max_faces >= rows (faces)) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
103 faces_reduced = faces; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
104 vertices_reduced = vertices; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
105 else |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
106 if (! fast) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
107 [faces, vertices] = __unite_shared_vertices__ (faces, vertices); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
108 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
109 if (verbose) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
110 printf (["reducepatch: after detection of shared vertices: ", ... |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
111 "%5d faces, %5d vertices\n"], rows (faces), rows (vertices)); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
112 endif |
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 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
115 [faces_reduced, vertices_reduced] = ... |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
116 __reducepatch__ (vertices, faces, max_faces, verbose); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
117 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
118 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
119 if (verbose) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
120 printf (["reducepatch: after reduction of faces: ", ... |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
121 "%5d faces, %5d vertices\n"], ... |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
122 rows (faces_reduced), rows (vertices_reduced)); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
123 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
124 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
125 ## output |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
126 if (! isempty (patch_handle) && nargout == 0) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
127 ## update patch object |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
128 set (patch_handle, "Faces", faces_reduced, "Vertices", vertices_reduced); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
129 elseif (nargout == 2) # faces, vertices |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
130 varargout{1} = faces_reduced; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
131 varargout{2} = vertices_reduced; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
132 else # fv structure |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
133 varargout{1}.faces = faces_reduced; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
134 varargout{1}.vertices = vertices_reduced; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
135 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
136 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
137 endfunction |
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 ## assign input parameters and check their validity |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
140 function [faces, vertices, max_faces, patch_handle, fast, verbose] = ... |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
141 __get_check_reducepatch_args__ (varargin) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
142 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
143 ## default values |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
144 faces = vertices = max_faces = patch_handle = []; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
145 reduction_factor = 0.5; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
146 fast = verbose = false; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
147 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
148 num_string_inputs = 0; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
149 ## 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
|
150 valid_vals = nargin:-1:nargin-1; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
151 valid_vals(valid_vals < 1) = []; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
152 for arg = varargin(valid_vals) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
153 if (! ischar (arg{1})) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
154 break; # no string arguments at end, exit checking |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
155 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
156 switch (tolower (arg{1})) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
157 case {"f", "fast"} |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
158 fast = true; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
159 num_string_inputs += 1; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
160 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
161 case {"v", "verbose"} |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
162 verbose = true; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
163 num_string_inputs += 1; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
164 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
165 case "" |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
166 num_string_inputs++; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
167 ## silently ignore empty strings |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
168 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
169 otherwise |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
170 error ("reducepatch: parameter '%s' not supported", arg{1}); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
171 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
172 endswitch |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
173 endfor |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
174 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
175 ## get faces and vertices |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
176 i_fv = 1; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
177 arg1 = varargin{1}; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
178 if (isstruct (arg1)) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
179 if (all (isfield (arg1, {"vertices", "faces"}))) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
180 vertices = arg1.vertices; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
181 faces = arg1.faces; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
182 else |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
183 error (["reducepatch: struct FV must contain the fields ", ... |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
184 "'vertices' and 'faces'."]); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
185 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
186 elseif (isscalar (arg1)) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
187 patch_handle = arg1; |
24423
1d52db450db4
Change ishandle to return true for Java objects for Matlab compatibility.
Rik <rik@octave.org>
parents:
24188
diff
changeset
|
188 if (isgraphics (patch_handle, "patch")) |
22243
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
189 vertices = get (patch_handle, "Vertices"); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
190 faces = get (patch_handle, "Faces"); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
191 else |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
192 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
|
193 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
194 elseif (ismatrix (arg1)) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
195 faces = arg1; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
196 if (nargin - num_string_inputs > 1 && ismatrix (varargin{2})) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
197 vertices = varargin{2}; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
198 i_fv = 2; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
199 else |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
200 error (["reducepatch: If first argument is a matrix containing ", ... |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
201 "FACES, second argument must be a matrix containing VERTICES"]); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
202 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
203 else |
26691
f2bb4f2093b9
Fix print_usage() messages in subfunctions (bug #55599).
Rik <rik@octave.org>
parents:
26376
diff
changeset
|
204 print_usage ("reducepatch"); |
22243
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
205 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
206 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
207 ## get reduction_factor |
22295
12f1d273d22a
maint: Remove trailing spaces from code.
Rik <rik@octave.org>
parents:
22245
diff
changeset
|
208 if (nargin - num_string_inputs > i_fv) |
22243
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
209 reduction_factor = varargin{i_fv + 1}; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
210 if (! isscalar (reduction_factor) || reduction_factor <= 0) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
211 error ("reducepatch: REDUCTION_FACTOR must be a positive scalar"); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
212 endif |
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 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
215 ## check faces and vertices |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
216 if (columns (vertices) != 3) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
217 error ("reducepatch: VERTICES must be an Mx3 matrix"); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
218 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
219 if (columns (faces) != 3) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
220 ## FIXME: Convert faces to only triangles if necessary |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
221 error ("reducepatch: Currently patches must consist of triangles only"); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
222 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
223 if (any (mod (faces(:), 1)) || any (faces(:) < 1)) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
224 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
|
225 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
226 if (max (faces(:)) > rows (vertices)) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
227 error ("reducepatch: not enough VERTICES for given FACES"); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
228 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
229 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
230 ## get max_faces |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
231 num_faces = rows (faces); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
232 if (reduction_factor < 1) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
233 max_faces = floor (num_faces * reduction_factor); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
234 else |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
235 max_faces = reduction_factor; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
236 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
237 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
238 endfunction |
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 ## actual function to reduce number of faces |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
241 function [faces_reduced, vertices_reduced] = ... |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
242 __reducepatch__ (vertices, faces, max_faces, verbose) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
243 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
244 num_faces = rows (faces); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
245 faces = sort (faces, 2); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
246 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
247 ## get all unique edges |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
248 all_edges = sort ([faces(:,1) faces(:,2); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
249 faces(:,2) faces(:,3); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
250 faces(:,3) faces(:,1)], 2); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
251 edges = unique (all_edges, "rows"); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
252 num_edges = rows (edges); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
253 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
254 ## calculate length of edges |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
255 edge_length = norm (vertices(edges(:,1),:) - vertices(edges(:,2),:), ... |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
256 2, "rows"); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
257 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
258 if (verbose) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
259 printf ("reducepatch: reducing number of faces"); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
260 ## 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
|
261 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
|
262 verbose_counter = 0; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
263 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
264 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
265 ## reduce number of faces |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
266 clean_finish = true; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
267 do |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
268 ## find shortest edge |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
269 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
|
270 if (any (isinf (vertices(edges(i_shortest_edge,:),:)))) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
271 warning (["reducepatch: shortest edge is marked as deleted. ", ... |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
272 "This should never happen."]) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
273 clean_finish = false; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
274 break; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
275 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
276 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
277 start_point_idx = edges(i_shortest_edge,1); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
278 end_point_idx = edges(i_shortest_edge,2); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
279 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
280 ## collapse the edge to its midpoint |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
281 vertices(start_point_idx,:) = 0.5 * ... |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
282 (vertices(start_point_idx,:) + vertices(end_point_idx,:)); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
283 ## endpoint will be deleted later |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
284 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
285 ## remove collapsed edge info |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
286 edges(i_shortest_edge,:) = []; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
287 edge_length(i_shortest_edge) = []; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
288 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
289 ## unite collapsed edges of neighboring faces to one edge |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
290 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
|
291 any (faces == end_point_idx, 2); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
292 edges_of_collapsed_faces = faces(faces_with_collapsed_edge,:); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
293 ## get other vertex of collapsed faces |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
294 third_vertices = ... |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
295 edges_of_collapsed_faces(... |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
296 faces(faces_with_collapsed_edge,:) != start_point_idx & ... |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
297 faces(faces_with_collapsed_edge,:) != end_point_idx); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
298 if (! isempty (third_vertices)) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
299 ## 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
|
300 ## (keep the one with start_point) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
301 edges_to_delete = any (edges == end_point_idx, 2) & ... |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
302 any (any (bsxfun (@eq, edges, ... |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
303 reshape (third_vertices, 1, 1, [])), 3), 2); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
304 edges(edges_to_delete,:) = []; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
305 edge_length(edges_to_delete) = []; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
306 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
307 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
308 ## mark the faces that collapsed for later removal |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
309 faces(faces_with_collapsed_edge,:) = Inf; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
310 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
311 ## update the lengths of the moved edges |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
312 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
|
313 edge_length(edges_with_moved_point) = ... |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
314 norm (vertices(edges(edges_with_moved_point,1),:) - ... |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
315 vertices(edges(edges_with_moved_point,2),:), 2, "rows"); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
316 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
317 ## 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
|
318 if (start_point_idx != end_point_idx) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
319 edges(edges == end_point_idx) = start_point_idx; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
320 faces(faces == end_point_idx) = start_point_idx; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
321 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
|
322 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
323 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
324 ## Pretty print a row of dots while performing calulation |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
325 if (verbose && ++verbose_counter > verbose_stepwidth) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
326 printf ("."); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
327 verbose_counter = 0; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
328 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
329 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
330 until (max_faces > num_faces - sum (isinf (faces(:,1)))) |
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 if (verbose) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
333 printf ("\n"); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
334 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
335 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
336 if (! clean_finish) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
337 ## FIXME: What should be done in this case? |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
338 ## continue anyway? |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
339 endif |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
340 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
341 ## finally, remove vertices and faces |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
342 removed_vertices = isinf (vertices(:,1)); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
343 vertices_reduced = vertices(! removed_vertices,:); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
344 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
345 faces_reduced = faces(! isinf (faces(:,1)),:); |
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 ## renumber vertices in faces with subsequent numbers |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
348 vertex_renum = ones (rows (vertices), 1); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
349 vertex_renum(removed_vertices) = 0; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
350 vertex_renum = cumsum (vertex_renum); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
351 faces_reduced = vertex_renum(faces_reduced); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
352 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
353 endfunction |
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 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
356 %!demo |
24188
1253132e2173
Use "clf;" at beginning of all plot demos.
Rik <rik@octave.org>
parents:
23220
diff
changeset
|
357 %! clf; |
22243
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
358 %! [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
|
359 %! val = x.^2 + y.^2 + z.^2; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
360 %! fv = isosurface (x, y, z, val, 1); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
361 %! ax1 = subplot (1, 2, 1); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
362 %! patch (fv, "FaceColor", "g"); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
363 %! view (3); axis equal; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
364 %! title ("Sphere with all faces"); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
365 %! ax2 = subplot(1, 2, 2); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
366 %! patch (reducepatch (fv, 72), "FaceColor", "g"); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
367 %! view (3); axis equal; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
368 %! title ("Sphere with reduced number of faces"); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
369 %! linkprop ([ax1, ax2], {"CameraPosition", "CameraUpVector"}); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
370 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
371 %!shared faces, vertices, fv, num_faces |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
372 %! [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
|
373 %! val = x.^2 + y.^2 + z.^2; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
374 %! [faces, vertices] = isosurface (x, y, z, val, 1); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
375 %! fv.faces = faces; fv.vertices = vertices; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
376 %! num_faces = rows (faces); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
377 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
378 ## one input (structure), one output |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
379 %!test |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
380 %! fv_reduced = reducepatch (fv); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
381 %! 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
|
382 %! assert (size (fv_reduced.faces, 2), 3); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
383 %! assert (size (fv_reduced.vertices, 2), 3); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
384 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
385 ## two inputs (faces, vertices), one output |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
386 %!test |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
387 %! fv_reduced = reducepatch (faces, vertices); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
388 %! 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
|
389 %! assert (size (fv_reduced.faces, 2), 3); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
390 %! assert (size (fv_reduced.vertices, 2), 3); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
391 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
392 ## two inputs (structure, reduction_factor > 1), two outputs |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
393 %!test |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
394 %! [faces_reduced, vertices_reduced] = reducepatch (fv, 20); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
395 %! assert (size (faces_reduced, 1), 20, 3); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
396 %! assert (size (faces_reduced, 2), 3); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
397 %! assert (size (vertices_reduced, 2), 3); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
398 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
399 ## three inputs (faces, vertices, reduction_factor < 1), two outputs |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
400 %!test |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
401 %! [faces_reduced, vertices_reduced] = reducepatch (faces, vertices, .5); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
402 %! assert (size (faces_reduced, 1), num_faces * .5, 3); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
403 %! assert (size (faces_reduced, 2), 3); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
404 %! assert (size (vertices_reduced, 2), 3); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
405 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
406 ## 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
|
407 ## (update patch object in figure) |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
408 %!test |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
409 %! h_fig = figure ("visible", "off"); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
410 %! p = patch (fv); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
411 %! reducepatch (p, .35, "f"); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
412 %! 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
|
413 %! assert (size (get (p, "Faces"), 2), 3); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
414 %! assert (size (get (p, "Vertices"), 2), 3); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
415 %! close (h_fig); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
416 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
417 ## three inputs (faces, vertices, reduction_factor > 1) + one empty |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
418 ## string, one output |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
419 %!test |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
420 %! fv_reduced = reducepatch (faces, vertices, 52, ""); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
421 %! assert (size (fv_reduced.faces, 1), 52, 3); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
422 %! assert (size (fv_reduced.faces, 2), 3); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
423 %! assert (size (fv_reduced.vertices, 2), 3); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
424 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
425 ## 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
|
426 %!test |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
427 %! [faces_reduced, vertices_reduced] = reducepatch (fv, .4, "fast"); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
428 %! assert (size (faces_reduced, 1), num_faces * .4, 3); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
429 %! assert (size (faces_reduced, 2), 3); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
430 %! assert (size (vertices_reduced, 2), 3); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
431 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
432 ## one input (structure) + two (empty) strings, two outputs |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
433 %!test |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
434 %! [faces_reduced, vertices_reduced] = reducepatch (fv, "f", ""); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
435 %! assert (size (faces_reduced, 1), num_faces * .5, 3); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
436 %! assert (size (faces_reduced, 2), 3); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
437 %! assert (size (vertices_reduced, 2), 3); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
438 |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
439 ## test for each error |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
440 %!error reducepatch () |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
441 %!error reducepatch (fv, faces, vertices, .5, "f", "v") |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
442 %!error <reducepatch: parameter 'foo' not supported> |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
443 %! fv_reduced = reducepatch (faces, vertices, .7, "foo"); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
444 %!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
|
445 %! fv_incomplete.faces = faces; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
446 %! reducepatch (fv_incomplete, .7); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
447 %!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
|
448 %!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
|
449 %!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
|
450 %!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
|
451 %!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
|
452 %!error <reducepatch: Currently patches must consist of triangles only> |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
453 %! faces_new = NaN (size (faces, 1), 4); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
454 %! faces_new(:,1:3) = faces; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
455 %! faces_new(1,4) = 5; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
456 %! reducepatch (faces_new, vertices); |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
457 %!error <reducepatch: not enough VERTICES for given FACES> |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
458 %! faces_new = faces; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
459 %! faces_new(1,3) = size (vertices, 1) + 1; |
654de580bdb3
Add function "reducepatch" (patch #8912)
Markus Muetzel <markus.muetzel@gmx.de>
parents:
diff
changeset
|
460 %! reducepatch (faces_new, vertices); |