乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 37|回复: 1

[原创]功能函数返回数组变量数组--执行pline

[复制链接]

120

主题

326

帖子

7

银币

中流砥柱

Rank: 25

铜币
806
发表于 2008-3-17 10:01:00 | 显示全部楼层 |阅读模式

q4nbmukn5t1.jpg

q4nbmukn5t1.jpg


此图形是HG20595的一个剖面图形。解决方法是用ADO+数组+poyline方法安成。
程序如下:
  1. Option Explicit
  2. Const Pi = 3.14159265358979
  3. Dim adoCon As New ADODB.Connection
  4. ' 功能:打开指定的数据库(在frmConnectDB中指定)
  5. ' 输入:无
  6. ' 调用:无
  7. ' 返回:如果完成连接,返回True;否则返回False
  8. ' 示例:
  9. '       OpenDB
  10. Public Function OpenDB(InputDataBaseName) As Boolean
  11.     OpenDB = True
  12.    
  13.     ' 如果数据库已打开,不执行任何操作
  14.     If adoCon.State  0 Then Exit Function
  15.    
  16.     adoCon.CursorLocation = adUseClient
  17.    
  18.     ' 获得数据库文件的位置
  19.     Dim strDbName As String
  20.     Dim strProject As String
  21.     strProject = Left(ThisDrawing.Application.VBE.activevbProject.FileName, _
  22.                     Len(ThisDrawing.Application.VBE.activevbProject.FileName) - 19)
  23.     strDbName = strProject & "\mdb" & InputDataBaseName & ".mdb"
  24.     adoCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
  25.         strDbName & ";"
  26. End Function
  27. ' 功能:关闭指定的数据库(在frmConnectDB中指定)
  28. ' 输入:无
  29. ' 调用:无
  30. ' 返回:如果数据库处于打开状态,就关闭它
  31. ' 示例:
  32. '       CloseDB
  33. Public Function CloseDB()
  34.     If adoCon.State  0 Then
  35.         adoCon.Close
  36.     End If
  37. End Function
  38. Function HG20595T_Data_Preparation() As Double()
  39.   Dim d1, f2, x, w, c, n1, n, h, k, h1, d, l, PipeOutDiameter, PipeDelta, a1, rr, i, ScheduleWall, SeriesNo
  40.   Dim HG20595(12, 3) As Double
  41. '
  42.   Dim startpoint(0 To 2) As Double
  43.   Dim endpoint(0 To 2) As Double
  44. '
  45. '面域
  46.   Dim curves(0 To 12) As AcadEntity
  47.   Dim regionObj As Variant
  48. '旋转实体
  49.   Dim axisPt(0 To 2) As Double
  50.   Dim axisDir(0 To 2) As Double
  51.   Dim angle As Double
  52. '开孔
  53.   Dim cylinderObj As Acad3DSolid
  54.   Dim radius As Double
  55.   Dim center(0 To 2) As Double
  56.   Dim height As Double
  57.   height = 500
  58.   axisPt(0) = 0: axisPt(1) = 0: axisPt(2) = 0
  59.   axisDir(0) = 0: axisDir(1) = 0: axisDir(2) = 1
  60.   angle = Pi * 2 + 0.2
  61.   Dim solidObj As Acad3DSolid
  62.   Dim Sep_N, Pn As String, Dn As String, SearchCondition
  63.   Pn = 6.3: Dn = 350
  64.   Select Case Pn
  65.     Case 1#, 10#, 16#, 25#
  66.       SearchCondition = Dn & "-" & Trim(Str(Pn) + ".0")
  67.     Case Else
  68.       SearchCondition = Dn & "-" & Trim(Str(Pn))
  69.   End Select
  70.   
  71. '
  72.   ''
  73.   OpenDB ("HG20592")
  74.   '
  75.   Dim rst As New ADODB.Recordset
  76.   Dim Sql As String, ii As Integer
  77.   Sql = "select c.*,a.*,b.* from 带颈对焊法兰  as A,凹凸榫槽密封面 as b ,法兰规格 as c Where " & _
  78.       " c.法兰规格 = '" & SearchCondition & "' and c.法兰规格 = a.法兰规格 and c.法兰规格 = b.法兰规格"
  79.   rst.Open Sql, adoCon, adOpenDynamic, adLockOptimistic
  80.   ''
  81.    
  82.     ScheduleWall = 12: SeriesNo = "B"
  83. '    d1 = rst.Fields("突台外径d"):
  84.     f2 = rst.Fields("台高f2"):
  85.     x = rst.Fields("凸面外径X"):
  86.     w = rst.Fields("榫面内径W")
  87.    
  88.    
  89. '''
  90.     c = rst.Fields("WN法兰厚度C")  '
  91.     Select Case SeriesNo
  92.       Case "A"
  93.         n1 = rst.Fields("WN法兰颈径NA")
  94.         PipeOutDiameter = rst.Fields("钢管外径A")
  95.       Case "B"
  96.         n1 = rst.Fields("WN法兰颈径NB")
  97.         PipeOutDiameter = rst.Fields("钢管外径B")
  98.     End Select
  99.     n = rst.Fields("螺栓数量") 'xxlSheet.cells(ii, 16).Value
  100.     h = rst.Fields("WN法兰高度H")  'xxlSheet.cells(ii, 10).Value
  101.     k = rst.Fields("螺栓孔中心圆直径")  'xxlSheet.cells(ii, 13).Value
  102.     h1 = rst.Fields("WN焊端长度h")
  103.     d = rst.Fields("法兰外径D")  'xxlSheet.cells(ii, 12).Value
  104.     l = rst.Fields("螺栓孔直径")  'xxlSheet.cells(ii, 14).Value
  105.    
  106.     PipeDelta = ScheduleWall
  107.     a1 = PipeOutDiameter
  108.     rr = rst.Fields("WN圆角半径R")
  109.   CloseDB
  110. ' HG20595法兰实体赋值
  111.     ThisDrawing.SendCommand "_fillet" + Chr(10) + "r" & Chr(10) & rr & Chr(10) & Chr(10)
  112.     HG20595(1, 1) = (PipeOutDiameter - 2 * PipeDelta) / 2: HG20595(1, 2) = -f2: HG20595(1, 3) = 0
  113.     HG20595(2, 1) = w / 2: HG20595(2, 2) = -f2: HG20595(2, 3) = 0
  114.     HG20595(3, 1) = w / 2: HG20595(3, 2) = 0: HG20595(3, 3) = 0
  115.     HG20595(4, 1) = x / 2: HG20595(4, 2) = 0: HG20595(4, 3) = 0
  116.     HG20595(5, 1) = x / 2: HG20595(5, 2) = -f2: HG20595(5, 3) = 0
  117.     HG20595(6, 1) = d / 2: HG20595(6, 2) = -f2: HG20595(6, 3) = 0
  118.     HG20595(7, 1) = d / 2: HG20595(7, 2) = -c: HG20595(7, 3) = 0
  119.     HG20595(8, 1) = n1 / 2: HG20595(8, 2) = -c: HG20595(8, 3) = 0
  120.     HG20595(9, 1) = a1 / 2: HG20595(9, 2) = h1 - h: HG20595(9, 3) = 0
  121.     HG20595(10, 1) = a1 / 2: HG20595(10, 2) = -h: HG20595(10, 3) = 0
  122.     HG20595(11, 1) = (PipeOutDiameter - 2 * PipeDelta) / 2: HG20595(11, 2) = -h: HG20595(11, 3) = 0
  123.     HG20595(12, 1) = (PipeOutDiameter - 2 * PipeDelta) / 2: HG20595(12, 2) = -f2: HG20595(12, 3) = 0
  124.     HG20595T_Data_Preparation = HG20595
  125. End Function
  126. Sub lss()
  127.   Dim AA() As Double, bb() As Double, ii, jj, nn
  128.   Debug.Print TypeName(HG20595T_Data_Preparation)
  129.   
  130.   AA = HG20595T_Data_Preparation
  131.   ReDim bb(UBound(AA) * 3 - 1) As Double
  132.   Debug.Print UBound(bb)
  133.   
  134.   For ii = 1 To UBound(AA)
  135.     For jj = 1 To 3
  136.       bb(nn) = AA(ii, jj)
  137.       nn = nn + 1
  138.     Next jj
  139.   Next ii
  140.   Dim ppl As AcadPolyline
  141.   Set ppl = ThisDrawing.ModelSpace.AddPolyline(bb)
  142. End Sub
type ---- type end方法[code]
Option Explicit
Const Pi = 3.14159265358979
Dim adoCon As New ADODB.Connection
Private Type HG20595InitialData
  HG20595 As Variant '(12, 3) As Double
  n As Double
  k As Double
  l As Double
End Type
' 功能:打开指定的数据库(在frmConnectDB中指定)
' 输入:无
' 调用:无
' 返回:如果完成连接,返回True;否则返回False
' 示例:
'       OpenDB
Public Function OpenDB(InputDataBaseName) As Boolean
    OpenDB = True
   
    ' 如果数据库已打开,不执行任何操作
    If adoCon.State  0 Then Exit Function
   
    adoCon.CursorLocation = adUseClient
   
    ' 获得数据库文件的位置
    Dim strDbName As String
    Dim strProject As String
    strProject = Left(ThisDrawing.Application.VBE.activevbProject.FileName, _
                    Len(ThisDrawing.Application.VBE.activevbProject.FileName) - 19)
    strDbName = strProject & "\mdb" & InputDataBaseName & ".mdb"
    adoCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
        strDbName & ";"
End Function
' 功能:关闭指定的数据库(在frmConnectDB中指定)
' 输入:无
' 调用:无
' 返回:如果数据库处于打开状态,就关闭它
' 示例:
'       CloseDB
Public Function CloseDB()
    If adoCon.State  0 Then
        adoCon.Close
    End If
End Function
Function HG20595T_Data_Preparation() As HG20595InitialData
  Dim d1, f2, x, w, c, n1, n, h, k, h1, d, l, PipeOutDiameter, PipeDelta, a1, rr, i, ScheduleWall, SeriesNo
'
  ''
  OpenDB ("HG20592")
  '
  Dim rst As New ADODB.Recordset
  Dim Sql As String, ii As Integer
  
''
  Dim Sep_N, Pn As String, Dn As String, SearchCondition
  Pn = 6.3: Dn = 350
  Select Case Pn
    Case 1#, 10#, 16#, 25#
      SearchCondition = Dn & "-" & Trim(Str(Pn) + ".0")
    Case Else
      SearchCondition = Dn & "-" & Trim(Str(Pn))
  End Select
''
  Sql = "select c.*,a.*,b.* from 带颈对焊法兰  as A,凹凸榫槽密封面 as b ,法兰规格 as c Where " & _
      " c.法兰规格 = '" & SearchCondition & "' and c.法兰规格 = a.法兰规格 and c.法兰规格 = b.法兰规格"
  rst.Open Sql, adoCon, adOpenDynamic, adLockOptimistic
  ''
   
    ScheduleWall = 12: SeriesNo = "B"
'    d1 = rst.Fields("突台外径d"):
    f2 = rst.Fields("台高f2"):
    x = rst.Fields("凸面外径X"):
    w = rst.Fields("榫面内径W")
   
   
'''
    c = rst.Fields("WN法兰厚度C")  '
    Select Case SeriesNo
      Case "A"
        n1 = rst.Fields("WN法兰颈径NA")
        PipeOutDiameter = rst.Fields("钢管外径A")
      Case "B"
        n1 = rst.Fields("WN法兰颈径NB")
        PipeOutDiameter = rst.Fields("钢管外径B")
    End Select
    HG20595T_Data_Preparation.n = rst.Fields("螺栓数量") 'xxlSheet.cells(ii, 16).Value
    h = rst.Fields("WN法兰高度H")  'xxlSheet.cells(ii, 10).Value
    HG20595T_Data_Preparation.k = rst.Fields("螺栓孔中心圆直径")  'xxlSheet.cells(ii, 13).Value
   
   
    h1 = rst.Fields("WN焊端长度h")
    d = rst.Fields("法兰外径D")  'xxlSheet.cells(ii, 12).Value
    HG20595T_Data_Preparation.l = rst.Fields("螺栓孔直径")  'xxlSheet.cells(ii, 14).Value
   
    PipeDelta = ScheduleWall
    a1 = PipeOutDiameter
    rr = rst.Fields("WN圆角半径R")
  CloseDB
