明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1779|回复: 6

[求助]为何图元entmod后不能用redraw亮显?

[复制链接]
发表于 2007-8-1 15:52 | 显示全部楼层 |阅读模式
为何图元entmod后不能用redraw亮显?
发表于 2007-8-1 18:30 | 显示全部楼层
可以亮显
  1. (defun c:Tt ()
  2.   (defun repl_simp_value (na code val / data)
  3.     (setq data (entget na))
  4.     (setq data (subst (cons code val) (assoc code data) data))
  5.     (entmod data)
  6.   )
  7.   (setq na (car (entsel)))
  8.   (repl_simp_value na 8 "3")
  9.   (redraw na 3)
  10. )
 楼主| 发表于 2007-8-6 18:47 | 显示全部楼层
本帖最后由 作者 于 2007-8-6 18:54:57 编辑

;大家帮我测试一下


(DEFUN C:TEST ()
  (Defun Lhb-Get-Dxf (Code Ename) (Cdr (Assoc Code (Entget Ename))))
  (Setvar "Osmode" (+ 1 2 4 8 16 32 128 512 2048 4096))
  (While (Setq Dimsel (ENTSEL "\n拾取要拆分的标注尺寸[定位基点靠近点取位置]<退出>:"))
    (Setq Ename (Car Dimsel))
    (Setq Diment (Entget Ename))
    (Redraw Ename 3)
    (Setq Selpt (Cadr Dimsel))
    (IF (MEMBER '(100 . "AcDbAlignedDimension") (ENTGET ENAME))
      ;;;如果选择的标注是线性或对齐标注
      (progn
        (Setq Dimpt10 (Lhb-Get-Dxf 10 Ename))
        (Setq Dimpt13 (Lhb-Get-Dxf 13 Ename))
        (Setq Dimpt14 (Lhb-Get-Dxf 14 Ename))
        (Setq Ang (Angle Dimpt10 Dimpt14));;;标注线角度
        (IF (MEMBER '(100 . "AcDbRotatedDimension") (ENTGET ENAME))
          (Setq Dimalang (Lhb-Get-Dxf 50 Ename));;;线性标注角度
          (Setq Dimalang (Angle Dimpt13 Dimpt14));;;对齐标注角度
   )
        (Setq Pt1 (Polar Dimpt10 Dimalang 10))
        (Setq Pt0 (Polar Dimpt13 (+ DIMALANG (* PI 0.5)) 10))
        (Setq Dimpt1013 (Inters Dimpt13 Pt0 Dimpt10 Pt1 Nil));;;dimpt1013 指对应pt10
        (setq Dist (distance Dimpt1013 Dimpt13));;;标注线长度
        (Setq Dimpt14 (Polar Dimpt10 (Angle Dimpt10 Dimpt14) Dist))
 ;;;================================================================================
 ;;;此处用了Entmod
 (Setq Diment (Subst (Cons 14 Dimpt14) (Assoc 14 Diment) Diment))
        (Entmod Diment)(ENTUPD ENAME)
        (Redraw Ename 3)
 ;;;亮显不好使了!
 ;;;================================================================================
        (Setq Dimpt14 (Lhb-Get-Dxf 14 Ename))
        ;;;取得参考点
        (If (< (Distance Dimpt1013 Selpt) (Distance Dimpt10 Selpt))
        (Setq Ptfrom Dimpt1013)
        (Setq Ptfrom Dimpt10)
          )
        )
      ;;;如果选择的标注是角度
      (progn
        (Redraw Ename 4)
        (princ "\n You select a angle dimension!")
      )
    ); End If
    (Initget 129)
    (Setq Ptref (Getpoint
       Ptfrom
       "\n点取尺寸断开点[或输断开长度(D)/分成等分(N)]<退出>:"
     )
    )
    )
  )
发表于 2007-8-7 13:07 | 显示全部楼层
;;;================================================================================ ;;;此處用了Entmod
       (setq DIMENT (subst (cons 14 DIMPT14) (assoc 14 DIMENT) DIMENT))
       (entmod DIMENT)
       (entupd ENAME)
       (command "_.move" ENAME "0,0" @)
       (redraw ENAME 3)
;;;亮顯不好使了!
;;;================================================================================
 楼主| 发表于 2007-8-7 23:25 | 显示全部楼层
本帖最后由 作者 于 2007-8-7 23:26:19 编辑

高!实在是高!但不知道为什么发生这种情况。

发表于 2007-8-8 17:04 | 显示全部楼层

更新聚合線及圖塊

當 3D (或舊式) 聚合線頂點或圖塊屬性以entmod 修改後,螢幕上整個複合圖元不會更新。entupd 函數才能將修改過的聚合線或圖塊在螢幕上更新。此函數可利用聚合線或圖塊的任何部份的圖元名稱來呼叫,並不須為起始的圖元。當 entupd 處理聚合線與帶有屬性的圖塊時,可以使用任何圖元來呼叫。它會在螢幕上重新產生圖元,並且包含所有的子圖元。

請注意如果 entupd 被用在一個巢狀式圖元上 (包含在圖塊中的圖元) 或一個包含巢狀式圖元的圖塊上,有些圖元可能不會重新產生。為了確保可完全重新產生,您必須必行執行 REGEN 指令。

PScommand "_.move" ENAME "0,0" @)是一種避免用REGEN的重新方法

发表于 2007-8-8 18:42 | 显示全部楼层
本帖最后由 作者 于 2007-8-8 18:43:42 编辑

也可以用

(vla-Highlight (vlax-ename->vla-object ename) :vlax-true)

替代 redraw,如果你不想用命令的话

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-18 20:27 , Processed in 0.250871 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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