前生 发表于 2017-8-8 22:32:55

这个图奇怪

本帖最后由 前生 于 2017-8-8 22:34 编辑

看附件,外圆的坐标和同心的圆不同,
210猪吗也不同.

问题是:
      用subst 分别更新二次,居然不对.




前生 发表于 2017-8-8 22:40:45

以前的处理方法是:
210的最后一个是 -1.0时,
就将圆的X 坐标(-x) ,重新
entmake一个新的同样大小的圆,
再entdel 删除该变态的圆.

今天觉的麻烦,

    (ENTMOD
          (SUBST (CONS 210   (list 0.0 0.0 1.0))
               (ASSOC 210 ED)
               ED
          )
      )
      (ENTMOD
          (SUBST (CONS 10
                     (list (- 0 (cadr (assoc 10 ed)))
                           (caddr (assoc 10 ed))
                           0.0
                     )
               )
               (ASSOC 10 ED)
               ED
          )
      )
了一下
原来是认为,中心坐标更新,210更新.
就应该在屏幕的原来的位置上生成了一个好好的圆,
结果

ll_j 发表于 2017-8-9 09:03:57

前生 发表于 2017-8-8 22:40
以前的处理方法是:
210的最后一个是 -1.0时,
就将圆的X 坐标(-x) ,重新


你的代码问题出在ed变量上,第一次使用entmod,虽然把实体更新了,但ed变量并没有更新,第二次entmod只是对ed变量进行,并不是对更新后的实体再次更新,你只在第一次更新时把变量ed也更新一下即可,即(setq ed (entmod...或(entmod (setq ed (subst....)。
通常的方法是,先把整个实体表先改好,最后一次entmod,这样就不太会出现类似错误了。

前生 发表于 2017-8-9 12:03:07


昨天我是这样子做的.
(setq ed1 (entget en))
       
        (ENTMOD
          (SUBST (CONS 10
                     (list (- 0 (cadr (assoc 10 ed1)))
                             (caddr (assoc 10 ed1))
                             0.0
                     )
               )
               (ASSOC 10 ED1)
               ED1
          )
        )

前生 发表于 2017-8-9 12:03:58

第一次实体更新后,对en 实体再取一次值,

前生 发表于 2017-8-9 12:07:21

ll_j 发表于 2017-8-9 09:03
你的代码问题出在ed变量上,第一次使用entmod,虽然把实体更新了,但ed变量并没有更新,第二次entmod只是 ...
对的.
以前也是(setq ed (entmod .........))
感觉实体变化,不需要 (setq ed ....
不知道什么时候,全部就不 (setq ed ....而是直接(emtmod .......了
:lol
页: [1]
查看完整版本: 这个图奇怪