找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2674|回复: 11

[LISP函数]:如何读出尺寸标注自动生成的的数值 "(<>)"

[复制链接]
发表于 2002-5-29 00:44:42 | 显示全部楼层 |阅读模式

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

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

×
1)当系统变量DIMASO=ON时,如何读出标注的尺寸的数值
2)DIMENSION的数据结构是怎么样的

本帖被以下淘专辑推荐:

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
 楼主| 发表于 2002-5-29 00:47:14 | 显示全部楼层
0
DIMENSION
  5
2C
100
AcDbEntity
  8
0
100
AcDbDimension
  2
*D0                                           ****
10
297.55875
20
123.89645
30
0.0
11
248.307646
21
125.77145
31
0.0
70
    32
  3
STANDARD
100
AcDbAlignedDimension
13
199.056542
23
104.565088
33
0.0
14
297.55875
24
103.97929
34
0.0
100
AcDbRotatedDimension
1001
ACAD
1000
DSTYLE
1002
{
1070
    78
1070
     8
1070
   270
1070
     8
1070
   140
1040
2.5
1070
    74
1070
     0
1070
   172
1070
     1
1070
    73
1070
     0
1070
    77
1070
     1
1070
   147
1040
0.625
1070
    42
1040
0.625
1070
    44
1040
1.25
1070
    43
1040
3.75
1070
   141
1040
2.5
1070
    41
1040
2.5
1070
   273
1070
     8
1070
   274
1070
     4
1070
   143
1040
0.0394
1070
   171
1070
     4
1002
}
  0
ENDSEC
  0
在这个数据中是没有尺寸的大小的(除非你更改了尺寸),但它有个名"*D0"(数据中画***处),是和另一数据块"BLOCK"的名"*D0"相同的,并在相同名的"BLOCK"中存放的有尺寸大小.我不知道的是这个尺寸大小怎么读出?用什么方法读?在DWG中"DIMENSION"的数据格式是怎么样的?
附"BLOCK"的数据如下:
0
BLOCK
  5
20
100
AcDbEntity
  8
0
100
AcDbBlockBegin
  2
*D0                             (和上面同名)
70
     1
10
0.0
20
0.0
30
0.0
  3
*D0
  1

  0
LINE
  5
21
100
AcDbEntity
  8
0
  6
BYBLOCK
62
     0
100
AcDbLine
10
199.056542
20
105.190088
30
0.0
11
199.056542
21
125.14645
31
0.0
  0
LINE
  5
22
100
AcDbEntity
  8
0
  6
BYBLOCK
62
     0
100
AcDbLine
10
297.55875
20
104.60429
30
0.0
11
297.55875
21
125.14645
31
0.0
  0
LINE
  5
23
100
AcDbEntity
  8
0
  6
BYBLOCK
62
     0
100
AcDbLine
10
201.556542
20
123.89645
30
0.0
11
295.05875
21
123.89645
31
0.0
  0
SOLID
  5
24
100
AcDbEntity
  8
0
  6
BYBLOCK
62
     0
100
AcDbTrace
10
201.556542
20
124.313117
30
0.0
11
201.556542
21
123.479783
31
0.0
12
199.056542
22
123.89645
32
0.0
13
199.056542
23
123.89645
33
0.0
  0
SOLID
  5
25
100
AcDbEntity
  8
0
  6
BYBLOCK
62
     0
100
AcDbTrace
10
295.05875
20
124.313117
30
0.0
11
295.05875
21
123.479783
31
0.0
12
297.55875
22
123.89645
32
0.0
13
297.55875
23
123.89645
33
0.0
  0
MTEXT
  5
26
100
AcDbEntity
  8
0
  6
BYBLOCK
62
     0
100
AcDbMText
10
248.307646
20
125.77145
30
0.0
40
2.5
41
0.0
71
     5
72
     1
  1
\A1;98.5022      (尺寸的大小,即要读出的数据)
  0
POINT
  5
28
100
AcDbEntity
  8
DEFPOINTS
  6
