[brlcad-commits] SF.net SVN: brlcad:[55478] brlcad/trunk/src/libged
Open Source Solid Modeling CAD
Brought to you by:
brlcad
From: <n_...@us...> - 2013-05-16 19:27:53
|
Revision: 55478 http://sourceforge.net/p/brlcad/code/55478 Author: n_reed Date: 2013-05-16 19:27:51 +0000 (Thu, 16 May 2013) Log Message: ----------- Until we have something more generic working, breps need a decent average curve length estimate for LOD plotting. Can't put C++ in draw.c, so the calculation routine is getting its own file. Modified Paths: -------------- brlcad/trunk/src/libged/CMakeLists.txt brlcad/trunk/src/libged/draw.c Added Paths: ----------- brlcad/trunk/src/libged/draw_calc.cpp Modified: brlcad/trunk/src/libged/CMakeLists.txt =================================================================== --- brlcad/trunk/src/libged/CMakeLists.txt 2013-05-16 19:14:04 UTC (rev 55477) +++ brlcad/trunk/src/libged/CMakeLists.txt 2013-05-16 19:27:51 UTC (rev 55478) @@ -76,6 +76,7 @@ dg_obj.c dir2ae.c draw.c + draw_calc.cpp dump.c dup.c eac.c Modified: brlcad/trunk/src/libged/draw.c =================================================================== --- brlcad/trunk/src/libged/draw.c 2013-05-16 19:14:04 UTC (rev 55477) +++ brlcad/trunk/src/libged/draw.c 2013-05-16 19:27:51 UTC (rev 55478) @@ -35,6 +35,8 @@ #include "./ged_private.h" +/* defined in draw_calc.cpp */ +extern fastf_t brep_est_avg_curve_len(struct rt_brep_internal *bi); /* declare our callbacks used by _ged_drawtrees() */ static int drawtrees_depth = 0; @@ -687,6 +689,17 @@ case DB5_MINORTYPE_BRLCAD_BOT: point_spacing = view_avg_sample_spacing(gvp); break; + case DB5_MINORTYPE_BRLCAD_BREP: { + struct rt_brep_internal *bi; + + RT_CK_DB_INTERNAL(ip); + bi = (struct rt_brep_internal *)ip->idb_ptr; + RT_BREP_CK_MAGIC(bi); + + point_spacing = solid_point_spacing(gvp, + brep_est_avg_curve_len(bi) * (2.0 / M_PI) * 2.0); + } + break; default: point_spacing = solid_point_spacing(gvp, sp->s_size); } Added: brlcad/trunk/src/libged/draw_calc.cpp =================================================================== --- brlcad/trunk/src/libged/draw_calc.cpp (rev 0) +++ brlcad/trunk/src/libged/draw_calc.cpp 2013-05-16 19:27:51 UTC (rev 55478) @@ -0,0 +1,77 @@ +/* D R A W _ C A L C . C P P + * BRL-CAD + * + * Copyright (c) 2013 United States Government as represented by + * the U.S. Army Research Laboratory. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * version 2.1 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this file; see the file named COPYING for more + * information. + */ +/** @file draw_calc.cpp + * + * Utility functions for miscellaneous draw calculations. + * + */ + +#include "common.h" +#include "bu.h" +#include "brep.h" +#include "raytrace.h" +#include "rtgeom.h" + +__BEGIN_DECLS + +static fastf_t +brep_avg_curve_bbox_diagonal_len(ON_Brep *brep) +{ + fastf_t avg_curve_len; + int i, num_curves = 0; + + for (i = 0; i < brep->m_E.Count(); ++i) { + ON_BrepEdge &e = brep->m_E[i]; + const ON_Curve *crv = e.EdgeCurveOf(); + + if (!crv->IsLinear()) { + ++num_curves; + + ON_BoundingBox bbox; + if (crv->GetTightBoundingBox(bbox)) { + avg_curve_len += bbox.Diagonal().Length(); + } else { + ON_3dVector linear_approx = + crv->PointAtEnd() - crv->PointAtStart(); + avg_curve_len += linear_approx.Length(); + } + } + } + avg_curve_len /= num_curves; + + return avg_curve_len; +} + +fastf_t +brep_est_avg_curve_len(struct rt_brep_internal *bi) +{ + return brep_avg_curve_bbox_diagonal_len(bi->brep) * 2.0; +} + +__END_DECLS + +// Local Variables: +// tab-width: 8 +// mode: C++ +// c-basic-offset: 4 +// indent-tabs-mode: t +// c-file-style: "stroustrup" +// End: +// ex: shiftwidth=4 tabstop=8 Property changes on: brlcad/trunk/src/libged/draw_calc.cpp ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +text/plain \ No newline at end of property Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |