找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3344|回复: 8

[讨论]:测绘软件Cass6.0中高程点块属性的实现方法

  [复制链接]

已领礼包: 1个

财富等级: 恭喜发财

发表于 2006-5-26 11:19:58 | 显示全部楼层 |阅读模式

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

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

×
南方测绘软件,其高程点为块,块名“gc200”,块定义本身并没有属性。用户自己插入该块时,只有一个点,没有文字属性。而当由软件生成时,则在块中插入了一个属性,而该属性能移动却不能修改,只能通过软件修改。这样就防止用户无意之修改着高程。这个思路是比较好的。

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

已领礼包: 1个

财富等级: 恭喜发财

 楼主| 发表于 2006-5-28 11:05:32 | 显示全部楼层
终于搞明白了。
原来是只能用entmake来生成新块时添加,而不能用entmod来对原有块插入。
代码如下:

  1. ;;;插入块时添加属性  测试  netbee 2006.05.28
  2. ;;;这种插入的块有个好处是无法用常规方法修改属性,起到一定保护作用。
  3. (defun c:tt (/ pt entl th pt0 pt1)
  4.   (setq        pt (getpoint "\n 确定插入点:")
  5.         th 2.5 ;_字高.
  6.            ;;pt0(
  7.   )
  8.   (setq        entl '((0 . "INSERT")
  9.                (100 . "AcDbEntity")
  10.                (8 . "GCD")
  11.                (6
  12.                 .
  13.                 "Continuous"
  14.                )
  15.                (66 . 1)
  16.                (2 . "gc200")
  17.               )
  18.         entl (append entl (list (cons 10 pt)))
  19.   )
  20.   (entmake entl)
  21.   (setq        entl (append
  22.                '((0 . "ATTRIB")
  23.                  (100 . "AcDbEntity")
  24.                  (8 . "GCD")
  25.                  (6 . "Continuous")
  26.                  (100 . "AcDbText")
  27.                 )
  28.                (list (cons 10 (mapcar '+ (list 2.0 (/ th -0.5) 0) pt))
  29.                      (cons 40 th)
  30.                      (cons 1 "1898.25")
  31.                )
  32.                '((50 . 0.0)
  33.                  (41 . 0.8)
  34.                  (51 . 0.0)
  35.                  (7 . "Standard")
  36.                  (71 . 0)
  37.                  (72 . 0)
  38.                 )
  39.                (list
  40.                  (cons 11 (mapcar '+ '(2.0 0.0 0.0) pt))
  41.                )
  42.                '((210
  43.                   0.0
  44.                   0.0
  45.                   1.0
  46.                  )
  47.                  (100 . "AcDbAttribute")
  48.                  (2 . "height")
  49.                  (70 . 0)
  50.                  (73 . 0)
  51.                  (74 . 2)
  52.                 )
  53.              )
  54.   )

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

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2006-5-26 23:44:52 | 显示全部楼层
2007 下属性可以修改,看看 ll_j 关于属性的论述
http://www.xdcad.net/forum/showt ... 2818967#post2818967
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

 楼主| 发表于 2006-5-27 22:26:34 | 显示全部楼层
高程块数据:

  1. _$ (setq e(car(entsel)))
  2. <图元名: 400fbf18>
  3. _$ (entget e)
  4. ((-1 . <图元名: 400fbf18>) (0 . "INSERT") (330 . <图元名: 400fbcf8>) (5 . "8B") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "GCD") (6 . "Continuous") (100 . "AcDbBlockReference") (66 . 1) (2 . "gc200") (10 325.788 366.387 1898.25) (41 . 0.5) (42 . 0.5) (43 . 0.5) (50 . 0.0) (70 . 0) (71 . 0) (44 . 0.0) (45 . 0.0) (210 0.0 0.0 1.0))
  5. _$ (entget(entnext e))
  6. ((-1 . <图元名: 400fbf20>) (0 . "ATTRIB") (330 . <图元名: 400fbf18>) (5 . "8C") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "GCD") (6 . "Continuous") (100 . "AcDbText") (10 326.388 365.887 1898.25) (40 . 1.0) (1 . "1898.25") (50 . 0.0) (41 . 0.8) (51 . 0.0) (7 . "Standard") (71 . 0) (72 . 0) (11 326.388 366.387 1898.25) (210 0.0 0.0 1.0) (100 . "AcDbAttribute") (2 . "height") (70 . 0) (73 . 0) (74 . 2))
  7. _$ (entget(entnext(entnext e)))
  8. ((-1 . <图元名: 400fbf28>) (0 . "SEQEND") (330 . <图元名: 400fbf18>) (5 . "8D") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "GCD") (6 . "Continuous") (-2 . <图元名: 400fbf18>))
  9. _$

