y1075 发表于 2008-4-20 21:11:00

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

本帖最后由 作者 于 2008-5-13 15:32:43 编辑 <br /><br /> <p>((-1 . &lt;Entity name: 3c51ee8&gt;) (0 . "LINE") (5 . "1B545") (100 . <br/>"AcDbEntity") (67 . 0) (8 . "JZD") (62 . 7) (6 . "CONTINUOUS") (100 . <br/>"AcDbLine") (39 . 1.50009e+006) (10 990847.0 5.23918e+006 0.0) (11 990852.0 <br/>5.23918e+006 0.0) (210 0.0 0.0 1.0) (-3 ("DJINFO" (1000 . "2619.50-495.25") <br/>(1000 . "040301373") (1000 . "") (1000 . "阮灿权") (1000 . "") (1000 . "") <br/>(1000 . "集体土地使用权") <font color="#f70938">(1000 . "253")</font> (1000 . "住宅用地") (1000 . <br/>"集体土地所有权") (1000 . "空白") (1000 . "清城区洲心街三角村委会中阮村民小组") <br/>(1000 . "2.84米巷,陈姐") (1000 . "9.26米巷,阮国彬") (1000 . <br/>"2.52-2.49米巷,阮国庆") (1000 . "道路") (1000 . "113.022") (1000 . "113.022") <br/>(1000 . "117.613") (1000 . "1802") (1000 . "批准拨用宅基地") (1000 . "未定") <br/>(1000 . "空白") (1000 . "未定") (1000 . "0.9610") (1000 . "117.613") (1000 . <br/>"") (1000 . "") (1000 . "495373.840") (1000 . "2619548.080") (1000 . <br/>"495367.390") (1000 . "2619537.610") (1000 . "495375.530") (1000 . <br/>"2619532.590") (1000 . "495381.980") (1000 . "2619543.070") (1000 . "E"))))</p><p>小弟刚学没多久~~想问一个问题<font color="#f70938">(1000 . "253")</font>&nbsp; 我要将它改为<font color="#f70938">(1000 . "072")&nbsp;</font><font color="#000000">要如何修改.</font></p><p>图我已发上来了~用(entget (car (entsel))'("djinfo"))点白线,就可以得出数据,就是修改不了,高手们帮我写一个批量的行不</p><p>我的QQ107578632</p>

Nico 发表于 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中,从而更新实体的属性。

ljttjl 发表于 2008-4-20 21:14:00

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

ZZXXQQ 发表于 2008-4-20 22:13:00

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

无痕 发表于 2008-4-21 12:51:00

是在(-3 里面的

龙龙仔 发表于 2008-4-21 14:06:00

<strong>扩展数据不能這樣改吧!</strong>

y1075 发表于 2008-4-21 14:35:00

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

danxingpen 发表于 2008-4-21 16:55:00

(setq objent(car(entsel)))
(setq ent(entget objent))
(setq entall(entget objent '("*")));这里的*字号改成你的或者不用也无所谓---
(setq appent(cadr(assoc -3 entall)))
;|appent
(("DANXINGPEN" (1002 . "{") (1000 . "6") (1000 . "5") (1000 . "4") (1000 . "3") (1000 . "2") (1000 . "1") (1002 . "}")))|;
(setq appent(mapcar '(lambda(x)(if (equal  x '(1000 . "4")) '(1000 . "修改") x)) appent))
(setq appent(append (list -3) (list appent)))
(setq entall(append ent (list appent)))
(entmod entall)
;;没有考虑同一个对象包含多个appid的情况.

y1075 发表于 2008-4-22 09:34:00

<p>楼上的大哥~辛苦了~~~不过你有没有注意到"djinfo"</p><p>你修改的那个扩展数据~没有修改到"djinfo"</p>

danxingpen 发表于 2008-4-22 09:38:00

<font color="red">(</font><a target="_black" href="../object/autolisp/setq.htm"><font color="blue">setq</font></a> entall<font color="red">(</font><a target="_black" href="../object/autolisp/entget.htm"><font color="blue">entget</font></a> objent '<font color="red">(</font><font color="#ff00ff">"*"</font><font color="red">)</font><font color="red">)</font><font color="red">)</font><font color="purple">;这里的*字号改成你的<br/><br/>看看过程,然后不是就可以改到自己想要的结果吗?我用的是自己的测试图,当然没有改你的了,,,,,<br/></font>

y1075 发表于 2008-4-22 10:30:00

<p>我意思是要改将<font color="#f70938">(1000 . "253")</font>&nbsp; 改成<font color="#f70938">(1000 . "072") </font><font color="#000000">我试过了~我也改过~还是不行~~你能不能帮我写个完整的,我是初学~~~</font></p>
页: [1] 2
查看完整版本: [原创]请高手帮个忙,有关修改扩展数据的.