找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3865|回复: 13

[研讨] 利用晓东API创建CAD表格示例

[复制链接]
发表于 2013-6-21 23:51:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
本帖最后由 Love-Lisp 于 2013-6-22 00:08 编辑

从内部得到的晓东API测试版中发现了一系列CAD表格函数,创建、修改表格非常方便!下面是创建表格的示例代码: table8.jpg

  1. ;;晓东API函数表格创建示例  By Love-lisp 2013.06.21
  2. (defun c:tt10 ()
  3.   ;;创建5行4列的表格,表格行间距 10.0,列宽12.0
  4.   (setq tb (xdrx_table_make (getpoint) 5 10. 4 12.))
  5.   ;;(xdrx_table_SetBackgroundColor 表格 行 列 颜色)
  6.   ;;设置第二行第三列单元格的背景颜色为红色1
  7.   (xdrx_table_SetBackgroundColor tb 1 0 1)
  8.   ;;(xdrx_table_SetBackgroundColor 表格 颜色 区域)
  9.   ;;区域 位码值 1 = 表格数据区 2 = 标题区 4 = 表头区域
  10.   ;;设置标题区红色
  11.   (xdrx_table_SetBackgroundColor tb 1 2)
  12.   ;;设置表头区黄色
  13.   (xdrx_table_SetBackgroundColor tb 2 4)
  14.   ;;设置数据区蓝色
  15.   (xdrx_table_SetBackgroundColor tb 5 1)
  16.   ;;得到第二行第三列单元格的背景颜色
  17.   (xdrx_table_BackGroundColor tb  1 2)
  18.   ;;得到第二行第三列单元格的内容
  19.   (xdrx_table_TextString tb 1 2 )
  20.   (setq i 0 k 0)
  21.   ;;单元格赋值
  22.   (while (<= i 5)
  23.      (setq k 0)
  24.     (while (<= k 4)
  25.     (xdrx_table_SetTextString tb i k (strcat (itoa i) "-" (itoa k)))
  26.       ;;设置表格文字颜色
  27.       (xdrx_table_SetContentColor tb i k 3)
  28.       (xdrx_table_SetTextHeight tb i k 2.0)
  29.       (setq k (1+ k))
  30.       )
  31.     (setq i (1+ i))
  32.     )
  33.   (princ)
  34.   )


这个API里还有很多关于Table的函数,以后慢慢学习,先把里面的关于table函数列出来,大家可以一块研究学习:
  1. ‘(xdrx_table_AttachmentPoint
  2.    xdrx_table_BackGroundColor    xdrx_table_BlockID
  3.    xdrx_table_BlockRotation    xdrx_table_BlockScale
  4.    xdrx_table_CellAlignment    xdrx_table_CellStyle
  5.    xdrx_table_CellStyleOverrides  xdrx_table_ClearCellOverrides
  6.    xdrx_table_ClearSubSelection    xdrx_table_ClearTableStyleOverrides
  7.    xdrx_table_ColumnWidth    xdrx_table_ContentColor
  8.    xdrx_table_DeleteCellContent    xdrx_table_DeleteColumns
  9.    xdrx_table_DeleteRows    xdrx_table_Direction
  10.    xdrx_table_FieldId      xdrx_table_FlowDirection
  11.    xdrx_table_GetSubSelection    xdrx_table_GridColor
  12.    xdrx_table_GridLineWeight    xdrx_table_Height
  13.    xdrx_table_HitTest      xdrx_table_HorzCellMargin
  14.    xdrx_table_InsertColumns    xdrx_table_InsertRows
  15.    xdrx_table_IsAutoScale    xdrx_table_IsHeaderSuppressed
  16.    xdrx_table_IsMergedCell    xdrx_table_IsRegenerateTableSuppressed
  17.    xdrx_table_IsTitleSuppressed    xdrx_table_make
  18.    xdrx_table_MergeCells    xdrx_table_MinimumColumnWidth
  19.    xdrx_table_MinimumRowHeight    xdrx_table_MinimumTableHeight
  20.    xdrx_table_MinimumTableWidth    xdrx_table_NumColumns
  21.    xdrx_table_NumRows      xdrx_table_RecomputeTableBlock
  22.    xdrx_table_Regen      xdrx_table_ReselectSubRegion
  23.    xdrx_table_RowHeight      xdrx_table_RowType
  24.    xdrx_table_Select      xdrx_table_SelectSubRegion
  25.    xdrx_table_SetAutoScale    xdrx_table_SetBackgroundColor
  26.    xdrx_table_SetBackgroundColorNone
  27.    xdrx_table_SetBlockAttributeValue
  28.    xdrx_table_SetBlockID    xdrx_table_SetBlockRotation
  29.    xdrx_table_SetBlockScale    xdrx_table_SetCellType
  30.    xdrx_table_SetColumnWidth    xdrx_table_SetContentColor
  31.    xdrx_table_SetDirection    xdrx_table_SetFieldId
  32.    xdrx_table_SetFlowDirection    xdrx_table_SetGridColor
  33.    xdrx_table_SetGridLineWeight    xdrx_table_SetGridVisibility
  34.    xdrx_table_SetHeight      xdrx_table_SetHorzCellMargin
  35.    xdrx_table_SetNormal      xdrx_table_SetNumColumns
  36.    xdrx_table_SetNumRows    xdrx_table_SetPosition
  37.    xdrx_table_SetRowHeight    xdrx_table_SetSubSelection
  38.    xdrx_table_SetTableStyle    xdrx_table_SetTextHeight
  39.    xdrx_table_SetTextRotation    xdrx_table_SetTextString
  40.    xdrx_table_SetTextStyle    xdrx_table_SetVertCellMargin
  41.    xdrx_table_SetWidth      xdrx_table_Style
  42.    xdrx_table_StyleOverrides    xdrx_table_SuppressHeaderRow
  43.    xdrx_table_SuppressRegenerateTable
  44.    xdrx_table_SuppressTitleRow    xdrx_table_TextRotation
  45.    xdrx_table_TextString    xdrx_table_TextStringConst
  46.    xdrx_table_TextStyle      xdrx_table_TextWidth
  47.    xdrx_table_UnMergeCells    xdrx_table_VertCellMargin
  48.    xdrx_table_Width)


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 2133个