' HG20595法兰实体赋值
    Dim HG20595(12, 3) As Double
    ThisDrawing.SendCommand "_fillet" + Chr(10) + "r" & Chr(10) & rr & Chr(10) & Chr(10)
    HG20595(1, 1) = (PipeOutDiameter - 2 * PipeDelta) / 2: HG20595(1, 2) = -f2: HG20595(1, 3) = 0
    HG20595(2, 1) = w / 2: HG20595(2, 2) = -f2: HG20595(2, 3) = 0
    HG20595(3, 1) = w / 2: HG20595(3, 2) = 0: HG20595(3, 3) = 0
    HG20595(4, 1) = x / 2: HG20595(4, 2) = 0: HG20595(4, 3) = 0
    HG20595(5, 1) = x / 2: HG20595(5, 2) = -f2: HG20595(5, 3) = 0
    HG20595(6, 1) = d / 2: HG20595(6, 2) = -f2: HG20595(6, 3) = 0
    HG20595(7, 1) = d / 2: HG20595(7, 2) = -c: HG20595(7, 3) = 0
    HG20595(8, 1) = n1 / 2: HG20595(8, 2) = -c: HG20595(8, 3) = 0
    HG20595(9, 1) = a1 / 2: HG20595(9, 2) = h1 - h: HG20595(9, 3) = 0
    HG20595(10, 1) = a1 / 2: HG20595(10, 2) = -h: HG20595(10, 3) = 0
    HG20595(11, 1) = (PipeOutDiameter - 2 * PipeDelta) / 2: HG20595(11, 2) = -h: HG20595(11, 3) = 0
    HG20595(12, 1) = (PipeOutDiameter - 2 * PipeDelta) / 2: HG20595(12, 2) = -f2: HG20595(12, 3) = 0
    HG20595T_Data_Preparation.HG20595 = HG20595
End Function
Sub lss()
  Dim aa() As Double, bb() As Double, ii, jj, nn
  Dim ee As AcadEntity
  Set ee = DrawingEntityForHG20595T(HG20595T_Data_Preparation.HG20595 _
     , HG20595T_Data_Preparation.l, HG20595T_Data_Preparation.n, HG20595T_Data_Preparation.k)
End Sub
Function DrawingEntityForHG20595T(HG20595 As Variant, l, n, k) As AcadEntity
  'Dim HG20595(12, 3) As Double
  'Dim HG20595
  'HG20595 = HG20595InputData
'
  Dim startpoint(0 To 2) As Double
  Dim endpoint(0 To 2) As Double
'
'面域
  Dim curves(0 To 12) As AcadEntity
  Dim regionObj As Variant
'旋转实体
  Dim axisPt(0 To 2) As Double
  Dim axisDir(0 To 2) As Double
  Dim angle As Double
'开孔
  Dim cylinderObj As Acad3DSolid
  Dim radius As Double
  Dim center(0 To 2) As Double
  Dim height As Double
  height = 500
  axisPt(0) = 0: axisPt(1) = 0: axisPt(2) = 0
  axisDir(0) = 0: axisDir(1) = 0: axisDir(2) = 1
  angle = Pi * 2 + 0.2
  Dim solidObj As Acad3DSolid
   Dim i
   For i = 1 To 11
      startpoint(0) = HG20595(i, 0): startpoint(1) = HG20595(i, 1): startpoint(2) = HG20595(i, 2)
    If i

fimbotp25us.jpg

fimbotp25us.jpg


回复

使用道具 举报

1

主题

28

帖子

4

银币

初来乍到

Rank: 1

铜币
32
发表于 2008-3-18 14:26:00 | 显示全部楼层
谢谢!努力学习中
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-5 04:06 , Processed in 0.647172 second(s), 60 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表