明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 918|回复: 1

[提问] 设置永久反应器,重新打开图纸之后,如何删除图元

[复制链接]
发表于 2021-11-2 11:22:02 | 显示全部楼层 |阅读模式
本帖最后由 20060510412 于 2021-11-2 11:25 编辑

准备实现目标:修改长方体的三个尺寸文本,三视图投影自动变化。
目前初步实现了该目标,如下图所示:


经测试发现一个比较重大的问题:代码中设置了永久反应器,但是图纸关闭重新打开之后,由于选择集ss1不存在,在修改文本之后,程序就会报错,无法实现自动修改。

这一块个人想到可能可以使用扩展数据,将生成的三视图,通过句柄的方式储存在图纸内,重开图纸之后,直接调取句柄,实现更新三视图的目的,只是个人对于这方面了解太少,不知道如何具体操作。
另外还有个疑问:设置永久反应器之后,重开图纸,程序如果出错,怎么调试啊,因为仅仅是加载了回调函数,并没有启动任何程序,是否无法调试呢?

请高手不吝赐教,多谢了。
代码中标红的部分,应该就是重开图纸之后,出现错误的地方。

(defun c:SanShi()
       
        (setq txt_length (Vlax-Ename->Vla-Object (car (entsel))))
        (setq txt_width (Vlax-Ename->Vla-Object (car (entsel))))
        (setq txt_height (Vlax-Ename->Vla-Object (car (entsel))))
       
        (setq Value_length (atof (Vlax-Get txt_length 'TextString)))
        (setq Value_width (atof (Vlax-Get txt_width 'TextString)))
        (setq Value_height (atof (Vlax-Get txt_height 'TextString)))
       
        (Draw_bridge)
       
        (if (not txt_length_reactor)(setq txt_length_reactor (vlr-object-reactor (list txt_length) nil '((:vlr-modified . Txt_length_get)))))       
        (vlr-pers txt_length_reactor)
        (if (not txt_width_reactor)(setq txt_width_reactor (vlr-object-reactor (list txt_width) nil '((:vlr-modified . Txt_width_get)))))       
        (vlr-pers txt_width_reactor)
        (if (not txt_height_reactor)(setq txt_height_reactor (vlr-object-reactor (list txt_height) nil '((:vlr-modified . Txt_height_get)))))
        (vlr-pers txt_height_reactor)
)

(defun Txt_length_get(a b c)
        (if (/= (sslength ss1) 0)               
                (DelAllEntsInSS ss1)
        )       
        (setq Value_length (atof (Vlax-Get a 'TextString)))
        (Draw_bridge)
)
(defun Txt_width_get(a b c)
        (if (/= (sslength ss1) 0)               
                (DelAllEntsInSS ss1)
        )       
        (setq Value_width (atof (Vlax-Get a 'TextString)))
        (Draw_bridge)
)
(defun Txt_height_get(a b c)
        (if (/= (sslength ss1) 0)               
                (DelAllEntsInSS ss1)
        )       
        (setq Value_height (atof (Vlax-Get a 'TextString)))
        (Draw_bridge)
)

(defun Draw_bridge(/ mspace pt0 pt1 pt2 pt3 uti)
        (setq mspace (vla-get-modelspace (vla-get-activedocument (vlax-get-acad-object))))
        (setq uti        (vla-get-utility (vla-get-activedocument (vlax-get-acad-object)) ))
       
        (setvar "CLAYER" "0")
        (setq ss1(ssadd))
       
        (setq pt0 (list 0 0))
        (setq pt1 (polar pt0 (- 0 (/ pi 2)) Value_height))
        (setq pt2 (polar pt1 0 Value_length))
        (setq pt3 (polar pt2 (/ pi 2) Value_height))
        (setq Sec_Front (vla-AddLightweightPolyline mspace (pts2ar (list pt0 pt1 pt2 pt3 pt0))))
        (setq ss1 (ssadd (entlast) ss1))

        (setq pt0 (polar pt0 (- 0 (/ pi 2)) 200))
        (setq pt1 (polar pt0 (- 0 (/ pi 2)) Value_width))
        (setq pt2 (polar pt1 0 Value_length))
        (setq pt3 (polar pt2 (/ pi 2) Value_width))
        (setq Sec_Top(vla-AddLightweightPolyline mspace (pts2ar (list pt0 pt1 pt2 pt3 pt0))))
        (setq ss1 (ssadd (entlast) ss1))

        (setq pt0 (polar (list 0 0) 0 400))
        (setq pt1 (polar pt0 (- 0 (/ pi 2)) Value_height))
        (setq pt2 (polar pt1 0 Value_width))
        (setq pt3 (polar pt2 (/ pi 2) Value_height))
        (setq Sec_Left(vla-AddLightweightPolyline mspace (pts2ar (list pt0 pt1 pt2 pt3 pt0))))       
        (setq ss1 (ssadd (entlast) ss1))
)

(defun pts2ar(pts)
        (setq pts(apply 'append pts))
        (vlax-safearray-fill (vlax-make-safearray vlax-vbDouble (cons 0 (1- (length pts)))) pts)
)

;;;DelAllEntInSS 删除选择集ss中的所有图元
(defun DelAllEntsInSS (ss / i)
  (setq i 0)
  (repeat (sslength ss)
    (progn
      (entdel (ssname ss i))
      (setq i (+ i 1))
    )
  )
        (setq ss nil)
)


复制代码






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2021-12-31 17:27:30 | 显示全部楼层
将相关图元的dxf5组码记录下来
形成列表并保存为全局词典
反应器里加入提取并转化为选择集的代码
应该就可以了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-14 14:32 , Processed in 0.269068 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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