45296876 发表于 2013-4-10 11:38:27

新问题 请教,还是属性块的问题。

本帖最后由 45296876 于 2013-4-11 12:43 编辑



下面就是经超版指点所完成的批量修改属性块文字的字高与字宽程序,真心感谢此论坛的各坛友与版主。谢谢



(defun c:zg(/ a b c d e f g )

(setq a (getdist "\n输入字高:"))
(setq b (getdist "\n请输入字宽比例:"))
(setq c -1)
(setq d (ssget '((0 . "INSERT") (66 . 1))));获得包含'((0 . "INSERT") (66 . 1))两种信息的图块,也就是说获得有属性的图块
(repeat (sslength d)
   (setq e (ssname d (setq c (+ 1 c))))
   (setq f e)

(while (and
         (setq f (entnext f))
         (= "ATTRIB" (cdr (assoc 0 (setq g (entget f)))))
         )   

   (setq g (entmod (subst (cons 40 a) (assoc 40 g) g)))
         (entmod (subst (cons 41 b) (assoc 41 g) g))


(entupd e)
    );while闭括号
);repeat闭括号

(princ)
);defun闭括号

zhangcan0515 发表于 2020-8-14 23:22:55

谢谢分享学习了,解决了我很多问题

45296876 发表于 2013-4-10 17:27:54

木有人回答啊……

wowan1314 发表于 2013-4-10 17:42:58

属性块没玩过,估计也就是加个循环把一个块里面的属性都弄出来按条件处理下。

你可以先去查查看怎么得到属性块内的全部属性文字。

45296876 发表于 2013-4-11 08:38:13

wowan1314 发表于 2013-4-10 17:42 static/image/common/back.gif
属性块没玩过,估计也就是加个循环把一个块里面的属性都弄出来按条件处理下。

你可以先去查查看怎么得到 ...

暂时先这样,研究一下吧,等有人帮忙再看看。也许这回能自已解决了,如果解决了就把源码发上来给大家参考一下。

45296876 发表于 2013-4-11 09:17:33

(defun c:ccc()
(setq a (getreal "\n输入字高:"))
(setq b (getreal "\n字宽:"))
(setq c -1)
(setq d (ssget '((0 . "INSERT") (66 . 1))))
(repeat (sslength d)
   (setq e (ssname d (setq c (+ 1 c))))
   (setq f (entnext (cdar ( entget e))))
   (setq g (entget f))
   (setq g (entmod (subst (cons 40 a) (assoc 40 g) g)))
         (entmod (subst (cons 41 b) (assoc 41 g) g))

(setq h (entnext f))
(setq i (entget h))
(setq i (entmod (subst (cons 40 a) (assoc 40 i) i)))
         (entmod (subst (cons 41 b) (assoc 41 i) i))

(setq j (entnext h))
(setq k (entget j))
(setq k (entmod (subst (cons 40 a) (assoc 40 k) k)))
         (entmod (subst (cons 41 b) (assoc 41 k) k))

   (setq L (entnext j))
(setq m (entget L))
(setq m (entmod (subst (cons 40 a) (assoc 40 m) m)))
         (entmod (subst (cons 41 b) (assoc 41 m) m))
(entupd e)
);repeat闭括号       
(princ)
);defun闭括号这样一个一个的做,把ENTMOD一直做下去,同时还要把ENTNEXT一直做下去,如何用WHILE判断呢?高手帮忙修改一下,谢谢

Gu_xl 发表于 2013-4-11 09:29:45

45296876 发表于 2013-4-11 09:17 static/image/common/back.gif
这样一个一个的做,把ENTMOD一直做下去,同时还要把ENTNEXT一直做下去,如何用WHILE判断呢?高手帮忙修改一 ...

.
.
.
(repeat (sslength d)
   (setq f (ssname d (setq c (+ 1 c))))
(while (and
         (setq f (entnext f))
         (= "ATTRIB" (cdr (assoc 0 (setq g (entget f)))))
         )
    .
    .
    .
    )
)
.
.
.

45296876 发表于 2013-4-11 09:43:58

Gu_xl 发表于 2013-4-11 09:29 static/image/common/back.gif
.
.
.


超版就是超版,小弟在此学习了,谢谢。有啥问题我还会回来的。

45296876 发表于 2013-4-11 10:42:15

Gu_xl 发表于 2013-4-11 09:29 static/image/common/back.gif
.
.
.


(defun c:ccc()
(setq a (getreal "\n输入字高:"))
(setq b (getreal "\n字宽:"))
(setq c -1)
(setq d (ssget '((0 . "INSERT") (66 . 1))))
(repeat (sslength d)
   (setq e (ssname d (setq c (+ 1 c))))


(while (and
           (setq f (entnext f))
           (= "attrib" (cdr (assoc 0 (setq g (entget f))))))
    (setq f (entnext (cdar (entget e))))
    (setq g (entget f))          

   (setq g (entmod (subst (cons 40 a) (assoc 40 g) g)))
         (entmod (subst (cons 41 b) (assoc 41 g) g))
)

(entupd e)
);repeat闭括号       
(princ)
);defun闭括号
这里加载的时候提示点位置不对,望版主给指路明灯

Gu_xl 发表于 2013-4-11 10:46:28

45296876 发表于 2013-4-11 10:42 static/image/common/back.gif


(setq f (entnext (cdar (entget e))))
    (setq g (entget f))            
两句代码删掉!
要仔细阅读代码!看明白每句都是什么意思!

45296876 发表于 2013-4-11 10:53:33

本帖最后由 45296876 于 2013-4-11 10:53 编辑

Gu_xl 发表于 2013-4-11 10:46 http://bbs.mjtd.com/static/image/common/back.gif
(setq f (entnext (cdar (entget e))))
    (setq g (entget f))            
两句代码删掉!


(setq e (ssname d (setq c (+ 1 c))))这句里面如果不用entnext,能让assoc搜索到“ATTRIB”吗?直接ENTGET E,只能获得(0 . "INSERT")
页: [1] 2
查看完整版本: 新问题 请教,还是属性块的问题。