Option Strict Off
Imports System
Imports NXOpen
Imports NXOpen.UF
Imports NXOpen.Features
Module ZNormalOffset
Dim s As Session = Session.GetSession()
Dim ufs As UFSession = UFSession.GetUFSession()
Dim workPart As Part = s.Parts.Work
Sub Main()
Dim offset1 As Double = 0.5
Dim spline1 As Spline = Nothing
spline1 = select_a_spline("Select a Spline")
Dim curveparm As Double = 0.0
Dim delcurveparm As Double = 1.0 / 100.0
Dim pnt1(2) As Double
Dim curvetang(2) As Double
Dim junk3(2) As Double
Dim junk1 As Double = Nothing
Dim normal1() As Double = {0.0, 0.0, 1.0}
Dim vect1(2) As Double
Dim magnitude1 As Double = 0.0001
Dim epnt1(2) As Double
Dim coordinates1 As Point3d
Dim ArrayOfPoints2(99) As Point
For i As Integer = 0 To 99
ufs.Modl.AskCurveProps(spline1.Tag, curveparm, pnt1, curvetang, junk3, junk3, junk1, junk1)
ufs.Vec3.Cross(normal1, curvetang, vect1)
ufs.Vec3.Unitize(vect1, 0.001, magnitude1, vect1)
epnt1(0) = pnt1(0) + offset1 * vect1(0)
epnt1(1) = pnt1(1) + offset1 * vect1(1)
epnt1(2) = pnt1(2) + offset1 * vect1(2)
coordinates1 = New Point3d(epnt1(0), epnt1(1), epnt1(2))
ArrayOfPoints2(i) = workPart.Points.CreatePoint(coordinates1)
curveparm += delcurveparm
Next
Dim splinefeat2 As Feature
Dim periodic1 As Boolean = True
splinefeat2 = CreateStudioSplineThruPoints(ArrayOfPoints2, periodic1)
End Sub
Public Function CreateStudioSplineThruPoints(ByRef points() As Point, ByVal periodic1 As Boolean) As Feature
Dim markId9 As Session.UndoMarkId
markId9 = s.SetUndoMark(Session.MarkVisibility.Visible, "Studio Spline Thru Point")
Dim Pcount As Integer = points.Length - 1
Dim nullNXObject As NXObject = Nothing
Dim studioSplineBuilderEx1 As Features.StudioSplineBuilderEx
studioSplineBuilderEx1 = workPart.Features.CreateStudioSplineBuilderEx(nullNXObject)
studioSplineBuilderEx1.Degree = 3
studioSplineBuilderEx1.InputCurveOption = StudioSplineBuilderEx.InputCurveOptions.Delete
studioSplineBuilderEx1.Type = Features.StudioSplineBuilderEx.Types.ThroughPoints
studioSplineBuilderEx1.IsPeriodic = periodic1
studioSplineBuilderEx1.MatchKnotsType = Features.StudioSplineBuilderEx.MatchKnotsTypes.None
studioSplineBuilderEx1.HasPlaneConstraint = False
studioSplineBuilderEx1.OrientExpress.AxisOption = GeometricUtilities.OrientXpressBuilder.Axis.Passive
studioSplineBuilderEx1.OrientExpress.PlaneOption = GeometricUtilities.OrientXpressBuilder.Plane.Passive
Dim knots1(-1) As Double
studioSplineBuilderEx1.SetKnots(knots1)
Dim parameters1(-1) As Double
studioSplineBuilderEx1.SetParameters(parameters1)
Dim nullDirection As Direction = Nothing
Dim nullScalar As Scalar = Nothing
Dim nullOffset As Offset = Nothing
Dim geometricConstraintData(Pcount) As Features.GeometricConstraintData
For ii As Integer = 0 To Pcount
geometricConstraintData(ii) = studioSplineBuilderEx1.ConstraintManager.CreateGeometricConstraintData()
geometricConstraintData(ii).Point = points(ii)
geometricConstraintData(ii).AutomaticConstraintDirection = Features.GeometricConstraintData.ParameterDirection.Iso
geometricConstraintData(ii).AutomaticConstraintType = Features.GeometricConstraintData.AutoConstraintType.None
geometricConstraintData(ii).TangentDirection = nullDirection
geometricConstraintData(ii).TangentMagnitude = nullScalar
geometricConstraintData(ii).Curvature = nullOffset
geometricConstraintData(ii).CurvatureDerivative = nullOffset
geometricConstraintData(ii).HasSymmetricModelingConstraint = False
Next ii
studioSplineBuilderEx1.ConstraintManager.SetContents(geometricConstraintData)
Dim feature1 As Features.Feature
feature1 = studioSplineBuilderEx1.CommitFeature()
studioSplineBuilderEx1.Destroy()
Return feature1
End Function
Function select_a_spline(ByVal prompt As String) As Spline
Dim ui As UI = ui.GetUI()
Dim curveType() As Selection.SelectionType = _
{Selection.SelectionType.Curves}
Dim cursor As Point3d = Nothing
Dim selobj As Spline = Nothing
Dim resp As Selection.Response = _
ui.SelectionManager.SelectObject("Select a spline", prompt, _
Selection.SelectionScope.AnyInAssembly, False, _
curveType, selobj, cursor)
Return selobj
End Function
Public Function GetUnloadOption(ByVal dummy As String) As Integer
GetUnloadOption = NXOpen.Session.LibraryUnloadOption.Immediately
End Function
End Module