void
nmg_visit(const uint32_t *magicp, const struct nmg_visit_handlers *htab, void *state)
/* Handler's private state */
{
    switch (*magicp) {
	default:
	    bu_log("nmg_visit() Can't visit %s directly\n", bu_identify_magic(*magicp));
	    bu_bomb("nmg_visit()\n");
	    /* NOTREACHED */
	case NMG_MODEL_MAGIC:
	    nmg_visit_model((struct model *)magicp, htab, state);
	    break;
	case NMG_REGION_MAGIC:
	    nmg_visit_region((struct nmgregion *)magicp, htab, state);
	    break;
	case NMG_SHELL_MAGIC:
	    nmg_visit_shell((struct shell *)magicp, htab, state);
	    break;
	case NMG_FACEUSE_MAGIC:
	    nmg_visit_faceuse((struct faceuse *)magicp, htab, state);
	    break;
	case NMG_LOOPUSE_MAGIC:
	    nmg_visit_loopuse((struct loopuse *)magicp, htab, state);
	    break;
	case NMG_EDGEUSE_MAGIC:
	    nmg_visit_edgeuse((struct edgeuse *)magicp, htab, state);
	    break;
	case NMG_VERTEXUSE_MAGIC:
	    nmg_visit_vertexuse((struct vertexuse *)magicp, htab, state);
	    break;
    }
}
Esempio n. 2
0
/**
 *			B U _ P R _ P T B L
 *
 *  Print a bu_ptbl array for inspection.
 */
void
bu_pr_ptbl(const char *title, const struct bu_ptbl *tbl, int verbose)
{
    register long	**lp;

    BU_CK_PTBL(tbl);
    bu_log("%s: bu_ptbl array with %d entries\n",
	   title, tbl->end );

    if ( !verbose )  return;

    /* Go in ascending order */
    for ( lp = (long **)BU_PTBL_BASEADDR(tbl);
	  lp <= (long **)BU_PTBL_LASTADDR(tbl); lp++
	)  {
	if ( *lp == 0 )  {
	    bu_log("  %.8x NULL entry\n", *lp);
	    continue;
	}
	bu_log("  %.8x %s\n", *lp, bu_identify_magic(**lp) );
    }
}
Esempio n. 3
0
/**
 * Given a pointer to some NMG data structure, search the 4
 * classification lists to determine its classification.  (XXX In the
 * future, this should be done with one big array).  Then, return the
 * action code for an item of that classification.
 */
HIDDEN int
nmg_eval_action(uint32_t *ptr, register struct nmg_bool_state *bs)
{
    register int ret;
    register int nmg_class;
    int index;

    BN_CK_TOL(bs->bs_tol);

    index = nmg_index_of_struct(ptr);
    if (bs->bs_isA) {
	if (NMG_INDEX_VALUE(bs->bs_classtab[NMG_CLASS_AinB], index)) {
	    nmg_class = NMG_CLASS_AinB;
	    ret = bs->bs_actions[NMG_CLASS_AinB];
	    goto out;
	}
	if (NMG_INDEX_VALUE(bs->bs_classtab[NMG_CLASS_AonBshared], index)) {
	    nmg_class = NMG_CLASS_AonBshared;
	    ret = bs->bs_actions[NMG_CLASS_AonBshared];
	    goto out;
	}
	if (NMG_INDEX_VALUE(bs->bs_classtab[NMG_CLASS_AonBanti], index)) {
	    nmg_class = NMG_CLASS_AonBanti;
	    ret = bs->bs_actions[NMG_CLASS_AonBanti];
	    goto out;
	}
	if (NMG_INDEX_VALUE(bs->bs_classtab[NMG_CLASS_AoutB], index)) {
	    nmg_class = NMG_CLASS_AoutB;
	    ret = bs->bs_actions[NMG_CLASS_AoutB];
	    goto out;
	}
	bu_log("nmg_eval_action(ptr=%p) %s has no A classification, retaining\n",
	       (void *)ptr, bu_identify_magic(*((uint32_t *)ptr)));
	nmg_class = NMG_CLASS_BAD;
	ret = BACTION_RETAIN;
	goto out;
    }

    /* is B */
    if (NMG_INDEX_VALUE(bs->bs_classtab[NMG_CLASS_BinA], index)) {
	nmg_class = NMG_CLASS_BinA;
	ret = bs->bs_actions[NMG_CLASS_BinA];
	goto out;
    }
    if (NMG_INDEX_VALUE(bs->bs_classtab[NMG_CLASS_BonAshared], index)) {
	nmg_class = NMG_CLASS_BonAshared;
	ret = bs->bs_actions[NMG_CLASS_BonAshared];
	goto out;
    }
    if (NMG_INDEX_VALUE(bs->bs_classtab[NMG_CLASS_BonAanti], index)) {
	nmg_class = NMG_CLASS_BonAanti;
	ret = bs->bs_actions[NMG_CLASS_BonAanti];
	goto out;
    }
    if (NMG_INDEX_VALUE(bs->bs_classtab[NMG_CLASS_BoutA], index)) {
	nmg_class = NMG_CLASS_BoutA;
	ret = bs->bs_actions[NMG_CLASS_BoutA];
	goto out;
    }
    bu_log("nmg_eval_action(ptr=%p) %s has no B classification, retaining\n",
	   (void *)ptr, bu_identify_magic(*((uint32_t *)ptr)));
    nmg_class = NMG_CLASS_BAD;
    ret = BACTION_RETAIN;
out:
    if (RTG.NMG_debug & DEBUG_BOOLEVAL) {
	bu_log("nmg_eval_action(ptr=%p) index=%d %s %s %s %s\n",
	       (void *)ptr, index,
	       bs->bs_isA ? "A" : "B",
	       bu_identify_magic(*((uint32_t *)ptr)),
	       nmg_class_name(nmg_class),
	       nmg_baction_names[ret]);
    }
    return ret;
}