Wave link a composite curve using the UIStyler SectionBuilder block

I've been able to write a function that will re-link a wave linked curve using a single curve selected through the BlockUIStyler's CurveCollector block. Now i want to use the SectionBuilder block instead.

I can't figure out how to set the section of the compositeCurveBuilder using the SectionBuilder's section object. it seems that the compositecurvebuilder only allows you to add a single curve at a time to the existing section.


public static void ReLinkCompositeSection(Part workPart, Part otherPart, String WaveLinkFeatureName, Section otherPartSection, DisplayableObject objectToVerifyDirection)
{
Session theSession = Session.GetSession();
NXOpen.Features.Feature startingCurrentFeature = workPart.CurrentFeature;

NXOpen.Features.CompositeCurve waveLinkFeature = (NXOpen.Features.CompositeCurve)Utilities.GetNamedFeature(workPart, WaveLinkFeatureName);
if (waveLinkFeature != null)
{
workPart.Features.SetEditWithRollbackFeature(waveLinkFeature);
waveLinkFeature.MakeCurrentFeature();
NXOpen.Features.CompositeCurveBuilder compositeCurveBuilder1;
compositeCurveBuilder1 = workPart.Features.CreateCompositeCurveBuilder(waveLinkFeature);
compositeCurveBuilder1.Section.PrepareMappingData();
compositeCurveBuilder1.Section.DistanceTolerance = 0.001;
compositeCurveBuilder1.Section.ChainingTolerance = 0.00095;
compositeCurveBuilder1.FixAtCurrentTimestamp = true;

/*builds section for a single line
//NEED TO REPLACE THIS PORTION OF CODE TO USE the Section input parameter instead of otherPartLine
//curves1[0] = otherPartLine;
CurveDumbRule curveDumbRule1;
curveDumbRule1 = workPart.ScRuleFactory.CreateRuleBaseCurveDumb(curves1);
compositeCurveBuilder1.Section.AllowSelfIntersection(false);
SelectionIntentRule[] rules1 = new SelectionIntentRule[1];
rules1[0] = curveDumbRule1;
NXObject nullNXObject = null;
Point3d helpPoint1 = otherPartLine.StartPoint;
compositeCurveBuilder1.Section.AddToSection(rules1, otherPartLine, nullNXObject, nullNXObject, helpPoint1, NXOpen.Section.Mode.Create, false);
compositeCurveBuilder1.Associative = true;
*/

NXOpen.Features.Feature frecfeat = otherPart.CurrentFeature;
compositeCurveBuilder1.FrecAtTimeStamp = frecfeat;

//ensure direction is correct
ICurve startElement;
Point3d startPoint;
Vector3d direction;
compositeCurveBuilder1.Section.GetStartAndDirection(out startElement, out startPoint, out direction);
Point linkedStartPoint = workPart.Points.CreatePoint(startPoint);

Unit unit1 = (Unit)workPart.UnitCollection.FindObject("Inch");
MeasureDistance Dist;
Dist = workPart.MeasureManager.NewDistance(unit1, NXOpen.MeasureManager.MeasureType.Minimum, objectToVerifyDirection, linkedStartPoint);
if (Dist.Value < .5)
{
//start of wave linked curve should be at opposite side from the start point
compositeCurveBuilder1.Section.ReverseDirectionOfLoop(0);
}
workPart.Points.DeletePoint(linkedStartPoint);

NXObject nXObject2;
nXObject2 = compositeCurveBuilder1.Commit();
nXObject2.SetName(WaveLinkFeatureName);

//map old curve to new curve
Section section1 = compositeCurveBuilder1.Section;
NXObject[] outputs1;
section1.GetOutputCurves(out outputs1);
NXObject[] oldoutputs1;
section1.GetOldOutputCurves(out oldoutputs1);
section1.MapSectionElements((Line)oldoutputs1[0], (Line)outputs1[0]);
section1.CleanMappingData();
compositeCurveBuilder1.Destroy();

//update model
theSession.UpdateManager.InterpartDelay = true;
startingCurrentFeature.MakeCurrentFeature();
}
}

I don't see an easy way to use the section that you have in the composite curve builder. You could recreate the section in the composite curve builder from the section that you have, but that seems like a waste of time and effort.

You may want to contact GTAC to see if they have a better solution and/or open an enhancement request to make this easier.

Also, if you have not come across this yet, there are WAVE feature selections available under PTS author too.

Late reply, might help someone.

BH