找回密码 注册 QQ登录
一站式解决方案

iCAx开思网

CAD/CAM/CAE/设计/模具 高清视频【积分说明】如何快速获得积分?快速3D打印 手板模型CNC加工服务在线3D打印服务,上传模型,自动报价
12
返回列表 发新帖
打印 上一主题 下一主题

[讨论] 填充阵列不能选择为驱动特征

[复制链接]
11
发表于 2016-1-22 09:05:25 | 只看该作者
本帖最后由 ning58 于 2016-1-24 09:03 编辑



管板插入换热管,用高版本的驱动特征方法实现,文件size特别大,搞不好就按G算。

用下面代码生成低版本文件,不到20M。


Private Sub ll()
   Dim Xls As Excel.Application, Rng As Range
      Set Xls = GetObject(, "Excel.Application")
      Set Rng = Xls.Cells(3, 1).CurrentRegion
      Debug.Print Rng.Address, Rng.Parent.Name
   Dim xx, yy, zz As Double
   Dim SwApp As SldWorks.SldWorks, SwModel As ModelDoc2, SwAssy As AssemblyDoc
      Set SwApp = Application.SldWorks
      Set SwModel = SwApp.ActiveDoc
      Set SwAssy = SwModel
      For ii = 1 To Rng.Rows.Count
         xx = Rng(ii, 1) / 1000
         yy = Rng(ii, 2) / 1000
         zz = -0.75
         SwAssy.AddComponent "D:\JB4716\JB4716\换热管.SLDPRT", xx, zz, yy ', zz
      Next ii
