Revision: 75002
http://sourceforge.net/p/brlcad/code/75002
Author: starseeker
Date: 2020-03-09 15:57:59 +0000 (Mon, 09 Mar 2020)
Log Message:
-----------
refactor
Modified Paths:
--------------
brlcad/trunk/src/libanalyze/nirt/diff.cpp
brlcad/trunk/src/libanalyze/nirt/nirt.cpp
brlcad/trunk/src/libanalyze/nirt/nirt.h
Modified: brlcad/trunk/src/libanalyze/nirt/diff.cpp
===================================================================
--- brlcad/trunk/src/libanalyze/nirt/diff.cpp 2020-03-09 14:47:01 UTC (rev
75001)
+++ brlcad/trunk/src/libanalyze/nirt/diff.cpp 2020-03-09 15:57:59 UTC (rev
75002)
@@ -100,33 +100,48 @@
fastf_t gap_los_delta;
};
+
+struct nirt_diff_state;
+
struct nirt_diff {
point_t orig;
vect_t dir;
- std::vector<struct nirt_seg *> old_segs;
- std::vector<struct nirt_seg *> new_segs;
- std::vector<struct nirt_seg_diff *> diffs;
+ std::vector<struct nirt_seg> old_segs;
+ std::vector<struct nirt_seg> new_segs;
+ std::vector<struct nirt_seg_diff> diffs;
+ struct nirt_diff_state *nds;
};
-struct nirt_diff_settings {
- int report_partitions;
- int report_misses;
- int report_gaps;
- int report_overlaps;
- int report_partition_reg_ids;
- int report_partition_reg_names;
- int report_partition_path_names;
- int report_partition_dists;
- int report_partition_obliq;
- int report_overlap_reg_names;
- int report_overlap_reg_ids;
- int report_overlap_dists;
- int report_overlap_obliq;
- int report_gap_dists;
- fastf_t dist_delta_tol;
- fastf_t obliq_delta_tol;
- fastf_t los_delta_tol;
- fastf_t scaled_los_delta_tol;
+struct nirt_diff_state {
+
+ struct bu_vls diff_file = BU_VLS_INIT_ZERO;
+ struct nirt_diff *cdiff = NULL;
+ std::vector<struct nirt_diff> diffs;
+ bool diff_ready = false;
+
+ /* Reporting settings */
+ bool report_partitions = true;
+ bool report_misses = true;
+ bool report_gaps = true;
+ bool report_overlaps = true;
+ bool report_partition_reg_ids = true;
+ bool report_partition_reg_names = true;
+ bool report_partition_path_names = true;
+ bool report_partition_dists = true;
+ bool report_partition_obliq = true;
+ bool report_overlap_reg_names = true;
+ bool report_overlap_reg_ids = true;
+ bool report_overlap_dists = true;
+ bool report_overlap_obliq = true;
+ bool report_gap_dists = true;
+
+ /* Tolerances */
+ fastf_t dist_delta_tol = BN_TOL_DIST;
+ fastf_t obliq_delta_tol = BN_TOL_DIST;
+ fastf_t los_delta_tol = BN_TOL_DIST;
+ fastf_t scaled_los_delta_tol = BN_TOL_DIST;
+
+ struct nirt_state *nss;
};
@@ -133,62 +148,32 @@
void
_nirt_diff_create(struct nirt_state *nss)
{
- BU_GET(nss->i->diff_file, struct bu_vls);
- bu_vls_init(nss->i->diff_file);
- nss->i->cdiff = NULL;
- nss->i->diff_run = 0;
- nss->i->diff_ready = 0;
- BU_GET(nss->i->diff_settings, struct nirt_diff_settings);
- nss->i->diff_settings->report_partitions = 1;
- nss->i->diff_settings->report_misses = 1;
- nss->i->diff_settings->report_gaps = 1;
- nss->i->diff_settings->report_overlaps = 1;
- nss->i->diff_settings->report_partition_reg_ids = 1;
- nss->i->diff_settings->report_partition_reg_names = 1;
- nss->i->diff_settings->report_partition_path_names = 1;
- nss->i->diff_settings->report_partition_dists = 1;
- nss->i->diff_settings->report_partition_obliq = 1;
- nss->i->diff_settings->report_overlap_reg_names = 1;
- nss->i->diff_settings->report_overlap_reg_ids = 1;
- nss->i->diff_settings->report_overlap_dists = 1;
- nss->i->diff_settings->report_overlap_obliq = 1;
- nss->i->diff_settings->report_gap_dists = 1;
- nss->i->diff_settings->dist_delta_tol = BN_TOL_DIST;
- nss->i->diff_settings->obliq_delta_tol = BN_TOL_DIST;
- nss->i->diff_settings->los_delta_tol = BN_TOL_DIST;
- nss->i->diff_settings->scaled_los_delta_tol = BN_TOL_DIST;
+ nss->i->diff_state = new nirt_diff_state;
+ nss->i->diff_state->nss = nss;
}
void
_nirt_diff_destroy(struct nirt_state *nss)
{
- bu_vls_free(nss->i->diff_file);
- BU_PUT(nss->i->diff_settings, struct nirt_diff_settings);
+ bu_vls_free(&nss->i->diff_state->diff_file);
+ // TODO - clean up nirt_diff objects
+ delete nss->i->diff_state;
}
void
_nirt_diff_add_seg(struct nirt_state *nss, struct nirt_seg *nseg)
{
- if (nss->i->cdiff && nss->i->diff_run) {
- nss->i->cdiff->new_segs.push_back(_nirt_seg_cpy(nseg));
+ if (nss->i->diff_state && nss->i->diff_state->cdiff) {
+ nss->i->diff_state->cdiff->new_segs.push_back(*nseg);
}
}
-#define SD_INIT(sd, l, r) \
- do {BU_GET(sd, struct nirt_seg_diff); sd->left = left; sd->right = right;}
\
- while (0)
-
-#define SD_FREE(sd) \
- do {BU_PUT(sd, struct nirt_seg_diff);} \
- while (0)
-
-
-static struct nirt_seg_diff *
-_nirt_partition_diff(struct nirt_state *nss, struct nirt_seg *left, struct
nirt_seg *right)
+static bool
+_nirt_partition_diff(struct nirt_diff *ndiff, struct nirt_seg *left, struct
nirt_seg *right)
{
int have_diff = 0;
- struct nirt_seg_diff *sd;
- if (!nss || !nss->i->diff_settings) return NULL;
+ struct nirt_seg_diff sd;
+ if (!ndiff || !ndiff->nds) return false;
fastf_t in_delta = DIST_PNT_PNT(left->in, right->in);
fastf_t out_delta = DIST_PNT_PNT(left->in, right->in);
fastf_t los_delta = fabs(left->los - right->los);
@@ -198,31 +183,33 @@
if (bu_vls_strcmp(left->reg_name, right->reg_name)) have_diff = 1;
if (bu_vls_strcmp(left->path_name, right->path_name)) have_diff = 1;
if (left->reg_id != right->reg_id) have_diff = 1;
- if (in_delta > nss->i->diff_settings->dist_delta_tol) have_diff = 1;
- if (out_delta > nss->i->diff_settings->dist_delta_tol) have_diff = 1;
- if (los_delta > nss->i->diff_settings->los_delta_tol) have_diff = 1;
- if (scaled_los_delta > nss->i->diff_settings->scaled_los_delta_tol)
have_diff = 1;
- if (obliq_in_delta > nss->i->diff_settings->obliq_delta_tol) have_diff = 1;
- if (obliq_out_delta > nss->i->diff_settings->obliq_delta_tol) have_diff =
1;
+ if (in_delta > ndiff->nds->dist_delta_tol) have_diff = 1;
+ if (out_delta > ndiff->nds->dist_delta_tol) have_diff = 1;
+ if (los_delta > ndiff->nds->los_delta_tol) have_diff = 1;
+ if (scaled_los_delta > ndiff->nds->scaled_los_delta_tol) have_diff = 1;
+ if (obliq_in_delta > ndiff->nds->obliq_delta_tol) have_diff = 1;
+ if (obliq_out_delta > ndiff->nds->obliq_delta_tol) have_diff = 1;
if (have_diff) {
- SD_INIT(sd, left, right);
- sd->in_delta = in_delta;
- sd->out_delta = out_delta;
- sd->los_delta = los_delta;
- sd->scaled_los_delta = scaled_los_delta;
- sd->obliq_in_delta = obliq_in_delta;
- sd->obliq_out_delta = obliq_out_delta;
- return sd;
+ sd.left = left;
+ sd.right = right;
+ sd.in_delta = in_delta;
+ sd.out_delta = out_delta;
+ sd.los_delta = los_delta;
+ sd.scaled_los_delta = scaled_los_delta;
+ sd.obliq_in_delta = obliq_in_delta;
+ sd.obliq_out_delta = obliq_out_delta;
+ ndiff->diffs.push_back(sd);
+ return true;
}
- return NULL;
+ return false;
}
-static struct nirt_seg_diff *
-_nirt_overlap_diff(struct nirt_state *nss, struct nirt_seg *left, struct
nirt_seg *right)
+static bool
+_nirt_overlap_diff(struct nirt_diff *ndiff, struct nirt_seg *left, struct
nirt_seg *right)
{
int have_diff = 0;
- struct nirt_seg_diff *sd;
- if (!nss || !nss->i->diff_settings) return NULL;
+ struct nirt_seg_diff sd;
+ if (!ndiff || !ndiff->nds) return false;
fastf_t ov_in_delta = DIST_PNT_PNT(left->ov_in, right->ov_in);
fastf_t ov_out_delta = DIST_PNT_PNT(left->ov_out, right->ov_out);
fastf_t ov_los_delta = fabs(left->ov_los - right->ov_los);
@@ -230,60 +217,66 @@
if (bu_vls_strcmp(left->ov_reg2_name, right->ov_reg2_name)) have_diff = 1;
if (left->ov_reg1_id != right->ov_reg1_id) have_diff = 1;
if (left->ov_reg2_id != right->ov_reg2_id) have_diff = 1;
- if (ov_in_delta > nss->i->diff_settings->dist_delta_tol) have_diff = 1;
- if (ov_out_delta > nss->i->diff_settings->dist_delta_tol) have_diff = 1;
- if (ov_los_delta > nss->i->diff_settings->los_delta_tol) have_diff = 1;
+ if (ov_in_delta > ndiff->nds->dist_delta_tol) have_diff = 1;
+ if (ov_out_delta > ndiff->nds->dist_delta_tol) have_diff = 1;
+ if (ov_los_delta > ndiff->nds->los_delta_tol) have_diff = 1;
if (have_diff) {
- SD_INIT(sd, left, right);
- sd->ov_in_delta = ov_in_delta;
- sd->ov_out_delta = ov_out_delta;
- sd->ov_los_delta = ov_los_delta;
- return sd;
+ sd.left = left;
+ sd.right = right;
+ sd.ov_in_delta = ov_in_delta;
+ sd.ov_out_delta = ov_out_delta;
+ sd.ov_los_delta = ov_los_delta;
+ ndiff->diffs.push_back(sd);
+ return true;
}
- return NULL;
+ return false;
}
-static struct nirt_seg_diff *
-_nirt_gap_diff(struct nirt_state *nss, struct nirt_seg *left, struct nirt_seg
*right)
+static bool
+_nirt_gap_diff(struct nirt_diff *ndiff, struct nirt_seg *left, struct nirt_seg
*right)
{
int have_diff = 0;
- struct nirt_seg_diff *sd;
- if (!nss || !nss->i->diff_settings) return NULL;
+ struct nirt_seg_diff sd;
+ if (!ndiff || !ndiff->nds) return false;
fastf_t gap_in_delta = DIST_PNT_PNT(left->gap_in, right->gap_in);
fastf_t gap_los_delta = fabs(left->gap_los - right->gap_los);
- if (gap_in_delta > nss->i->diff_settings->dist_delta_tol) have_diff = 1;
- if (gap_los_delta > nss->i->diff_settings->los_delta_tol) have_diff = 1;
+ if (gap_in_delta > ndiff->nds->dist_delta_tol) have_diff = 1;
+ if (gap_los_delta > ndiff->nds->los_delta_tol) have_diff = 1;
if (have_diff) {
- SD_INIT(sd, left, right);
- sd->gap_in_delta = gap_in_delta;
- sd->gap_los_delta = gap_los_delta;
- return sd;
+ sd.left = left;
+ sd.right = right;
+ sd.gap_in_delta = gap_in_delta;
+ sd.gap_los_delta = gap_los_delta;
+ ndiff->diffs.push_back(sd);
+ return true;
}
- return 0;
+ return false;
}
-static struct nirt_seg_diff *
-_nirt_segs_diff(struct nirt_state *nss, struct nirt_seg *left, struct nirt_seg
*right)
+static bool
+_nirt_segs_diff(struct nirt_diff *ndiff, struct nirt_seg *left, struct
nirt_seg *right)
{
- struct nirt_seg_diff *sd;
- if (!nss) return NULL;
+ if (!ndiff) return NULL;
if (!left || !right || left->type != right->type) {
/* Fundamental segment difference - no point going further, they're
different */
- SD_INIT(sd, left, right);
- return sd;
+ struct nirt_seg_diff sd;
+ sd.left = left;
+ sd.right = right;
+ ndiff->diffs.push_back(sd);
+ return true;
}
switch(left->type) {
case NIRT_MISS_SEG:
/* Types don't differ and they're both misses - we're good */
- return NULL;
+ return false;
case NIRT_PARTITION_SEG:
- return _nirt_partition_diff(nss, left, right);
+ return _nirt_partition_diff(ndiff, left, right);
case NIRT_GAP_SEG:
- return _nirt_gap_diff(nss, left, right);
+ return _nirt_gap_diff(ndiff, left, right);
case NIRT_OVERLAP_SEG:
- return _nirt_overlap_diff(nss, left, right);
+ return _nirt_overlap_diff(ndiff, left, right);
default:
- nerr(nss, "NIRT diff error: unknown segment type: %d\n",
left->type);
+ nerr(ndiff->nds->nss, "NIRT diff error: unknown segment type:
%d\n", left->type);
return 0;
}
}
@@ -315,26 +308,29 @@
int did_header = 0;
struct bu_vls dreport = BU_VLS_INIT_ZERO;
- if (!nss || nss->i->diffs.size() == 0) return 0;
- std::vector<struct nirt_diff *> *dfs = &(nss->i->diffs);
- for (size_t i = 0; i < dfs->size(); i++) {
- struct nirt_diff *d = (*dfs)[i];
+ if (!nss) return 0;
+
+ struct nirt_diff_state *nds = nss->i->diff_state;
+
+ if (!nds || nds->diffs.size() == 0) return 0;
+ std::vector<struct nirt_diff> &dfs = nds->diffs;
+ for (size_t i = 0; i < dfs.size(); i++) {
+ struct nirt_diff *d = &(dfs[i]);
// Calculate diffs according to settings. TODO - need to be more
sophisticated about this - if a
// segment is "missing" but the rays otherwise match, don't propagate
the "offset" and report all
// of the subsequent segments as different...
size_t seg_max = (d->old_segs.size() > d->new_segs.size()) ?
d->new_segs.size() : d->old_segs.size();
for (size_t j = 0; j < seg_max; j++) {
- struct nirt_seg_diff *sd = _nirt_segs_diff(nss, d->old_segs[j],
d->new_segs[j]);
- if (sd) d->diffs.push_back(sd);
+ _nirt_segs_diff(d, &d->old_segs[j], &d->new_segs[j]);
}
if (d->diffs.size() > 0 && !did_header) {
- bu_vls_printf(&dreport, "Diff Results (%s):\n",
bu_vls_addr(nss->i->diff_file));
+ bu_vls_printf(&dreport, "Diff Results (%s):\n",
bu_vls_addr(&nds->diff_file));
did_header = 1;
}
if (d->diffs.size() > 0) bu_vls_printf(&dreport, "Found differences
along Ray:\n xyz %.17f %.17f %.17f\n dir %.17f %.17f %.17f\n \n",
V3ARGS(d->orig), V3ARGS(d->dir));
for (size_t j = 0; j < d->diffs.size(); j++) {
- struct nirt_seg_diff *sd = d->diffs[j];
+ struct nirt_seg_diff *sd = &d->diffs[j];
struct nirt_seg *left = sd->left;
struct nirt_seg *right = sd->right;
if (left->type != right->type) {
@@ -345,100 +341,100 @@
}
switch (sd->left->type) {
case NIRT_MISS_SEG:
- if (!nss->i->diff_settings->report_misses) continue;
+ if (!nds->report_misses) continue;
/* TODO */
break;
case NIRT_PARTITION_SEG:
- if (!nss->i->diff_settings->report_partitions) continue;
+ if (!nds->report_partitions) continue;
bu_vls_printf(&dreport, " Segment difference(%s)[%zu]:\n",
_nirt_seg_string(sd->left->type), j);
- if (bu_vls_strcmp(left->reg_name, right->reg_name) &&
nss->i->diff_settings->report_partition_reg_names) {
+ if (bu_vls_strcmp(left->reg_name, right->reg_name) &&
nds->report_partition_reg_names) {
bu_vls_printf(&dreport, " Region Name: '%s' ->
'%s'\n", bu_vls_addr(left->reg_name), bu_vls_addr(right->reg_name));
reporting_diff = 1;
}
- if (bu_vls_strcmp(left->path_name, right->path_name) &&
nss->i->diff_settings->report_partition_path_names) {
+ if (bu_vls_strcmp(left->path_name, right->path_name) &&
nds->report_partition_path_names) {
bu_vls_printf(&dreport, " Path Name: '%s' ->
'%s'\n", bu_vls_addr(left->path_name), bu_vls_addr(right->path_name));
reporting_diff = 1;
}
- if (left->reg_id != right->reg_id &&
nss->i->diff_settings->report_partition_reg_ids) {
+ if (left->reg_id != right->reg_id &&
nds->report_partition_reg_ids) {
bu_vls_printf(&dreport, " Region ID: %d -> %d\n",
left->reg_id, right->reg_id);
reporting_diff = 1;
}
- if (sd->in_delta > nss->i->diff_settings->dist_delta_tol &&
nss->i->diff_settings->report_partition_dists) {
- std::string oval = _nirt_dbl_to_str(sd->in_delta,
_nirt_digits(nss->i->diff_settings->dist_delta_tol));
+ if (sd->in_delta > nds->dist_delta_tol &&
nds->report_partition_dists) {
+ std::string oval = _nirt_dbl_to_str(sd->in_delta,
_nirt_digits(nds->dist_delta_tol));
bu_vls_printf(&dreport, "
DIST_PNT_PNT(in_old,in_new): %s\n", oval.c_str());
reporting_diff = 1;
}
- if (sd->out_delta > nss->i->diff_settings->dist_delta_tol
&& nss->i->diff_settings->report_partition_dists) {
- std::string oval = _nirt_dbl_to_str(sd->out_delta,
_nirt_digits(nss->i->diff_settings->dist_delta_tol));
+ if (sd->out_delta > nds->dist_delta_tol &&
nds->report_partition_dists) {
+ std::string oval = _nirt_dbl_to_str(sd->out_delta,
_nirt_digits(nds->dist_delta_tol));
bu_vls_printf(&dreport, "
DIST_PNT_PNT(out_old,out_new): %s\n", oval.c_str());
reporting_diff = 1;
}
- if (sd->los_delta > nss->i->diff_settings->los_delta_tol &&
nss->i->diff_settings->report_partition_dists) {
- std::string oval = _nirt_dbl_to_str(sd->los_delta,
_nirt_digits(nss->i->diff_settings->los_delta_tol));
+ if (sd->los_delta > nds->los_delta_tol &&
nds->report_partition_dists) {
+ std::string oval = _nirt_dbl_to_str(sd->los_delta,
_nirt_digits(nds->los_delta_tol));
bu_vls_printf(&dreport, " Line-Of-Sight(LOS) %s:
%s\n", delta_str, oval.c_str());
reporting_diff = 1;
}
- if (sd->scaled_los_delta >
nss->i->diff_settings->scaled_los_delta_tol &&
nss->i->diff_settings->report_partition_dists) {
- std::string oval =
_nirt_dbl_to_str(sd->scaled_los_delta,
_nirt_digits(nss->i->diff_settings->los_delta_tol));
+ if (sd->scaled_los_delta > nds->scaled_los_delta_tol &&
nds->report_partition_dists) {
+ std::string oval =
_nirt_dbl_to_str(sd->scaled_los_delta, _nirt_digits(nds->los_delta_tol));
bu_vls_printf(&dreport, " Scaled Line-Of-Sight %s:
%s\n", delta_str, oval.c_str());
reporting_diff = 1;
}
- if (sd->obliq_in_delta >
nss->i->diff_settings->obliq_delta_tol &&
nss->i->diff_settings->report_partition_obliq) {
- std::string oval = _nirt_dbl_to_str(sd->obliq_in_delta,
_nirt_digits(nss->i->diff_settings->obliq_delta_tol));
+ if (sd->obliq_in_delta > nds->obliq_delta_tol &&
nds->report_partition_obliq) {
+ std::string oval = _nirt_dbl_to_str(sd->obliq_in_delta,
_nirt_digits(nds->obliq_delta_tol));
bu_vls_printf(&dreport, " Input Normal Obliquity %s:
%s\n", delta_str, oval.c_str());
reporting_diff = 1;
}
- if (sd->obliq_out_delta >
nss->i->diff_settings->obliq_delta_tol &&
nss->i->diff_settings->report_partition_obliq) {
- std::string oval =
_nirt_dbl_to_str(sd->obliq_out_delta,
_nirt_digits(nss->i->diff_settings->obliq_delta_tol));
+ if (sd->obliq_out_delta > nds->obliq_delta_tol &&
nds->report_partition_obliq) {
+ std::string oval =
_nirt_dbl_to_str(sd->obliq_out_delta, _nirt_digits(nds->obliq_delta_tol));
bu_vls_printf(&dreport, " Output Normal Obliquity
%s: %s\n", delta_str, oval.c_str());
reporting_diff = 1;
}
break;
case NIRT_GAP_SEG:
- if (!nss->i->diff_settings->report_gaps) continue;
+ if (!nds->report_gaps) continue;
bu_vls_printf(&dreport, " Segment difference(%s)[%zu]:\n",
_nirt_seg_string(sd->left->type), j);
- if (sd->gap_in_delta >
nss->i->diff_settings->dist_delta_tol &&
nss->i->diff_settings->report_gap_dists) {
- std::string oval = _nirt_dbl_to_str(sd->gap_in_delta,
_nirt_digits(nss->i->diff_settings->dist_delta_tol));
+ if (sd->gap_in_delta > nds->dist_delta_tol &&
nds->report_gap_dists) {
+ std::string oval = _nirt_dbl_to_str(sd->gap_in_delta,
_nirt_digits(nds->dist_delta_tol));
bu_vls_printf(&dreport, "
DIST_PNT_PNT(gap_in_old,gap_in_new): %s\n", oval.c_str());
reporting_diff = 1;
}
- if (sd->gap_los_delta >
nss->i->diff_settings->los_delta_tol &&
nss->i->diff_settings->report_gap_dists) {
- std::string oval = _nirt_dbl_to_str(sd->gap_los_delta,
_nirt_digits(nss->i->diff_settings->los_delta_tol));
+ if (sd->gap_los_delta > nds->los_delta_tol &&
nds->report_gap_dists) {
+ std::string oval = _nirt_dbl_to_str(sd->gap_los_delta,
_nirt_digits(nds->los_delta_tol));
bu_vls_printf(&dreport, " Gap Line-Of-Sight (LOS)
%s: %s\n", delta_str, oval.c_str());
reporting_diff = 1;
}
break;
case NIRT_OVERLAP_SEG:
- if (!nss->i->diff_settings->report_overlaps) continue;
+ if (!nds->report_overlaps) continue;
bu_vls_printf(&dreport, " Segment difference(%s)[%zu]:\n",
_nirt_seg_string(sd->left->type), j);
- if (bu_vls_strcmp(left->ov_reg1_name, right->ov_reg1_name)
&& nss->i->diff_settings->report_overlap_reg_names) {
+ if (bu_vls_strcmp(left->ov_reg1_name, right->ov_reg1_name)
&& nds->report_overlap_reg_names) {
bu_vls_printf(&dreport, " Region 1 Name: '%s' ->
'%s'\n", bu_vls_addr(left->ov_reg1_name), bu_vls_addr(right->ov_reg1_name));
reporting_diff = 1;
}
- if (bu_vls_strcmp(left->ov_reg2_name, right->ov_reg2_name)
&& nss->i->diff_settings->report_overlap_reg_names) {
+ if (bu_vls_strcmp(left->ov_reg2_name, right->ov_reg2_name)
&& nds->report_overlap_reg_names) {
bu_vls_printf(&dreport, " Region 2 Name: '%s' ->
'%s'\n", bu_vls_addr(left->ov_reg2_name), bu_vls_addr(right->ov_reg2_name));
reporting_diff = 1;
}
- if (left->ov_reg1_id != right->ov_reg1_id &&
nss->i->diff_settings->report_overlap_reg_ids) {
+ if (left->ov_reg1_id != right->ov_reg1_id &&
nds->report_overlap_reg_ids) {
bu_vls_printf(&dreport, " Region 1 ID: %d -> %d\n",
left->ov_reg1_id, right->ov_reg1_id);
reporting_diff = 1;
}
- if (left->ov_reg2_id != right->ov_reg2_id &&
nss->i->diff_settings->report_overlap_reg_ids) {
+ if (left->ov_reg2_id != right->ov_reg2_id &&
nds->report_overlap_reg_ids) {
bu_vls_printf(&dreport, " Region 2 ID: %d -> %d\n",
left->ov_reg2_id, right->ov_reg2_id);
reporting_diff = 1;
}
- if (sd->ov_in_delta > nss->i->diff_settings->dist_delta_tol
&& nss->i->diff_settings->report_overlap_dists) {
- std::string oval = _nirt_dbl_to_str(sd->ov_in_delta,
_nirt_digits(nss->i->diff_settings->dist_delta_tol));
+ if (sd->ov_in_delta > nds->dist_delta_tol &&
nds->report_overlap_dists) {
+ std::string oval = _nirt_dbl_to_str(sd->ov_in_delta,
_nirt_digits(nds->dist_delta_tol));
bu_vls_printf(&dreport, " DIST_PNT_PNT(ov_in_old,
ov_in_new): %s\n", oval.c_str());
reporting_diff = 1;
}
- if (sd->ov_out_delta >
nss->i->diff_settings->dist_delta_tol &&
nss->i->diff_settings->report_overlap_dists) {
- std::string oval = _nirt_dbl_to_str(sd->ov_out_delta,
_nirt_digits(nss->i->diff_settings->dist_delta_tol));
+ if (sd->ov_out_delta > nds->dist_delta_tol &&
nds->report_overlap_dists) {
+ std::string oval = _nirt_dbl_to_str(sd->ov_out_delta,
_nirt_digits(nds->dist_delta_tol));
bu_vls_printf(&dreport, " DIST_PNT_PNT(ov_out_old,
ov_out_new): %s\n", oval.c_str());
reporting_diff = 1;
}
- if (sd->ov_los_delta > nss->i->diff_settings->los_delta_tol
&& nss->i->diff_settings->report_overlap_dists) {
- std::string oval = _nirt_dbl_to_str(sd->ov_los_delta,
_nirt_digits(nss->i->diff_settings->los_delta_tol));
+ if (sd->ov_los_delta > nds->los_delta_tol &&
nds->report_overlap_dists) {
+ std::string oval = _nirt_dbl_to_str(sd->ov_los_delta,
_nirt_digits(nds->los_delta_tol));
bu_vls_printf(&dreport, " Overlap Line-Of-Sight
(LOS) %s: %s\n", delta_str, oval.c_str());
reporting_diff = 1;
}
@@ -448,9 +444,6 @@
return 0;
}
}
- for (size_t j = 0; j < d->diffs.size(); j++) {
- SD_FREE(d->diffs[j]);
- }
d->diffs.clear();
}
@@ -471,6 +464,7 @@
{
if (!ns) return -1;
struct nirt_state *nss = (struct nirt_state *)ns;
+ struct nirt_diff_state *nds = nss->i->diff_state;
int ac = 0;
int print_help = 0;
double tol = 0;
@@ -512,7 +506,7 @@
return -1;
}
- if (nss->i->diff_ready) {
+ if (nds->diff_ready) {
nerr(nss, "Diff file already loaded. To reset, run \"diff
clear\"\n");
return -1;
}
@@ -537,11 +531,10 @@
nss->i->ap->a_resource = _nirt_get_resource(nss);
}
- bu_vls_sprintf(nss->i->diff_file, "%s", argv[0]);
- nss->i->diff_run = 1;
+ bu_vls_sprintf(&nds->diff_file, "%s", argv[0]);
+ // TODO - temporarily suppress all formatting output for a silent diff
run...
have_ray = 0;
while (std::getline(ifs, line)) {
- struct nirt_diff *df;
/* If part of the line is commented, skip that part */
cmt = _nirt_find_first_unescaped(line, "#", 0);
@@ -581,10 +574,10 @@
// TODO - rethink this container...
_nirt_init_ovlp(nss);
(void)rt_shootray(nss->i->ap);
- nss->i->diffs.push_back(nss->i->cdiff);
}
// Read ray
- df = new struct nirt_diff;
+ struct nirt_diff df;
+ df.nds = nds;
// TODO - once we go to C++11, used std::regex_search and
std::smatch to more flexibly get a substring
std::string rstr = line.substr(7);
have_ray = 1;
@@ -591,21 +584,21 @@
std::vector<std::string> substrs = _nirt_string_split(rstr);
if (substrs.size() != 6) {
nerr(nss, "Error processing ray line \"%s\"!\nExpected 6
elements, found %zu\n", line.c_str(), substrs.size());
- delete df;
return -1;
}
- VSET(df->orig, _nirt_str_to_dbl(substrs[0], 0),
_nirt_str_to_dbl(substrs[1], 0), _nirt_str_to_dbl(substrs[2], 0));
- VSET(df->dir, _nirt_str_to_dbl(substrs[3], 0),
_nirt_str_to_dbl(substrs[4], 0), _nirt_str_to_dbl(substrs[5], 0));
- VMOVE(nss->i->vals->dir, df->dir);
- VMOVE(nss->i->vals->orig, df->orig);
+ VSET(df.orig, _nirt_str_to_dbl(substrs[0], 0),
_nirt_str_to_dbl(substrs[1], 0), _nirt_str_to_dbl(substrs[2], 0));
+ VSET(df.dir, _nirt_str_to_dbl(substrs[3], 0),
_nirt_str_to_dbl(substrs[4], 0), _nirt_str_to_dbl(substrs[5], 0));
+ VMOVE(nss->i->vals->dir, df.dir);
+ VMOVE(nss->i->vals->orig, df.orig);
#ifdef NIRT_DIFF_DEBUG
bu_log("Found RAY:\n");
- bu_log("origin : %0.17f, %0.17f, %0.17f\n", V3ARGS(df->orig));
- bu_log("direction: %0.17f, %0.17f, %0.17f\n", V3ARGS(df->dir));
+ bu_log("origin : %0.17f, %0.17f, %0.17f\n", V3ARGS(df.orig));
+ bu_log("direction: %0.17f, %0.17f, %0.17f\n", V3ARGS(df.dir));
#endif
_nirt_targ2grid(nss);
_nirt_dir2ae(nss);
- nss->i->cdiff = df;
+ nds->diffs.push_back(df);
+ nds->cdiff = &nds->diffs[nds->diffs.size() - 1];
continue;
}
@@ -623,33 +616,35 @@
nerr(nss, "Error processing hit line \"%s\"!\nExpected 15
elements, found %zu\n", hstr.c_str(), substrs.size());
return -1;
}
- struct nirt_seg *seg;
- _nirt_seg_init(&seg);
- seg->type = NIRT_PARTITION_SEG;
- bu_vls_decode(seg->reg_name, substrs[0].c_str());
- //bu_vls_printf(seg->reg_name, "%s", substrs[0].c_str());
- bu_vls_decode(seg->path_name, substrs[1].c_str());
- seg->reg_id = _nirt_str_to_int(substrs[2]);
- VSET(seg->in, _nirt_str_to_dbl(substrs[3], 0),
_nirt_str_to_dbl(substrs[4], 0), _nirt_str_to_dbl(substrs[5], 0));
- seg->d_in = _nirt_str_to_dbl(substrs[6], 0);
- VSET(seg->out, _nirt_str_to_dbl(substrs[7], 0),
_nirt_str_to_dbl(substrs[8], 0), _nirt_str_to_dbl(substrs[9], 0));
- seg->d_out = _nirt_str_to_dbl(substrs[10], 0);
- seg->los = _nirt_str_to_dbl(substrs[11], 0);
- seg->scaled_los = _nirt_str_to_dbl(substrs[12], 0);
- seg->obliq_in = _nirt_str_to_dbl(substrs[13], 0);
- seg->obliq_out = _nirt_str_to_dbl(substrs[14], 0);
+
+ struct nirt_seg seg;
+ struct nirt_seg *segp = &seg;
+ _nirt_seg_init(&segp);
+ seg.type = NIRT_PARTITION_SEG;
+ bu_vls_decode(seg.reg_name, substrs[0].c_str());
+ //bu_vls_printf(seg.reg_name, "%s", substrs[0].c_str());
+ bu_vls_decode(seg.path_name, substrs[1].c_str());
+ seg.reg_id = _nirt_str_to_int(substrs[2]);
+ VSET(seg.in, _nirt_str_to_dbl(substrs[3], 0),
_nirt_str_to_dbl(substrs[4], 0), _nirt_str_to_dbl(substrs[5], 0));
+ seg.d_in = _nirt_str_to_dbl(substrs[6], 0);
+ VSET(seg.out, _nirt_str_to_dbl(substrs[7], 0),
_nirt_str_to_dbl(substrs[8], 0), _nirt_str_to_dbl(substrs[9], 0));
+ seg.d_out = _nirt_str_to_dbl(substrs[10], 0);
+ seg.los = _nirt_str_to_dbl(substrs[11], 0);
+ seg.scaled_los = _nirt_str_to_dbl(substrs[12], 0);
+ seg.obliq_in = _nirt_str_to_dbl(substrs[13], 0);
+ seg.obliq_out = _nirt_str_to_dbl(substrs[14], 0);
#ifdef NIRT_DIFF_DEBUG
bu_log("Found %s:\n", line.c_str());
- bu_log(" reg_name: %s\n", bu_vls_addr(seg->reg_name));
- bu_log(" path_name: %s\n", bu_vls_addr(seg->path_name));
- bu_log(" reg_id: %d\n", seg->reg_id);
- bu_log(" in: %0.17f, %0.17f, %0.17f\n", V3ARGS(seg->in));
- bu_log(" out: %0.17f, %0.17f, %0.17f\n", V3ARGS(seg->out));
- bu_log(" d_in: %0.17f d_out: %0.17f\n", seg->d_in, seg->d_out);
- bu_log(" los: %0.17f scaled_los: %0.17f\n", seg->los,
seg->scaled_los);
- bu_log(" obliq_in: %0.17f obliq_out: %0.17f\n",
seg->obliq_in, seg->obliq_out);
+ bu_log(" reg_name: %s\n", bu_vls_addr(seg.reg_name));
+ bu_log(" path_name: %s\n", bu_vls_addr(seg.path_name));
+ bu_log(" reg_id: %d\n", seg.reg_id);
+ bu_log(" in: %0.17f, %0.17f, %0.17f\n", V3ARGS(seg.in));
+ bu_log(" out: %0.17f, %0.17f, %0.17f\n", V3ARGS(seg.out));
+ bu_log(" d_in: %0.17f d_out: %0.17f\n", seg.d_in, seg.d_out);
+ bu_log(" los: %0.17f scaled_los: %0.17f\n", seg.los,
seg.scaled_los);
+ bu_log(" obliq_in: %0.17f obliq_out: %0.17f\n", seg.obliq_in,
seg.obliq_out);
#endif
- nss->i->cdiff->old_segs.push_back(seg);
+ nds->cdiff->old_segs.push_back(seg);
continue;
}
@@ -667,19 +662,20 @@
nerr(nss, "Error processing gap line \"%s\"!\nExpected 7
elements, found %zu\n", gstr.c_str(), substrs.size());
return -1;
}
- struct nirt_seg *seg;
- _nirt_seg_init(&seg);
- seg->type = NIRT_GAP_SEG;
- VSET(seg->gap_in, _nirt_str_to_dbl(substrs[0], 0),
_nirt_str_to_dbl(substrs[1], 0), _nirt_str_to_dbl(substrs[2], 0));
- VSET(seg->in, _nirt_str_to_dbl(substrs[3], 0),
_nirt_str_to_dbl(substrs[4], 0), _nirt_str_to_dbl(substrs[5], 0));
- seg->gap_los = _nirt_str_to_dbl(substrs[6], 0);
+ struct nirt_seg seg;
+ struct nirt_seg *segp = &seg;
+ _nirt_seg_init(&segp);
+ seg.type = NIRT_GAP_SEG;
+ VSET(seg.gap_in, _nirt_str_to_dbl(substrs[0], 0),
_nirt_str_to_dbl(substrs[1], 0), _nirt_str_to_dbl(substrs[2], 0));
+ VSET(seg.in, _nirt_str_to_dbl(substrs[3], 0),
_nirt_str_to_dbl(substrs[4], 0), _nirt_str_to_dbl(substrs[5], 0));
+ seg.gap_los = _nirt_str_to_dbl(substrs[6], 0);
#ifdef NIRT_DIFF_DEBUG
bu_log("Found %s:\n", line.c_str());
- bu_log(" in: %0.17f, %0.17f, %0.17f\n", V3ARGS(seg->gap_in));
- bu_log(" out: %0.17f, %0.17f, %0.17f\n", V3ARGS(seg->in));
- bu_log(" gap_los: %0.17f\n", seg->gap_los);
+ bu_log(" in: %0.17f, %0.17f, %0.17f\n", V3ARGS(seg.gap_in));
+ bu_log(" out: %0.17f, %0.17f, %0.17f\n", V3ARGS(seg.in));
+ bu_log(" gap_los: %0.17f\n", seg.gap_los);
#endif
- nss->i->cdiff->old_segs.push_back(seg);
+ nds->cdiff->old_segs.push_back(seg);
continue;
}
@@ -690,14 +686,15 @@
return -1;
}
- struct nirt_seg *seg;
- _nirt_seg_init(&seg);
- seg->type = NIRT_MISS_SEG;
+ struct nirt_seg seg;
+ struct nirt_seg *segp = &seg;
+ _nirt_seg_init(&segp);
+ seg.type = NIRT_MISS_SEG;
#ifdef NIRT_DIFF_DEBUG
bu_log("Found MISS\n");
#endif
have_ray = 0;
- nss->i->cdiff->old_segs.push_back(seg);
+ nds->cdiff->old_segs.push_back(seg);
continue;
}
@@ -715,27 +712,28 @@
nerr(nss, "Error processing overlap line \"%s\"!\nExpected
11 elements, found %zu\n", ostr.c_str(), substrs.size());
return -1;
}
- struct nirt_seg *seg;
- _nirt_seg_init(&seg);
- seg->type = NIRT_OVERLAP_SEG;
- bu_vls_decode(seg->ov_reg1_name, substrs[0].c_str());
- bu_vls_decode(seg->ov_reg2_name, substrs[1].c_str());
- seg->ov_reg1_id = _nirt_str_to_int(substrs[2]);
- seg->ov_reg2_id = _nirt_str_to_int(substrs[3]);
- VSET(seg->ov_in, _nirt_str_to_dbl(substrs[4], 0),
_nirt_str_to_dbl(substrs[5], 0), _nirt_str_to_dbl(substrs[6], 0));
- VSET(seg->ov_out, _nirt_str_to_dbl(substrs[7], 0),
_nirt_str_to_dbl(substrs[8], 0), _nirt_str_to_dbl(substrs[9], 0));
- seg->ov_los = _nirt_str_to_dbl(substrs[10], 0);
+ struct nirt_seg seg;
+ struct nirt_seg *segp = &seg;
+ _nirt_seg_init(&segp);
+ seg.type = NIRT_OVERLAP_SEG;
+ bu_vls_decode(seg.ov_reg1_name, substrs[0].c_str());
+ bu_vls_decode(seg.ov_reg2_name, substrs[1].c_str());
+ seg.ov_reg1_id = _nirt_str_to_int(substrs[2]);
+ seg.ov_reg2_id = _nirt_str_to_int(substrs[3]);
+ VSET(seg.ov_in, _nirt_str_to_dbl(substrs[4], 0),
_nirt_str_to_dbl(substrs[5], 0), _nirt_str_to_dbl(substrs[6], 0));
+ VSET(seg.ov_out, _nirt_str_to_dbl(substrs[7], 0),
_nirt_str_to_dbl(substrs[8], 0), _nirt_str_to_dbl(substrs[9], 0));
+ seg.ov_los = _nirt_str_to_dbl(substrs[10], 0);
#ifdef NIRT_DIFF_DEBUG
bu_log("Found %s:\n", line.c_str());
- bu_log(" ov_reg1_name: %s\n", bu_vls_addr(seg->ov_reg1_name));
- bu_log(" ov_reg2_name: %s\n", bu_vls_addr(seg->ov_reg2_name));
- bu_log(" ov_reg1_id: %d\n", seg->ov_reg1_id);
- bu_log(" ov_reg2_id: %d\n", seg->ov_reg2_id);
- bu_log(" ov_in: %0.17f, %0.17f, %0.17f\n", V3ARGS(seg->ov_in));
- bu_log(" ov_out: %0.17f, %0.17f, %0.17f\n",
V3ARGS(seg->ov_out));
- bu_log(" ov_los: %0.17f\n", seg->ov_los);
+ bu_log(" ov_reg1_name: %s\n", bu_vls_addr(seg.ov_reg1_name));
+ bu_log(" ov_reg2_name: %s\n", bu_vls_addr(seg.ov_reg2_name));
+ bu_log(" ov_reg1_id: %d\n", seg.ov_reg1_id);
+ bu_log(" ov_reg2_id: %d\n", seg.ov_reg2_id);
+ bu_log(" ov_in: %0.17f, %0.17f, %0.17f\n", V3ARGS(seg.ov_in));
+ bu_log(" ov_out: %0.17f, %0.17f, %0.17f\n",
V3ARGS(seg.ov_out));
+ bu_log(" ov_los: %0.17f\n", seg.ov_los);
#endif
- nss->i->cdiff->old_segs.push_back(seg);
+ nds->cdiff->old_segs.push_back(seg);
continue;
}
#ifdef NIRT_DIFF_DEBUG
@@ -752,7 +750,6 @@
// TODO - rethink this container...
_nirt_init_ovlp(nss);
(void)rt_shootray(nss->i->ap);
- nss->i->diffs.push_back(nss->i->cdiff);
// Thought - if we have rays but no pre-defined output, write out
the
// expected output to stdout - in this mode diff will generate a
diff
@@ -762,15 +759,14 @@
ifs.close();
// Done with if_hit and friends
- nss->i->cdiff = NULL;
- nss->i->diff_run = 0;
- nss->i->diff_ready = 1;
+ nds->cdiff = NULL;
+ nds->diff_ready = 1;
return 0;
}
if (BU_STR_EQUAL(argv[0], "report")) {
// Report diff results according to the NIRT diff settings.
- if (!nss->i->diff_ready) {
+ if (!nds->diff_ready) {
nerr(nss, "No diff file loaded - please load a diff file with
\"diff load <filename>\"\n");
return -1;
} else {
@@ -779,19 +775,8 @@
}
if (BU_STR_EQUAL(argv[0], "clear")) {
- // need clear command to scrub old nss->i->diffs
- for (size_t i = 0; i < nss->i->diffs.size(); i++) {
- struct nirt_diff *df = nss->i->diffs[i];
- for (size_t j = 0; j < df->old_segs.size(); j++) {
- _nirt_seg_free(df->old_segs[j]);
- }
- for (size_t j = 0; j < df->new_segs.size(); j++) {
- _nirt_seg_free(df->new_segs[j]);
- }
- delete nss->i->diffs[i];
- }
- nss->i->diffs.clear();
- nss->i->diff_ready = 0;
+ nds->diffs.clear();
+ nds->diff_ready = false;
return 0;
}
@@ -799,74 +784,74 @@
ac--; argv++;
if (!ac) {
//print current settings
- nout(nss, "report_partitions: %d\n",
nss->i->diff_settings->report_partitions);
- nout(nss, "report_misses: %d\n",
nss->i->diff_settings->report_misses);
- nout(nss, "report_gaps: %d\n",
nss->i->diff_settings->report_gaps);
- nout(nss, "report_overlaps: %d\n",
nss->i->diff_settings->report_overlaps);
- nout(nss, "report_partition_reg_ids: %d\n",
nss->i->diff_settings->report_partition_reg_ids);
- nout(nss, "report_partition_reg_names: %d\n",
nss->i->diff_settings->report_partition_reg_names);
- nout(nss, "report_partition_path_names: %d\n",
nss->i->diff_settings->report_partition_path_names);
- nout(nss, "report_partition_dists: %d\n",
nss->i->diff_settings->report_partition_dists);
- nout(nss, "report_partition_obliq: %d\n",
nss->i->diff_settings->report_partition_obliq);
- nout(nss, "report_overlap_reg_names: %d\n",
nss->i->diff_settings->report_overlap_reg_names);
- nout(nss, "report_overlap_reg_ids: %d\n",
nss->i->diff_settings->report_overlap_reg_ids);
- nout(nss, "report_overlap_dists: %d\n",
nss->i->diff_settings->report_overlap_dists);
- nout(nss, "report_overlap_obliq: %d\n",
nss->i->diff_settings->report_overlap_obliq);
- nout(nss, "report_gap_dists: %d\n",
nss->i->diff_settings->report_gap_dists);
- nout(nss, "dist_delta_tol: %g\n",
nss->i->diff_settings->dist_delta_tol);
- nout(nss, "obliq_delta_tol: %g\n",
nss->i->diff_settings->obliq_delta_tol);
- nout(nss, "los_delta_tol: %g\n",
nss->i->diff_settings->los_delta_tol);
- nout(nss, "scaled_los_delta_tol: %g\n",
nss->i->diff_settings->scaled_los_delta_tol);
+ nout(nss, "report_partitions: %d\n",
nds->report_partitions);
+ nout(nss, "report_misses: %d\n", nds->report_misses);
+ nout(nss, "report_gaps: %d\n", nds->report_gaps);
+ nout(nss, "report_overlaps: %d\n",
nds->report_overlaps);
+ nout(nss, "report_partition_reg_ids: %d\n",
nds->report_partition_reg_ids);
+ nout(nss, "report_partition_reg_names: %d\n",
nds->report_partition_reg_names);
+ nout(nss, "report_partition_path_names: %d\n",
nds->report_partition_path_names);
+ nout(nss, "report_partition_dists: %d\n",
nds->report_partition_dists);
+ nout(nss, "report_partition_obliq: %d\n",
nds->report_partition_obliq);
+ nout(nss, "report_overlap_reg_names: %d\n",
nds->report_overlap_reg_names);
+ nout(nss, "report_overlap_reg_ids: %d\n",
nds->report_overlap_reg_ids);
+ nout(nss, "report_overlap_dists: %d\n",
nds->report_overlap_dists);
+ nout(nss, "report_overlap_obliq: %d\n",
nds->report_overlap_obliq);
+ nout(nss, "report_gap_dists: %d\n",
nds->report_gap_dists);
+ nout(nss, "dist_delta_tol: %g\n", nds->dist_delta_tol);
+ nout(nss, "obliq_delta_tol: %g\n",
nds->obliq_delta_tol);
+ nout(nss, "los_delta_tol: %g\n", nds->los_delta_tol);
+ nout(nss, "scaled_los_delta_tol: %g\n",
nds->scaled_los_delta_tol);
return 0;
}
if (ac == 1) {
//print specific setting
- if (BU_STR_EQUAL(argv[0], "report_partitions")) nout(nss,
"%d\n", nss->i->diff_settings->report_partitions);
- if (BU_STR_EQUAL(argv[0], "report_misses")) nout(nss,
"%d\n", nss->i->diff_settings->report_misses);
- if (BU_STR_EQUAL(argv[0], "report_gaps")) nout(nss,
"%d\n", nss->i->diff_settings->report_gaps);
- if (BU_STR_EQUAL(argv[0], "report_overlaps")) nout(nss,
"%d\n", nss->i->diff_settings->report_overlaps);
- if (BU_STR_EQUAL(argv[0], "report_partition_reg_ids")) nout(nss,
"%d\n", nss->i->diff_settings->report_partition_reg_ids);
- if (BU_STR_EQUAL(argv[0], "report_partition_reg_names")) nout(nss,
"%d\n", nss->i->diff_settings->report_partition_reg_names);
- if (BU_STR_EQUAL(argv[0], "report_partition_path_names")) nout(nss,
"%d\n", nss->i->diff_settings->report_partition_path_names);
- if (BU_STR_EQUAL(argv[0], "report_partition_dists")) nout(nss,
"%d\n", nss->i->diff_settings->report_partition_dists);
- if (BU_STR_EQUAL(argv[0], "report_partition_obliq")) nout(nss,
"%d\n", nss->i->diff_settings->report_partition_obliq);
- if (BU_STR_EQUAL(argv[0], "report_overlap_reg_names")) nout(nss,
"%d\n", nss->i->diff_settings->report_overlap_reg_names);
- if (BU_STR_EQUAL(argv[0], "report_overlap_reg_ids")) nout(nss,
"%d\n", nss->i->diff_settings->report_overlap_reg_ids);
- if (BU_STR_EQUAL(argv[0], "report_overlap_dists")) nout(nss,
"%d\n", nss->i->diff_settings->report_overlap_dists);
- if (BU_STR_EQUAL(argv[0], "report_overlap_obliq")) nout(nss,
"%d\n", nss->i->diff_settings->report_overlap_obliq);
- if (BU_STR_EQUAL(argv[0], "report_gap_dists")) nout(nss,
"%d\n", nss->i->diff_settings->report_gap_dists);
- if (BU_STR_EQUAL(argv[0], "dist_delta_tol")) nout(nss,
"%g\n", nss->i->diff_settings->dist_delta_tol);
- if (BU_STR_EQUAL(argv[0], "obliq_delta_tol")) nout(nss,
"%g\n", nss->i->diff_settings->obliq_delta_tol);
- if (BU_STR_EQUAL(argv[0], "los_delta_tol")) nout(nss,
"%g\n", nss->i->diff_settings->los_delta_tol);
- if (BU_STR_EQUAL(argv[0], "scaled_los_delta_tol")) nout(nss,
"%g\n", nss->i->diff_settings->scaled_los_delta_tol);
+ if (BU_STR_EQUAL(argv[0], "report_partitions")) nout(nss,
"%d\n", nds->report_partitions);
+ if (BU_STR_EQUAL(argv[0], "report_misses")) nout(nss,
"%d\n", nds->report_misses);
+ if (BU_STR_EQUAL(argv[0], "report_gaps")) nout(nss,
"%d\n", nds->report_gaps);
+ if (BU_STR_EQUAL(argv[0], "report_overlaps")) nout(nss,
"%d\n", nds->report_overlaps);
+ if (BU_STR_EQUAL(argv[0], "report_partition_reg_ids")) nout(nss,
"%d\n", nds->report_partition_reg_ids);
+ if (BU_STR_EQUAL(argv[0], "report_partition_reg_names")) nout(nss,
"%d\n", nds->report_partition_reg_names);
+ if (BU_STR_EQUAL(argv[0], "report_partition_path_names")) nout(nss,
"%d\n", nds->report_partition_path_names);
+ if (BU_STR_EQUAL(argv[0], "report_partition_dists")) nout(nss,
"%d\n", nds->report_partition_dists);
+ if (BU_STR_EQUAL(argv[0], "report_partition_obliq")) nout(nss,
"%d\n", nds->report_partition_obliq);
+ if (BU_STR_EQUAL(argv[0], "report_overlap_reg_names")) nout(nss,
"%d\n", nds->report_overlap_reg_names);
+ if (BU_STR_EQUAL(argv[0], "report_overlap_reg_ids")) nout(nss,
"%d\n", nds->report_overlap_reg_ids);
+ if (BU_STR_EQUAL(argv[0], "report_overlap_dists")) nout(nss,
"%d\n", nds->report_overlap_dists);
+ if (BU_STR_EQUAL(argv[0], "report_overlap_obliq")) nout(nss,
"%d\n", nds->report_overlap_obliq);
+ if (BU_STR_EQUAL(argv[0], "report_gap_dists")) nout(nss,
"%d\n", nds->report_gap_dists);
+ if (BU_STR_EQUAL(argv[0], "dist_delta_tol")) nout(nss,
"%g\n", nds->dist_delta_tol);
+ if (BU_STR_EQUAL(argv[0], "obliq_delta_tol")) nout(nss,
"%g\n", nds->obliq_delta_tol);
+ if (BU_STR_EQUAL(argv[0], "los_delta_tol")) nout(nss,
"%g\n", nds->los_delta_tol);
+ if (BU_STR_EQUAL(argv[0], "scaled_los_delta_tol")) nout(nss,
"%g\n", nds->scaled_los_delta_tol);
return 0;
}
if (ac == 2) {
//set setting
struct bu_vls opt_msg = BU_VLS_INIT_ZERO;
- int *setting_int = NULL;
+ bool *setting_bool = NULL;
fastf_t *setting_fastf_t = NULL;
- if (BU_STR_EQUAL(argv[0], "report_partitions"))
setting_int = &(nss->i->diff_settings->report_partitions);
- if (BU_STR_EQUAL(argv[0], "report_misses"))
setting_int = &(nss->i->diff_settings->report_misses);
- if (BU_STR_EQUAL(argv[0], "report_gaps"))
setting_int = &(nss->i->diff_settings->report_gaps);
- if (BU_STR_EQUAL(argv[0], "report_overlaps"))
setting_int = &(nss->i->diff_settings->report_overlaps);
- if (BU_STR_EQUAL(argv[0], "report_partition_reg_ids"))
setting_int = &(nss->i->diff_settings->report_partition_reg_ids);
- if (BU_STR_EQUAL(argv[0], "report_partition_reg_names"))
setting_int = &(nss->i->diff_settings->report_partition_reg_names);
- if (BU_STR_EQUAL(argv[0], "report_partition_path_names"))
setting_int = &(nss->i->diff_settings->report_partition_path_names);
- if (BU_STR_EQUAL(argv[0], "report_partition_dists"))
setting_int = &(nss->i->diff_settings->report_partition_dists);
- if (BU_STR_EQUAL(argv[0], "report_partition_obliq"))
setting_int = &(nss->i->diff_settings->report_partition_obliq);
- if (BU_STR_EQUAL(argv[0], "report_overlap_reg_names"))
setting_int = &(nss->i->diff_settings->report_overlap_reg_names);
- if (BU_STR_EQUAL(argv[0], "report_overlap_reg_ids"))
setting_int = &(nss->i->diff_settings->report_overlap_reg_ids);
- if (BU_STR_EQUAL(argv[0], "report_overlap_dists"))
setting_int = &(nss->i->diff_settings->report_overlap_dists);
- if (BU_STR_EQUAL(argv[0], "report_overlap_obliq"))
setting_int = &(nss->i->diff_settings->report_overlap_obliq);
- if (BU_STR_EQUAL(argv[0], "report_gap_dists"))
setting_int = &(nss->i->diff_settings->report_gap_dists);
- if (BU_STR_EQUAL(argv[0], "dist_delta_tol"))
setting_fastf_t = &(nss->i->diff_settings->dist_delta_tol);
- if (BU_STR_EQUAL(argv[0], "obliq_delta_tol"))
setting_fastf_t = &(nss->i->diff_settings->obliq_delta_tol);
- if (BU_STR_EQUAL(argv[0], "los_delta_tol"))
setting_fastf_t = &(nss->i->diff_settings->los_delta_tol);
- if (BU_STR_EQUAL(argv[0], "scaled_los_delta_tol"))
setting_fastf_t = &(nss->i->diff_settings->scaled_los_delta_tol);
+ if (BU_STR_EQUAL(argv[0], "report_partitions"))
setting_bool = &(nds->report_partitions);
+ if (BU_STR_EQUAL(argv[0], "report_misses"))
setting_bool = &(nds->report_misses);
+ if (BU_STR_EQUAL(argv[0], "report_gaps"))
setting_bool = &(nds->report_gaps);
+ if (BU_STR_EQUAL(argv[0], "report_overlaps"))
setting_bool = &(nds->report_overlaps);
+ if (BU_STR_EQUAL(argv[0], "report_partition_reg_ids"))
setting_bool = &(nds->report_partition_reg_ids);
+ if (BU_STR_EQUAL(argv[0], "report_partition_reg_names"))
setting_bool = &(nds->report_partition_reg_names);
+ if (BU_STR_EQUAL(argv[0], "report_partition_path_names"))
setting_bool = &(nds->report_partition_path_names);
+ if (BU_STR_EQUAL(argv[0], "report_partition_dists"))
setting_bool = &(nds->report_partition_dists);
+ if (BU_STR_EQUAL(argv[0], "report_partition_obliq"))
setting_bool = &(nds->report_partition_obliq);
+ if (BU_STR_EQUAL(argv[0], "report_overlap_reg_names"))
setting_bool = &(nds->report_overlap_reg_names);
+ if (BU_STR_EQUAL(argv[0], "report_overlap_reg_ids"))
setting_bool = &(nds->report_overlap_reg_ids);
+ if (BU_STR_EQUAL(argv[0], "report_overlap_dists"))
setting_bool = &(nds->report_overlap_dists);
+ if (BU_STR_EQUAL(argv[0], "report_overlap_obliq"))
setting_bool = &(nds->report_overlap_obliq);
+ if (BU_STR_EQUAL(argv[0], "report_gap_dists"))
setting_bool = &(nds->report_gap_dists);
+ if (BU_STR_EQUAL(argv[0], "dist_delta_tol"))
setting_fastf_t = &(nds->dist_delta_tol);
+ if (BU_STR_EQUAL(argv[0], "obliq_delta_tol"))
setting_fastf_t = &(nds->obliq_delta_tol);
+ if (BU_STR_EQUAL(argv[0], "los_delta_tol"))
setting_fastf_t = &(nds->los_delta_tol);
+ if (BU_STR_EQUAL(argv[0], "scaled_los_delta_tol"))
setting_fastf_t = &(nds->scaled_los_delta_tol);
- if (setting_int) {
- if (bu_opt_int(&opt_msg, 1, (const char **)&argv[1], (void
*)setting_int) == -1) {
+ if (setting_bool) {
+ if (bu_opt_bool(&opt_msg, 1, (const char **)&argv[1], (void
*)setting_bool) == -1) {
nerr(nss, "Error: bu_opt value read failure: %s\n",
bu_vls_addr(&opt_msg));
bu_vls_free(&opt_msg);
return -1;
Modified: brlcad/trunk/src/libanalyze/nirt/nirt.cpp
===================================================================
--- brlcad/trunk/src/libanalyze/nirt/nirt.cpp 2020-03-09 14:47:01 UTC (rev
75001)
+++ brlcad/trunk/src/libanalyze/nirt/nirt.cpp 2020-03-09 15:57:59 UTC (rev
75002)
@@ -1197,8 +1197,8 @@
}
vals->seg = s;
- if (!nss->i->diff_run) _nirt_report(nss, 'r', vals);
- if (!nss->i->diff_run) _nirt_report(nss, 'h', vals);
+ _nirt_report(nss, 'r', vals);
+ _nirt_report(nss, 'h', vals);
if (nss->i->overlap_claims == NIRT_OVLP_REBUILD_FASTGEN) {
rt_rebuild_overlaps(part_head, ap, 1);
@@ -1242,7 +1242,7 @@
if (s->gap_los > 0) {
s->type = NIRT_GAP_SEG;
- if (!nss->i->diff_run) _nirt_report(nss, 'g', vals);
+ _nirt_report(nss, 'g', vals);
_nirt_diff_add_seg(nss, s);
/* vlist segment for gap */
vhead = bn_vlblock_find(nss->i->segs,
nss->i->void_color->buc_rgb[RED], nss->i->void_color->buc_rgb[GRN],
nss->i->void_color->buc_rgb[BLU]);
@@ -1305,7 +1305,7 @@
}
}
- if (!nss->i->diff_run) _nirt_report(nss, 'p', vals);
+ _nirt_report(nss, 'p', vals);
/* vlist segment for hit */
if (ev_odd % 2) {
@@ -1350,7 +1350,7 @@
s->ov_d_out = vals->d_orig - ovp->out_dist; // TODO looks sketchy
in NIRT - did they really mean target(D) ?? -> (VTI_XORIG + 3 -> VTI_H)
s->ov_los = s->ov_d_in - s->ov_d_out;
- if (!nss->i->diff_run) _nirt_report(nss, 'o', vals);
+ _nirt_report(nss, 'o', vals);
/* vlist segment for overlap */
if (nss->i->plot_overlaps) {
@@ -1369,7 +1369,7 @@
}
- if (!nss->i->diff_run) _nirt_report(nss, 'f', vals);
+ _nirt_report(nss, 'f', vals);
if (vals->ovlp_list.forw != &(vals->ovlp_list)) {
nerr(nss, "Previously unreported overlaps. Shouldn't happen\n");
@@ -1390,8 +1390,8 @@
_nirt_if_miss(struct application *ap)
{
struct nirt_state *nss = (struct nirt_state *)ap->a_uptr;
- if (!nss->i->diff_run) _nirt_report(nss, 'r', nss->i->vals);
- if (!nss->i->diff_run) _nirt_report(nss, 'm', nss->i->vals);
+ _nirt_report(nss, 'r', nss->i->vals);
+ _nirt_report(nss, 'm', nss->i->vals);
// TODO - handle miss diffing...
@@ -2871,7 +2871,6 @@
bu_vls_free(ns->i->err);
bu_vls_free(ns->i->msg);
bu_vls_free(ns->i->out);
- bu_vls_free(ns->i->diff_file);
bn_vlist_cleanup(&(ns->i->s_vlist));
bn_vlblock_free(ns->i->segs);
@@ -2880,7 +2879,6 @@
db_close(ns->i->dbip);
- BU_PUT(ns->i->diff_settings, struct nirt_diff_settings);
BU_PUT(ns->i->vals, struct nirt_output_record);
BU_PUT(ns->i->res, struct resource);
@@ -2888,7 +2886,6 @@
BU_PUT(ns->i->err, struct bu_vls);
BU_PUT(ns->i->msg, struct bu_vls);
BU_PUT(ns->i->out, struct bu_vls);
- BU_PUT(ns->i->diff_file, struct bu_vls);
BU_PUT(ns->i->ap, struct application);
BU_PUT(ns->i->hit_odd_color, struct bu_color);
BU_PUT(ns->i->hit_even_color, struct bu_color);
Modified: brlcad/trunk/src/libanalyze/nirt/nirt.h
===================================================================
--- brlcad/trunk/src/libanalyze/nirt/nirt.h 2020-03-09 14:47:01 UTC (rev
75001)
+++ brlcad/trunk/src/libanalyze/nirt/nirt.h 2020-03-09 15:57:59 UTC (rev
75002)
@@ -154,7 +154,7 @@
};
-struct nirt_diff;
+struct nirt_diff_state;
struct nirt_state_impl {
/* Output options */
@@ -198,11 +198,7 @@
std::vector<std::string> active_paths; // active paths for raytracer
struct nirt_output_record *vals;
struct bu_vls *diff_file;
- struct nirt_diff *cdiff;
- std::vector<struct nirt_diff *> diffs;
- struct nirt_diff_settings *diff_settings;
- int diff_run;
- int diff_ready;
+ struct nirt_diff_state *diff_state;
/* state alteration flags */
bool b_state; // updated for any state change
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits