如何用iLogic实现设计复制?

JUMU实名认证 发表于 2021-01-23 10:24 | 显示全部楼层 | 复制链接分享      上一主题  翻页  下一主题
规则也很好理解,逻辑如下。
1. 用AllReferencedDocument一次性得到目标零部件的所有引用文件,全部复制。
2. 依次打开所有复制文件,并替换其第一级的引用(ReplaceReference)

就这么简单。代码如下。

其中FileName,FolderName,oB为零部件参数。
例:FileName = "C:\test\A.iam"
FolderName = "C:\Copy"
oB = "_1"

运行代码,则会将A.iam设计复制到C:\Copy文件夹中。

  1. Sub Main
  2.         Dim List1 As ArrayList = New ArrayList()
  3.         Dim oDoc As Document
  4.         Dim oDoc2 As Document
  5.       
  6.         oDoc = ThisApplication.Documents.Open(FileName, False)
  7.       
  8.         oMainFullNameCopy = Filecopyfunc(oDoc.FullDocumentName, True)
  9.         List1.Add(oMainFullNameCopy)
  10.       
  11.         For Each oSubDoc In oDoc.AllReferencedDocuments
  12.                 oFullName0 = oSubDoc.FulldocumentName
  13.                 oFullNameCopy0 = Filecopyfunc(oFullName0, True)
  14.                 List1.Add(oFullNameCopy0)
  15.         Next
  16.         oDoc.close
  17.       
  18.         For Each oFNC In List1
  19.                 oSave = False
  20.                 oDoc2 = ThisApplication.Documents.Open(oFNC, False)
  21.                 If oDoc2.File.ReferencedFileDescriptors.Count <> 0 Then
  22.                         oFileDesEnu = oDoc2.File.ReferencedFileDescriptors
  23.                         For Each oFileDes In oFileDesEnu
  24.                                 oFullName2 = oFileDes.FullFileName
  25.                                 oFullNameCopy2 = Filecopyfunc(oFullName2, False)
  26.                                 If Dir(oFullNameCopy2) <> "" Then      
  27.                                         oFileDes.ReplaceReference(oFullNameCopy2)
  28.                                         oSave = True
  29.                                 End If
  30.                         Next
  31.                         if oSave = True then oDoc2.save
  32.                 End If
  33.                 oDoc2.close
  34.         Next
  35. End Sub

  36. Function Filecopyfunc(oFullName,oCopy)
  37.         NN = InStr(StrReverse(oFullName), ".")
  38.         AA = Left(oFullName, Len(oFullName) - NN)
  39.         BB = Right(oFullName, NN)

  40.         NN = InStr(StrReverse(AA), "")
  41.         If NN <> 0 Then oName = Right(AA, NN - 1) Else oName = AA
  42.       
  43.         CopyFolder = FolderName
  44.         If Dir(CopyFolder,vbDirectory) = "" Then MkDir(CopyFolder)
  45.       
  46.         oFullNameCopy = CopyFolder & "" & oName & oB & BB
  47.         If oCopy = True Then
  48.                 FileCopy(oFullName, oFullNameCopy)
  49.         End If
  50.         Filecopyfunc = oFullNameCopy
  51. End Function
复制代码


  距米网  

找到您想要的设计

工程师、学生在线交流学习平台
关注我们

手机版- 距米网 |苏公网安备32041102000587号

©2017-2025 苏ICP备18040927号-1