#include "common.h"
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include "machine.h"
#include "vmath.h"
#include "nmg.h"
#include "raytrace.h"
Include dependency graph for nmg_fcut.c:
Go to the source code of this file.
Data Structures | |
struct | nmg_ray_state |
struct | loop_cuts |
struct | nmg_vu_stuff |
struct | nmg_loop_stuff |
struct | state_transitions |
Defines | |
#define | PLOT_BOTH_FACES 1 |
#define | NMG_STATE_ERROR 0 |
#define | NMG_STATE_OUT 1 |
#define | NMG_STATE_ON_L 2 |
#define | NMG_STATE_ON_R 3 |
#define | NMG_STATE_ON_B 4 |
#define | NMG_STATE_ON_N 5 |
#define | NMG_STATE_IN 6 |
#define | NMG_E_ASSESSMENT_LEFT 0 |
#define | NMG_E_ASSESSMENT_RIGHT 1 |
#define | NMG_E_ASSESSMENT_ON_FORW 2 |
#define | NMG_E_ASSESSMENT_ON_REV 3 |
#define | NMG_E_ASSESSMENT_ERROR 4 |
#define | NMG_V_ASSESSMENT_LONE 16 |
#define | NMG_V_ASSESSMENT_ERROR 17 |
#define | NMG_V_COMB(_p, _n) (((_p)<<2)|(_n)) |
#define | NMG_V_ASSESSMENT_PREV(_a) (((_a)>>2)&3) |
#define | NMG_V_ASSESSMENT_NEXT(_a) ((_a)&3) |
#define | NMG_LEFT_LEFT NMG_V_COMB(NMG_E_ASSESSMENT_LEFT,NMG_E_ASSESSMENT_LEFT) |
#define | NMG_LEFT_RIGHT NMG_V_COMB(NMG_E_ASSESSMENT_LEFT,NMG_E_ASSESSMENT_RIGHT) |
#define | NMG_LEFT_ON_FORW NMG_V_COMB(NMG_E_ASSESSMENT_LEFT,NMG_E_ASSESSMENT_ON_FORW) |
#define | NMG_LEFT_ON_REV NMG_V_COMB(NMG_E_ASSESSMENT_LEFT,NMG_E_ASSESSMENT_ON_REV) |
#define | NMG_RIGHT_LEFT NMG_V_COMB(NMG_E_ASSESSMENT_RIGHT,NMG_E_ASSESSMENT_LEFT) |
#define | NMG_RIGHT_RIGHT NMG_V_COMB(NMG_E_ASSESSMENT_RIGHT,NMG_E_ASSESSMENT_RIGHT) |
#define | NMG_RIGHT_ON_FORW NMG_V_COMB(NMG_E_ASSESSMENT_RIGHT,NMG_E_ASSESSMENT_ON_FORW) |
#define | NMG_RIGHT_ON_REV NMG_V_COMB(NMG_E_ASSESSMENT_RIGHT,NMG_E_ASSESSMENT_ON_REV) |
#define | NMG_ON_FORW_LEFT NMG_V_COMB(NMG_E_ASSESSMENT_ON_FORW,NMG_E_ASSESSMENT_LEFT) |
#define | NMG_ON_FORW_RIGHT NMG_V_COMB(NMG_E_ASSESSMENT_ON_FORW,NMG_E_ASSESSMENT_RIGHT) |
#define | NMG_ON_FORW_ON_FORW NMG_V_COMB(NMG_E_ASSESSMENT_ON_FORW,NMG_E_ASSESSMENT_ON_FORW) |
#define | NMG_ON_FORW_ON_REV NMG_V_COMB(NMG_E_ASSESSMENT_ON_FORW,NMG_E_ASSESSMENT_ON_REV) |
#define | NMG_ON_REV_LEFT NMG_V_COMB(NMG_E_ASSESSMENT_ON_REV,NMG_E_ASSESSMENT_LEFT) |
#define | NMG_ON_REV_RIGHT NMG_V_COMB(NMG_E_ASSESSMENT_ON_REV,NMG_E_ASSESSMENT_RIGHT) |
#define | NMG_ON_REV_ON_FORW NMG_V_COMB(NMG_E_ASSESSMENT_ON_REV,NMG_E_ASSESSMENT_ON_FORW) |
#define | NMG_ON_REV_ON_REV NMG_V_COMB(NMG_E_ASSESSMENT_ON_REV,NMG_E_ASSESSMENT_ON_REV) |
#define | NMG_LONE NMG_V_ASSESSMENT_LONE |
#define | NMG_ACTION_ERROR 0 |
#define | NMG_ACTION_NONE 1 |
#define | NMG_ACTION_NONE_OPTIM 2 |
#define | NMG_ACTION_VFY_EXT 3 |
#define | NMG_ACTION_VFY_MULTI 4 |
#define | NMG_ACTION_LONE_V_ESPLIT 5 |
#define | NMG_ACTION_LONE_V_JAUNT 6 |
#define | NMG_ACTION_CUTJOIN 7 |
#define | NMG_RAYSTATE_MAGIC 0x54322345 |
#define | NMG_CK_RAYSTATE(_p) NMG_CKMAG(_p, NMG_RAYSTATE_MAGIC, "nmg_ray_state") |
#define | RADIAN_TWEEK 1.0e-14 |
#define | WEDGE_LEFT 0 |
#define | WEDGE_CROSS 1 |
#define | WEDGE_RIGHT 2 |
#define | WEDGE_ON 3 |
#define | WEDGECLASS2STR(_cl) nmg_wedgeclass_string[(_cl)] |
#define | WEDGE2_TO_STRING(_class2) (nmg_wedge2_string[(_class2)+2]) |
#define | WEDGE2_OVERLAP -2 |
#define | WEDGE2_NO_OVERLAP -1 |
#define | WEDGE2_AB_IN_CD 0 |
#define | WEDGE2_CD_IN_AB 1 |
#define | WEDGE2_IDENTICAL 2 |
#define | WEDGE2_TOUCH_AT_BC 3 |
#define | WEDGE2_TOUCH_AT_DA 4 |
#define | WEDGE_ANG_TOL 0.001 |
#define | ANG_SMASH(_a) |
#define | A_LT_B {ret = -1; goto out;} |
#define | AB_EQUAL {ret = 0; goto out;} |
#define | A_GT_B {ret = 1; goto out;} |
#define | VAVERAGE(a, b, c) |
Functions | |
int | nmg_face_state_transition (struct nmg_ray_state *rs, int pos, int multi, int other_rs_state) |
int | nmg_ck_vu_ptbl (struct bu_ptbl *p, struct faceuse *fu) |
double | nmg_vu_angle_measure (struct vertexuse *vu, fastf_t *x_dir, fastf_t *y_dir, int assessment, int in) |
int | nmg_is_v_on_rs_list (const struct nmg_ray_state *rs, const struct vertex *v) |
int | nmg_assess_eu (struct edgeuse *eu, int forw, struct nmg_ray_state *rs, int pos) |
int | nmg_assess_vu (struct nmg_ray_state *rs, int pos) |
void | nmg_pr_vu_stuff (const struct nmg_vu_stuff *vs) |
int | nmg_wedge_class (int ass, double a, double b) |
int | nmg_face_coincident_vu_sort (struct nmg_ray_state *rs, int start, int end) |
void | nmg_sanitize_fu (struct faceuse *fu) |
void | nmg_face_rs_init (struct nmg_ray_state *rs, struct bu_ptbl *b, struct faceuse *fu1, struct faceuse *fu2, fastf_t *pt, fastf_t *dir, struct edge_g_lseg *eg, const struct bn_tol *tol) |
HIDDEN int | nmg_face_next_vu_interval (struct nmg_ray_state *rs, int cur, fastf_t *mag, int other_rs_state) |
void | nmg_edge_geom_isect_line (struct edgeuse *eu, struct nmg_ray_state *rs, const char *reason) |
HIDDEN void | nmg_fcut_face (struct nmg_ray_state *rs) |
HIDDEN void | nmg_face_combine_jra (struct nmg_ray_state *rs1, fastf_t *mag1, struct nmg_ray_state *rs2, fastf_t *mag2) |
HIDDEN void | nmg_face_combineX (struct nmg_ray_state *rs1, fastf_t *mag1, struct nmg_ray_state *rs2, fastf_t *mag2) |
void | nmg_unlist_v (struct bu_ptbl *b, fastf_t *mag, struct vertex *v) |
int | nmg_onon_fix (struct nmg_ray_state *rs, struct bu_ptbl *b, struct bu_ptbl *ob, fastf_t *mag, fastf_t *omag) |
edge_g_lseg * | nmg_face_cutjoin (struct bu_ptbl *b1, struct bu_ptbl *b2, fastf_t *mag1, fastf_t *mag2, struct faceuse *fu1, struct faceuse *fu2, fastf_t *pt, fastf_t *dir, struct edge_g_lseg *eg, const struct bn_tol *tol) |
void | nmg_fcut_face_2d (struct bu_ptbl *vu_list, fastf_t *mag, struct faceuse *fu1, struct faceuse *fu2, struct bn_tol *tol) |
int | nmg_insert_vu_if_on_edge (struct vertexuse *vu1, struct vertexuse *vu2, struct edgeuse *new_eu, struct bn_tol *tol) |
The main external routine here is nmg_face_cutjoin().
The line of intersection ("ray") will divide the face into two sets of loops. No one loop may cross the ray after this routine is finished. (Current optimization may remove this property).
Intersection points of significance to the other face but not yet part of the current face's geometry are denoted by a vu on the ray list, which points to a loop of a single vertex. These points need to be incorporated into the final face.
Authors - Michael John Muuss Lee A. Butler
Source - The U. S. Army Research Laboratory Aberdeen Proving Ground, Maryland 21005-5068 USA
Definition in file nmg_fcut.c.
|
Definition at line 1 of file nmg_fcut.c. |
|
Definition at line 51 of file nmg_fcut.c. Referenced by nmg_face_state_transition(). |
|
Definition at line 52 of file nmg_fcut.c. Referenced by nmg_face_state_transition(). |
|
Definition at line 53 of file nmg_fcut.c. Referenced by nmg_face_state_transition(). |
|
Definition at line 54 of file nmg_fcut.c. Referenced by nmg_face_state_transition(). |
|
Definition at line 55 of file nmg_fcut.c. Referenced by nmg_face_state_transition(). |
|
Definition at line 56 of file nmg_fcut.c. Referenced by nmg_face_state_transition(). |
|
Definition at line 57 of file nmg_fcut.c. Referenced by nmg_face_state_transition(). |
|
Definition at line 69 of file nmg_fcut.c. Referenced by nmg_face_coincident_vu_sort(), and nmg_vu_angle_measure(). |
|
Definition at line 70 of file nmg_fcut.c. Referenced by nmg_vu_angle_measure(). |
|
Definition at line 71 of file nmg_fcut.c. Referenced by nmg_assess_eu(), nmg_face_coincident_vu_sort(), nmg_face_state_transition(), nmg_vu_angle_measure(), and nmg_wedge_class(). |
|
Definition at line 72 of file nmg_fcut.c. Referenced by nmg_assess_eu(), nmg_face_coincident_vu_sort(), nmg_face_state_transition(), nmg_vu_angle_measure(), and nmg_wedge_class(). |
|
Definition at line 73 of file nmg_fcut.c. |
|
Definition at line 75 of file nmg_fcut.c. Referenced by nmg_assess_vu(). |
|
Definition at line 76 of file nmg_fcut.c. Referenced by nmg_assess_vu(). |
|
Definition at line 77 of file nmg_fcut.c. Referenced by nmg_assess_vu(), nmg_face_coincident_vu_sort(), and nmg_wedge_class(). |
|
Definition at line 80 of file nmg_fcut.c. Referenced by nmg_face_state_transition(), and nmg_vu_angle_measure(). |
|
Definition at line 81 of file nmg_fcut.c. Referenced by nmg_face_state_transition(), and nmg_vu_angle_measure(). |
|
Definition at line 117 of file nmg_fcut.c. |
|
Definition at line 118 of file nmg_fcut.c. |
|
Definition at line 119 of file nmg_fcut.c. |
|
Definition at line 120 of file nmg_fcut.c. |
|
Definition at line 121 of file nmg_fcut.c. |
|
Definition at line 122 of file nmg_fcut.c. |
|
Definition at line 123 of file nmg_fcut.c. |
|
Definition at line 124 of file nmg_fcut.c. |
|
Definition at line 125 of file nmg_fcut.c. |
|
Definition at line 126 of file nmg_fcut.c. |
|
Definition at line 127 of file nmg_fcut.c. |
|
Definition at line 128 of file nmg_fcut.c. Referenced by nmg_assess_vu(). |
|
Definition at line 129 of file nmg_fcut.c. |
|
Definition at line 130 of file nmg_fcut.c. |
|
Definition at line 131 of file nmg_fcut.c. Referenced by nmg_assess_vu(). |
|
Definition at line 132 of file nmg_fcut.c. |
|
Definition at line 133 of file nmg_fcut.c. |
|
Definition at line 147 of file nmg_fcut.c. Referenced by nmg_face_state_transition(). |
|
Definition at line 148 of file nmg_fcut.c. |
|
Definition at line 149 of file nmg_fcut.c. Referenced by nmg_face_state_transition(). |
|
Definition at line 150 of file nmg_fcut.c. Referenced by nmg_face_state_transition(). |
|
Definition at line 151 of file nmg_fcut.c. Referenced by nmg_face_state_transition(). |
|
Definition at line 152 of file nmg_fcut.c. |
|
Definition at line 153 of file nmg_fcut.c. |
|
Definition at line 154 of file nmg_fcut.c. Referenced by nmg_face_state_transition(). |
|
Definition at line 186 of file nmg_fcut.c. Referenced by nmg_face_rs_init(). |
|
Definition at line 187 of file nmg_fcut.c. Referenced by nmg_assess_eu(), nmg_assess_vu(), nmg_edge_geom_isect_line(), nmg_face_coincident_vu_sort(), nmg_face_combineX(), nmg_face_next_vu_interval(), nmg_face_state_transition(), nmg_fcut_face(), and nmg_onon_fix(). |
|
Referenced by nmg_vu_angle_measure(). |
|
Definition at line 821 of file nmg_fcut.c. Referenced by nmg_face_coincident_vu_sort(), and nmg_wedge_class(). |
|
Definition at line 822 of file nmg_fcut.c. Referenced by nmg_wedge_class(). |
|
Definition at line 823 of file nmg_fcut.c. Referenced by nmg_wedge_class(). |
|
Definition at line 824 of file nmg_fcut.c. Referenced by nmg_wedge_class(). |
|
Definition at line 825 of file nmg_fcut.c. Referenced by nmg_face_coincident_vu_sort(), nmg_pr_vu_stuff(), and nmg_wedge_class(). |
|
Definition at line 949 of file nmg_fcut.c. |
|
Definition at line 951 of file nmg_fcut.c. |
|
Definition at line 952 of file nmg_fcut.c. |
|
Definition at line 953 of file nmg_fcut.c. |
|
Definition at line 954 of file nmg_fcut.c. |
|
Definition at line 955 of file nmg_fcut.c. |
|
Definition at line 956 of file nmg_fcut.c. |
|
Definition at line 957 of file nmg_fcut.c. |
|
|
|
Value: {\ if( _a <= WEDGE_ANG_TOL ) _a = 0; \ else if( NEAR_ZERO( _a - 180, WEDGE_ANG_TOL ) ) _a = 180; \ else if( _a >= 360 - WEDGE_ANG_TOL ) _a = 360; } |
|
N M G _ F A C E _ V U _ C O M P A R E Support routine for nmg_face_coincident_vu_sort(), via qsort(). It is important to note that an edge on the LEFT side of the ray will have a "lo" angle which is numerically LARGER than the "hi" angle. However, all are measured in the usual units: 0 = ON_REV, 90 = RIGHT, 180 = ON_FORW, 270 = LEFT. Returns - -1 when A < B 0 when A == B +1 when A > B Definition at line 1315 of file nmg_fcut.c. |
|
Definition at line 1316 of file nmg_fcut.c. |
|
Definition at line 1317 of file nmg_fcut.c. |
|
Value: { \ (a)[X] = ((b)[X] + (c)[X]) * 0.5;\ (a)[Y] = ((b)[Y] + (c)[Y]) * 0.5;\ (a)[Z] = ((b)[Z] + (c)[Z]) * 0.5;\ } Definition at line 2142 of file nmg_fcut.c. |
|
|
N M G _ V U _ A N G L E _ M E A S U R E Given a vertexuse from a loop which lies in a plane, compute the vector 'vec' from the previous vertex to this one. Using two perpendicular vectors (x_dir and y_dir) which both lie in the plane of the loop, return the angle (in radians) of 'vec' from x_dir, going CCW around the perpendicular x_dir CROSS y_dir. x_dir is -ray_dir y_dir points right. Returns - vec == x_dir returns 0, vec == y_dir returns pi/2, vec == -x_dir returns pi, vec == -y_dir returns 3*pi/2. 0.0 if unable to compute 'vec' Definition at line 412 of file nmg_fcut.c. References bn_angle_measure(), bn_pi, bn_radtodeg, bn_twopi, BU_LIST_PNEXT_CIRC, BU_LIST_PPREV_CIRC, bu_log(), vertex_g::coord, DEBUG_VU_SORT, vertexuse::magic_p, NMG_CK_LOOPUSE, NMG_CK_VERTEXUSE, NMG_E_ASSESSMENT_LEFT, NMG_E_ASSESSMENT_ON_FORW, NMG_E_ASSESSMENT_ON_REV, NMG_E_ASSESSMENT_RIGHT, nmg_find_eu_with_vu_in_lu(), nmg_find_lu_of_vu(), NMG_LOOPUSE_MAGIC, NMG_V_ASSESSMENT_NEXT, NMG_V_ASSESSMENT_PREV, RADIAN_TWEEK, vertexuse::up, V3ARGS, vertexuse::v_p, vertex::vg_p, VSUB2, and edgeuse::vu_p. Here is the call graph for this function: ![]() |
|
N M G _ I S _ V _ O N _ R S _ L I S T Definition at line 526 of file nmg_fcut.c. References NMG_CK_VERTEX, nmg_ray_state::nvu, vertexuse::v_p, and nmg_ray_state::vu. Referenced by nmg_assess_eu(). |
|
N M G _ A S S E S S _ E U The current vertex (eu->vu_p) is on the line of intersection. Assess the indicated edge, to see if it lies on the line of intersection, or departs towards the left or right. There is no need to look more than one edge forward or backward. Even if there are edges which loop around to the same vertex (with a different vertexuse), that (0-length) edge is ON the ray. Definition at line 550 of file nmg_fcut.c. References BN_CK_TOL, BU_LIST_PNEXT_CIRC, BU_LIST_PPREV_CIRC, bu_log(), vertex_g::coord, DEBUG_FCUT, nmg_ray_state::dir, bn_tol::dist_sq, edgeuse::g, edgeuse::lseg_p, MAGSQ, NMG_CK_EDGEUSE, NMG_CK_RAYSTATE, NMG_CK_VERTEX, NMG_E_ASSESSMENT_ON_FORW, NMG_E_ASSESSMENT_ON_REV, nmg_is_v_on_rs_list(), nmg_pr_eu(), nmg_pr_vu_briefly(), NULL, rt_bomb(), SMALL_FASTF, start, nmg_ray_state::tol, vertexuse::v_p, VDOT, vertex::vg_p, VSUB2, nmg_ray_state::vu, and edgeuse::vu_p. Referenced by nmg_assess_vu(), nmg_face_state_transition(), and nmg_onon_fix(). Here is the call graph for this function: ![]() |
|
N M G _ A S S E S S _ V U Definition at line 733 of file nmg_fcut.c. References bn_dist_line3_pt3(), BU_LIST_PNEXT_CIRC, BU_LIST_PPREV_CIRC, bu_log(), vertex_g::coord, DEBUG_FCUT, nmg_ray_state::dir, bn_tol::dist, vertexuse::eu_p, vertexuse::magic_p, nmg_assess_eu(), nmg_break_long_edges(), NMG_CK_RAYSTATE, NMG_CK_VERTEXUSE, nmg_find_eu_with_vu_in_lu(), nmg_find_lu_of_vu(), nmg_find_s_of_eu(), NMG_LOOPUSE_MAGIC, NMG_ON_FORW_ON_REV, NMG_ON_REV_ON_FORW, NMG_V_ASSESSMENT_ERROR, NMG_V_ASSESSMENT_LONE, NMG_V_COMB, nmg_ray_state::pt, rt_bomb(), nmg_ray_state::tol, vertexuse::up, vertexuse::v_p, vertex::vg_p, VPRINT, nmg_ray_state::vu, and edgeuse::vu_p. Referenced by nmg_face_coincident_vu_sort(), and nmg_face_state_transition(). Here is the call graph for this function: ![]() |
|
N M G _ P R _ V U _ S T U F F Definition at line 838 of file nmg_fcut.c. References bu_log(), nmg_vu_stuff::hi_ang, nmg_vu_stuff::in_vu_angle, nmg_vu_stuff::lo_ang, nmg_vu_stuff::loop_index, nmg_vu_stuff::lsp, nmg_vu_stuff::min_vu_dot, nmg_vu_stuff::out_vu_angle, nmg_vu_stuff::seq, nmg_vu_stuff::vu, nmg_vu_stuff::wedge_class, and WEDGECLASS2STR. Here is the call graph for this function: ![]() |
|
N M G _ F A C E _ C O I N C I D E N T _ V U _ S O R T Given co-incident vertexuses (same distance along the ray), sort them into the "proper" order for driving the state machine. Definition at line 1702 of file nmg_fcut.c. References nmg_ray_state::ang_x_dir, nmg_ray_state::ang_y_dir, bn_radtodeg, bu_log(), bu_malloc(), nmg_vu_stuff::hi_ang, nmg_vu_stuff::in_vu_angle, loopuse::l, nmg_vu_stuff::lo_ang, nmg_loop_stuff::lu, vertexuse::magic_p, nmg_assess_vu(), NMG_CK_LOOPUSE, NMG_CK_RAYSTATE, NMG_E_ASSESSMENT_LEFT, NMG_E_ASSESSMENT_ON_FORW, NMG_E_ASSESSMENT_ON_REV, nmg_find_lu_of_vu(), NMG_LOOPUSE_MAGIC, NMG_V_COMB, nmg_vu_angle_measure(), nmg_wedge_class(), OT_BOOLPLACE, nmg_vu_stuff::out_vu_angle, rt_bomb(), nmg_vu_stuff::seq, top(), vertexuse::up, vertexuse::v_p, nmg_vu_stuff::vu, nmg_ray_state::vu, nmg_vu_stuff::wedge_class, WEDGE_LEFT, and WEDGECLASS2STR. Here is the call graph for this function: ![]() |
|
N M G _ F A C E _ R S _ I N I T Set up nmg_ray_state structure. "left" is a vector that lies in the plane of the face which contains the loops being operated on. It points in the direction "left" of the ray, such that the first OT_SAME loop in the first OT_SAME fact that it crosses will cross the ray in a left-to-right manner consistent with the CCW loop rule. There are some special conditions placed on the "dir" argument to make this happen; see the comments in nmg_inter.c for details, or Mike's notes "The 'Left' Vector Choice" dated 27-Aug-93, page 1. Definition at line 1957 of file nmg_fcut.c. References BN_CK_TOL, BU_CK_PTBL, BU_LIST_FIRST, BU_LIST_FIRST_MAGIC, BU_LIST_FOR, BU_LIST_PNEXT_CIRC, bu_log(), BU_PTBL_END, BU_PTBL_GET, bu_ptbl::buffer, bzero, vertex_g::coord, DEBUG_FCUT, loopuse::down_hd, bu_ptbl::end, HPRINT, faceuse::lu_hd, MAGNITUDE, NMG_CK_EDGE_G_LSEG, NMG_CK_FACEUSE, NMG_GET_FU_PLANE, nmg_orientation(), nmg_pr_eu_briefly(), nmg_pr_vu_briefly(), NMG_RAYSTATE_MAGIC, NMG_VERTEXUSE_MAGIC, faceuse::orientation, OT_OPPOSITE, OT_SAME, rt_bomb(), faceuse::s_p, V3ARGS, vertexuse::v_p, VCROSS, VDIVIDE_TOL, vertex::vg_p, VMOVE, VPRINT, VREVERSE, VSUB2, edgeuse::vu_p, and VUNITIZE. Referenced by nmg_fcut_face_2d(). Here is the call graph for this function: ![]() |
|
N M G _ F A C E _ N E X T _ V U _ I N T E R V A L Handle the extent of coincident vertexuses at this distance. ptbl_vsort() will have forced all the distances to be exactly equal if they are within tolerance of each other. Two cases: lone vertexuse, and range of vertexuses. Return value is where next interval starts. Definition at line 2068 of file nmg_fcut.c. References BN_CK_TOL, bu_log(), DEBUG_FCUT, nmg_ray_state::eg_p, nmg_ray_state::fu1, nmg_ray_state::fu2, nmg_2face_plot(), NMG_CK_EDGE_G_LSEG, NMG_CK_RAYSTATE, nmg_face_plot(), nmg_face_state_transition(), nmg_ray_state::nvu, nmg_ray_state::tol, vertexuse::v_p, and nmg_ray_state::vu. Referenced by nmg_face_combineX(). Here is the call graph for this function: ![]() |
|
N M G _ E D G E _ G E O M _ I S E C T _ L I N E Force the geometry structure for a given edge to be that of the intersection line between the two faces. Note that sometimes a vertex can appear to lie on more than one line. It is important to refer to geometry here, to make sure that the edgeuse is not mistakenly fused to the wrong edge geometry. XXX This has the byproduct that not all edgeuses "on" the line XXX of intersection will share rs->eg_p. See the comments in nmg_radial_join_eu() for the rationale. Definition at line 2163 of file nmg_fcut.c. References bu_log(), nmg_ray_state::dir, edge_g_lseg::e_dir, edge_g_lseg::e_pt, nmg_ray_state::eg_p, edgeuse::g, edgeuse::lseg_p, edgeuse::magic_p, NMG_CK_EDGE_G_LSEG, NMG_CK_EDGEUSE, NMG_CK_RAYSTATE, nmg_edge_g(), nmg_jeg(), nmg_use_edge_g(), nmg_ray_state::pt, and VMOVE. Referenced by nmg_face_state_transition(). Here is the call graph for this function: ![]() |
|
Definition at line 2797 of file nmg_fcut.c. References BN_CK_TOL, bu_log(), nmg_ray_state::eg_p, nmg_ray_state::fu1, nmg_ray_state::fu2, nmg_2face_plot(), NMG_CK_EDGE_G_LSEG, NMG_CK_RAYSTATE, nmg_face_plot(), nmg_find_lu_of_vu(), nmg_pr_fu_briefly(), NULL, nmg_ray_state::nvu, nmg_ray_state::tol, vertexuse::v_p, and nmg_ray_state::vu. Referenced by nmg_face_combine_jra(), and nmg_fcut_face_2d(). Here is the call graph for this function: ![]() |
|
Definition at line 3196 of file nmg_fcut.c. References nmg_fcut_face(). Here is the call graph for this function: ![]() |
|
N M G _ F A C E _ C O M B I N E collapse loops,vertices within face fu1 (relative to fu2) Definition at line 3210 of file nmg_fcut.c. References BN_CK_TOL, bu_log(), nmg_ray_state::eg_p, nmg_ray_state::fu1, nmg_ray_state::fu2, nmg_2face_plot(), NMG_CK_EDGE_G_LSEG, NMG_CK_RAYSTATE, nmg_face_next_vu_interval(), nmg_face_plot(), nmg_ray_state::nvu, nmg_ray_state::state, and nmg_ray_state::tol. Here is the call graph for this function: ![]() |
|
N M G _ O N O N _ F I X An attempt to fix the condition: nmg_assess_eu(): ON vertexuse in middle of edge? Note that the vertexuse being zapped may have a lower subscript. Must be called after vu list has been sorted. Definition at line 3363 of file nmg_fcut.c. References BU_CK_PTBL, bu_log(), BU_PTBL_END, BU_PTBL_GET, vertexuse::eu_p, vertexuse::magic_p, nmg_assess_eu(), NMG_CK_RAYSTATE, NMG_CK_VERTEX, NMG_CK_VERTEXUSE, NMG_LOOPUSE_MAGIC, nmg_unlist_v(), vertexuse::up, and vertexuse::v_p. Here is the call graph for this function: ![]() |
|
N M G _ F A C E _ C U T J O I N The main face cut handler. Called from nmg_inter.c by nmg_isect_2faces(). A wrapper for nmg_face_combine, for now. The two vertexuse lists may be of different lengths, because one may have multiple uses of a vertex, while the other has only a single use of that same vertex. Definition at line 3550 of file nmg_fcut.c. References BN_CK_TOL, bu_log(), bu_ptbl::buffer, bn_tol::dist, bu_ptbl::end, nmg_ray_state::fu1, nmg_ray_state::fu2, NMG_CK_FACEUSE, nmg_pr_vu_briefly(), nmg_ray_state::tol, and top(). Here is the call graph for this function: ![]() |