Revision: 62231
http://sourceforge.net/p/brlcad/code/62231
Author: indianlarry
Date: 2014-08-19 14:08:41 +0000 (Tue, 19 Aug 2014)
Log Message:
-----------
Added work around for case where OpenNURBS routines not returning normals for
valid points along a trim.
Modified Paths:
--------------
brlcad/trunk/src/libbrep/PullbackCurve.cpp
brlcad/trunk/src/librt/primitives/brep/brep.cpp
Modified: brlcad/trunk/src/libbrep/PullbackCurve.cpp
===================================================================
--- brlcad/trunk/src/libbrep/PullbackCurve.cpp 2014-08-19 13:21:19 UTC (rev
62230)
+++ brlcad/trunk/src/libbrep/PullbackCurve.cpp 2014-08-19 14:08:41 UTC (rev
62231)
@@ -209,6 +209,17 @@
} else if (side == 3) {
rc=surf->EvNormal(u.m_t[0], v.m_t[0], point, normal, side,
hint);
}
+ } else {
+ /*
+ * brute force and try to solve from each side of the surface domain
+ */
+ ON_Interval u = surf->Domain(0);
+ ON_Interval v = surf->Domain(1);
+ for(int iside=1; iside <= 4; iside++) {
+ rc=surf->EvNormal(s, t, point, normal, iside, hint);
+ if (rc)
+ break;
+ }
}
}
return rc;
Modified: brlcad/trunk/src/librt/primitives/brep/brep.cpp
===================================================================
--- brlcad/trunk/src/librt/primitives/brep/brep.cpp 2014-08-19 13:21:19 UTC
(rev 62230)
+++ brlcad/trunk/src/librt/primitives/brep/brep.cpp 2014-08-19 14:08:41 UTC
(rev 62231)
@@ -2287,6 +2287,30 @@
(*param_points)[1.0] = new ON_3dPoint(
s->PointAt(trim.PointAt(range.m_t[1]).x,
trim.PointAt(range.m_t[1]).y));
+ } else {
+ start_2d = trim.PointAt(range.m_t[0]);
+ end_2d = trim.PointAt(range.m_t[1]);
+ start_3d = s->PointAt(start_2d.x,start_2d.y);
+ end_3d = s->PointAt(end_2d.x,end_2d.y);
+ mid_2d = trim.PointAt(mid_range);
+ mid_3d = s->PointAt(mid_2d.x, mid_2d.y);
+ (*param_points)[0.0] = new ON_3dPoint(
+ s->PointAt(trim.PointAt(range.m_t[0]).x,
+ trim.PointAt(range.m_t[0]).y));
+ getEdgePoints(trim, range.m_t[0], start_2d, start_tang,
+ start_3d, start_norm, mid_range, mid_2d, mid_tang,
+ mid_3d, mid_norm, min_dist, max_dist, within_dist,
+ cos_within_ang, *param_points);
+ (*param_points)[0.5] = new ON_3dPoint(
+ s->PointAt(trim.PointAt(mid_range).x,
+ trim.PointAt(mid_range).y));
+ getEdgePoints(trim, mid_range, mid_2d, mid_tang, mid_3d,
+ mid_norm, range.m_t[1], end_2d, end_tang, end_3d,
+ end_norm, min_dist, max_dist, within_dist,
+ cos_within_ang, *param_points);
+ (*param_points)[1.0] = new ON_3dPoint(
+ s->PointAt(trim.PointAt(range.m_t[1]).x,
+ trim.PointAt(range.m_t[1]).y));
}
} else {
ON_3dPoint start_2d(0.0, 0.0, 0.0);
@@ -2308,6 +2332,17 @@
end_3d, end_norm, min_dist, max_dist, within_dist,
cos_within_ang, *param_points);
(*param_points)[1.0] = new ON_3dPoint(end_3d);
+ } else {
+ start_2d = trim.PointAt(range.m_t[0]);
+ end_2d = trim.PointAt(range.m_t[1]);
+ start_3d = s->PointAt(start_2d.x,start_2d.y);
+ end_3d = s->PointAt(end_2d.x,end_2d.y);
+ (*param_points)[0.0] = new ON_3dPoint(start_3d);
+ getEdgePoints(trim, range.m_t[0], start_2d, start_tang,
+ start_3d, start_norm, range.m_t[1], end_2d,
end_tang,
+ end_3d, end_norm, min_dist, max_dist, within_dist,
+ cos_within_ang, *param_points);
+ (*param_points)[1.0] = new ON_3dPoint(end_3d);
}
}
} else {
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