Hi All,
Long time programmer in AutoCAD, first time programmer and poster in GH forums.
I am trying to create a component where I have a Curve (Non-Planar) and I am trying to find the intersection point of the two (I want to get the X & Y of where the curve intersects the line, but get Z value of the curve at that point).
Currently, I am trying to project the curve to Z = 0, by iterating it
double increment = 0.5;
double oaLength = 0;
List points = new List();
do
{
Point3d newpt = controlString.PointAtLength(oaLength);
points.Add(new Point3d(newpt.X, newpt.Y, 0));
oaLength = oaLength + increment;
}
while (oaLength < controlString.GetLength());
Curve flattenedCurve = Curve.CreateControlPointCurve(points);
then finding the intersection point on the flattened curve
var events = Intersection.CurveLine(flattenedCurve, line, intersectionTolerance, overlapTolerance);
if (events != null)
{
if (events.Count > 0)
{
var ccx_event = events[0];
pointOnFlattenedCurve = ccx_event.PointA;
}
}
then going along the original curve to find a point
double increment = 0.5;
double oaLength = 0;
do
{
Point3d testPointOnControlString = controlString.PointAtLength(oaLength);
Point3d testPointAtZeroElevation = new Point3d(testPointOnControlString.X, testPointOnControlString.Y, 0);
double dist = pointOnFlattenedCurve.DistanceTo(testPointAtZeroElevation);
if (dist < 1)
{
return new Point3d(pointOnFlattenedCurve.X, pointOnFlattenedCurve.Y, testPointOnControlString.Z); ;
}
oaLength = oaLength + increment;
}
while (oaLength < controlString.GetLength());
return controlString.PointAtStart;
The points are not exactly lining up on the curve (on the Z-Axis).
Is there an easier way to get this intersection point?
Intersection Point.3dm (23.4 KB)