<?xml encoding=”UTF-8″>By Adam Nagy
The SurfaceEvaluator object has a GetIsoCurve function that can return a curve on the surface running in the U or V parametric direction.
The function’s UDirection parameter could be confusing. It tells the function if the curve should be along the U or V parametric direction, and not what the passed in parameter should be: i.e. in case of UDirection = True you get back a curve that runs in the U parametric direction, but the parameter you pass to the function should be a V parametric value.
Here is a function that goes along the U direction of a Face and creates WorkPoints there plus creates a circle based on what GetIsoCurve(UDirection = False) returns:
Sub GetIsoCurveTest()
Dim doc As PartDocument
Set doc = ThisApplication.ActiveDocument
Dim cd As PartComponentDefinition
Set cd = doc.ComponentDefinition
Dim f As Face
For Each f In cd.SurfaceBodies(1).Faces
' We only deal with the cylindrical side face now
If TypeOf f.Geometry Is Cylinder Then
Dim s As SurfaceEvaluator
Set s = f.Evaluator
Dim paramRange As Box2d
Set paramRange = s.ParamRangeRect
' Create points along U direction
Dim uDif As Double
uDif = (paramRange.MaxPoint.x - paramRange.MinPoint.x) / 5
Dim tr As TransientGeometry
Set tr = ThisApplication.TransientGeometry
Dim wps As WorkPoints
Set wps = cd.WorkPoints
Dim i As Integer
For i = 0 To 5
Dim pt() As Double
Dim params(1) As Double
params(0) = paramRange.MinPoint.x + (uDif * i)
params(1) = paramRange.MinPoint.y
Call s.GetPointAtParam(params, pt)
Call wps.AddFixed(tr.CreatePoint(pt(0), pt(1), pt(2)))
Next
' Get IsoCurve in the V direction (<strong>UDirection</strong> = <strong>False</strong>)
' at the mid U parametric position
' In case of our model this should provide a Circle
Dim midU As Double
midU = (paramRange.MinPoint.x + paramRange.MaxPoint.x) / 2#
Dim oc As ObjectCollection
Set oc = s.GetIsoCurve(midU, False)
Dim circ As Inventor.Circle
Set circ = oc(1)
Dim s3d As Sketch3D
Set s3d = cd.Sketches3D.Add()
' Show it in the UI by adding it to a 3d sketch
Call s3d.SketchCircles3D.AddByCenterRadius( _
circ.Center, circ.Normal, circ.Radius)
End If
Next
End Sub
The result is:
In case of the above cylinder’s side Face if you call the GetIsoCurve with UDirection = True then you’ll get back a straight LineSegment (and the passed in parameter should be along the V direction, Point2d.Y), but if pass in UDirection = False then the returned curve will be a Circle (and the passed in parameter should be along the U direction, Point2d.X) – this is highlighted in blue in the above picture.


Leave a Reply