明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2354|回复: 13

[原创]请高手帮个忙,有关修改扩展数据的.

  [复制链接]
发表于 2008-4-20 21:11:00 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2008-5-13 15:32:43 编辑

((-1 . <Entity name: 3c51ee8>) (0 . "LINE") (5 . "1B545") (100 .
"AcDbEntity") (67 . 0) (8 . "JZD") (62 . 7) (6 . "CONTINUOUS") (100 .
"AcDbLine") (39 . 1.50009e+006) (10 990847.0 5.23918e+006 0.0) (11 990852.0
5.23918e+006 0.0) (210 0.0 0.0 1.0) (-3 ("DJINFO" (1000 . "2619.50-495.25")
(1000 . "040301373") (1000 . "") (1000 . "阮灿权") (1000 . "") (1000 . "")
(1000 . "集体土地使用权") (1000 . "253") (1000 . "住宅用地") (1000 .
"集体土地所有权") (1000 . "空白") (1000 . "清城区洲心街三角村委会中阮村民小组")
(1000 . "2.84米巷,陈姐") (1000 . "9.26米巷,阮国彬") (1000 .
"2.52-2.49米巷,阮国庆") (1000 . "道路") (1000 . "113.022") (1000 . "113.022")
(1000 . "117.613") (1000 . "1802") (1000 . "批准拨用宅基地") (1000 . "未定")
(1000 . "空白") (1000 . "未定") (1000 . "0.9610") (1000 . "117.613") (1000 .
"") (1000 . "") (1000 . "495373.840") (1000 . "2619548.080") (1000 .
"495367.390") (1000 . "2619537.610") (1000 . "495375.530") (1000 .
"2619532.590") (1000 . "495381.980") (1000 . "2619543.070") (1000 . "E"))))

小弟刚学没多久~~想问一个问题(1000 . "253")  我要将它改为(1000 . "072") 要如何修改.

