Revision: 52781
http://brlcad.svn.sourceforge.net/brlcad/?rev=52781&view=rev
Author: n_reed
Date: 2012-10-04 16:28:37 +0000 (Thu, 04 Oct 2012)
Log Message:
-----------
tweak logic for determining number of curve samples in adaptive plot routines
Modified Paths:
--------------
brlcad/trunk/src/librt/librt_private.h
brlcad/trunk/src/librt/primitives/ell/ell.c
brlcad/trunk/src/librt/primitives/epa/epa.c
brlcad/trunk/src/librt/primitives/primitive_util.c
brlcad/trunk/src/librt/primitives/tgc/tgc.c
Modified: brlcad/trunk/src/librt/librt_private.h
===================================================================
--- brlcad/trunk/src/librt/librt_private.h 2012-10-04 16:23:32 UTC (rev
52780)
+++ brlcad/trunk/src/librt/librt_private.h 2012-10-04 16:28:37 UTC (rev
52781)
@@ -91,8 +91,14 @@
extern void rt_plot_cell(const union cutter *cutp, struct rt_shootray_status
*ssp, struct bu_list *waiting_segs_hd, struct rt_i *rtip);
-extern fastf_t primitive_get_absolute_tolerance(const struct rt_tess_tol
*ttol, fastf_t rel_to_abs);
+extern fastf_t primitive_get_absolute_tolerance(
+ const struct rt_tess_tol *ttol,
+ fastf_t rel_to_abs);
+extern fastf_t primitive_diagonal_samples(
+ struct rt_db_internal *ip,
+ const struct rt_view_info *info);
+
__END_DECLS
/*
Modified: brlcad/trunk/src/librt/primitives/ell/ell.c
===================================================================
--- brlcad/trunk/src/librt/primitives/ell/ell.c 2012-10-04 16:23:32 UTC (rev
52780)
+++ brlcad/trunk/src/librt/primitives/ell/ell.c 2012-10-04 16:28:37 UTC (rev
52781)
@@ -787,26 +787,6 @@
}
}
-static fastf_t
-curve_samples(struct rt_db_internal *ip, const struct rt_view_info *info)
-{
- point_t bbox_min, bbox_max;
- fastf_t primitive_diagonal_mm, samples_per_mm;
- fastf_t diagonal_samples;
-
- ip->idb_meth->ft_bbox(ip, &bbox_min, &bbox_max, info->tol);
- primitive_diagonal_mm = DIST_PT_PT(bbox_min, bbox_max);
-
- samples_per_mm = sqrt(info->view_samples) / info->view_size;
- diagonal_samples = samples_per_mm * primitive_diagonal_mm;
-
-#if 0
- bu_log("%.2f diagonal_samples = (%.2f view_samples / (%.2f * %.2f
info->view_size)) * %.2f diagonal_mm\n", diagonal_samples, info->view_samples,
info->view_size, info->view_size, primitive_diagonal_mm);
-#endif
-
- return diagonal_samples;
-}
-
int
rt_ell_adaptive_plot(struct rt_db_internal *ip, const struct rt_view_info
*info)
{
@@ -819,7 +799,7 @@
eip = (struct rt_ell_internal *)ip->idb_ptr;
RT_ELL_CK_MAGIC(eip);
- samples = curve_samples(ip, info);
+ samples = primitive_diagonal_samples(ip, info);
config.vhead = info->vhead;
VMOVE(config.ell_center, eip->v);
@@ -843,10 +823,6 @@
config.num_cross_sections = 5;
}
-#if 0
- bu_log("%d points per cross section (%.2f samples)\n",
config.points_per_section, samples);
-#endif
-
VMOVE(config.ell_travel_vector, eip->a);
VMOVE(config.ell_axis_vector_a, eip->b);
VMOVE(config.ell_axis_vector_b, eip->c);
Modified: brlcad/trunk/src/librt/primitives/epa/epa.c
===================================================================
--- brlcad/trunk/src/librt/primitives/epa/epa.c 2012-10-04 16:23:32 UTC (rev
52780)
+++ brlcad/trunk/src/librt/primitives/epa/epa.c 2012-10-04 16:28:37 UTC (rev
52781)
@@ -875,9 +875,14 @@
struct rt_epa_internal *epa;
struct rt_pt_node *pts_r1, *pts_r2, *node1, *node2;
- num_curve_points = 4;
- num_ellipse_points = 16;
+ num_curve_points = sqrt(primitive_diagonal_samples(ip, info)) / 4.0;
+ if (num_curve_points < 3) {
+ num_curve_points = 3;
+ }
+
+ num_ellipse_points = 4 * num_curve_points;
+
BU_CK_LIST_HEAD(info->vhead);
RT_CK_DB_INTERNAL(ip);
epa = (struct rt_epa_internal *)ip->idb_ptr;
Modified: brlcad/trunk/src/librt/primitives/primitive_util.c
===================================================================
--- brlcad/trunk/src/librt/primitives/primitive_util.c 2012-10-04 16:23:32 UTC
(rev 52780)
+++ brlcad/trunk/src/librt/primitives/primitive_util.c 2012-10-04 16:28:37 UTC
(rev 52781)
@@ -37,7 +37,9 @@
*/
#define DEFAULT_REL_TOL .1
fastf_t
-primitive_get_absolute_tolerance(const struct rt_tess_tol *ttol, fastf_t
rel_to_abs)
+primitive_get_absolute_tolerance(
+ const struct rt_tess_tol *ttol,
+ fastf_t rel_to_abs)
{
fastf_t tol, rel_tol, abs_tol;
int rel_tol_is_valid;
@@ -61,3 +63,32 @@
return tol;
}
+
+/**
+ * Gives a rough estimate of the maximum number of times a primitive's bounding
+ * box diagonal will be sampled based on the sample density of the view.
+ *
+ * Practically, it is an estimate of the maximum number of pixels that would be
+ * used if the diagonal line were drawn in the current view window.
+ *
+ * It is currently used in adaptive plot routines to help choose how many
+ * sample points should be used for plotted curves.
+ */
+fastf_t
+primitive_diagonal_samples(
+ struct rt_db_internal *ip,
+ const struct rt_view_info *info)
+{
+ point_t bbox_min, bbox_max;
+ fastf_t primitive_diagonal_mm, samples_per_mm;
+ fastf_t diagonal_samples;
+
+ ip->idb_meth->ft_bbox(ip, &bbox_min, &bbox_max, info->tol);
+ primitive_diagonal_mm = DIST_PT_PT(bbox_min, bbox_max);
+
+ samples_per_mm = sqrt(info->view_samples) / info->view_size;
+ diagonal_samples = samples_per_mm * primitive_diagonal_mm;
+
+ return diagonal_samples;
+}
+
Modified: brlcad/trunk/src/librt/primitives/tgc/tgc.c
===================================================================
--- brlcad/trunk/src/librt/primitives/tgc/tgc.c 2012-10-04 16:23:32 UTC (rev
52780)
+++ brlcad/trunk/src/librt/primitives/tgc/tgc.c 2012-10-04 16:28:37 UTC (rev
52781)
@@ -1803,26 +1803,6 @@
ip->idb_ptr = GENPTR_NULL;
}
-static fastf_t
-curve_samples(struct rt_db_internal *ip, const struct rt_view_info *info)
-{
- point_t bbox_min, bbox_max;
- fastf_t primitive_diagonal_mm, samples_per_mm;
- fastf_t diagonal_samples;
-
- ip->idb_meth->ft_bbox(ip, &bbox_min, &bbox_max, info->tol);
- primitive_diagonal_mm = DIST_PT_PT(bbox_min, bbox_max);
-
- samples_per_mm = sqrt(info->view_samples) / info->view_size;
- diagonal_samples = samples_per_mm * primitive_diagonal_mm;
-
-#if 0
- bu_log("%.2f diagonal_samples = (%.2f view_samples / (%.2f * %.2f
info->view_size)) * %.2f diagonal_mm\n", diagonal_samples, info->view_samples,
info->view_size, info->view_size, primitive_diagonal_mm);
-#endif
-
- return diagonal_samples;
-}
-
struct ellipse {
point_t center;
vect_t axis_a;
@@ -1892,7 +1872,7 @@
tip = (struct rt_tgc_internal *)ip->idb_ptr;
RT_TGC_CK_MAGIC(tip);
- samples = sqrt(curve_samples(ip, info));
+ samples = sqrt(primitive_diagonal_samples(ip, info));
if (samples < 6.0) {
samples = 6.0;
}
@@ -1907,9 +1887,9 @@
VMOVE(ellipse2.axis_b, tip->d);
draw_ellipse(info->vhead, ellipse2, samples);
- samples /= 4.0;
- if (samples < 4.0) {
- samples = 4.0;
+ samples /= 2.0;
+ if (samples < 3.0) {
+ samples = 3.0;
}
draw_lines_between_ellipses(info->vhead, ellipse1, ellipse2, samples);
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Don't let slow site performance ruin your business. Deploy New Relic APM
Deploy New Relic app performance management and know exactly
what is happening inside your Ruby, Python, PHP, Java, and .NET app
Try New Relic at no cost today and get our sweet Data Nerd shirt too!
http://p.sf.net/sfu/newrelic-dev2dev
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits