明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 700|回复: 4

[讨论] 增强属性块改值问题不能更新问题

[复制链接]
发表于 2016-7-28 16:26 | 显示全部楼层 |阅读模式
说明:
;;toshuxing (N-att str N / M s)
;;N-att :entsel获取后用car取得图元名
;;str:    从另外一个相同增强属性块提取同位置属性值
;;N:       替换属性块中第N个属性值

(defun toshuxing (N-att str N / M s)
(setq M  N)  
(repeat N
  (setq s   (entget (entnext (cdr (car (entget N-att))))))
  (setq M   (- M 1))     
(if (/= M 0)
    (setq N-att  (entnext N-att))
)
)
(entmod (subst (cons 1 str) (assoc 1 s) s))
)


问题:能替换成功,但是必须用  (command "REGEN") 执行刷新之后才能看到替换后效果。要不然改了数据库值,但是图上不能显示。各位大大,怎么修改?
发表于 2016-7-28 16:48 | 显示全部楼层
对于块,通常要(entupd e)
 楼主| 发表于 2016-7-28 20:04 | 显示全部楼层
(entupd ename)
功能及参数
    正如前面所描述, 由 entmod 修改多段线的顶点或图块的属性后, 其整体图元将不会在屏幕上更新。例如, 将复杂多段线上的 100 个顶点全部修改, 则需要重新计算和再投影, 时间十分长。而 entupd 函数是将修改好的聚合线或图块直接在屏幕上更新。 entupd 函数可以使用多重折线或图块任何部分的图元名来调用它, 它不需要开头的图元——entupd 将可找的到开头。当entupd 是专为有属性的多段线和图块而设计时, 它可以使用任何图元来调用它。它都会在屏幕上重新产生这个图元, 并且包括所有的子图元。

    【注意】如果 entupd 被用于一个呈嵌套的图元上(即一个包含在一个图块中的图元)或在一个包含嵌套图素的图块上, 它可能不会重新产生该图块的所有嵌套图元。您必须调用 REGEN 命令才能保证整个图块和它的嵌套图元都会被重新产出来。您可以在 AutoLISP 中键入(Command“regen”)来完成这件工作

entupd 能否问一下怎么用?
 楼主| 发表于 2016-7-28 20:05 | 显示全部楼层
自贡黄明儒 发表于 2016-7-28 16:48
对于块,通常要(entupd e)


entupd 能否问一下怎么用?
(entmod (subst (cons 1 str) (assoc 1 s) s))
只修改这一句?对于含有10个左右属性的增强属性块。
发表于 2016-7-29 19:44 | 显示全部楼层
entupd怎么用
实验下不就行了
无非两种可能
(entupd (car (entsel))
(entupd blk'att)    ;;(entupd (cdr (assoc -1 s)))

楼主的程序是存在隐患的
两个同名属性块
特殊情况下
同位置的属性可能是不同的属性定义
举个例子
你插入两个同名多属性块
第一个explode按原块名建块
第二个explode也按原块名建块
但在选择属性定义时采用不同的顺序
然后再使用你的程序测试下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-20 11:28 , Processed in 0.189423 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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