找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1947|回复: 10

[教学] API 应用Table 部分详解

[复制链接]

已领礼包: 1268个

财富等级: 财源广进

发表于 2013-10-26 14:36:20 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 st788796 于 2013-10-26 14:40 编辑

写了几个 Table 应用,有了一些了解,这个帖子作为一个总结,希望给大家一点帮助,里面以 API 为例,VLA 和这个差不不多。
第一部分先要对表格有个认识才好操作,CAD表格和 Excel 类似,也分行 (Row) 列 (Column) ,如下图
还包括 Header 区、Title 区、Data 区,对这些了解了后面就可以用函数来生成、修改表格了,对于 Table AutoCAD 提供了方便的右键菜单和工具条,本贴主要介绍用程序生成一个 Net 表格,合并可以在 命令状态下完成。

行、列的编号都是由 0 起始

一般 Table 0 行是 合并行 header,第 1 行 是 Title , 第 2 行以后是 Data 区
这些可以在 表格样式中设定,以下是标准 Table 样式。

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

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2013-10-26 15:35:48 | 显示全部楼层
RowType 部分, 当需要对某个区域进行设置查询时就要用到这几个类型
经常用到 API 函数,可以整个区域设置字高、对齐方式、格线颜色

设置表格文字的高度
(xdrx_table_SetTextHeight <表格实体名> <RowType> <高度值>)

设置设置单元格或行内容的颜色
(xdrx_table_SetContentColor <表格实体名> <RowType> <颜色索引号>)

设定指定行或者具体行列的单元格的对齐方式
(xdrx_table_setAlignment <表格实体名> <Row Type> <对齐方式>)
Rowtype.jpg
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2013-10-26 19:00:08 | 显示全部楼层
本帖最后由 st788796 于 2013-10-26 19:52 编辑

以上不是是制作Table必须要了解的,接下来就 钢筋统计表 实例讲解

制作有几种情况,一是表格列数确定,行数不确定,二是行数确定,列数不确定,最后就是行列都不确定。以钢筋表生成为例是第一种情况,这个程序用了一个简便方法,依据现有表格直接测出表格的列宽和行高,在实际应用中大部分也是这样,不是都要用文字去计算行列高度
先看看最终要的效果,Header 、Title 部分是固定,Date 区行数是不固定的

这里需要注意的是,生成表格时总行数是不包括 Header 的,所以最终的行数是数据行数 + 2 才是表格的总行数
假定要生成 3 行的数据区
  1. (setq tb (xdrx_table_make pt 5 56. 8 110.))
这里 pt 是表格插入点,根据 Table 生成方向有关
5 -  Rows ,行数,3 行数据区 + header + title
56. -- RowHeight,行高,这里按 Date 区行高设置,单独修改 Header 和 Title 行高
8 -- Colnums,列数,总列数,由 1  算起
110. --- ColumnWidth,列宽,这里给个暂定值,后面根据需要修改
至此表格生成完毕

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2013-10-26 19:50:28 | 显示全部楼层
本帖最后由 st788796 于 2013-10-26 19:55 编辑

生成表格后接下来设置表格样式,包括行高、列宽
表格的修改,涉及到 数据打开、读取、修改、更新等操作,为了提高效率,这里要用一个禁止功能,在修改表格的时候将表格处于“冻结”状态,等修改完成执行一次重新生成,这里只需要运行 Lisp-lib 库的 XD::Table:Begin
  1. (setq tb (xdrx_table_make 5 56. 8 110.));_生成一个表格
  2. (XD::Table:Begin tb);_开始表格操作

列宽设置构造两个表,一个是列参数,一个是列宽, SetColumnWidth 手册说明有误,应该是设置单独列宽
  1. (setq colindex '(0 1 2 3 4 5 6 7);_每列索引
  2.         colwidth '(84. 90. 100. 120. 130. 120. 116. 230.);_每列列宽
  3. )
  4. (mapcar '(lambda (x y) (xdrx_table_setcolumnwidth tb x y)) colindex colwidth);_分别设置列宽

设置完列宽,接下来设置行高,Header、Title 单独设置,数据区可以一次设置
  1. (xdrx_table_setrowheight tb 1 96);_Header高度,注意这里和 行列 概念不一样
  2. (xdrx_table_setrowheight tb 0 80);_Title 高度

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2013-10-26 23:36:40 | 显示全部楼层
接下来设置字高
  1. (xdrx_table_settextheight tb 1 20.);_设置 Date 取字高
  2. (xdrx_table_settextheight tb 2 24.) ;_ Title 区字高,大一些

设置对齐方式,这里仅需要设置 Data 区,Header、Title 区默认是正中对齐的
  1. (xdrx_table_setalignment tb 1 5) ;_ Data


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

使用道具 举报

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

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2013-10-27 08:58:52 | 显示全部楼层
接下来说说往表格写 String,一个预备知识,Cell 内的 Text 都是 Mtext Enity,所以的 Mtext 控制符都适用,一个最基本的格式就是控制分行:\\P,如 Title 行,该行文字是固定已知,直接写出来
  1. (setq title '("编号"                "直径\\P(mm)"          "根数"
  2.               "单根长\\P(cm)"        "总长\\P(m)"          "延米重\\P(Kg)"
  3.               "总重\\P(Kg)"        "合计"
  4.              )
  5. )

在程序中获取了分类排序好的表 ((编号1 直径1 数量1 单根长1) (编号2 直径2 数量2 单根长2) ....),往表写还需要计算另外几个数,这里每行需要 8 个 String ,一次把这个表转换为按顺序写入 Table 的 String list
  1. (setq str (mapcar
  2.             '(lambda (x / a b c d e f g)
  3.                (mapcar 'set '(a b c d) x)
  4.                (list a ;_钢筋编号 ColNum 0
  5.                      b ;_钢筋直径 ColNum 1
  6.                      c ;_根数     ColNum 2
  7.                      d ;_单根长,以上四个是在块属性获取的  ColNum 3
  8.                      (setq e (rtos (* (atoi c) (atoi d) 0.01) 2 2)) ;_计算总长度  ColNum 4
  9.                      (setq f (rtos (* (atoi b) (atoi b) 0.00617) 2 3)) ;_计算延米重量 ColNum 5
  10.                      (setq g (rtos (* (distof e) (distof f)) 2 2)) ;_计算总重量,延米重*延米 ColNum 6
  11.                      (strcat b " " g "Kg") ;_备注列 ColNum 7
  12.                )
  13.              )
  14.             (vl-sort
  15.               attl
  16.               '(lambda (e1 e2) (< (atoi (car e1)) (atoi (car e2)))) ;_按钢筋编号排序,
  17.                                         ;排完就对应 Table 的 Row 升序
  18.             )
  19.           )
  20. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

已领礼包: 5个

财富等级: 恭喜发财

发表于 2018-12-28 10:03:47 | 显示全部楼层
小数点后面的零怎么去掉呀    用代码怎么设置。
360截图20181228100018321.jpg
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 09:27 , Processed in 0.402608 second(s), 51 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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