块定义数据:

  1. _$ (entget(tblobjname "block" "gc200"))
  2. ((-1 . <图元名: 400fbe68>) (0 . "BLOCK") (330 . <图元名: 400fbe40>) (5 . "75") (100 . "AcDbEntity") (67 . 0) (8 . "0") (100 . "AcDbBlockBegin") (70 . 0) (10 0.0 0.0 0.0) (-2 . <图元名: 400fbe48>) (2 . "gc200") (1 . ""))
  3. _$
  4. _$ (setq b1 (entnext b))
  5. <图元名: 400fbe48>
  6. _$ (entget b1)
  7. ((-1 . <图元名: 400fbe48>) (0 . "POLYLINE") (330 . <图元名: 400fbe40>) (5 . "71") (100 . "AcDbEntity") (67 . 0) (8 . "0") (100 . "AcDb2dPolyline") (66 . 1) (10 0.0 0.0 0.0) (70 . 1) (40 . 0.0) (41 . 0.0) (210 0.0 0.0 1.0) (71 . 0) (72 . 0) (73 . 0) (74 . 0) (75 . 0))
  8. _$ (entget(setq b1(entnext b1)))
  9. ((-1 . <图元名: 400fbe50>) (0 . "VERTEX") (330 . <图元名: 400fbe48>) (5 . "72") (100 . "AcDbEntity") (67 . 0) (8 . "0") (100 . "AcDbVertex") (100 . "AcDb2dVertex") (10 -0.1 0.0 0.0) (40 . 0.2) (41 . 0.2) (42 . 1.0) (70 . 0) (50 . 0.0))
  10. _$ (entget(setq b1(entnext b1)))
  11. ((-1 . <图元名: 400fbe58>) (0 . "VERTEX") (330 . <图元名: 400fbe48>) (5 . "73") (100 . "AcDbEntity") (67 . 0) (8 . "0") (100 . "AcDbVertex") (100 . "AcDb2dVertex") (10 0.1 0.0 0.0) (40 . 0.2) (41 . 0.2) (42 . 1.0) (70 . 0) (50 . 0.0))
  12. _$ (entget(setq b1(entnext b1)))
  13. ((-1 . <图元名: 400fbe60>) (0 . "SEQEND") (330 . <图元名: 400fbe48>) (5 . "74") (100 . "AcDbEntity") (67 . 0) (8 . "0") (-2 . <图元名: 400fbe48>))
  14. _$ (entget(setq b1(entnext b1)))
  15. ; 错误: 参数类型错误: lentityp nil


它是怎样实现在插入块时,将属性加入块中的呢?并且不能修改它。
会不会是故意使用了某一位DXF的错误码?


我想知道
1、用entmod能否向没有属性块的DXF中添加(66 . 1)码;
2、用entmake能否添加ATTRIB图元,及随后添加SEQEND图元。

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2006-5-27 23:46:21 | 显示全部楼层
最初由 netbee 发布
[B]高程块数据:
[code]
_$ (setq e(car(entsel)))
<图元名: 400fbf18>
_$ (entget e)
((-1 . <图元名: 400fbf18>) (0 . "INSERT") (330 . <图元名: 400fbcf8>) (5 . "8B") (100 . "AcDbEntity") (67 . 0) (410 . ... [/B]

经测试 entmake 可以给不含ATTDEF的块在插入时(entmake插入)增加 ATTRIB

我的理解 Entmod 是不能给中途插入的 Block追加 ATTRIB,ATTRIB 虽然归属 INSERT,但CAD的实体编号位置是顺序生成的,就如Entnext 遇到属性快就会进入ATTRIB。中途插入的块随后的位置已经被其他实体占用,按CAD的规则是不能中间“插空”的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2006-5-28 11:42:57 | 显示全部楼层
最初由 netbee 发布
[B]终于搞明白了。
原来是只能用entmake来生成新块时添加,而不能用entmod来对原有块插入。
代码如下:
[code]
;;;插入块时添加属性  测试  netbee 2006.05.28
;;;这种插入的块有个好处是无法用常规方法修改?... [/B]

对原有块也可以添加,插入前先添加,插入时就是属性块,插入后再删除块定义中的ATTDEF,不过这样就多此一举了:(
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-5-29 11:48:27 | 显示全部楼层
看了二位斑竹前面的讨论,我是懂非懂,嘿嘿,不知我这个问题能在这里得到解,
http://www.xdcad.net/forum/showthread.php?s=&threadid=563157
我这个是可以修改,却不能炸开,因为一炸文字就没有,且插入时文字也没有,不知道是怎么做的?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-6-26 21:33:50 | 显示全部楼层
后悔,怎么今天才看这篇文章啊!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-7 21:44 , Processed in 0.665725 second(s), 49 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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