[brlcad-commits] SF.net SVN: brlcad:[51628] brlcad/trunk/src
Open Source Solid Modeling CAD
Brought to you by:
brlcad
From: <pho...@us...> - 2012-07-21 12:26:21
|
Revision: 51628 http://brlcad.svn.sourceforge.net/brlcad/?rev=51628&view=rev Author: phoenixyjll Date: 2012-07-21 12:26:14 +0000 (Sat, 21 Jul 2012) Log Message: ----------- The max_dis value can be inputted manually within the command for testing. Modified Paths: -------------- brlcad/trunk/src/libged/brep.c brlcad/trunk/src/librt/opennurbs_ext.cpp brlcad/trunk/src/librt/opennurbs_ext.h brlcad/trunk/src/librt/primitives/brep/brep_debug.cpp Modified: brlcad/trunk/src/libged/brep.c =================================================================== --- brlcad/trunk/src/libged/brep.c 2012-07-20 21:15:07 UTC (rev 51627) +++ brlcad/trunk/src/libged/brep.c 2012-07-21 12:26:14 UTC (rev 51628) @@ -40,7 +40,7 @@ RT_EXPORT extern int brep_command(struct bu_vls *vls, struct brep_specific* bs, struct rt_brep_internal* bi, struct bn_vlblock *vbp, int argc, const char *argv[], char *commtag); RT_EXPORT extern int brep_conversion(struct rt_db_internal *intern, ON_Brep **brep); RT_EXPORT extern int brep_conversion_comb(struct rt_db_internal *old_internal, char *name, char *suffix, struct rt_wdb *wdbp, fastf_t local2mm); -RT_EXPORT extern int brep_intersect(struct rt_db_internal *intern1, struct rt_db_internal *intern2, int i, int j, struct bn_vlblock *vbp); +RT_EXPORT extern int brep_intersect(struct rt_db_internal *intern1, struct rt_db_internal *intern2, int i, int j, struct bn_vlblock *vbp, double max_dis); #else extern int brep_surface_plot(struct ged *gedp, struct brep_specific* bs, struct rt_brep_internal* bi, struct bn_vlblock *vbp, int index); #endif @@ -77,13 +77,13 @@ bu_vls_printf(gedp->ged_result_str, "\tplot - plot entire BREP\n"); bu_vls_printf(gedp->ged_result_str, "\tplot S [index] - plot specific BREP 'surface'\n"); bu_vls_printf(gedp->ged_result_str, "\tplot F [index] - plot specific BREP 'face'\n"); - bu_vls_printf(gedp->ged_result_str, "\tintersect obj2 i j - intersect obj's ith surface and obj2' jth surface\n"); + bu_vls_printf(gedp->ged_result_str, "\tintersect obj2 i j [max_dis] - intersect two surfaces\n"); bu_vls_printf(gedp->ged_result_str, "\t[brepname] - convert the non-BREP object to BREP form\n"); bu_vls_printf(gedp->ged_result_str, "\t[suffix] - convert non-BREP comb to unevaluated BREP form\n"); return GED_HELP; } - if (argc < 2 || argc > 6) { + if (argc < 2 || argc > 7) { bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage); return GED_ERROR; } @@ -131,7 +131,11 @@ j = atoi(argv[5]); vbp = rt_vlblock_init(); - brep_intersect(&intern, &intern2, i, j, vbp); + if (argc == 6) { + brep_intersect(&intern, &intern2, i, j, vbp, 0.0); + } else { + brep_intersect(&intern, &intern2, i, j, vbp, atof(argv[6])); + } _ged_cvt_vlblock_to_solids(gedp, vbp, namebuf, 0); rt_vlblock_free(vbp); Modified: brlcad/trunk/src/librt/opennurbs_ext.cpp =================================================================== --- brlcad/trunk/src/librt/opennurbs_ext.cpp 2012-07-20 21:15:07 UTC (rev 51627) +++ brlcad/trunk/src/librt/opennurbs_ext.cpp 2012-07-21 12:26:14 UTC (rev 51628) @@ -2928,6 +2928,7 @@ surface_surface_intersection(const ON_Surface* surfA, const ON_Surface* surfB, ON_SimpleArray<ON_NurbsCurve*> &intersect, + double max_dis, double) { if (surfA == NULL || surfB == NULL) { @@ -3038,7 +3039,9 @@ // Here we use polyline approximation. // TODO: Find a better fitting algorithm unless this is good enough. - const double max_dis = pow(surfA->BoundingBox().Volume()*surfB->BoundingBox().Volume(), 1.0/6.0) * 0.1; + if (max_dis == 0.0) + max_dis = pow(surfA->BoundingBox().Volume()*surfB->BoundingBox().Volume(), 1.0/6.0) * 0.1; + bu_log("max_dis: %lf\n", max_dis); // NOTE: More tests are needed to find a better threshold. std::vector<PointPair> ptpairs; Modified: brlcad/trunk/src/librt/opennurbs_ext.h =================================================================== --- brlcad/trunk/src/librt/opennurbs_ext.h 2012-07-20 21:15:07 UTC (rev 51627) +++ brlcad/trunk/src/librt/opennurbs_ext.h 2012-07-21 12:26:14 UTC (rev 51628) @@ -1571,6 +1571,7 @@ extern int surface_surface_intersection(const ON_Surface* surfA, const ON_Surface* surfB, ON_SimpleArray<ON_NurbsCurve*> &intersect, + double max_dis = 0.0, double tolerance = 1.0e-3); } Modified: brlcad/trunk/src/librt/primitives/brep/brep_debug.cpp =================================================================== --- brlcad/trunk/src/librt/primitives/brep/brep_debug.cpp 2012-07-20 21:15:07 UTC (rev 51627) +++ brlcad/trunk/src/librt/primitives/brep/brep_debug.cpp 2012-07-21 12:26:14 UTC (rev 51628) @@ -53,7 +53,7 @@ RT_EXPORT extern int brep_command(struct bu_vls *vls, struct brep_specific* bs, struct rt_brep_internal* bi, struct bn_vlblock *vbp, int argc, const char *argv[], char *commtag); RT_EXPORT extern int brep_conversion(struct rt_db_internal* intern, ON_Brep** brep); RT_EXPORT extern int brep_conversion_comb(struct rt_db_internal *old_internal, char *name, char *suffix, struct rt_wdb *wdbp, fastf_t local2mm); - RT_EXPORT extern int brep_intersect(struct rt_db_internal *intern1, struct rt_db_internal *intern2, int i, int j, struct bn_vlblock* vbp); + RT_EXPORT extern int brep_intersect(struct rt_db_internal *intern1, struct rt_db_internal *intern2, int i, int j, struct bn_vlblock* vbp, double max_dis); #ifdef __cplusplus } #endif @@ -2552,7 +2552,7 @@ } -int brep_intersect(struct rt_db_internal *intern1, struct rt_db_internal *intern2, int i, int j, struct bn_vlblock *vbp) { +int brep_intersect(struct rt_db_internal *intern1, struct rt_db_internal *intern2, int i, int j, struct bn_vlblock *vbp, double max_dis) { RT_CK_DB_INTERNAL(intern1); RT_CK_DB_INTERNAL(intern2); struct rt_brep_internal *bi1, *bi2; @@ -2578,7 +2578,7 @@ brep1->m_S[i]->GetNurbForm(surf1); brep2->m_S[j]->GetNurbForm(surf2); - if (brlcad::surface_surface_intersection(&surf1, &surf2, curve)) { + if (brlcad::surface_surface_intersection(&surf1, &surf2, curve, max_dis)) { bu_log("Intersection failed\n"); return -1; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |