4 Replies Latest reply on Oct 4, 2013 9:54 AM by Hans Bekkers

    Components stay floating in assy after insertion by API

    Hans Bekkers

      Hi Everyone,


      The company I work for receives vast amounts of 3D CAD Data via IGS files. These IGS files normally are parts, which can be put together in an assembly and form a component together. In order to reduce the manual labour, I am now programming a macro which converts all IGS files in it's folder to SLDPRT's, starts an assy, inserts the new SLDPRT, then transforms the origin so the origin of the part lines up with the origin of the assembly, repeats this proces for all IGS files in it's folder and  saves and closes all documents. So far so good. All of this is working.


      But here comes the problem;

      It only fixes the first component which is inserted in the assy. The second (and all latter ones for that matter) stay floating. I have looked into the fixcomponent Method but I can't seem to get it to work properly. Who can help me out?


      PS: The code is still sloppy, I have quite some experience in Excel VBA, but these are my first endeauvours in SW, so be kind


      The code I have so far:


      Dim swApp           As Object

      Dim Part            As Object

      Dim boolstatus      As Boolean

      Dim longstatus      As Long

      Dim longwarnings    As Long

      Dim sFileName       As String

      Dim Path            As String

      Dim partFileName    As String

      Dim FixFileName     As String

      Dim openDocs        As Variant

      Dim currentModel    As Variant

      Dim swPartDoc       As PartDoc

      Dim swAssemblyDoc   As AssemblyDoc

      Dim swComp          As Component2

      Dim swMathUtil      As SldWorks.MathUtility

      Dim swXform         As SldWorks.MathTransform

      Sub main()



      Set swApp = _




      Path = Left(swApp.GetCurrentMacroPathName(), InStrRev(swApp.GetCurrentMacroPathName(), "\"))

      sFileName = Dir(Path & "*.igs")



      Set Part = swApp.NewDocument("H:\SolidWorks\Common Data\VdB Assembly.asmdot", 0, 0, 0)

      swApp.ActivateDoc2 "Assem1", False, longstatus

      longstatus = Part.SaveAs3(Path + "Assy.SLDASM", 0, 2)



      Do Until sFileName = ""



              boolstatus = swApp.LoadFile2(Path + sFileName, "r")



              Set Part = swApp.ActiveDoc

              Dim myModelView As Object

              Set myModelView = Part.ActiveView



              myModelView.FrameState = swWindowState_e.swWindowMaximized



              longstatus = Part.ImportDiagnosis(True, False, True, 0)

              Part.ClearSelection2 True

              Part.ClearSelection2 True



              longstatus = Part.SaveAs3(Path + Part.GetTitle + ".SLDPRT", 0, 0)



              openDocs = swApp.GetDocuments()



              For Each currentModel In openDocs

                  If (currentModel.GetType = swDocumentTypes_e.swDocASSEMBLY) Then

                      Set swAssemblyDoc = currentModel

                  End If


                  If (currentModel.GetType = swDocumentTypes_e.swDocPART) Then

                      Set swPartDoc = currentModel

                      partFileName = swPartDoc.GetPathName()

                  End If





              Set swMathUtil = swApp.GetMathUtility

              Set swXform = swMathUtil.CreateTransform(Nothing)

              swComp.Transform2 = swXform





              longstatus = swAssemblyDoc.SaveAs3(Path + "Assy.SLDASM", 0, 2)

              swApp.CloseDoc swPartDoc.GetTitle


              sFileName = Dir




      swApp.CloseAllDocuments (True)



      End Sub