BRL-CAD
Loading...
Searching...
No Matches
arb8.h
Go to the documentation of this file.
1/* A R B 8 . H
2 * BRL-CAD
3 *
4 * Copyright (c) 1993-2025 United States Government as represented by
5 * the U.S. Army Research Laboratory.
6 *
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public License
9 * version 2.1 as published by the Free Software Foundation.
10 *
11 * This library is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this file; see the file named COPYING for more
18 * information.
19 */
20/** @addtogroup rt_arb */
21/** @{ */
22/** @file rt/primitives/arb8.h
23 *
24 * @brief
25 * Editing operations for arb primitives.
26 *
27 */
28
29#ifndef RT_PRIMITIVES_ARB8_H
30#define RT_PRIMITIVES_ARB8_H
31
32#include "common.h"
33#include "vmath.h"
34#include "bn/tol.h"
35#include "rt/defines.h"
36#include "rt/db_instance.h"
37#include "rt/db_internal.h"
38#include "rt/edit.h"
39#include "rt/wdb.h"
40
41
42/**
43 * The storage for the "specific" ARB types is :
44 *
45 * ARB4 0 1 2 0 3 3 3 3
46 * ARB5 0 1 2 3 4 4 4 4
47 * ARB6 0 1 2 3 4 4 5 5
48 * ARB7 0 1 2 3 4 5 6 4
49 * ARB8 0 1 2 3 4 5 6 7
50 */
51
52/*
53 * ARB6 0 1 2 3 4 5 5 4
54 */
55
56/**
57 * Another summary of how the vertices of ARBs are stored:
58 *
59 * Vertices: 1 2 3 4 5 6 7 8
60 * Location----------------------------------------------------------------
61 * ARB8 0 1 2 3 4 5 6 7
62 * ARB7 0 1 2 3 4, 7 5 6
63 * ARB6 0 1 2 3 4, 5 6, 7
64 * ARB5 0 1 2 3 4, 5, 6, 7
65 * ARB4 0, 3 1 2 4, 5, 6, 7
66 */
67
68
70
71/**
72 * face definitions for each arb type
73 *
74 * row 1: ARB4
75 * row 2: ARB5
76 * row 3: ARB6
77 * row 4: ARB7
78 * row 5: ARB8
79 *
80 * To use this array, define it as follows:
81 *
82 * const int arb_faces[5][24] = rt_arb_faces;
83 *
84 */
85#define rt_arb_faces { \
86 {0,1,2,3, 0,1,4,5, 1,2,4,5, 0,2,4,5, -1,-1,-1,-1, -1,-1,-1,-1}, \
87 {0,1,2,3, 4,0,1,5, 4,1,2,5, 4,2,3,5, 4,3,0,5, -1,-1,-1,-1}, \
88 {0,1,2,3, 1,2,6,4, 0,4,6,3, 4,1,0,5, 6,2,3,7, -1,-1,-1,-1}, \
89 {0,1,2,3, 4,5,6,7, 0,3,4,7, 1,2,6,5, 0,1,5,4, 3,2,6,4}, \
90 {0,1,2,3, 4,5,6,7, 0,4,7,3, 1,2,6,5, 0,1,5,4, 3,2,6,7}, \
91}
92
93/* The following arb editing arrays generally contain the following:
94 *
95 * location comments
96 *-------------------------------------------------------------------
97 * 0,1 edge end points
98 * 2,3 bounding planes 1 and 2
99 * 4, 5,6,7 plane 1 to recalculate, using next 3 points
100 * 8, 9,10,11 plane 2 to recalculate, using next 3 points
101 * 12, 13,14,15 plane 3 to recalculate, using next 3 points
102 * 16,17 points (vertices) to recalculate
103 *
104 * Each line is repeated for each edge (or point) to move.
105 * See g_arb.c for more details.
106 */
107
108/**
109 * edit array for arb8's
110 *
111 * row 1: edge 12
112 * row 2: edge 23
113 * row 3: edge 34
114 * row 4: edge 14
115 * row 5: edge 15
116 * row 6: edge 26
117 * row 7: edge 56
118 * row 8: edge 67
119 * row 9: edge 78
120 * row 10: edge 58
121 * row 11: edge 37
122 * row 12: edge 48
123 *
124 * To use this array, define it as follows:
125 *
126 * const short earb8[12][18] = earb8_edit_array;
127 */
128#define earb8_edit_array { \
129 {0,1, 2,3, 0,0,1,2, 4,0,1,4, -1,0,0,0, 3,5}, \
130 {1,2, 4,5, 0,0,1,2, 3,1,2,5, -1,0,0,0, 3,6}, \
131 {2,3, 3,2, 0,0,2,3, 5,2,3,6, -1,0,0,0, 1,7}, \
132 {0,3, 4,5, 0,0,1,3, 2,0,3,4, -1,0,0,0, 2,7}, \
133 {0,4, 0,1, 2,0,4,3, 4,0,1,4, -1,0,0,0, 7,5}, \
134 {1,5, 0,1, 4,0,1,5, 3,1,2,5, -1,0,0,0, 4,6}, \
135 {4,5, 2,3, 4,0,5,4, 1,4,5,6, -1,0,0,0, 1,7}, \
136 {5,6, 4,5, 3,1,5,6, 1,4,5,6, -1,0,0,0, 2,7}, \
137 {6,7, 3,2, 5,2,7,6, 1,4,6,7, -1,0,0,0, 3,4}, \
138 {4,7, 4,5, 2,0,7,4, 1,4,5,7, -1,0,0,0, 3,6}, \
139 {2,6, 0,1, 3,1,2,6, 5,2,3,6, -1,0,0,0, 5,7}, \
140 {3,7, 0,1, 2,0,3,7, 5,2,3,7, -1,0,0,0, 4,6}, \
141}
142
143/**
144 * edge/vertex mapping for arb8's
145 *
146 * row 1: edge 12
147 * row 2: edge 23
148 * row 3: edge 34
149 * row 4: edge 14
150 * row 5: edge 15
151 * row 6: edge 26
152 * row 7: edge 56
153 * row 8: edge 67
154 * row 9: edge 78
155 * row 10: edge 58
156 * row 11: edge 37
157 * row 12: edge 48
158 *
159 * To use this mapping , define it as follows:
160 * const short arb8_evm[12][2] = arb8_edge_vertex_mapping;
161 */
162#define arb8_edge_vertex_mapping { \
163 {0,1}, \
164 {1,2}, \
165 {2,3}, \
166 {0,3}, \
167 {0,4}, \
168 {1,5}, \
169 {4,5}, \
170 {5,6}, \
171 {6,7}, \
172 {4,7}, \
173 {2,6}, \
174 {3,7}, \
175}
176
177/**
178 * edit array for arb7's
179
180 * row 1: edge 12
181 * row 2: edge 23
182 * row 3: edge 34
183 * row 4: edge 41
184 * row 5: edge 15
185 * row 6: edge 26
186 * row 7: edge 56
187 * row 8: edge 67
188 * row 9: edge 37
189 * row 10: edge 57
190 * row 11: edge 45
191 * row 12: point 5
192 *
193 * To use this array, define it as follows:
194 *
195 * const short earb7[12][18] = earb7_edit_array;
196 */
197#define earb7_edit_array { \
198 {0,1, 2,3, 0,0,1,2, 4,0,1,4, -1,0,0,0, 3,5}, \
199 {1,2, 4,5, 0,0,1,2, 3,1,2,5, -1,0,0,0, 3,6}, \
200 {2,3, 3,2, 0,0,2,3, 5,2,3,6, -1,0,0,0, 1,4}, \
201 {0,3, 4,5, 0,0,1,3, 2,0,3,4, -1,0,0,0, 2,-1}, \
202 {0,4, 0,5, 4,0,5,4, 2,0,3,4, 1,4,5,6, 1,-1}, \
203 {1,5, 0,1, 4,0,1,5, 3,1,2,5, -1,0,0,0, 4,6}, \
204 {4,5, 5,3, 2,0,3,4, 4,0,5,4, 1,4,5,6, 1,-1}, \
205 {5,6, 4,5, 3,1,6,5, 1,4,5,6, -1,0,0,0, 2, -1}, \
206 {2,6, 0,1, 5,2,3,6, 3,1,2,6, -1,0,0,0, 4,5}, \
207 {4,6, 4,3, 2,0,3,4, 5,3,4,6, 1,4,5,6, 2,-1}, \
208 {3,4, 0,1, 4,0,1,4, 2,0,3,4, 5,2,3,4, 5,6}, \
209 {-1,-1, -1,-1, 5,2,3,4, 4,0,1,4, 8,2,1,-1, 6,5}, \
210}
211
212/**
213 * edge/vertex mapping for arb7's
214 *
215 * row 1: edge 12
216 * row 2: edge 23
217 * row 3: edge 34
218 * row 4: edge 41
219 * row 5: edge 15
220 * row 6: edge 26
221 * row 7: edge 56
222 * row 8: edge 67
223 * row 9: edge 37
224 * row 10: edge 57
225 * row 11: edge 45
226 * row 12: point 5
227 *
228 * To use this mapping , define it as follows:
229 * const short arb7_evm[12][2] = arb7_edge_vertex_mapping;
230 */
231#define arb7_edge_vertex_mapping { \
232 {0,1}, \
233 {1,2}, \
234 {2,3}, \
235 {0,3}, \
236 {0,4}, \
237 {1,5}, \
238 {4,5}, \
239 {5,6}, \
240 {2,6}, \
241 {4,6}, \
242 {3,4}, \
243 {4,4}, \
244}
245
246/**
247 * edit array for arb6's
248 *
249 * row 1: edge 12
250 * row 2: edge 23
251 * row 3: edge 34
252 * row 4: edge 14
253 * row 5: edge 15
254 * row 6: edge 25
255 * row 7: edge 36
256 * row 8: edge 46
257 * row 9: point 5
258 * row 10: point 6
259 *
260 * To use this array, define it as follows:
261 *
262 * const short earb6[10][18] = earb6_edit_array;
263 */
264#define earb6_edit_array { \
265 {0,1, 2,1, 3,0,1,4, 0,0,1,2, -1,0,0,0, 3,-1}, \
266 {1,2, 3,4, 1,1,2,5, 0,0,1,2, -1,0,0,0, 3,4}, \
267 {2,3, 1,2, 4,2,3,5, 0,0,2,3, -1,0,0,0, 1,-1}, \
268 {0,3, 3,4, 2,0,3,5, 0,0,1,3, -1,0,0,0, 4,2}, \
269 {0,4, 0,1, 3,0,1,4, 2,0,3,4, -1,0,0,0, 6,-1}, \
270 {1,4, 0,2, 3,0,1,4, 1,1,2,4, -1,0,0,0, 6,-1}, \
271 {2,6, 0,2, 4,6,2,3, 1,1,2,6, -1,0,0,0, 4,-1}, \
272 {3,6, 0,1, 4,6,2,3, 2,0,3,6, -1,0,0,0, 4,-1}, \
273 {-1,-1, -1,-1, 2,0,3,4, 1,1,2,4, 3,0,1,4, 6,-1}, \
274 {-1,-1, -1,-1, 2,0,3,6, 1,1,2,6, 4,2,3,6, 4,-1}, \
275}
276
277/**
278 * edge/vertex mapping for arb6's
279 *
280 * row 1: edge 12
281 * row 2: edge 23
282 * row 3: edge 34
283 * row 4: edge 14
284 * row 5: edge 15
285 * row 6: edge 25
286 * row 7: edge 36
287 * row 8: edge 46
288 * row 9: point 5
289 * row 10: point 6
290 *
291 * To use this mapping , define it as follows:
292 *
293 * const short arb6_evm[10][2] = arb6_edge_vertex_mapping;
294 */
295#define arb6_edge_vertex_mapping { \
296 {0,1}, \
297 {1,2}, \
298 {2,3}, \
299 {0,3}, \
300 {0,4}, \
301 {1,4}, \
302 {2,5}, \
303 {3,5}, \
304 {4,4}, \
305 {7,7}, \
306}
307
308/**
309 * edit array for arb5's
310 *
311 * row 1: edge 12
312 * row 2: edge 23
313 * row 3: edge 34
314 * row 4: edge 14
315 * row 5: edge 15
316 * row 6: edge 25
317 * row 7: edge 35
318 * row 8: edge 45
319 * row 9: point 5
320 *
321 * To use this array, define it as follows:
322 *
323 * const short earb5[9][18] = earb5_edit_array;
324 */
325#define earb5_edit_array { \
326 {0,1, 4,2, 0,0,1,2, 1,0,1,4, -1,0,0,0, 3,-1}, \
327 {1,2, 1,3, 0,0,1,2, 2,1,2,4, -1,0,0,0, 3,-1}, \
328 {2,3, 2,4, 0,0,2,3, 3,2,3,4, -1,0,0,0, 1,-1}, \
329 {0,3, 1,3, 0,0,1,3, 4,0,3,4, -1,0,0,0, 2,-1}, \
330 {0,4, 0,2, 9,0,0,0, 9,0,0,0, 9,0,0,0, -1,-1}, \
331 {1,4, 0,3, 9,0,0,0, 9,0,0,0, 9,0,0,0, -1,-1}, \
332 {2,4, 0,4, 9,0,0,0, 9,0,0,0, 9,0,0,0, -1,-1}, \
333 {3,4, 0,1, 9,0,0,0, 9,0,0,0, 9,0,0,0, -1,-1}, \
334 {-1,-1, -1,-1, 9,0,0,0, 9,0,0,0, 9,0,0,0, -1,-1}, \
335}
336
337/**
338 * edge/vertex mapping for arb5's
339 *
340 * row 1: edge 12
341 * row 2: edge 23
342 * row 3: edge 34
343 * row 4: edge 14
344 * row 5: edge 15
345 * row 6: edge 25
346 * row 7: edge 35
347 * row 8: edge 45
348 * row 9: point 5
349 *
350 * To use this mapping , define it as follows:
351 *
352 * const short arb5_evm[9][2] = arb5_edge_vertex_mapping;
353 */
354#define arb5_edge_vertex_mapping { \
355 {0,1}, \
356 {1,2}, \
357 {2,3}, \
358 {0,3}, \
359 {0,4}, \
360 {1,4}, \
361 {2,4}, \
362 {3,4}, \
363 {4,4}, \
364}
365
366/**
367 * edit array for arb4's
368 *
369 * row 1: point 1
370 * row 2: point 2
371 * row 3: point 3
372 * row 4: dummy
373 * row 5: point 4
374 *
375 * To use this array, define it as follows:
376 *
377 * const short earb4[5][18] = earb4_edit_array;
378 */
379#define earb4_edit_array { \
380 {-1,-1, -1,-1, 9,0,0,0, 9,0,0,0, 9,0,0,0, -1,-1}, \
381 {-1,-1, -1,-1, 9,0,0,0, 9,0,0,0, 9,0,0,0, -1,-1}, \
382 {-1,-1, -1,-1, 9,0,0,0, 9,0,0,0, 9,0,0,0, -1,-1}, \
383 {-1,-1, -1,-1, 9,0,0,0, 9,0,0,0, 9,0,0,0, -1,-1}, \
384 {-1,-1, -1,-1, 9,0,0,0, 9,0,0,0, 9,0,0,0, -1,-1}, \
385}
386
387/**
388 * edge/vertex mapping for arb4's
389 *
390 * row 1: point 1
391 * row 2: point 2
392 * row 3: point 3
393 * row 4: dummy
394 * row 5: point 4
395 *
396 * To use this mapping , define it as follows:
397 *
398 * const short arb4_evm[5][2] = arb4_edge_vertex_mapping;
399 */
400#define arb4_edge_vertex_mapping { \
401 {0,0}, \
402 {1,1}, \
403 {2,2}, \
404 {3,3}, \
405 {4,4}, \
406}
407
409 fastf_t es_peqn[7][4]; /* ARBs defining plane equations */
411 short int fixv; /* used in ECMD_ARB_ROTATE_FACE, f_eqn(): fixed vertex */
413};
414
415
416/**
417 * EXT4TO6(): extrudes face pt1 pt2 pt3 of an ARB4 "distance"
418 * to produce ARB6
419 */
420RT_EXPORT extern void
421ext4to6(int pt1, int pt2, int pt3, struct rt_arb_internal *arb, fastf_t peqn[7][4]);
422
423
424/* MV_EDGE: Moves an arb edge (end1, end2) with bounding planes bp1
425 * and bp2 through point "thru". The edge has (non-unit) slope "dir".
426 * Note that the fact that the normals here point in rather than out
427 * makes no difference for computing the correct intercepts. After
428 * the intercepts are found, they should be checked against the other
429 * faces to make sure that they are always "inside".
430 */
431RT_EXPORT extern int
433 const vect_t thru,
434 const int bp1, const int bp2,
435 const int end1, const int end2,
436 const vect_t dir,
437 const struct bn_tol *tol,
438 fastf_t peqn[7][4]);
439
440/* Extrude an arb face */
441RT_EXPORT extern int
443 int face, fastf_t dist,
444 const struct bn_tol *tol,
445 fastf_t peqn[7][4]);
446
447
448/* Permute the vertex labels of an ARB
449 *
450 * Minimum and maximum tuple lengths
451 * ------------------------------------------------
452 * Solid # vertices needed # vertices
453 * type to disambiguate in THE face
454 * ------------------------------------------------
455 * ARB4 3 3
456 * ARB5 2 4
457 * ARB6 2 4
458 * ARB7 1 4
459 * ARB8 3 4
460 * ------------------------------------------------
461 */
462RT_EXPORT extern int
463arb_permute(struct rt_arb_internal *arb, const char *encoded_permutation, const struct bn_tol *tol);
464
465
466/* Mirror an arb face about the x, y or z axis */
467RT_EXPORT extern int
468arb_mirror_face_axis(struct rt_arb_internal *arb, fastf_t peqn[7][4], const int face, const char *axis, const struct bn_tol *tol);
469
470/* An ARB edge is moved by finding the direction of the line
471 * containing the edge and the 2 "bounding" planes. The new edge is
472 * found by intersecting the new line location with the bounding
473 * planes. The two "new" planes thus defined are calculated and the
474 * affected points are calculated by intersecting planes. This keeps
475 * ALL faces planar.
476 */
477RT_EXPORT extern int
478arb_edit(struct rt_arb_internal *arb, fastf_t peqn[7][4], int edge, int newedge, vect_t pos_model, const struct bn_tol *tol);
479
480
481
482RT_EXPORT extern const short int rt_arb_vertices[5][24];
483
484
485/* arb8.c */
486
487/**
488 * determines COMGEOM arb types from GED general arbs
489 *
490 * Inputs -
491 *
492 * Returns number of distinct edge vectors (number of entries in uvec array)
493 *
494 * Implicit returns -
495 * *cgtype - Comgeom type (number range 4..8; ARB4 .. ARB8).
496 * uvec[8] - indices of unique vertices (return value is the number of valid entries)
497 * svec[11] - Entries [0] and [1] are special (they are the counts of duplicates)
498 * entries 2-10 are 2 lists of duplicate vertices
499 * entry[0] gives length of first list (starts at entry[2])
500 * entry[1] gives length of second list (starts at entry[2+entry[0]])
501 */
503 int *cgtype,
504 struct rt_arb_internal *arb,
505 const struct bn_tol *tol,
506 int *uvec, /* array of indexes to unique points in arb->pt[] */
507 int *svec); /* array of indexes to like points in arb->pt[] */
508
509
510/**
511 * Given an ARB in internal form, return its specific ARB type.
512 *
513 * Set tol.dist = 0.0001 to obtain past behavior.
514 *
515 * Returns -
516 * 0 Error in input ARB
517 * 4 ARB4
518 * 5 ARB5
519 * 6 ARB6
520 * 7 ARB7
521 * 8 ARB8
522 *
523 * Implicit return -
524 * rt_arb_internal pt[] array reorganized into GIFT "standard" order.
525 */
527 const struct bn_tol *tol);
528
529
530/**
531 * Find the center point for the arb in the rt_db_internal structure,
532 * and return it as a point_t.
533 */
535 const struct rt_db_internal *ip);
536
537
538/**
539 * Takes the planes[] array and intersects the planes to find the
540 * vertices of a GENARB8. The vertices are stored into arb->pt[].
541 * This is an analog of rt_arb_calc_planes().
542 */
543RT_EXPORT extern int rt_arb_calc_points(struct rt_arb_internal *arb, int cgtype, const plane_t planes[6], const struct bn_tol *tol); /* needs wdb.h for arg list */
544
545
547 int cgtype,
548 const struct bn_tol *tol);
549
550
551/**
552 * Finds the intersection point of three faces of an ARB.
553 *
554 * Returns -
555 * 0 success, value is in 'point'
556 * -1 failure
557 */
559 const plane_t planes[6],
560 int type, /* 4..8 */
561 int loc);
562
563
564/**
565 * Calculate the plane (face) equations for an arb output previously
566 * went to es_peqn[i].
567 *
568 * Returns -
569 * -1 Failure
570 * 0 OK
571 *
572 * Note -
573 * This function migrated from mged/edsol.c.
574 */
576 struct rt_arb_internal *arb,
577 int type,
578 plane_t planes[6],
579 const struct bn_tol *tol);
580
581
582/**
583 * Moves an arb edge (end1, end2) with bounding planes bp1 and bp2
584 * through point "thru". The edge has (non-unit) slope "dir". Note
585 * that the fact that the normals here point in rather than out makes
586 * no difference for computing the correct intercepts. After the
587 * intercepts are found, they should be checked against the other
588 * faces to make sure that they are always "inside".
589 *
590 * An ARB edge is moved by finding the direction of the line
591 * containing the edge and the 2 "bounding" planes. The new edge is
592 * found by intersecting the new line location with the bounding
593 * planes. The two "new" planes thus defined are calculated and the
594 * affected points are calculated by intersecting planes. This keeps
595 * ALL faces planar.
596 */
598 struct rt_arb_internal *arb,
599 vect_t thru,
600 int bp1,
601 int bp2,
602 int end1,
603 int end2,
604 const vect_t dir,
605 plane_t planes[6],
606 const struct bn_tol *tol);
607
608
610 struct rt_arb_internal *arb,
611 int arb_type,
612 int edit_type,
613 vect_t pos_model,
614 plane_t planes[6],
615 const struct bn_tol *tol);
616RT_EXPORT extern int rt_arb_find_e_nearest_pt2(int *edge, int *vert1, int *vert2, const struct rt_db_internal *ip, const point_t pt2, const mat_t mat, fastf_t ptol);
617
618
619RT_EXPORT extern int rt_arb_f_eqn(struct rt_edit *s, int argc, const char **argv);
620RT_EXPORT extern int rt_arb_edgedir(struct rt_edit *s, int argc, const char **argv);
621
622
623
624
626
627/** @} */
628#endif /* RT_PRIMITIVES_ARB8_H */
629
630/*
631 * Local Variables:
632 * tab-width: 8
633 * mode: C
634 * indent-tabs-mode: t
635 * c-file-style: "stroustrup"
636 * End:
637 * ex: shiftwidth=4 tabstop=8
638 */
Definition dvec.h:74
Header file for the BRL-CAD common definitions.
int rt_arb_move_edge(struct bu_vls *error_msg_ret, struct rt_arb_internal *arb, vect_t thru, int bp1, int bp2, int end1, int end2, const vect_t dir, plane_t planes[6], const struct bn_tol *tol)
int rt_arb_get_cgtype(int *cgtype, struct rt_arb_internal *arb, const struct bn_tol *tol, int *uvec, int *svec)
int arb_edit(struct rt_arb_internal *arb, fastf_t peqn[7][4], int edge, int newedge, vect_t pos_model, const struct bn_tol *tol)
int arb_mirror_face_axis(struct rt_arb_internal *arb, fastf_t peqn[7][4], const int face, const char *axis, const struct bn_tol *tol)
void rt_arb_centroid(point_t *cent, const struct rt_db_internal *ip)
int rt_arb_3face_intersect(point_t point, const plane_t planes[6], int type, int loc)
int rt_arb_f_eqn(struct rt_edit *s, int argc, const char **argv)
int rt_arb_calc_planes(struct bu_vls *error_msg_ret, struct rt_arb_internal *arb, int type, plane_t planes[6], const struct bn_tol *tol)
void ext4to6(int pt1, int pt2, int pt3, struct rt_arb_internal *arb, fastf_t peqn[7][4])
int rt_arb_calc_points(struct rt_arb_internal *arb, int cgtype, const plane_t planes[6], const struct bn_tol *tol)
int rt_arb_find_e_nearest_pt2(int *edge, int *vert1, int *vert2, const struct rt_db_internal *ip, const point_t pt2, const mat_t mat, fastf_t ptol)
int rt_arb_edit(struct bu_vls *error_msg_ret, struct rt_arb_internal *arb, int arb_type, int edit_type, vect_t pos_model, plane_t planes[6], const struct bn_tol *tol)
int arb_extrude(struct rt_arb_internal *arb, int face, fastf_t dist, const struct bn_tol *tol, fastf_t peqn[7][4])
int rt_arb_check_points(struct rt_arb_internal *arb, int cgtype, const struct bn_tol *tol)
int arb_permute(struct rt_arb_internal *arb, const char *encoded_permutation, const struct bn_tol *tol)
int mv_edge(struct rt_arb_internal *arb, const vect_t thru, const int bp1, const int bp2, const int end1, const int end2, const vect_t dir, const struct bn_tol *tol, fastf_t peqn[7][4])
int rt_arb_std_type(const struct rt_db_internal *ip, const struct bn_tol *tol)
int rt_arb_edgedir(struct rt_edit *s, int argc, const char **argv)
const short int rt_arb_vertices[5][24]
fastf_t vect_t[ELEMENTS_PER_VECT]
3-tuple vector
Definition vmath.h:349
double fastf_t
fastest 64-bit (or larger) floating point type
Definition vmath.h:334
fastf_t mat_t[ELEMENTS_PER_MAT]
4x4 matrix
Definition vmath.h:370
fastf_t plane_t[ELEMENTS_PER_PLANE]
Definition of a plane equation.
Definition vmath.h:397
fastf_t point_t[ELEMENTS_PER_POINT]
3-tuple point
Definition vmath.h:355
Definition tol.h:72
Definition vls.h:53
NMG topological edge.
Definition topology.h:144
NMG topological face.
Definition topology.h:210
int edit_menu
Definition arb8.h:412
int newedge
Definition arb8.h:410
short int fixv
Definition arb8.h:411
fastf_t es_peqn[7][4]
Definition arb8.h:409
fundamental vector, matrix, quaternion math macros