财富等级: 金玉满堂

发表于 2013-6-22 01:19:44 | 显示全部楼层
R16用不了的?没有xdrx_table_make这个命令,请指教

点评

晓东API正在内部测试,完整功能的正式版还未上传!请保持关注!  详情 回复 发表于 2013-6-22 13:52
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-6-22 06:49:30 | 显示全部楼层
CAD 的 Table MText 一直觉得是鸡肋,用TTF时AutoCAD真的不他太给力,应该向 Adobe 公司学学
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1757个

财富等级: 堆金积玉

发表于 2013-6-22 13:12:47 | 显示全部楼层
挺不错 先记下了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 344个

财富等级: 日进斗金

发表于 2013-6-22 13:52:53 | 显示全部楼层
evayleung 发表于 2013-6-22 01:19
R16用不了的?没有xdrx_table_make这个命令,请指教

晓东API正在内部测试,完整功能的正式版还未上传!请保持关注!

点评

怪不得有些能用,有些用不了。我会继续关注的,有API,编LISP方便很多。谢谢告知。  详情 回复 发表于 2013-6-22 23:31
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-6-22 19:22:01 | 显示全部楼层
帮你修改下函数,别在遍历中设置表内容,测试下xdrx_table_setTextString新用法

(xdrx_table_setTextString e '((0 0 "txt1")......(n n "txtn"))

  1. (defun c:tt10 ()                       ; 创建5行4列的表格,表格行间距 10.0,列宽12.
  2.   (if (and
  3.         (setq row (getint "\n行数<退出>:"))
  4.         (setq col (getint "\n列数<退出>:"))
  5.       )
  6.     (progn
  7.       (setq tb (xdrx_table_make (getpoint) row 50. col 200.)) ; (xdrx_table_SetBackgroundColor 表格 行 列 颜色)
  8.                                        ; 设置第二行第三列单元格的背景颜色为红色1
  9.       (xdrx_table_SetBackgroundColor tb 1 0 1) ; (xdrx_table_SetBackgroundColor 表格 颜色 区域)
  10.                                        ; 区域 位码值 1 = 表格数据区 2 = 标题区 4 = 表头区域
  11.                                        ; 设置标题区红色
  12.       (xdrx_table_SetBackgroundColor tb 1 2) ; 设置表头区黄色
  13.       (xdrx_table_SetBackgroundColor tb 2 4) ; 设置数据区蓝色
  14.       (xdrx_table_SetBackgroundColor tb 5 1) ; 得到第二行第三列单元格的背景颜色
  15.       (xdrx_table_BackGroundColor tb 1 2) ; 得到第二行第三列单元格的内容
  16. ;;      (xdrx_table_TextString tb 1 2)
  17.       (setq i 0
  18.             k 0
  19.       )                                       ; 单元格赋值
  20.       (setq lst nil)
  21.       (while (<= i row)
  22.         (setq k 0)
  23.         (while (<= k col)               ;     (xdrx_table_SetTextString tb i k (strcat (itoa i) "-" (itoa k))) ;
  24.                                        ; 设置表格文字颜色
  25.                                        ;     (xdrx_table_SetContentColor tb i k 3)
  26.                                             (xdrx_table_SetTextHeight tb i k 2.0)
  27.           (setq lst (cons (list i k (strcat (itoa i) "-" (itoa k))) lst))
  28.           (setq k (1+ k))
  29.         )
  30.         (setq i (1+ i))
  31.       )
  32.       (xdrx_table_setTextString tb lst)
  33.     )
  34.   )
  35.   (princ)
  36. )

点评

老大这段代码将 (xdrx_table_SetTextHeight tb i k 2.0)设置单元格字高放到循环中,导致创建表格运行速度非常慢,20X20大概需要14、5秒钟,将该代码注释掉,在循环外设置表格区域字高,速度一下提升到1秒左右,看来  详情 回复 发表于 2013-6-23 09:15
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-6-22 20:20:54 | 显示全部楼层
这个 Table 是在哪个版本才有呢? 而且版本不同支持的属性也不一样吧
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2133个

财富等级: 金玉满堂

发表于 2013-6-22 23:31:12 | 显示全部楼层
牢固 发表于 2013-6-22 13:52
晓东API正在内部测试,完整功能的正式版还未上传!请保持关注!

怪不得有些能用,有些用不了。我会继续关注的,有API,编LISP方便很多。谢谢告知。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-23 09:15:34 | 显示全部楼层
XDSoft 发表于 2013-6-22 19:22
帮你修改下函数,别在遍历中设置表内容,测试下xdrx_table_setTextString新用法

(xdrx_table_setTextStr ...

老大这段代码将 (xdrx_table_SetTextHeight tb i k 2.0)设置单元格字高放到循环中,导致创建表格运行速度非常慢,20X20大概需要14、5秒钟,将该代码注释掉,在循环外设置表格区域字高,速度一下提升到1秒左右,看来对单元格进行大量的操作速度会有问题!
修改后代码:
  1. (defun c:tt11 ()
  2.   (if (and
  3.         (setq row (getint "\n行数<退出>:"))
  4.         (setq col (getint "\n列数<退出>:"))
  5.       )
  6.     (progn
  7.       (GXL-TIMEINIT)
  8.   ; 创建5行4列的表格,表格行间距 10.0,列宽12.
  9.       (setq tb (xdrx_table_make (getpoint) row 10. col 12.))
  10.       ; (xdrx_table_SetBackgroundColor 表格 行 列 颜色)
  11.       ; 设置第二行第三列单元格的背景颜色为红色1
  12.       (xdrx_table_SetBackgroundColor tb 1 0 1)
  13.       ; (xdrx_table_SetBackgroundColor 表格 颜色 区域)
  14.       ; 区域 位码值 1 = 表格数据区 2 = 标题区 4 = 表头区域
  15.       ; 设置标题区红色
  16.       (xdrx_table_SetBackgroundColor tb 1 2) ; 设置表头区黄色
  17.       (xdrx_table_SetBackgroundColor tb 2 4) ; 设置数据区蓝色
  18.       (xdrx_table_SetBackgroundColor tb 4 5) ;
  19.       (xdrx_table_BackGroundColor tb 1 2) ; 得到第二行第三列单元格的内容
  20.       (xdrx_table_SetContentColor tb 1 3)
  21.       ;;设置所有表格区域字高为 3.0 (xdrx_table_SetTextHeight 表格 字高  区域位码值)
  22.       (xdrx_table_SetTextHeight tb  3.0 7)
  23. ;;      (xdrx_table_TextString tb 1 2)
  24.       (setq i 0
  25.             k 0
  26.       )                                       ; 单元格赋值
  27.       (setq lst nil)
  28.       (while (< i row)
  29.         (setq k 0)
  30.         (while (< k col)               
  31.         ; 设置表格文字颜色
  32.         ;(xdrx_table_SetContentColor tb i k 3)  循环内单元格操作速度极慢
  33.         ;(xdrx_table_SetTextHeight tb i k 2.0) 循环内单元格操作速度极慢
  34.           (setq lst (cons (list i k (strcat (itoa i) "-" (itoa k))) lst))
  35.           (setq k (1+ k))
  36.         )
  37.         (setq i (1+ i))
  38.       )
  39.       (xdrx_table_setTextString tb lst)
  40.       (GXL-TIMEOUT)
  41.     )
  42.   )
  43.   (princ)

  44. )

点评

对表格所有CELL操作的函数都不要用遍历每个CELL去设置,关于批量设置的,API的各个函数都提供了另外一个参数的选择,就是利用ROWTYPE,比如你说的设置所有CELL的字高,就一句代码就行了,不用循环。 (xdrx_table_  详情 回复 发表于 2013-6-23 13:16
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2013-6-23 12:40:22 | 显示全部楼层
作了一个 vla-addtable 的测试,速度不可接受
  1. (defun vlx-addtable (pt NumRows NumColumns RowHeight ColWidth)
  2.   (setq    ms (vla-get-modelspace
  3.          (vla-get-activedocument (vlax-get-acad-object))
  4.        )
  5.   )
  6.   ;;AddTable(InsertionPoint, 行数, 列数, RowHeight, ColWidth)
  7.   ;;包括表头
  8.   (vla-addtable
  9.     ms
  10.     (vlax-3d-point pt)
  11.     NumRows
  12.     NumColumns
  13.     RowHeight
  14.     ColWidth
  15.   )
  16. )
  17. (defun c:tt (/ tb ri ci lst ll)
  18.   (if (setq tb (vlx-addtable
  19.          (getpoint "\nInsertionpoint: ")
  20.          30
  21.          20
  22.          10
  23.          20
  24.            )
  25.       )
  26.     (progn
  27.       (setq Ri 1
  28.         Ci 0
  29.       )
  30.       (repeat 29
  31.     (repeat    20
  32.       (setq    lst (cons (list ri ci (strcat (itoa ri) "-" (itoa ci))) lst)
  33.         ci  (1+ ci)
  34.       )
  35.     )
  36.       (setq    ll  (cons lst ll)
  37.         lst nil
  38.         ci  0
  39.         ri  (1+ ri)
  40.       )
  41.       )
  42.       (foreach x ll
  43.     (mapcar    '(lambda (x)
  44.            (vla-settext tb (car x) (cadr x) (caddr x))
  45.          )
  46.         x
  47.     )
  48.       )
  49.       ;|(repeat 29;_row
  50.     (repeat    20;_column
  51.       (vla-settext tb  ri ci (strcat (itoa ri) "-" (itoa ci)))
  52.       (setq ci (1+ ci))
  53.     )
  54.     (setq ci 0
  55.           ri (1+ ri)
  56.     )
  57.       )|;
  58.     )
  59.   )
  60.   (princ)
  61. )


点评

不要遍历循环设置每个单元格,你找找VLA里面整行的操作的方法,一次设置数据行、头行、TITLE行或它们的组合的方法。  详情 回复 发表于 2013-6-23 13:20
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-6-23 13:16:18 | 显示全部楼层
Love-Lisp 发表于 2013-6-23 09:15
老大这段代码将 (xdrx_table_SetTextHeight tb i k 2.0)设置单元格字高放到循环中,导致创建表格运行速度 ...

对表格所有CELL操作的函数都不要用遍历每个CELL去设置,关于批量设置的,API的各个函数都提供了另外一个参数的选择,就是利用ROWTYPE,比如你说的设置所有CELL的字高,就一句代码就行了,不用循环。

(xdrx_table_setTextHeight e h 7)  ----设置所有行
(xdrx_table_setTextHeight e h 1)    ---- 所有数据行
(xdrx_table_setTextHeight e h 2)    ---- TITLE行
(xdrx_table_setTextHeight e h 4)    ---- 头行
(xdrx_table_setTextHeight e h 3)    ---- 数据+TITLE行
(xdrx_table_setTextHeight e h 6)    ---- TITLE行、头行
.....
QQ截图20130623131414.png

换这个用法试试,我测试创建20X20表格,填满数据、并设置字高,1秒不到就完成了。

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-6-23 13:20:19 | 显示全部楼层
eachy 发表于 2013-6-23 12:40
作了一个 vla-addtable 的测试,速度不可接受

不要遍历循环设置每个单元格,你找找VLA里面整行的操作的方法,一次设置数据行、头行、TITLE行或它们的组合的方法。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-6-23 13:50:09 来自手机 | 显示全部楼层
翻遍help,也没有发现这个table可以用row或column来settext,可能桌子就不对ActiveX抱希望,不让你快来自: Android客户端
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-6-24 12:18:50 来自手机 | 显示全部楼层
可能vla对object的操作是一句vla就对object进行一次 open 和 close,这样的效率就无论如何也上不去,arx可以在批量的时候openforwrite一次写完close一次,这些就省多了来自: Android客户端
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-27 00:25 , Processed in 0.439912 second(s), 57 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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