明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 447|回复: 3

[提问] 请教:当先选图形后执行命令时图形未选中

[复制链接]
发表于 2025-6-18 11:00:57 | 显示全部楼层 |阅读模式
5明经币



这是个计算填充面积的程序,最终把有效的填充选中
问题:当先选图形后执行命令时,命令结束后有效的填充对象没有被选中,等再次点击屏幕时才会选中
请教:如何解决?



;;;功能:向系统剪切板写入文字   guosheyang
(vl-load-com)
(defun SET-CLIP-STRING (STR / HTML RESULT)
    (and (= (type STR) 'STR)
         (setq HTML (vlax-create-object "htmlfile"))
         (setq RESULT (vlax-invoke
                          (vlax-get (vlax-get HTML 'PARENTWINDOW)
                                    'CLIPBOARDDATA
                          )
                          'SETDATA
"Text"
                          STR
                      )
         )
         (vlax-release-object HTML)
    )
)


(defun c:tt (/ *acad* *doc* ss i ent obj area total_area insunits unit-name conversion-factor
                valid-ss failed-count)
  (vl-load-com)
  (setq *acad* (vlax-get-acad-object))
  (setq *doc* (vla-get-activedocument *acad*))
  
  ; 获取文档单位设置
  (setq insunits (getvar "INSUNITS"))
  (cond
    ((= insunits 0)  ; 无单位
      (setq conversion-factor 1000000.0  ; 默认按mm计算
            unit-name "毫米(mm)")
      (alert (strcat "文档单位设置为\"无单位\",程序将按默认单位" unit-name "进行计算。"))
    )
    ((= insunits 1)  ; 英寸
      (setq conversion-factor 1550.0031
            unit-name "英寸(in)"))
    ((= insunits 2)  ; 英尺
      (setq conversion-factor 92903.04
            unit-name "英尺(ft)"))
    ((= insunits 4)  ; 毫米
      (setq conversion-factor 1000000.0
            unit-name "毫米(mm)"))
    ((= insunits 5)  ; 厘米
      (setq conversion-factor 10000.0
            unit-name "厘米(cm)"))
    ((= insunits 6)  ; 米
      (setq conversion-factor 1.0
            unit-name "米(m)"))
    (t
      (setq conversion-factor 1000000.0  ; 其他单位默认按mm
            unit-name "毫米(mm)")
      (alert (strcat "未知单位设置(INSUNITS=" (itoa insunits) "),程序将按默认单位" unit-name "进行计算。"))
    )
  )
  
  (princ (strcat "\n当前文档单位: " unit-name ",将转换为平方米(m2)"))
  
  (princ "\n选择要计算面积的填充图案: ")
  (setq ss (ssget '((0 . "HATCH"))))
  
  (if ss
    (progn
      (setq total_area 0.0
            failed-count 0
            valid-ss (ssadd))  ; 创建空选择集用于存放有效填充
      
      (repeat (setq i (sslength ss))
        (setq ent (ssname ss (setq i (1- i))))
        (setq obj (vlax-ename->vla-object ent))
        
        ; 尝试计算面积,捕获可能的错误
        (if (vl-catch-all-error-p
              (setq area (vl-catch-all-apply 'vla-get-area (list obj))))
          (progn
            ; 计算失败处理
            (setq failed-count (1+ failed-count))
          )
          (progn
            ; 计算成功处理
            (setq total_area (+ total_area area))
            (ssadd ent valid-ss)  ; 将有效填充添加到选择集
            (princ (strcat "\n填充图案面积: " (rtos (/ area conversion-factor) 2 2) " 平方米"))
          )
        )
      )
      
      ; 显示统计结果
      (princ (strcat "\n\n===== 统计结果 ====="))
      (princ (strcat "\n有效填充图案: " (itoa (sslength valid-ss)) " 个"))
      (princ (strcat "\n总面积: " (rtos (/ total_area conversion-factor) 2 2) " 平方米"))

      (SET-CLIP-STRING (rtos (/ total_area conversion-factor) 2 2)) ;;面积写入剪贴板
      
      (if (> failed-count 0)
        (progn
          (princ (strcat "\n无效填充图案(无法计算面积): " (itoa failed-count) " 个"))
          (alert (strcat "注意:有 " (itoa failed-count) " 个填充图案无法计算面积"))
        )
      )
      
      ; 只选中可以计算面积的填充对象
      (if (> (sslength valid-ss) 0)
        (sssetfirst nil valid-ss)
        (princ "\n没有找到可以计算面积的填充图案。")
      )
    )
    (princ "\n未选择任何填充图案。")
  )
  (princ)
)

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

最佳答案

查看完整内容

倒数第二行加上 (vl-cmdf "regen") 试下
"觉得好,就打赏"
还没有人打赏,支持一下
回复

使用道具 举报

发表于 2025-6-18 11:00:58 | 显示全部楼层
倒数第二行加上  (vl-cmdf "regen")  试下
回复

使用道具 举报

发表于 2025-6-18 14:04:11 | 显示全部楼层
我在浩辰上运行正常,不知道你在其他平台上运行是什么状态。可以录个视频给大家看看。
回复

使用道具 举报

 楼主| 发表于 2025-6-19 16:05:41 | 显示全部楼层
guosheyang 发表于 2025-6-18 11:00
倒数第二行加上  (vl-cmdf "regen")  试下

谢谢大佬
一下就解决了
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-12 09:27 , Processed in 0.181394 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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