图我已发上来了~用(entget (car (entsel))'("djinfo"))点白线,就可以得出数据,就是修改不了,高手们帮我写一个批量的行不

我的QQ107578632

本帖子中包含更多资源

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

x
发表于 2024-7-23 14:42:18 | 显示全部楼层
danxingpen 发表于 2008-4-22 10:40
(setq objent(car(entsel)))(setq ent(entget objent))(setq entall(entget objent '("djinfo")))(setq app ...

下面是对每一行代码的详细分析:

1. `(setq objent (car (entsel)))`
   - 这行代码通过`entsel`函数选择一个实体,并将其存储在变量`objent`中。`entsel`函数会弹出一个选择框让用户选择一个实体,并返回一个包含该实体的列表。`car`函数用于提取列表中的第一个元素,即选择的实体。

2. `(setq ent (entget objent))`
   - 这行代码使用`entget`函数获取所选实体的完整数据,并将其存储在变量`ent`中。`entget`函数返回一个包含实体所有属性和值的关联列表。

3. `(setq entall (entget objent '("djinfo")))`
   - 这行代码再次使用`entget`函数获取所选实体的数据,但这次传递了一个额外的参数`'("djinfo")`,表示只获取与"djinfo"相关的数据。这个参数的具体含义可能与具体的应用场景有关。

4. `(setq appent (cadr (assoc -3 entall)))`
   - 这行代码从`entall`中提取与代码块`-3`相关的数据。`assoc -3 entall`会返回一个包含代码块`-3`及其相关数据的列表,`cadr`函数用于提取这个列表的第二个元素,并将其存储在变量`appent`中。

5. `(setq appent (mapcar '(lambda (x) (if (equal x '(1000 . "253")) '(1000 . "072") x)) appent))`
   - 这行代码使用`mapcar`函数遍历`appent`中的每个元素,并使用一个匿名函数`(lambda (x) ...)`来检查每个元素是否等于`(1000 . "253")`。如果是,则将其替换为`(1000 . "072")`,否则保持不变。这个操作的目的是修改特定的数据值。

6. `(setq appent (append (list -3) (list appent)))`
   - 这行代码将代码块`-3`和修改后的`appent`数据重新组合成一个新的列表。`append`函数用于将两个列表连接在一起。

7. `(setq entall (append ent (list appent)))`
   - 这行代码将原始的实体数据`ent`和修改后的`appent`数据组合成一个新的列表,并将其存储在变量`entall`中。

8. `(entmod entall)`
   - 这行代码使用`entmod`函数将修改后的实体数据写回到AutoCAD中,从而更新实体的属性。
回复 支持 1 反对 0

使用道具 举报

发表于 2008-4-20 21:14:00 | 显示全部楼层

与操作一般表的方法修改一样,其它问题联系ljttjl @tom.com

发表于 2008-4-20 22:13:00 | 显示全部楼层

(setq ent '((-1 . <Entity name: 3c51ee8>) (0 . "LINE") (5 . "1B545") (100 .
"AcDbEntity") (67 . 0) (8 . "JZD") (62 . 7) (6 . "CONTINUOUS") (100 .
"AcDbLine") (39 . 1.50009e+006) (10 990847.0 5.23918e+006 0.0) (11 990852.0
5.23918e+006 0.0) (210 0.0 0.0 1.0) (-3 ("DJINFO" (1000 . "2619.50-495.25")
(1000 . "040301373") (1000 . "") (1000 . "阮灿权") (1000 . "") (1000 . "")
(1000 . "集体土地使用权") (1000 . "253") (1000 . "住宅用地") (1000 .
"集体土地所有权") (1000 . "空白") (1000 . "清城区洲心街三角村委会中阮村民小组")
(1000 . "2.84米巷,陈姐") (1000 . "9.26米巷,阮国彬") (1000 .
"2.52-2.49米巷,阮国庆") (1000 . "道路") (1000 . "113.022") (1000 . "113.022")
(1000 . "117.613") (1000 . "1802") (1000 . "批准拨用宅基地") (1000 . "未定")
(1000 . "空白") (1000 . "未定") (1000 . "0.9610") (1000 . "117.613") (1000 .
"") (1000 . "") (1000 . "495373.840") (1000 . "2619548.080") (1000 .
"495367.390") (1000 . "2619537.610") (1000 . "495375.530") (1000 .
"2619532.590") (1000 . "495381.980") (1000 . "2619543.070") (1000 . "E")))))

(setq ent (subst '(1000 . "072") '(1000 . "253") ent))

(entmod ent)

发表于 2008-4-21 12:51:00 | 显示全部楼层
是在(-3 里面的
发表于 2008-4-21 14:06:00 | 显示全部楼层
扩展数据不能這樣改吧!
 楼主| 发表于 2008-4-21 14:35:00 | 显示全部楼层

2楼的那位大哥~你有没有试一下的呀~那时有可能那样改,在-3的表里面的呀~~~~有没有那位高人再指点一下~~

发表于 2008-4-21 16:55:00 | 显示全部楼层
  1. (setq objent(car(entsel)))
  2. (setq ent(entget objent))
  3. (setq entall(entget objent '("*")));这里的*字号改成你的或者不用也无所谓---
  4. (setq appent(cadr(assoc -3 entall)))
  5. ;|appent
  6. (("DANXINGPEN" (1002 . "{") (1000 . "6") (1000 . "5") (1000 . "4") (1000 . "3") (1000 . "2") (1000 . "1") (1002 . "}")))|;
  7. (setq appent(mapcar '(lambda(x)(if (equal&#160; x '(1000 . "4")) '(1000 . "修改") x)) appent))
  8. (setq appent(append (list -3) (list appent)))
  9. (setq entall(append ent (list appent)))
  10. (entmod entall)
  11. ;;没有考虑同一个对象包含多个appid的情况.
 楼主| 发表于 2008-4-22 09:34:00 | 显示全部楼层

楼上的大哥~辛苦了~~~不过你有没有注意到"djinfo"

你修改的那个扩展数据~没有修改到"djinfo"

发表于 2008-4-22 09:38:00 | 显示全部楼层
(setq entall(entget objent '("*")));这里的*字号改成你的

看看过程,然后不是就可以改到自己想要的结果吗?我用的是自己的测试图,当然没有改你的了,,,,,
 楼主| 发表于 2008-4-22 10:30:00 | 显示全部楼层

我意思是要改将(1000 . "253")  改成(1000 . "072") 我试过了~我也改过~还是不行~~你能不能帮我写个完整的,我是初学~~~

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 11:33 , Processed in 0.286722 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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