Mercurial > octave
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 |
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); |