ss404770848 发表于 2016-4-8 13:39:56

尺寸驱动模型,写个通用的VBA代码,哪位大神能指导下?

做个通用的VBA代码,要实现以下功能:先建立一个部件或零件,在通过VBA提取部件或零件中所有的特征与草图所包含的尺寸名称与尺寸数值大小,导入到excel,再在excel中修改相应的尺寸数值,来驱动模型使之更新。
自己查的资料附上,只能读出零件的尺寸,并写入excel。

Function SetSwPart()
Dim SwApp As Object
Dim SelMgr As Object, boolStatus As Boolean
Dim longstatus As Long, longwarnings As Long

Set SwApp = GetObject(, "sldworks.application")

Set SetSwPart = SwApp.ActiveDoc

End Function
''****************************

Private Sub ReadSwDimensionInSldPrt()
''读SW的变量数据
Dim oDic
Set oDic = CreateObject("Scripting.Dictionary")
   

nn = Range("A65536").End(3).Row
Set Rng = Range("A1:Z" & nn)

    Dim swFeat As Object, swSubFeat As Object
    Dim swDispDim As Object, SwDim As Object
    Dim swAnn As Object
    Dim bRet As Boolean
    Dim Str
   
    Set SwApp = CreateObject("SldWorks.Application")
    Set SwPart = SetSwPart
    Set swFeat = SwPart.FirstFeature
   
   
    kk = 1
    Do While Not swFeat Is Nothing
      Debug.Print "" + swFeat.Name
      Set swSubFeat = swFeat.GetFirstSubFeature
      Do While Not swSubFeat Is Nothing
            Debug.Print "      " + swSubFeat.Name
            
            Set swDispDim = swSubFeat.GetFirstDisplayDimension
            Do While Not swDispDim Is Nothing
                Set swAnn = swDispDim.GetAnnotation
                Set SwDim = swDispDim.GetDimension
                Debug.Print "          [" & SwDim.FullName & "] = " & SwDim.GetSystemValue2("")
                'Debug.Print swDim.FullName, swDim.GetSystemValue2("")
                Set swDispDim = swSubFeat.GetNextDisplayDimension(swDispDim)
            Loop
            Set swSubFeat = swSubFeat.GetNextSubFeature
      Loop
      
      Set swDispDim = swFeat.GetFirstDisplayDimension
      Do While Not swDispDim Is Nothing
            Set swAnn = swDispDim.GetAnnotation
            Set SwDim = swDispDim.GetDimension
            
            Debug.Print "    [" & SwDim.FullName & "] = " & SwDim.GetSystemValue2("")
            Debug.Print SwDim.FullName, SwDim.GetSystemValue2("")
            Str = SwDim.FullName
            oArr = Split(Str, "@")
            Str = oArr(0) & "@" & oArr(1)
            '
            Cells(kk, 5) = SwDim.GetSystemValue2("")
            Cells(kk, 4) = oArr(1)
            Debug.Print SwDim.GetSystemValue2("")
            oDic(Str) = SwDim.GetSystemValue2("")
            
            Set swDispDim = swFeat.GetNextDisplayDimension(swDispDim)
            kk = kk + 1
      Loop
      Set swFeat = swFeat.GetNextFeature
    Loop
    Dim oArr1, oArr2, cc
    cc = 6
    oArr1 = oDic.keys: oArr2 = oDic.items
    For kk = 1 To UBound(oArr1) + 1
      Cells(kk, 1 + cc) = kk - 1
      Cells(kk, 2 + cc) = "=" & """Arr(""" & " & " & Cells(kk, 1 + cc).Address(0, 0) & " & " & """)="""
      Cells(kk, 3 + cc) = "'" & Chr(34) & oArr1(kk - 1) & Chr(34)
      Cells(kk, 4 + cc) = Split(oArr1(kk - 1), "@")(1)
      Cells(kk, 5 + cc) = oArr2(kk - 1)
   
    Next kk
End Sub

ss404770848 发表于 2016-4-12 09:35:14

有关零件的已解决,现在就差部件级的。

ss404770848 发表于 2016-4-15 16:05:17

没人能指点一二?

18772757088 发表于 2017-11-9 09:43:02

先遍历   读取每个零部件的驱动尺寸啊

super 发表于 2017-11-14 08:01:51

先确定你的部件是否有尺寸,很多时候部件是没有尺寸的,所以读不出来。

yiyiyicz 发表于 2017-12-6 21:08:07

本帖最后由 yiyiyicz 于 2017-12-6 21:39 编辑

刚刚接触SW,2014刚刚装上还没试。
从你的描述:“通过VBA提取部件或零件中所有的特征与草图所包含的尺寸名称与尺寸数值大小,导入到excel,再在excel中修改相应的尺寸数值,来驱动模型使之更新。”
你并没有提到一张《变量表》,变量表是solidegde里的名称。但是,在有参数驱动功能的CAD软件里,都有这样的表,名称不一样。只是我还没有找到。在我印象里,SOLIDWORKS与solidegde用的同一个内核,猜一下,他们的表用法应该也一样。
这张表《变量表》是从CAD中导出的excel表,它是在CAD系统里自动生成的。表中每个参数都与CAD中的对应的参数有链接关系(不过可以编辑)。于是,只要改变各个参数的数值,模型的尺寸、阵列数量等跟着变。鉴于此,就没有必要逐个提取特征的有关参数,再逐个将他们回写。
作为二次开发,只是需要针对这张表做工作。range单元格定位只不过是为了在对应的range里修改参数值。二次开发重要的工作是尺寸网络中尺寸的传递,和尺寸至少在几何模型层面上是合乎逻辑。还有就是合理组织数据(应该是叫数据结构)。
假如没有看错的话,你的思路需要调整。CAD中已经做了的工作,就没有必要再做。以前我发现由于各种因素,逐个提取后再回写尺寸参数;逐个提取零部件再生成BOM,容易出错。我的想法是,人家CAD已经做了的,我只管用就是了。毕竟咱们是学机械的,编程不如人家软件专业编的好。

发现5#楼讲到:“部件没有尺寸”,除非它和其它的零部件没有任何装配关系或者运动学关系。否则是有尺寸的。假如你导出了CAD自动生成的那张表,就会看到尺寸,而且应该有不少。没有尺寸恐怕是错觉。在装配时有不少尺寸是默认的
真要是没有尺寸,则这个部件就没有必要出现在这张装配图中了。学机械的不该犯这样的错误
在二次开发中,作为学机械的,一定要概念清楚。这能弥补不少软件方面的不足。

yiyiyicz 发表于 2017-12-8 11:37:19

我理解的参数设计,敬请各位指教
在SOLIDWORKS在有一个很重要的工具《系列零件设计表》,也就是我之前提到的那个《变量表》
一般,他是针对零件族这类概念的
1)
使用中应该是:用系列零件表建立新的特征(对于零件),或者建立新的配置(对于装配),也可能允许直接用代码生成前两种;通过软件编程去读excel表中的数据;通过软件编程去修改参数
如果导出了这张Excel表,则手工操作也是可行的。
还有别的方法,如API。不过不如上面的简单
2)
流程
a)打开等待修改的零件\装配的那个文件
b)修改参数
c)模型重新生成一次
以下是VB代码
对特征变量赋值
(......)
pary Parameter( ).SystemValue =
重新生成
pary EditRebuild

页: [1]
查看完整版本: 尺寸驱动模型,写个通用的VBA代码,哪位大神能指导下?