BYBLOCK
62
     0
100
AcDbPoint
10
199.056542
20
104.565088
30
0.0
  0
POINT
  5
29
100
AcDbEntity
  8
DEFPOINTS
  6
BYBLOCK
62
     0
100
AcDbPoint
10
297.55875
20
103.97929
30
0.0
  0
POINT
  5
2A
100
AcDbEntity
  8
DEFPOINTS
  6
BYBLOCK
62
     0
100
AcDbPoint
10
297.55875
20
123.89645
30
0.0
  0
ENDBLK
  5
2B
100
AcDbEntity
  8
0
100
AcDbBlockEnd
  0
ENDSEC
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-5-29 01:39:27 | 显示全部楼层
对自动标注的尺寸,用(setq e (assoc 1 (entget (car (entsel "请选择一个对象: ")))))语句
返回的总是表(1 . "")。我以前碰到过类似问题,是先炸开尺寸,然后得到最后一个生成的多文本数据表即可
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2002-5-29 03:15:30 | 显示全部楼层
如果炸开,那是太简单了.可惜炸开就没用了,我还不如设DIMASO=OFF,还免了炸开.
现在我想知道的是不炸开怎么读,DIMENSION的数据结构是怎么样的 ?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-5-29 03:17:08 | 显示全部楼层
在R14中可以吗,我怎么在DXF中的DIMENSION中找都找不到42项?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-5-29 05:09:26 | 显示全部楼层
经过两天对DXF的分析,终于读出了,代码如下:
(setq B_dim_ent (entget (car (entsel))))
  (if (/= (cdr (assoc 0 B_dim_ent)) "DIMENSION")
    (prompt "\n这不是个尺寸标注")
    (progn
      (setq B_dim_or (cdr (assoc 1 B_dim_ent)))
      (if (= B_dim_or "")
        (progn
          (setq B_dim_name (cdr (assoc 2 B_dim_ent)))
          (setq B_dim_sset (cdr (car (reverse (tblsearch "BLOCK" B_dim_name)))))
                (print B_dim_sset)
          (while (/= (cdr (assoc 0 (entget B_dim_sset))) "MTEXT")
            (setq B_dim_sset (entnext B_dim_sset))
          );end-while
          (setq B_dim_txt (cdr (assoc 1 (entget B_dim_sset))))
        );end-progn
        (setq B_dim_txt B_dim_or)
      );end-if
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-5-29 12:17:13 | 显示全部楼层
这个问题在旧论坛讨论过,以前在autodesk讨论组中也有人提到;
目前综合起来方法有:
1,块搜索,最后找到那个值。
2,几何法,根据角点和角度关系,硬求其值(可能有误差)
3,r2k以后提供了d42,实在是方便。
。。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2002-5-30 02:00:23 | 显示全部楼层
小弟刚到宝地,还不熟悉路径,能否请教怎么看旧论坛的文章
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-5-30 02:03:33 | 显示全部楼层
(setq B_dim_ent (entget (car (entsel))))
(if (/= (cdr (assoc 0 B_dim_ent)) "DIMENSION")
    (progn
      (prompt "\n这不是个尺寸标注")
      (setq B_dim_choose -1)
    );end-progn当不是尺寸标注时由B_dim_choose判断
    (progn
      (setq B_dim_or (cdr (assoc 1 B_dim_ent)));当是自动生成的尺寸文本时为空
      (setq B_dim_name (cdr (assoc 2 B_dim_ent)));读出同名的块名
      (setq B_dim_sset (cdr (assoc -2 (tblsearch "BLOCK" B_dim_name))));找块的实体名
        (while (/= (cdr (assoc 0 (entget B_dim_sset))) "MTEXT")
        (setq B_dim_sset (entnext B_dim_sset))
      );end-while寻找写有尺寸大小文本的子实体
      (setq B_dim_txt (cdr (assoc 1 (entget B_dim_sset))));读出尺寸大小文本
);end-prgn
);end-if
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-5 10:06 , Processed in 0.513376 second(s), 56 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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