Skip to content

Commit

Permalink
Merge pull request #63 from oberbichler/fix/loop
Browse files Browse the repository at this point in the history
Fix loop
  • Loading branch information
oberbichler authored Mar 26, 2021
2 parents 270f2c7 + da6ee22 commit 8d797ae
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 20 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ protected override void RegisterInputParams(GH_InputParamManager pManager)
pManager.AddVectorParameter("Point", "P", "", GH_ParamAccess.item);
pManager.AddNumberParameter("Step Size", "H", "", GH_ParamAccess.item, 0.1);
pManager.AddIntegerParameter("Maximum number of Points", "N", "", GH_ParamAccess.item, 10000);
pManager.AddIntegerParameter("Loop Tolerance", "t", "", GH_ParamAccess.item);
pManager.AddNumberParameter("Loop Tolerance", "t", "", GH_ParamAccess.item);

pManager[5].Optional = true;
}
Expand Down
2 changes: 1 addition & 1 deletion Bowerbird/Curvature/CurveOnSurface.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ private CurveOnSurface(Surface surface, Curve curve)

public static CurveOnSurface Create(Surface surface, Curve curve)
{
if (!surface.IsValid || !curve.IsValid)
if (!surface.IsValid || !curve.IsValid || curve.Domain.Length == 0)
return null;
return new CurveOnSurface(surface, curve);
}
Expand Down
41 changes: 23 additions & 18 deletions Bowerbird/Curvature/UntrimmedBoundary.cs
Original file line number Diff line number Diff line change
Expand Up @@ -57,28 +57,28 @@ private void SetAdjacentFace(Vector2d uv)
{
var trims = _face.OuterLoop.Trims;

var minDistance = double.PositiveInfinity;
var minT = default(double);

foreach (var trim in trims)
{
if (!trim.ClosestPoint(uvLocation, out var t))
continue;
var trimU = trim.PointAtStart.X;
var trimV = trim.PointAtStart.Y;

var distance = trim.PointAt(t).DistanceTo(uvLocation);
var isoU = trimU == trim.PointAtEnd.X;

if (distance > minDistance)
if (isoU ? Math.Abs(trimU - uv.X) > 1e-6 : Math.Abs(trimV - uv.Y) > 1e-6)
continue;

if (distance == minDistance && trim.Edge.TrimCount < boundingTrim.Edge.TrimCount)
if (boundingTrim != null && trim.Edge.TrimCount < boundingTrim.Edge.TrimCount)
continue;

boundingTrim = trim;
minDistance = distance;
minT = t;
}

AdjacentTangent = boundingTrim.TangentAt(minT);
if (!boundingTrim.ClosestPoint(uvLocation, out var t))
throw new Exception("Projection failed");

AdjacentTangent = boundingTrim.TangentAt(t);

Debug.Assert(boundingTrim.PointAt(t).DistanceTo(uvLocation) < 1e-6);
}

var adjacentTrims = boundingTrim.Edge.TrimIndices();
Expand All @@ -88,8 +88,10 @@ private void SetAdjacentFace(Vector2d uv)
var adjacentTrimIndex = adjacentTrims[0] == boundingTrim.TrimIndex ? adjacentTrims[1] : adjacentTrims[0];
var adjacentTrim = _face.Brep.Trims[adjacentTrimIndex];

AdjacentFace = adjacentTrim.Face;

// Check for loop on same face
if (adjacentTrim.Face.FaceIndex == boundingTrim.Face.FaceIndex)
if (AdjacentFace.FaceIndex == boundingTrim.Face.FaceIndex)
{
var mid = boundingTrim.PointAt(boundingTrim.Domain.ParameterAt(0.5));

Expand All @@ -100,18 +102,21 @@ private void SetAdjacentFace(Vector2d uv)
}
else
{
if (!adjacentTrim.ClosestPoint(uvLocation, out var t))
if (!AdjacentFace.ClosestPoint(location, out var adjacentU, out var adjacentV))
throw new Exception("Projection failed");

var adjacentUV = adjacentTrim.PointAt(t);
var uvLocationAdjacent = new Point3d(adjacentU, adjacentV, 0);

AdjacentUV = new Vector2d(adjacentUV.X, adjacentUV.Y);
}
if (!adjacentTrim.ClosestPoint(uvLocationAdjacent, out var t))
throw new Exception("Projection failed");

AdjacentUV = new Vector2d(adjacentU, adjacentV);

AdjacentFace = adjacentTrim.Face;
Debug.Assert(adjacentTrim.PointAt(t).DistanceTo(new Point3d(adjacentU, adjacentV, 0)) < 1e-3);
}
}

Debug.Assert(AdjacentFace == null || AdjacentFace.PointAt(AdjacentUV.X, AdjacentUV.Y).DistanceTo(location) < 1e-6);
Debug.Assert(AdjacentFace == null || AdjacentFace.PointAt(AdjacentUV.X, AdjacentUV.Y).DistanceTo(location) < 1e-3);
}

public static UntrimmedBoundary Create(BrepFace face)
Expand Down

0 comments on commit 8d797ae

Please sign in to comment.