End Sub
''''



Sub a1()

    Dim SwApp As SldWorks.SldWorks, SwModel As ModelDoc2
       Set SwApp = Application.SldWorks
       Set SwModel = SwApp.ActiveDoc
    Dim SwSelMgr As SelectionMgr, SwFeat As Feature
       Set SwFeat = SwModel.FeatureByName("TPattern1")
       Debug.Print SwFeat.Name
       Set SwSelMgr = SwModel.SelectionManager
    Dim SwTableFeatData As TablePatternFeatureData
       Set SwTableFeatData = SwFeat.GetDefinition
    Dim vBasePt, vPt, vPt1, Pt() As Double, bPt(2) As Double
       vPt = Array(-0.032, -0.06, 0, -0.064, 0, 0, 0, 0.064, 0)
    With SwTableFeatData
      tmp = .AccessSelections(SwModel, Nothing)
      'Debug.Print tmp
      vBasePt = .GetBasePoint
      vPt1 = .PointArray

      ReDim Pt(UBound(vPt) + UBound(vPt1) + 1) As Double

      For ii = 0 To UBound(vPt1)
         Pt(ii) = vPt1(ii)
      Next ii
      For ii = 0 To UBound(vPt)
         Pt(ii + UBound(vPt1) + 1) = vPt(ii)
      Next ii

       .PointArray = Pt
      .ReleaseSelectionAccess
    End With
    SwFeat.ModifyDefinition SwTableFeatData, SwModel, Nothing
    Stop

End Sub
*****************************
Private Sub GetFillPatternNum()
    Dim Xls As Excel.Application, Rng As Range
       Set Xls = GetObject(, "Excel.Application")
       Set Rng = Xls.Selection
    Dim SwApp As SldWorks.SldWorks, SwModel As ModelDoc2
       Set SwApp = Application.SldWorks
       Set SwModel = SwApp.ActiveDoc
    Dim SwSelMgr As SelectionMgr
       Set SwSelMgr = SwModel.SelectionManager
    Dim SwFeat As Feature, tmp
    Dim FillPatternData As CircularPatternFeatureData
    Dim Xx(), Yy(), yDict As New Dictionary
    Dim vFace, fCount, yCount()
       ''
       For ii = Rng.Rows.Count To 1 Step -1
           SwModel.ShowConfiguration Rng(ii, 1)
             ''
             tmp = SwModel.Extension.SelectByID2("FillPattern", "BODYFEATURE", 0, 0, 0, False, 0, Nothing, 0)
             Set SwFeat = SwSelMgr.GetSelectedObject5(1)
             ''
             vFace = SwFeat.GetFaces
             fCount = SwFeat.GetFaceCount
             ''
             Rng(ii, 2) = fCount
             ''
             ReDim Xx(fCount), Yy(fCount)
             For jj = 0 To UBound(vFace)
                 Set SwFace = vFace(jj)
                 ''
                 With SwFace
                     vEdge = .GetEdges
                     Set SwEdge = vEdge(0)
                     ''
                     With SwEdge
                         Set SwCurve = .GetCurve
                         sS = SwCurve.CircleParams
                         Xx(jj) = Round(sS(0) * 1000, 2)
                         Yy(jj) = Round(sS(2) * 1000, 1)
                         yDict(Yy(jj)) = ""
                     End With
                 End With
             Next jj
             ''Stop
             ''
             oArr = Bubble_Sort(yDict.Keys, "ASC")
             ''
             ReDim yCount(UBound(oArr), 1)
             For ii1 = 0 To UBound(oArr)
                 'Debug.Print Xls.WorksheetFunction.CountIf(yy, oArr(ii))
                 Cc = 0
                 For jj = 0 To UBound(Yy)
                    If oArr(ii1) = Yy(jj) Then
                        Cc = Cc + 1
                    End If
                 Next jj
                 yCount(ii1, 0) = oArr(ii1)
                 yCount(ii1, 1) = Cc
                 Total = Total + Cc
             Next ii1
             ''
             For jj = 0 To UBound(yCount)
                 Rng(ii, 4 + jj) = yCount(jj, 1)
                 If ii = Rng.Rows.Count Then
                    Rng(0, 4 + jj) = yCount(jj, 0)
                 End If

             Next jj
       Next ii
End Sub

Function Bubble_Sort(Ary, objOrder As String)
   Dim aryUBound, i, j
   aryUBound = UBound(Ary)
   For ii = 0 To aryUBound
     Ary(ii) = Val(Round(Ary(ii), 2))
   Next ii
   For i = 0 To aryUBound
     For j = i + 1 To aryUBound
       Select Case UCase(objOrder)
         Case "DESC"
           If Ary(i) < Ary(j) Then
             Swap Ary(i), Ary(j)
           End If
         Case "ASC"
           If Ary(i) > Ary(j) Then
             Swap Ary(i), Ary(j)
           End If
       End Select
     Next
   Next
   Bubble_Sort = Ary
End Function
''
Function Swap(a, B)
   Dim tmp
   tmp = a
   a = B
   B = tmp
End Function





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
12
发表于 2016-1-27 07:11:59 | 只看该作者
SW玩手最常用的口头禅是,SW太吃计算机资源了。
计算机硬件的内在要16G以上,要是按高配计算机建立管板模型。Size随便就是1G。
Sw2006根本无法打开1G的sldprt文件。




用高配计算机实现,需要开6687个孔,相当吃资源,Size接近1G。

Dn400        37        37
Dn500        61        24
Dn600        109        48
Dn700        151        42
Dn800        199        48
Dn900        253        54
Dn1000        313        60
Dn1100        379        66
Dn1200        451        72
Dn1300        517        66
Dn1400        637        120
Dn1500        721        84
Dn1600        835        114
Dn1700        955        120
Dn1800        1069        114
               
        6687        1069


而用Sw2006实现管板的sldprt文件,减少Size最简单方法,是用API来精简开孔数→开孔数为1069。
少开孔5618个孔。
  1. Function RngPtArr(Rng As Range)
  2.    Dim Arr() As Double, oRow As Integer
  3.       ReDim Arr(Rng.Rows.Count * 3 - 1) As Double
  4.       ''
  5.       
  6.       For ii = 1 To Rng.Rows.Count
  7.          Arr(oRow) = Rng(ii + 1, 1) / 1000
  8.          Arr(oRow + 1) = Rng(ii + 1, 2) / 1000
  9.          Arr(oRow + 2) = 0
  10.          oRow = oRow + 3
  11.       Next ii
  12.       RngPtArr = Arr
  13. End Function


  14. Sub TablePatternPointArr()
  15.     Dim Xls As Excel.Application, Rng As Range
  16.        Set Xls = GetObject(, "Excel.Application")
  17.        Set Rng = Xls.Selection
  18.    
  19.     Dim SwApp As SldWorks.SldWorks, SwModel As ModelDoc2
  20.        Set SwApp = Application.SldWorks
  21.        Set SwModel = SwApp.ActiveDoc
  22.     Dim SwSelMgr As SelectionMgr, SwFeat As Feature
  23.       
  24.        Set SwSelMgr = SwModel.SelectionManager
  25.     Dim SwTableFeatData As TablePatternFeatureData, PtArr, PtArrRng As Range
  26.       
  27.     Dim vBasePt, vPt, vPt1, Pt() As Double, bPt(2) As Double
  28.        For ii = 1 To Rng.Rows.Count
  29.           Set SwFeat = SwModel.FeatureByName(Rng(ii, 1) & "Tab")
  30.          
  31.           Set SwTableFeatData = SwFeat.GetDefinition
  32.           Set PtArrRng = Xls.Range(Rng(ii, 4))
  33.           'Debug.Print PtArrRng.Address,
  34.           PtArr = RngPtArr(PtArrRng)
  35.          
  36.           With SwTableFeatData
  37.              .AccessSelections SwModel, Nothing
  38.              .PointArray = PtArr
  39.              Debug.Print SwFeat.Name
  40.              .ReleaseSelectionAccess
  41.           End With
  42.           SwFeat.ModifyDefinition SwTableFeatData, SwModel, Nothing
  43.           'Stop
  44.        Next ii
  45.    

  46. End Sub
复制代码


  1. Function InsTabDrivenPattern(SwModel As ModelDoc2, FileName, FeatName, CoordName, BodyArr)
  2.    Dim SwFeat As Feature, SwFeatMgr As FeatureManager
  3.    Set SwFeatMgr = SwModel.FeatureManager
  4.    With SwModel.Extension
  5.      .SelectByID2 CoordName, "COORDSYS", 0, 0, 0, False, 16, Nothing, 0
  6.      For ii = 0 To UBound(BodyArr)
  7.        .SelectByID2 BodyArr(ii), "BODYFEATURE", 0, 0, 0, True, 4, Nothing, 0
  8.      Next ii
  9.    End With
  10.    ''
  11.    Set SwFeat = SwFeatMgr.InsertTableDrivenPattern(FileName, Nothing, True, True)
  12.    SwFeat.Name = FeatName
  13.    'SwFeat.Select True
  14.    'SwModel.EditSuppress2
  15. End Function
  16. ‘‘’’
  17. ''
  18. Private Sub del20160126()
  19.    Dim T: T = Timer
  20.    Dim BodyArr: BodyArr = Array("CutHole")
  21.    Dim Xls As Excel.Application, Rng As Range
  22.       Set Xls = GetObject(, "Excel.Application")
  23.       Set Rng = Xls.Selection
  24.       ''
  25.    Dim SwApp As SldWorks.SldWorks, SwModel As ModelDoc2
  26.       Set SwApp = Application.SldWorks
  27.       Set SwModel = SwApp.ActiveDoc
  28.       ''
  29.       FileName = "D:\A.SldPTab"
  30.       For ii = 1 To Rng.Rows.Count
  31.          SwModel.ShowConfiguration2 Rng(ii, 1)
  32.          
  33.          InsTabDrivenPattern SwModel, FileName, Rng(ii, 1) & "Tab", "CoordinateSystem", BodyArr
  34.          Debug.Print Rng(ii, 1),
  35.          PrintTiming T
  36.       Next ii
  37.       PrintTiming T
  38.       SwModel.Save
  39.       Timing T
  40. End Sub
复制代码



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
13
发表于 2016-1-31 09:02:34 | 只看该作者
那就你自娱自乐吧,看看哪家还使用着06版的公司,会掏钱购买楼主的思想
当今哪个公司如果在计算机硬件还死抠的话,早就死透了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3D打印手板模型快速制作服务,在线报价下单!

QQ 咨询|手机版|联系我们|iCAx开思网  

GMT+8, 2025-4-8 03:59 , Processed in 0.024120 second(s), 10 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2025 www.iCAx.org

快速回复 返回顶部 返回列表