Continue to Site

Eng-Tips is the largest engineering community on the Internet

Intelligent Work Forums for Engineering Professionals

  • Congratulations IDS on being selected by the Eng-Tips community for having the most helpful posts in the forums last week. Way to Go!

select by ray API

Status
Not open for further replies.

nikhiljoglekar

Mechanical
Apr 8, 2003
17
Hi all
has anybody tried to select entities using ModelDoc2:RayIntersections or ModelDoc2:multiselectbyray API's?
I am finding some problem with it and am not able to trace it. The code is given as below... Also does anyone know how to handle exceptions coming from solidworks or get info about these?
What I am trying to do is I get box on the main part body. then I fire a ray from center of one of the face towards the body and try to select all the faces in between. but it's not working.. if anybody has pointers please let me know.
thanks


Set actDoc = solidModeler.ActiveDoc

If actDoc.GetType <> swDocPART Then
Call MsgBox(&quot;Only Allowed on Parts&quot;, vbOKOnly, &quot;Error&quot;) ' Display error message
Exit Function ' Exit this program
End If
ReDim boxParams(6)
Set bodyObj = actDoc.Body
If (bodyObj Is Nothing) Then
solidModeler.SendMsgToUser &quot;Error! Part has no body.&quot;
Exit Function
End If
boxParams = bodyObj.GetBodyBox()
If Not (IsEmpty(boxParams) Or IsNull(boxParams)) Then
For i = 0 To UBound(boxParams) ' For each string in the SafeArray
boxParams(i) = boxParams(i) * 100
Debug.Print boxParams(i)
Next i
End If
ln = boxParams(3) - boxParams(0)
wd = boxParams(4) - boxParams(1)
ht = boxParams(5) - boxParams(2)
zUpper = boxParams(5)
yUpper = boxParams(4)
xUpper = boxParams(3)
zLower = boxParams(2)
yLower = boxParams(1)
xLower = boxParams(0)

Dim rayOrigin(3) As Variant
'Dim org(3) As Double
Dim rayDir(3) As Variant

rayOrigin(0) = xLower + ln / 2
rayOrigin(1) = yLower + wd / 2
rayOrigin(2) = zLower - 1
rayDir(0) = 0
rayDir(1) = 0
rayDir(2) = 1

Call RayFire(rayOrigin, rayDir)

Set bodyObj = Nothing
Set actDoc = Nothing
End Function

Sub RayFire(origin As Variant, dir As Variant)
Dim hits As Integer
Dim bIn(0) As Variant
Dim params(7) As Variant
Dim res As Boolean
Dim i As Integer

Set bIn(0) = actDoc.Body
params(0) = origin(0)
params(1) = origin(1)
params(2) = origin(2)
params(3) = dir(0)
params(4) = dir(1)
params(5) = dir(2)
params(6) = 0.1

For i = 0 To 7
Debug.Print &quot;param &quot; & i & &quot; : &quot; & params(i)
Next i

res = actDoc.MultiSelectByRay(params, swSelFACES, False)
Debug.Print res
res = actDoc.SelectByRay(params, swSelFACES)
Debug.Print res

/////////////the below code throws some unknown error to me...

'On Error Resume Next
' MsgBox (&quot;Error # &quot; & CStr(Err.Number) & &quot; &quot; & Err.Description)

'hits = actDoc.RayIntersections(bIn, origin, dir, 2, 0.01, 0.01)

'Debug.Print &quot;hits &quot; & hits

End Sub
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor