明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1132|回复: 2

[基础] 关于在VB.net中采用GetBoundingBox或者图块文字坐标的问题

[复制链接]
发表于 2020-1-1 11:02:37 | 显示全部楼层 |阅读模式
各位大哥好,有个问题想请教一下,不知道能不能帮忙看看啊,谢谢。我想在VB.net编制的程序(独立的exe文件)中实现这么一个功能:程序自动根据excel表格的数据,调取对应的图块,并把图块插入cad文件中,然后图块中的各个属性需根据excel表格的内容进行修改,有的属性修改后文字超出了图块的范围,为保证美观需要对该文字进行缩放。这个功能已经在VBA中实现了,但是VBA需要依靠CAD 才能运行,因此单独编制了基于VB.net的程序。VBA代码拷贝到VB.net中基本能用,只是无法实现文字缩放,问题截图及代码如下,麻烦帮忙看看是哪里的问题啊,谢谢!(代码有所简化,个别不需要缩放的属性对应的代码没贴)

调试中发现这句代码:attVars(k).GetBoundingBox(minExt, maxExt),对某一个块的第一个属性修改后,它能计算出修改后的文字的坐标,但是后面修改的其他属性的坐标无法计算,结果始终保持为第一个属性的文字的坐标,在VBA中没有这个问题。
代码如下:
  1. Imports System.Windows.Forms
  2. Imports Microsoft.Office.Interop
  3. Imports System.IO
  4. Imports System.Threading '导入命名空间
  5. Imports AutoCAD
  6. Public Class Form1
  7.     Private Sub Button1_Click_1(sender As System.Object, e As System.EventArgs) Handles Button1.Click
  8.         '读取excel负荷表
  9.         Dim ExcelApp As Microsoft.Office.Interop.Excel.Application        '声明Excel对象
  10.         Dim ExcelWorkBook As Excel.Workbook         '声明工作簿对象
  11.         Dim ExcelWorkSheet As Excel.Worksheet       '声明工作表对象
  12.         Dim arr_FuHeBiao
  13.         ExcelApp = New Microsoft.Office.Interop.Excel.Application         '实例化Excel对象
  14.         ExcelWorkBook = ExcelApp.Workbooks.Open("D:\桌面文件\VB.net测试\output1.xlsx")
  15.         ExcelApp.Visible = False                                          '隐藏Excel文件
  16.         ExcelWorkBook = ExcelApp.Workbooks(1)
  17.         arr_FuHeBiao = ExcelWorkBook.Sheets("sheet1").UsedRange.value     '负荷表读入数组
  18.         ExcelWorkBook.Close(True)   '关闭工作簿  
  19.         ExcelApp.Quit()             '结束EXCEL对象
  20.         ExcelApp = Nothing          '释放xlApp对象
  21.         ExcelWorkBook = Nothing
  22.         ExcelWorkSheet = Nothing
  23.         '关闭excel进程
  24.         Dim arrProcesses As Process() = Process.GetProcessesByName("excel")
  25.         Dim objNewExcelProcess As Process = (From objProcess As Process In Process.GetProcessesByName("excel")
  26.         Where Not arrProcesses.Contains(objProcess))(0)
  27.         objNewExcelProcess.Kill()
  28.         Dim xx As Integer
  29.         Dim yy As Integer
  30.         xx = UBound(arr_FuHeBiao, 2)          'excel表格列数
  31.         yy = UBound(arr_FuHeBiao, 1)          'excel表格行数

  32.         Dim AcadApp As AcadApplication
  33.         Dim AcadDoc As AcadDocument
  34.         On Error Resume Next
  35.         AcadApp = GetObject(, "AutoCAD.Application")     '如果CAD已经运行,则返回对CAD应用程序对象的引用,否则发生一个错误         
  36.         If Err.Number Then                               '如果Err.Number非零(为真)            
  37.             Err.Clear()
  38.             AcadApp = CreateObject("AutoCAD.Application")
  39.             If Err.Number Then
  40.                 MsgBox(Err.Description)
  41.                 Exit Sub
  42.             End If
  43.         End If
  44.         AcadApp.Visible = True                            '设置界面可视         
  45.         AcadApp.WindowState = AutoCAD.AcWindowState.acMax '设置界面最大化         
  46.         AppActivate(AcadApp.Caption)                      '显示AutoCAD界面           
  47.         Dim count As Integer
  48.         Dim i As Integer
  49.         Dim dir_dwg As String
  50.         dir_dwg = "d:\400V\shigong"
  51.         Dim j As Integer
  52.         Dim blk As String
  53.         Dim blk_obj As Object
  54.         Dim startp(0 To 2) As Double
  55.         Dim countg As Integer
  56.         Dim attVars As Object
  57.         Dim k As Integer
  58.         Dim mulian As Integer
  59.         Dim guihao As Integer          '1、柜号
  60.         Dim xinghao As Integer         '2、型号
  61.         Dim chicun As Integer          '3、尺寸
  62.         Dim huiluhao As Integer        '4、回路号
  63.         Dim xiaoshiguige As Integer    '5、模数
  64.         Dim kaiguanhao As Integer      '6、开关号
  65.         Dim duanluqi As Integer        '7、断路器型号
  66.         Dim tuokouqi As Integer        '8、脱扣器型号
  67.         Dim liuhu As Integer           '9、流互
  68.         Dim dianliubiao As Integer     '10、电流表
  69.         Dim diandubiao As Integer      '11、电度表
  70.         Dim langyong As Integer         '浪涌保护器
  71.         Dim mingcheng As Integer       '17、回路名称
  72.         Dim shebeirongliang As Integer '18、设备容量
  73.         Dim jisuanrongliang As Integer '19、计算容量
  74.         Dim jisuandianliu As Integer   '20、计算电流
  75.         Dim zhengding As Integer       '21、整定
  76.         Dim peidianxiang As Integer    '22、配电箱
  77.         Dim dianlan As Integer         '23、电缆
  78.         Dim xiajizhengding As Integer   '24、下级整定
  79.         Dim fuhedengji As Integer      '25、负荷等级
  80.         Dim sanyao As Integer          '26、三遥
  81.         Dim jiankong As Integer         '27、监控
  82.         Dim fujian As Integer          '28、接地保护及定值
  83.         Dim xiaofang As Integer         '29、负荷类型
  84.         Dim beizhu As Integer          '30、备注
  85.         Dim muxianduan As Integer      '31、母线段
  86.         Dim duanyanshi As Integer           '32、短延时整定值
  87.         Dim shundong As Integer           '33、瞬动整定值
  88.         Dim xiangxian As Integer           '34、相线截面
  89.         Dim nxian As Integer           '35、N线截面
  90.         Dim pexian As Integer           '36、PE线截面
  91.         Dim m As Integer
  92.         Dim deng As Integer
  93.         count = yy   '行数
  94.         For i = 1 To xx
  95.             Select Case arr_FuHeBiao(1, i)
  96.                 Case "开关柜编号"
  97.                     guihao = i
  98.                 Case "开关柜型号"
  99.                     xinghao = i
  100.                 Case "外型尺寸"
  101.                     chicun = i
  102.                 Case "回路编号"
  103.                     huiluhao = i
  104.                 Case "模数"
  105.                     xiaoshiguige = i
  106.                 Case "主回路开关编号"
  107.                     kaiguanhao = i
  108.                 Case "断路器型号"
  109.                     duanluqi = i
  110.                 Case "脱扣器型号"
  111.                     tuokouqi = i
  112.                 Case "电流互感器"
  113.                     liuhu = i
  114.                 Case "电流表"
  115.                     dianliubiao = i
  116.                 Case "电度表"
  117.                     diandubiao = i
  118.                 Case "浪涌保护器"
  119.                     langyong = i
  120.                 Case "回路名称"
  121.                     mingcheng = i
  122.                 Case "设备容量"
  123.                     shebeirongliang = i
  124.                 Case "计算容量"
  125.                     jisuanrongliang = i
  126.                 Case "计算电流"
  127.                     jisuandianliu = i
  128.                 Case "长延时整定值"
  129.                     zhengding = i
  130.                 Case "下级配电箱编号"
  131.                     peidianxiang = i
  132.                 Case "馈线电缆截面"
  133.                     dianlan = i
  134.                 Case "下级配电箱整定值"
  135.                     xiajizhengding = i
  136.                 Case "负荷等级"
  137.                     fuhedengji = i
  138.                 Case "操作机构"
  139.                     sanyao = i
  140.                 Case "电气火灾监控模块"
  141.                     jiankong = i
  142.                 Case "接地保护及定值"
  143.                     fujian = i
  144.                 Case "负荷类型"
  145.                     xiaofang = i
  146.                 Case "备注"
  147.                     beizhu = i
  148.                 Case "母线段"
  149.                     muxianduan = i
  150.                 Case "短延时整定值"
  151.                     duanyanshi = i
  152.                 Case "瞬动整定值"
  153.                     shundong = i
  154.                 Case "相线截面"
  155.                     xiangxian = i
  156.                 Case "N线截面"
  157.                     nxian = i
  158.                 Case "PE线截面"
  159.                     pexian = i
  160.             End Select
  161.         Next i
  162.         Me.Visible = False

  163.         AcadDoc = AcadApp.ActiveDocument
  164.         Dim intp(0 To 2) As Double

  165.         'CAD中块插入的初始坐标
  166.         intp(0) = 0
  167.         intp(1) = 0
  168.         intp(2) = 0

  169.         Dim fitPoint(0 To 2) As Double
  170.         Dim minExt As Object
  171.         Dim maxExt As Object
  172.         Dim intp_gui(0 To 2) As Double

  173.         mulian = 0

  174.         Dim ij As Integer
  175.         Dim gui As String
  176.         Dim guishu As Integer
  177.         Dim kk As Integer

  178.         blk = dir_dwg + "表头" + ".dwg"     '图块路径及图块名称
  179.         blk_obj = AcadApp.ActiveDocument.ModelSpace.InsertBlock(intp, blk, 1, 1, 1, 0)     '插入块InsertBlock(插入点,名称,1,1,1,0)
  180.         intp(0) = intp(0) + 20              '下一个图块插入点的x坐标

  181.         i = 2
  182.         While i <= count
  183.             Select Case LTrim(RTrim(arr_FuHeBiao(i, mingcheng)))
  184.                 Case "变压器"              '表格总名称为变压器时,插入变压器图块
  185.                     blk = dir_dwg + "变压器(左-右)" + ".dwg"
  186.                     blk_obj = AcadApp.ActiveDocument.ModelSpace.InsertBlock(intp, blk, 1, 1, 1, 0)
  187.                     attVars = blk_obj.GetAttributes          '获取图块属性
  188.                     For k = 0 To UBound(attVars)
  189.                         Select Case attVars(k).TagString
  190.                             Case "回路编号"
  191.                                 attVars(k).TextString = arr_FuHeBiao(i, huiluhao)    '将图块属性修改为表格中的数据
  192.                             Case "回路名称"
  193.                                 attVars(k).TextString = arr_FuHeBiao(i, mingcheng)
  194.                             Case "设备容量"
  195.                                 attVars(k).TextString = arr_FuHeBiao(i, shebeirongliang) + "kVA"
  196.                             Case "计算电流"
  197.                                 If arr_FuHeBiao(i, jisuandianliu) <> "" Then
  198.                                     attVars(k).TextString = System.Math.Round(arr_FuHeBiao(i, jisuandianliu), 2)
  199.                                 Else
  200.                                     attVars(k).TextString = ""
  201.                                 End If
  202.                         End Select
  203.                     Next k
  204.                 Case "进线"
  205.                     blk = dir_dwg + "进线" + ".dwg"       '图块路径及图块名称
  206.                     blk_obj = AcadApp.ActiveDocument.ModelSpace.InsertBlock(intp, blk, 1, 1, 1, 0)   '插入图块InsertBlock(插入点,名称,1,1,1,0)
  207.                     attVars = blk_obj.GetAttributes      'GetAttributes获得图块的属性
  208.                     For k = 0 To UBound(attVars)
  209.                         Select Case attVars(k).TagString
  210.                             Case "断路器型号"
  211.                                 attVars(k).TextString = arr_FuHeBiao(i, duanluqi)
  212.                                 attVars(k).GetBoundingBox(minExt, maxExt)                    'GetBoundingBox(minExt, maxExt)获取文字的左端和右端的坐标
  213.                                 If minExt(0) < intp(0) Or maxExt(0) > (intp(0) + 20) Then    '文字左端坐标小于方框的左端坐标,或者文字右端坐标大于方框右端的坐标,即可判断为文字已超出方框
  214.                                     attVars(k).Alignment = acAlignmentFit()                  '文字对齐方式:调整
  215.                                     fitPoint(0) = intp(0) + 0.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  216.                                     attVars(k).InsertPoint = fitPoint
  217.                                     fitPoint(0) = intp(0) + 19.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  218.                                     attVars(k).TextAlignmentPoint = fitPoint
  219.                                 End If
  220.                             Case "脱扣器型号"
  221.                                 attVars(k).TextString = arr_FuHeBiao(i, tuokouqi)
  222.                                 attVars(k).GetBoundingBox(minExt, maxExt)
  223.                                 If minExt(0) < intp(0) Or maxExt(0) > (intp(0) + 20) Then
  224.                                     attVars(k).Alignment = acAlignmentFit
  225.                                     fitPoint(0) = intp(0) + 0.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  226.                                     attVars(k).InsertPoint = fitPoint
  227.                                     fitPoint(0) = intp(0) + 19.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  228.                                     attVars(k).TextAlignmentPoint = fitPoint
  229.                                 End If
  230.                             Case "电流互感器"
  231.                                 attVars(k).TextString = arr_FuHeBiao(i, liuhu)
  232.                                 attVars(k).GetBoundingBox(minExt, maxExt)
  233.                                 If minExt(0) < intp(0) Or maxExt(0) > (intp(0) + 20) Then
  234.                                     attVars(k).Alignment = acAlignmentFit
  235.                                     fitPoint(0) = intp(0) + 0.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  236.                                     attVars(k).InsertPoint = fitPoint
  237.                                     fitPoint(0) = intp(0) + 19.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  238.                                     attVars(k).TextAlignmentPoint = fitPoint
  239.                                 End If
  240.                             Case "馈线电缆截面"
  241.                                 attVars(k).TextString = arr_FuHeBiao(i, dianlan)
  242.                                 attVars(k).GetBoundingBox(minExt, maxExt)
  243.                                 If minExt(0) < intp(0) Or maxExt(0) > (intp(0) + 20) Then
  244.                                     attVars(k).Alignment = acAlignmentFit()
  245.                                     fitPoint(0) = intp(0) + 0.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  246.                                     attVars(k).InsertPoint = fitPoint
  247.                                     fitPoint(0) = intp(0) + 19.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  248.                                     attVars(k).TextAlignmentPoint = fitPoint
  249.                                 End If
  250.                         End Select
  251.                     Next k
  252.                 Case "有源滤波"
  253.                     blk = dir_dwg + "有源滤波" + ".dwg"
  254.                     blk_obj = AcadApp.ActiveDocument.ModelSpace.InsertBlock(intp, blk, 1, 1, 1, 0)
  255.                     attVars = blk_obj.GetAttributes
  256.                     For k = 0 To UBound(attVars)
  257.                         Select Case attVars(k).TagString
  258.                             Case "断路器型号"
  259.                                 attVars(k).TextString = arr_FuHeBiao(i, duanluqi)
  260.                                 attVars(k).GetBoundingBox(minExt, maxExt)
  261.                                 If minExt(0) < intp(0) Or maxExt(0) > (intp(0) + 20) Then
  262.                                     attVars(k).Alignment = acAlignmentFit
  263.                                     fitPoint(0) = intp(0) + 0.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  264.                                     attVars(k).InsertionPoint = fitPoint
  265.                                     fitPoint(0) = intp(0) + 19.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  266.                                     attVars(k).TextAlignmentPoint = fitPoint
  267.                                 End If
  268.                             Case "脱扣器型号"
  269.                                 attVars(k).TextString = arr_FuHeBiao(i, tuokouqi)
  270.                                 attVars(k).GetBoundingBox(minExt, maxExt)
  271.                                 If minExt(0) < intp(0) Or maxExt(0) > (intp(0) + 20) Then
  272.                                     attVars(k).Alignment = acAlignmentFit
  273.                                     fitPoint(0) = intp(0) + 0.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  274.                                     attVars(k).InsertionPoint = fitPoint
  275.                                     fitPoint(0) = intp(0) + 19.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  276.                                     attVars(k).TextAlignmentPoint = fitPoint
  277.                                 End If
  278.                             Case "电流互感器"
  279.                                 attVars(k).TextString = arr_FuHeBiao(i, liuhu)
  280.                                 attVars(k).GetBoundingBox(minExt, maxExt)
  281.                                 If minExt(0) < intp(0) Or maxExt(0) > (intp(0) + 20) Then
  282.                                     attVars(k).Alignment = acAlignmentFit
  283.                                     fitPoint(0) = intp(0) + 0.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  284.                                     attVars(k).InsertionPoint = fitPoint
  285.                                     fitPoint(0) = intp(0) + 19.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  286.                                     attVars(k).TextAlignmentPoint = fitPoint
  287.                                 End If
  288.                             Case "馈线电缆截面"
  289.                                 attVars(k).TextString = arr_FuHeBiao(i, dianlan)
  290.                                 attVars(k).GetBoundingBox(minExt, maxExt)
  291.                                 If minExt(0) < intp(0) Or maxExt(0) > (intp(0) + 20) Then
  292.                                     attVars(k).Alignment = acAlignmentFit
  293.                                     fitPoint(0) = intp(0) + 0.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  294.                                     attVars(k).InsertionPoint = fitPoint
  295.                                     fitPoint(0) = intp(0) + 19.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  296.                                     attVars(k).TextAlignmentPoint = fitPoint
  297.                                 End If
  298.                         End Select
  299.                     Next k
  300.                 Case "母联"
  301.                     blk = dir_dwg + "母联1" + ".dwg"
  302.                     blk_obj = AcadApp.ActiveDocument.ModelSpace.InsertBlock(intp, blk, 1, 1, 1, 0)
  303.                     attVars = blk_obj.GetAttributes
  304.                     For k = 0 To UBound(attVars)
  305.                         Select Case attVars(k).TagString
  306.                             Case "断路器型号"
  307.                                 attVars(k).TextString = arr_FuHeBiao(i, duanluqi)
  308.                                 attVars(k).GetBoundingBox(minExt, maxExt)
  309.                                 If minExt(0) < intp(0) Or maxExt(0) > (intp(0) + 20) Then
  310.                                     attVars(k).Alignment = acAlignmentFit()
  311.                                     fitPoint(0) = intp(0) + 0.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  312.                                     attVars(k).InsertPoint = fitPoint
  313.                                     fitPoint(0) = intp(0) + 19.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  314.                                     attVars(k).TextAlignmentPoint = fitPoint
  315.                                 End If
  316.                             Case "脱扣器型号"
  317.                                 attVars(k).TextString = arr_FuHeBiao(i, tuokouqi)
  318.                                 attVars(k).GetBoundingBox(minExt, maxExt)
  319.                                 If minExt(0) < intp(0) Or maxExt(0) > (intp(0) + 20) Then
  320.                                     attVars(k).Alignment = acAlignmentFit()
  321.                                     fitPoint(0) = intp(0) + 0.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  322.                                     attVars(k).InsertPoint = fitPoint
  323.                                     fitPoint(0) = intp(0) + 19.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  324.                                     attVars(k).TextAlignmentPoint = fitPoint
  325.                                 End If
  326.                             Case "电流互感器"
  327.                                 attVars(k).TextString = arr_FuHeBiao(i, liuhu)
  328.                                 attVars(k).GetBoundingBox(minExt, maxExt)
  329.                                 If minExt(0) < intp(0) Or maxExt(0) > (intp(0) + 20) Then
  330.                                     attVars(k).Alignment = acAlignmentFit()
  331.                                     fitPoint(0) = intp(0) + 0.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  332.                                     attVars(k).InsertPoint = fitPoint
  333.                                     fitPoint(0) = intp(0) + 19.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  334.                                     attVars(k).TextAlignmentPoint = fitPoint
  335.                                 End If
  336.                             Case "馈线电缆截面"
  337.                                 attVars(k).TextString = arr_FuHeBiao(i, dianlan)
  338.                                 attVars(k).GetBoundingBox(minExt, maxExt)
  339.                                 If minExt(0) < intp(0) Or maxExt(0) > (intp(0) + 20) Then
  340.                                     attVars(k).Alignment = acAlignmentFit()
  341.                                     fitPoint(0) = intp(0) + 0.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  342.                                     attVars(k).InsertPoint = fitPoint
  343.                                     fitPoint(0) = intp(0) + 19.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  344.                                     attVars(k).TextAlignmentPoint = fitPoint
  345.                                 End If
  346.                         End Select
  347.                     Next k
  348.                 Case Else
  349.                     Select Case arr_FuHeBiao(i, muxianduan)
  350.                         Case "11"
  351.                             blk = dir_dwg + "12级馈线" + ".dwg"
  352.                             blk_obj = AcadApp.ActiveDocument.ModelSpace.InsertBlock(intp, blk, 1, 1, 1, 0)
  353.                         Case "111"
  354.                             blk = dir_dwg + "12级馈线(三相流互)" + ".dwg"
  355.                             blk_obj = AcadApp.ActiveDocument.ModelSpace.InsertBlock(intp, blk, 1, 1, 1, 0)
  356.                         Case "12"
  357.                             blk = dir_dwg + "照明馈线" + ".dwg"
  358.                             blk_obj = AcadApp.ActiveDocument.ModelSpace.InsertBlock(intp, blk, 1, 1, 1, 0)
  359.                         Case "121"
  360.                             blk = dir_dwg + "照明馈线(三相流互)" + ".dwg"
  361.                             blk_obj = AcadApp.ActiveDocument.ModelSpace.InsertBlock(intp, blk, 1, 1, 1, 0)
  362.                         Case "14"
  363.                             blk = dir_dwg + "照明总开关(左-右)" + ".dwg"
  364.                             blk_obj = AcadApp.ActiveDocument.ModelSpace.InsertBlock(intp, blk, 1, 1, 1, 0)
  365.                         Case "141"
  366.                             blk = dir_dwg + "照明总开关(三相流互)(左-右)" + ".dwg"
  367.                             blk_obj = AcadApp.ActiveDocument.ModelSpace.InsertBlock(intp, blk, 1, 1, 1, 0)
  368.                         Case "15"
  369.                             blk = dir_dwg + "照明总计量(左-右)" + ".dwg"
  370.                             blk_obj = AcadApp.ActiveDocument.ModelSpace.InsertBlock(intp, blk, 1, 1, 1, 0)
  371.                         Case "151"
  372.                             blk = dir_dwg + "照明总计量(三相流互)(左-右)" + ".dwg"
  373.                             blk_obj = AcadApp.ActiveDocument.ModelSpace.InsertBlock(intp, blk, 1, 1, 1, 0)
  374.                     End Select
  375.                     attVars = blk_obj.GetAttributes
  376.                     For k = 0 To UBound(attVars)
  377.                         Select Case attVars(k).TagString
  378.                             Case "断路器型号"
  379.                                 attVars(k).TextString = arr_FuHeBiao(i, duanluqi)
  380.                                 attVars(k).GetBoundingBox(minExt, maxExt)
  381.                                 If minExt(0) < intp(0) Or maxExt(0) > (intp(0) + 20) Then
  382.                                     attVars(k).Alignment = acAlignmentFit()
  383.                                     fitPoint(0) = intp(0) + 0.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  384.                                     attVars(k).InsertionPoint = fitPoint
  385.                                     fitPoint(0) = intp(0) + 19.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  386.                                     attVars(k).TextAlignmentPoint = fitPoint
  387.                                 End If
  388.                             Case "脱扣器型号"
  389.                                 attVars(k).TextString = arr_FuHeBiao(i, tuokouqi)
  390.                                 attVars(k).GetBoundingBox(minExt, maxExt)
  391.                                 If minExt(0) < intp(0) Or maxExt(0) > (intp(0) + 20) Then
  392.                                     attVars(k).Alignment = acAlignmentFit()
  393.                                     fitPoint(0) = intp(0) + 0.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  394.                                     attVars(k).InsertionPoint = fitPoint
  395.                                     fitPoint(0) = intp(0) + 19.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  396.                                     attVars(k).TextAlignmentPoint = fitPoint
  397.                                 End If
  398.                             Case "电流互感器"
  399.                                 attVars(k).TextString = arr_FuHeBiao(i, liuhu)
  400.                                 attVars(k).GetBoundingBox(minExt, maxExt)
  401.                                 If minExt(0) < intp(0) Or maxExt(0) > (intp(0) + 20) Then
  402.                                     attVars(k).Alignment = acAlignmentFit()
  403.                                     fitPoint(0) = intp(0) + 0.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  404.                                     attVars(k).InsertionPoint = fitPoint
  405.                                     fitPoint(0) = intp(0) + 19.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  406.                                     attVars(k).TextAlignmentPoint = fitPoint
  407.                                 End If
  408.                             Case "回路名称"
  409.                                 attVars(k).TextString = arr_FuHeBiao(i, mingcheng)
  410.                                 attVars(k).GetBoundingBox(minExt, maxExt)
  411.                                 If minExt(0) < intp(0) Or maxExt(0) > (intp(0) + 20) Then
  412.                                     attVars(k).Alignment = acAlignmentFit()
  413.                                     fitPoint(0) = intp(0) + 0.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  414.                                     attVars(k).InsertionPoint = fitPoint
  415.                                     fitPoint(0) = intp(0) + 19.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  416.                                     attVars(k).TextAlignmentPoint = fitPoint
  417.                                 End If
  418.                             Case "馈线电缆截面"
  419.                                 attVars(k).TextString = arr_FuHeBiao(i, dianlan)
  420.                                 attVars(k).GetBoundingBox(minExt, maxExt)
  421.                                 If minExt(0) < intp(0) Or maxExt(0) > (intp(0) + 20) Then
  422.                                     attVars(k).Alignment = acAlignmentFit()
  423.                                     fitPoint(0) = intp(0) + 0.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  424.                                     attVars(k).InsertionPoint = fitPoint
  425.                                     fitPoint(0) = intp(0) + 19.5 : fitPoint(1) = minExt(1) : fitPoint(2) = minExt(2)
  426.                                     attVars(k).TextAlignmentPoint = fitPoint
  427.                                 End If
  428.                         End Select
  429.                     Next k
  430.             End Select
  431.             intp(0) = intp(0) + 20
  432.             i = i + 1
  433.         End While
  434.         MsgBox("已完成排列图绘制,请核查!")
  435.         Me.Visible = True
  436.     End Sub

  437.     Private Function acAlignmentFit() As Object
  438.         Throw New NotImplementedException
  439.     End Function
  440. End Class


本帖子中包含更多资源

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

x
 楼主| 发表于 2020-1-2 16:18:27 | 显示全部楼层
已解决,获取下一个文本外框坐标前,需要将上一个文本的外框坐标清除。
发表于 2020-1-19 21:39:16 | 显示全部楼层
操作Excel,别用微软自己的Microsoft.Office.Interop.Excel.Application。这个实在太难用,读、写均是龟速。且操作不当,经常你的程序退出了,但是系统中存留一大堆Excel的线程。
推荐EPPlus,超级简单,速度快。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 06:31 , Processed in 0.169754 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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