private static bool IsReverseDirection(NXOpen.Features.OffsetCurveBuilder builder, Snap.NX.ICurve[] icurves, Position pos, Vector helpVector) { Position position; Point3d pointd; Vector3d vectord; int index = -1; double num2 = -1.0; for (int i = 0; i < icurves.Length; i++) { double num4 = -1.0; num4 = Compute.Distance(pos, (Snap.NX.NXObject)icurves[i]); if (num4 > num2) { num2 = num4; index = i; } } if (icurves[index].ObjectType == ObjectTypes.Type.Edge) { position = Compute.ClosestPoints(pos, (Snap.NX.Edge)icurves[index]).Point2; } else { position = Compute.ClosestPoints(pos, (Snap.NX.Curve)icurves[index]).Point2; } builder.ComputeOffsetDirection(icurves[index].NXOpenICurve, (Point3d)position, out vectord, out pointd); return((vectord * helpVector) < 0.0); }
internal static Snap.NX.OffsetCurve CreateOffsetLine(Snap.NX.ICurve icurve, Snap.NX.Point point, string distance, bool reverseDirection) { NXOpen.Features.OffsetCurveBuilder featureBuilder = Globals.WorkPart.NXOpenPart.Features.CreateOffsetCurveBuilder(null); featureBuilder.Type = NXOpen.Features.OffsetCurveBuilder.Types.Distance; featureBuilder.InputCurvesOptions.InputCurveOption = CurveOptions.InputCurve.Retain; featureBuilder.Tolerance = Globals.DistanceTolerance; featureBuilder.OffsetDistance.RightHandSide = distance; featureBuilder.ReverseDirection = reverseDirection; featureBuilder.PointOnOffsetPlane = (NXOpen.Point)point; ((Snap.NX.Section)featureBuilder.CurvesToOffset).AddICurve(new Snap.NX.ICurve[] { icurve }); NXOpen.Features.Feature feature = (NXOpen.Features.Feature)Snap.NX.Feature.CommitFeature(featureBuilder); featureBuilder.CurvesToOffset.CleanMappingData(); featureBuilder.Destroy(); return(feature as NXOpen.Features.OffsetCurve); }
internal static Snap.NX.OffsetCurve CreateOffsetCurve(Snap.NX.ICurve[] curves, Snap.Number height, Snap.Number angle, Position helpPoint, Vector helpVector) { NXOpen.Features.OffsetCurveBuilder builder = Globals.WorkPart.NXOpenPart.Features.CreateOffsetCurveBuilder(null); builder.Type = NXOpen.Features.OffsetCurveBuilder.Types.Draft; builder.InputCurvesOptions.InputCurveOption = CurveOptions.InputCurve.Retain; builder.Tolerance = Globals.DistanceTolerance; builder.DraftHeight.RightHandSide = height.ToString(); builder.DraftAngle.RightHandSide = angle.ToString(); ((Snap.NX.Section)builder.CurvesToOffset).AddICurve(curves); builder.ReverseDirection = IsReverseDirection(builder, curves, helpPoint, helpVector); NXOpen.Features.Feature feature = (NXOpen.Features.Feature)Snap.NX.Feature.CommitFeature(builder); builder.CurvesToOffset.CleanMappingData(); builder.Destroy(); return(feature as NXOpen.Features.OffsetCurve); }
internal static Snap.NX.OffsetCurve CreateOffsetCurve(Snap.NX.ICurve[] curves, Snap.Number distance, Position helpPoint, Vector helpVector) { NXOpen.Features.OffsetCurveBuilder builder = Globals.WorkPart.NXOpenPart.Features.CreateOffsetCurveBuilder(null); builder.Type = NXOpen.Features.OffsetCurveBuilder.Types.Distance; builder.InputCurvesOptions.InputCurveOption = CurveOptions.InputCurve.Retain; builder.Tolerance = Globals.DistanceTolerance; //builder.CurveFitData.AngleTolerance = Globals.AngleTolerance; builder.CurvesToOffset.SetAllowedEntityTypes(NXOpen.SectionEx.AllowTypes.OnlyCurves); builder.CurvesToOffset.AllowSelfIntersection(true); builder.OffsetDistance.RightHandSide = distance.ToString(); ((Snap.NX.Section)builder.CurvesToOffset).AddICurve(curves); builder.ReverseDirection = IsReverseDirection(builder, curves, helpPoint, helpVector); NXOpen.Features.Feature feature = (NXOpen.Features.Feature)Snap.NX.Feature.CommitFeature(builder); builder.Destroy(); return(feature as NXOpen.Features.OffsetCurve); }
internal static Snap.NX.OffsetCurve CreateOffsetCurve(Snap.NX.ICurve[] icurves, Snap.Number height, Snap.Number angle, bool reverseDirection) { NXOpen.Features.OffsetCurveBuilder featureBuilder = Globals.WorkPart.NXOpenPart.Features.CreateOffsetCurveBuilder(null); featureBuilder.Type = NXOpen.Features.OffsetCurveBuilder.Types.Draft; featureBuilder.InputCurvesOptions.InputCurveOption = CurveOptions.InputCurve.Retain; featureBuilder.Tolerance = Globals.DistanceTolerance; featureBuilder.DraftHeight.RightHandSide = height.ToString(); featureBuilder.DraftAngle.RightHandSide = angle.ToString(); featureBuilder.ReverseDirection = reverseDirection; Snap.NX.Section curvesToOffset = featureBuilder.CurvesToOffset; for (int i = 0; i < icurves.Length; i++) { curvesToOffset.AddICurve(icurves); } NXOpen.Features.Feature feature = (NXOpen.Features.Feature)Snap.NX.Feature.CommitFeature(featureBuilder); featureBuilder.CurvesToOffset.CleanMappingData(); featureBuilder.Destroy(); return(feature as NXOpen.Features.OffsetCurve); }
internal static Snap.NX.OffsetCurve CreateOffsetCurve(Snap.NX.ICurve[] curves, Snap.Number distance, bool reverseDirection) { NXOpen.Features.OffsetCurveBuilder featureBuilder = Globals.WorkPart.NXOpenPart.Features.CreateOffsetCurveBuilder(null); featureBuilder.Type = NXOpen.Features.OffsetCurveBuilder.Types.Distance; featureBuilder.InputCurvesOptions.InputCurveOption = CurveOptions.InputCurve.Retain; featureBuilder.Tolerance = Globals.DistanceTolerance; featureBuilder.TrimMethod = NXOpen.Features.OffsetCurveBuilder.TrimOption.ExtendTangents; featureBuilder.CurvesToOffset.DistanceTolerance = Globals.DistanceTolerance; featureBuilder.CurvesToOffset.AngleTolerance = Globals.AngleTolerance; featureBuilder.CurvesToOffset.ChainingTolerance = (Globals.UnitType == Globals.Unit.Millimeter) ? 0.02413 : 0.00095; featureBuilder.CurvesToOffset.SetAllowedEntityTypes(NXOpen.SectionEx.AllowTypes.OnlyCurves); featureBuilder.CurvesToOffset.AllowSelfIntersection(true); featureBuilder.OffsetDistance.RightHandSide = distance.ToString(); featureBuilder.ReverseDirection = reverseDirection; Snap.NX.Section curvesToOffset = featureBuilder.CurvesToOffset; for (int i = 0; i < curves.Length; i++) { curvesToOffset.AddICurve(curves); } NXOpen.Features.Feature feature = (NXOpen.Features.Feature)Snap.NX.Feature.CommitFeature(featureBuilder); featureBuilder.Destroy(); return(feature as NXOpen.Features.OffsetCurve); }