明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2253|回复: 8

更新图块数据

[复制链接]
发表于 2011-10-20 15:11 | 显示全部楼层 |阅读模式

请大家帮忙看看下面的代码为什么运行到(setq et (subst (cons 11 newsnpt) (assoc 11 et) et))出现错误:DXF组错误
程序中:
blokn为块名
rf为块的编号,也是文字

(setq s2 (ssget "C" a1 a2 (list (cons 2 blokn))))
   (repeat (sslength s2)
    (setq en1 (ssname s2 k))
    (setq encen  (cdr (assoc 10 (entget en1))))  ;图块插入点
    (setq et1 (entnext en1))
       (setq et (entget et1))
    (setq et (subst (cons 1 rf) (assoc 1 et) et))
    (if (= (assoc 62 et) nil)
        (setq et (append et (list (cons 62 colors))))
        (setq et (subst (cons 62 colors) (assoc 62 et) et))
      )
    (if (= (assoc 370 et) nil)
        (setq et (append et (list (cons 370 9))))
        (setq et (subst (cons 370 9) (assoc 370 et) et))
      )
    (setq snpt (cdr (assoc 11 et)))
   (setq encenx (car encen) snpty (cadr snpt))
   ;(setq newsnpt (list  (+ encenx (/ (distance snpt encen) 2)) snpty ))
    (setq newsnpt (polar  encen (* pi 0.25) (distance snpt encen) ))
    (setq et (subst (cons 11 newsnpt) (assoc 11 et) et))
    (entmod et)
    (entupd et1)
    (setq k (1+ k))
  )   ;end repeat
 楼主| 发表于 2011-10-21 15:48 | 显示全部楼层
那位大大帮我看一下,在线等,谢谢
发表于 2011-10-21 16:22 | 显示全部楼层
请你先简单介绍一下你这段代码想干什么吧。
 楼主| 发表于 2011-10-21 19:35 | 显示全部楼层
vormittag 发表于 2011-10-21 16:22
请你先简单介绍一下你这段代码想干什么吧。

这段代码是读多个块名相同的块后分别对每个块编号(编号rf是固定的一个字母或数字),并显示在块的旁边
发表于 2011-10-21 20:22 | 显示全部楼层
jeike456 发表于 2011-10-21 19:35
这段代码是读多个块名相同的块后分别对每个块编号(编号rf是固定的一个字母或数字),并显示在块的旁边

其实我想知道的你还没说出来:
1、我想知道图块图元是不是有属性。你建立的选择集要确保其中的图块图元有属性,最好加上过滤(list (cons 2 blokn) (cons 66 1)),否则(entnext en1)得到的可能是图形数据库中的下一个图元,这是最可能发生dxf错误的原因。注意图块是否有属性跟图块定义时有没有属性定义图元(attdef)无关,换句话说,图块定义时没有attdef,插入的图块(insert)可能有属性(attrib),图块定义的时候有attdef,插入的insert也可能没有attrib。
2、如果有属性,你想移动属性的位置,需要先知道属性的对齐方式,组码72和74,不同的组码72 74 组合,控制的属性的位置的组码也不一样,可能是10 ,也可能是11。但是这个不会发生dxf错误,只不过属性没有被移动罢了。
3、我试过你的代码,注意了以上两点,没有发生什么错误。
 楼主| 发表于 2011-10-21 22:47 | 显示全部楼层
vormittag 发表于 2011-10-21 20:22
其实我想知道的你还没说出来:
1、我想知道图块图元是不是有属性。你建立的选择集要确保其中的图块图元有 ...

我是这样建的块,是我建块的方式不对吗?
(defun c:tt ()
(setq na (getstring "块名:"))


(prompt ":框选要做块的图元")
(setq pto (getpoint "\n 请选择图块插点"))
(setq AA (ssget))
(make_bk aa na  pto))



(defun make_bk(ss name PT00 / en1 en2 ss1 PT11)
  (if(= (type ss) 'PICKSET)
     (SETQ SS1 SS)
     (IF(= (TYPE SS) 'ENAME)
        (PROGN
          (SETQ SS1 (SSADD))
          (SETQ SS1 (SSADD SS SS1))
        )
     )
  )
  (SETQ PT11 (POLAR PT00 (/ PI 4) 2))
  ;(command "layer" "s" "mark" "")
  (COMMAND "ATTDEF" "" "SN" "编号" "" PT11 0.0002 0) (SSADD (ENTLAST) SS1)
  (COMMAND "ATTDEF" "" "DEPTH" "深度" "" PT11 0.0002 0) (SSADD (ENTLAST) SS1)
  
  (IF(NOT (TBLSEARCH "BLOCK" name))
     (command "block" name pt00 ss1 "")   
  )
)
 楼主| 发表于 2011-10-21 22:49 | 显示全部楼层
vormittag 发表于 2011-10-21 20:22
其实我想知道的你还没说出来:
1、我想知道图块图元是不是有属性。你建立的选择集要确保其中的图块图元有 ...

插入后我有双击看了有属性呀
发表于 2011-10-21 23:20 | 显示全部楼层
本帖最后由 vormittag 于 2011-10-21 23:20 编辑

再确认一下是不是所有变量都赋值了。比方说 colors rf
我运行下来没有问题。
发表于 2012-9-24 23:31 | 显示全部楼层
多发好贴,造福人民!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-19 08:17 , Processed in 0.280415 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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