Is cylindrical face interior or exterior?
Description
This sample shows how to determine whether the selected cylindircal face is an exterior face or an interior (hollow) face.Code Samples
Before running the sample, select a cylindrical face.
Public Sub IsCylindricalFaceInterior()
Dim oDoc As Document
Set oDoc = ThisApplication.ActiveDocument
If Not Typeof oDoc.SelectSet(1) Is Face Then
MsgBox "A face must be selected."
Exit Sub
End If
Dim oFace As Face
Set oFace = oDoc.SelectSet(1)
If Not oFace.SurfaceType = kCylinderSurface Then
MsgBox "A cylindrical face must be selected."
Exit Sub
End If
Dim oCylinder As Cylinder
Set oCylinder = oFace.Geometry
Dim params(1) As Double
params(0) = 0.5
params(1) = 0.5
' Get point on surface at param .5,.5
Dim points(2) As Double
Call oFace.Evaluator.GetPointAtParam(params, points)
' Create point object
Dim oPoint As point
Set oPoint = ThisApplication.TransientGeometry.CreatePoint(points(0), points(1), points(2))
' Get normal at this point
Dim normals(2) As Double
Call oFace.Evaluator.GetNormal(params, normals)
' Create normal vector object
Dim oNormal As Vector
Set oNormal = ThisApplication.TransientGeometry.CreateVector(normals(0), normals(1), normals(2))
' Scale vector by radius of the cylinder
oNormal.ScaleBy oCylinder.Radius
' Find the sampler point on the normal by adding the
' scaled normal vector to the point at .5,.5 param.
Dim oSamplePoint As point
Set oSamplePoint = oPoint
oSamplePoint.TranslateBy oNormal
' Check if the sample point lies on the cylinder axis.
' If it does, we have a hollow face.
' Create a line describing the cylinder axis
Dim oAxisLine As Line
Set oAxisLine = ThisApplication.TransientGeometry.CreateLine _
(oCylinder.BasePoint, oCylinder.AxisVector.AsVector)
'Create a line parallel to the axis passing thru the sample point.
Dim oSampleLine As Line
Set oSampleLine = ThisApplication.TransientGeometry.CreateLine _
(oSamplePoint, oCylinder.AxisVector.AsVector)
If oSampleLine.IsColinearTo(oAxisLine) Then
MsgBox "Interior face."
Else
MsgBox "Exterior face."
End If
End Sub
