JNieman 发表于 2008-7-16 18:18:55

创建和填充AutoCAD表

有人知道在哪里可以找到一些关于在Autocad中创建/编辑表格对象的各种控件和命令的有用信息吗?
我正在创建一个例程,该例程将使用某个块的每个实例的X,Y坐标填充一个表,该块被多次插入到图形中。
我已经完成了坐标提取部分,我只需要知道如何将该信息传递给我创建的表。
我搜索了Autodesk VBA的书,但是它完全排除了关于对象创建的表格,我搜索了一会儿,也搜索了这些论坛...我找到了一些几乎有帮助的,但明显不够。
有人有我可以检查的代码片段或我可以查找的一些函数吗?
“帮助”菜单中的visual basic参考也没有太大帮助(或者我不知道去哪里找)
**** Hidden Message *****

JNieman 发表于 2008-7-16 18:35:45

这里有一个:
它是ARX,但可能很容易移植(不知道)-但我猜您最终会移动或尝试使用C#
在ARX SDK中有一些.NET示例…在这里:www.objectarx.com

fixo 发表于 2008-7-16 18:51:14

谢谢你的帮助,路易斯,我得到了一些已经帮助我的好信息。
另外,令人尴尬的是,我......正在寻找通过可视化基本编辑器访问的帮助,哇......如果您使用从Autocad主窗口访问的开发人员的帮助,则有很大的不同!
*将前额砸在键盘上*
“Autocad表对象”的条目非常强大。

JNieman 发表于 2008-7-17 09:16:54

这里是一个Q&D示例,但这将使您开始
Option Explicit
Sub Blocks_Table()
    Dim oSset As AcadSelectionSet
    Dim oEnt As AcadEntity
    Dim oBlk As AcadBlockReference
    Dim varPt As Variant
    Dim ftype(0) As Integer
    Dim fdata(0) As Variant
    Dim bName As String
    Dim xStr As String
    Dim yStr As String
Dim i As Long, j As Long
    ftype(0) = 0: fdata(0) = "INSERT"
    Dim dxfCode, dxfValue
    dxfCode = ftype: dxfValue = fdata
    With ThisDrawing.SelectionSets
      While .Count > 0
            .Item(0).Delete
      Wend
      Set oSset = .Add("$Blocks$")
    End With
    oSset.SelectOnScreen dxfCode, dxfValue
    Dim oSpace As AcadBlock
    If ThisDrawing.ActiveSpace = acModelSpace Then
      Set oSpace = ThisDrawing.ModelSpace
    Else
      Set oSpace = ThisDrawing.PaperSpace
    End If
   
    varPt = ThisDrawing.Utility.GetPoint(, vbCrLf & "Specify insertion point: ")
    Dim oTable As AcadTable
    Set oTable = oSpace.AddTable(varPt, oSset.Count + 2, 3, 10, 30)
    ZoomExtents
    With oTable
    .RegenerateTableSuppressed = True
      .SetCellTextHeight i, j, 5
      .SetCellAlignment i, j, acMiddleCenter
      .SetCellType i, j, acTextCell
      .SetText 0, 0, "Blocks Position"
      .SetCellType i, j, acTextCell
      
      .SetText 1, j, "Block Name"
      .SetCellTextHeight 1, j, 4.5
      .SetText 1, j + 1, "X"
      .SetCellTextHeight 1, j + 1, 4.5
      .SetText 1, j + 2, "Y"
      .SetCellTextHeight 1, j + 2, 4.5
      For i = 0 To oSset.Count - 1
            Set oEnt = oSset.Item(i)
            Set oBlk = oEnt
            If oBlk.IsDynamicBlock Then
                bName = oBlk.EffectiveName
            Else
                bName = oBlk.Name
            End If
            xStr = Format(CStr(Round(oBlk.InsertionPoint(0), 3)), "#0.000")
            yStr = Format(CStr(Round(oBlk.InsertionPoint(1), 3)), "#0.000")
            .SetCellTextHeight i, j, 4
            .SetCellAlignment i, j, acMiddleCenter
            .SetText i + 2, j, bName
            .SetCellTextHeight i + 2, j, 4#
            .SetText i + 2, j + 1, xStr
            .SetCellTextHeight i + 2, j + 1, 4#
            .SetText i + 2, j + 2, yStr
            .SetCellTextHeight i + 2, j + 2, 4#
      Next i
    .RegenerateTableSuppressed = False
    .Update
    End With
    MsgBox "done"
End Sub
~'J'~

fixo 发表于 2008-7-17 09:35:28


我刚刚经历了这一点,它具有我需要的所有功能...我在使用选择集时遇到了最大的困难,但我想一旦我经历了这一切并弄清楚了什么在做什么...我应该状态良好。
我非常感谢这一点,你帮了我很多!

JNieman 发表于 2008-7-17 10:42:25

不客气
干杯
~'J'~

JNieman 发表于 2008-7-17 10:43:16

我必须再次感谢你,菲戈,你真是天赐之物。我花在这上面的最后一个小时比我从一开始就断断续续花的8个小时更有成效!!(尽管我确信需要这些开始的时间来理解发生了什么,就这么多)
我在创建表格时遇到了一些问题。我正在努力不要有单列的顶部行。我希望它像表格的其余部分一样不合并。我看不到或找不到将顶部行变成单个单元格的定义中的内容,而不是每列的单元格。
我无法弄清楚。我只学会了如何使用“object.MergeCells(minRow, maxRow, minCol, maxCol)”方法合并单元格。
(另外,有趣的是... FF3在尝试直接从acad中的VBA管理器粘贴代码时始终崩溃...我将其粘贴到记事本,并在此处成功复制。)

fixo 发表于 2008-7-17 15:08:32


哦,伙计,我不是在想‘开箱即用’
它是这样设置的,因为第一行是表格样式中的“标题”类型。我假设它默认为“数据”类型,但由于它是一个标题,因此默认情况下它跨越整个表…它不在代码中,但活动表样式*有点前额*
现在我要弄清楚如何将第一行设置为“数据”,而不是标题或标题,现在。。。

JNieman 发表于 2008-7-17 16:16:42

很高兴你自己播种了它,
这样我就可以休息
了~'J'~

JNieman 发表于 2008-7-17 16:25:19

Fixo,除了上面的帖子之外,我想你没有意识到你今天对我的帮助有多大!
很多次我都在寻找如何让某样东西工作(例如合并单元格等),并且在沼泽上进行了搜索,发现你已经向某人解释过了
您在这个论坛上的vba指导非常好!
我目前在提取该块中定义的属性的值以放置到同一个表中时遇到了困难......但我还没有完全放弃。
页: [1] 2
查看完整版本: 创建和填充AutoCAD表