Hello Everyone,
I would like to set the length of the selected magnetic lines.
So far I have wrote down as below
myDrawingSheet = swModel.GetCurrentSheet()
ArrMagneticLines = myDrawingSheet.GetMagneticLines()
Try 'remove all the mag line
swModel.ForceRebuild3(True)
tview = swModel.GetFirstView
While Not tview Is Nothing
For iu As Integer = 1 To 20
Dim bool As Boolean = swModel.Extension.SelectByID2("MagneticLine" & iu & "@" & tview.GetName2, "MAGNETLINE", 0, 0, 0, False, 0, Nothing, 0)
If bool Then
Dim instance As MagneticLine
Dim swm As SelectionMgr
swm = swModel.SelectionManager
'Dim jkj = swm.GetSelectedObjectCount2(0)
**instance = swm.GetSelectedObject5(swSelectType_e.SwSelMAGNETICLINES)**
If Not instance Is Nothing Then
instance.Length = 100
End If
End If
swModel.ClearSelection2(True)
Next
tview = tview.GetNextView
End While
Catch ex As Exception
End Try
But getting the magnetic line on this line returns “Nothing”
instance = swm.GetSelectedObject5(swSelectType_e.SwSelMAGNETICLINES)
Can anybody throw some light on this issue?
Thanks in Advance!
@AmenJlili
Can you try the following snippet in place of the one you have the error with? This checks to make sure the selected object is of the type you’re expecting before setting the instance object to the selected item.
If swSelMan.GetSelectedObjectType3(1, -1) = swSelectType_e.swSelMAGNETICLINES Then
Set instance = swSelMan.GetSelectedObject6(1, -1)
End If
I think you may have mixed up the GetSelectedObject with GetSelectedObjectType method a bit.
Hi @BigCrazyAl
Thanks for the reply.
I have also tried your code and made sure that my selected object was swSelMAGNETICLINES
Still, it returns “Nothing”
Refactored it a little bit, this works for me. Keep in mind setting the length to 100 means 100 meters.
Option Explicit
Sub main()
Dim swApp As SldWorks.SldWorks
Dim swModel As ModelDoc2
Dim swDraw As DrawingDoc
Dim swSheet As sheet
Dim swMagLine As MagneticLine
Dim i As Integer
Dim k As Integer
Dim sheetNames As Variant
Dim ArrMagneticLines As Variant
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swDraw = swModel
sheetNames = swDraw.GetSheetNames
swModel.ForceRebuild3 True
For i = 0 To UBound(sheetNames)
Set swSheet = swDraw.sheet(sheetNames(i))
ArrMagneticLines = swSheet.GetMagneticLines
For k = 0 To UBound(ArrMagneticLines)
Set swMagLine = ArrMagneticLines(k)
swMagLine.Length = 100
Next k
Next i
End Sub
Hi @BigCrazyAl
Thanks. This code will modify the length of magnetic lines in all the views in the sheet.
I would like to change the length on a specific view only.
Magnetic lines appear to attach themselves to the sheet only. If I try to place on into a view and move the view, the lines don’t move with it.
Sorry, I don’t think there’s a way to do it by whether a specific view contains the line unless you use the bounds of the view to determine if the points of the magnetic line fall within them.
If the balloon is added and attached to the magnetic line, then if we move the view, then the magnetic line will also move automatically.
Thanks for trying to check out the solution.
I will try to do some work around.