明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 512|回复: 1

[源码] 请大佬来帮忙看看代码的修改有没有问题

[复制链接]
发表于 2024-10-19 00:19:57 | 显示全部楼层 |阅读模式
5明经币
下面的代码运行时提示如下错误:
命令: TC请输入图形中已有的动态块名称: lkm未找到指定的动态块名称: lkm请检查后重试。
要求:下面的代码运行tc后,提示用户输入图形中已有的动态块名称(动态块测试文件再附件),用户输入动态块名称空格确认后,自动选中已经输入名称的动态块(动态块已经在当前图纸中),然后再提示执行插入的操作,后面的功能和逻辑都按照代码不变。请大佬看看代码有哪些问题,应该如何修改,最好能将修改后的代码给我,拜谢!

(defun c:tc()  
  (defun dongtai (enb enb2 fz dxert / a code data ob elist gr j ja jj loop name1 name8 pt exitFlag)  
    (setq exitFlag nil)  
    (princ "\n选择图形放置的区域<空格退出>: ")  
    (if enb  
      (progn  
        (setq elist (entget enb))  
        (setq loop t)  
        (while loop  
          (setq gr (grread t 15 0))  
          (setq code (car gr))  
          (setq data (cadr gr))  
          (cond  
            ((= code 5)  
             (entmod (subst (cons 10 data) (assoc 10 elist) elist))  
            )  
            ((= code 3)  
             (setq name8 (huazuixiaojuxing data))  
             (setq name1 (haohaoxuanjuxing data))  
             (setq jj 960 ja 90 pt (xyp-9pt name1 1))  
             (entmake (list '(0 . "INSERT") (cons 2 enb2) (cons 10 pt)))  
             (setq ob (vlax-ename->vla-object (entlast))  
                   j  (- (cadr (xyp-9pt name1 7)) (cadr pt))  
                   a  (- (car (xyp-9pt name1 3)) (car pt))  
             )  
             (lm:setdynpropvalue ob "E1" j)  
             (lm:setdynpropvalue ob "E2" a)  
             (if (> j 1750)  
               (lm:setdynpropvalue ob "E3" jj)  
               (lm:setdynpropvalue ob "E3" ja)  
             )  
             (lm:setdynpropvalue ob "翻转状态1" fz)  
             (entdel name8)  
             (setq e (entlast))  
             (command "Draworder" e "" "b")  
            )  
            ((member code '(11 25))  
             (if fz  
               (if (= fz 0)  
                 (progn  
                   (setq fz 1)  
                   (lm:setdynpropvalue dxert "翻转状态1" fz)  
                 )  
                 (progn  
                   (setq fz 0)  
                   (lm:setdynpropvalue dxert "翻转状态1" fz)  
                 )  
               )  
             )  
             (dongtai enb enb2 fz dxert) ; 注意:这里递归调用可能导致性能问题  
             (setq exitFlag t)  
             (setq loop nil)  
            )  
            ((= code 2)  
             (setq loop nil)  
             (entdel enb)  
            )  
          )  
          (if exitFlag (setq loop nil))  
        )  
      )  
    )  
  )  

  (princ "\n请输入图形中已有的动态块名称: ")  
  (setq blockName (getstring))  
  (if (and blockName (not (equal blockName "")))
    (progn
      (setq filterList (list (cons 0 "INSERT") (cons 2 blockName))) ; 构造筛选条件
      (setq selSet (ssget "_X" filterList)) ; 使用 _X 模式在当前空间搜索

      (if (null selSet)
        (progn
          (setq selSet (ssget "X" filterList)) ; 使用 X 模式在所有空间搜索
          (if (null selSet)
            (progn
              (princ (strcat "\n未找到指定的动态块名称: " blockName))
              (princ "\n请检查后重试。")
            )
            (progn
              (setq en (vlax-ename->vla-object (ssname selSet 0))) ; 从选择集中获取第一个实体
              (setq name2 (vla-get-name en)) ; 获取动态块名称
              (princ (strcat "\n找到动态块: " name2)) ; 打印找到的动态块名称
              (entmakex (list '(0 . "INSERT") (cons 2 name2) (cons 10 '(0 0)))) ; 创建新的插入对象
              (setq enb (entlast)
                    dxert (vlax-ename->vla-object enb)
                    fz (lm:getdynpropvalue dxert "翻转状态1")
              )
              (dongtai enb name2 fz dxert)
              (princ "\n插入动态块执行完成")
            )
          )
        )
        (progn
          (setq en (vlax-ename->vla-object (ssname selSet 0))) ; 从选择集中获取第一个实体
          (setq name2 (vla-get-name en)) ; 获取动态块名称
          (princ (strcat "\n找到动态块: " name2)) ; 打印找到的动态块名称
          (entmakex (list '(0 . "INSERT") (cons 2 name2) (cons 10 '(0 0)))) ; 创建新的插入对象
          (setq enb (entlast)
                dxert (vlax-ename->vla-object enb)
                fz (lm:getdynpropvalue dxert "翻转状态1")
          )
          (dongtai enb name2 fz dxert)
          (princ "\n插入动态块执行完成")
        )
      )
    )
    (princ "\n未输入有效的动态块名称,请重新运行命令并输入正确的名称。")
  )
  (princ)
)

附件: 您需要 登录 才可以下载或查看,没有账号?注册
发表于 2024-10-19 17:44:48 | 显示全部楼层
缺函数:huazuixiaojuxing haohaoxuanjuxing lm:getdynpropvalue lm:setdynpropvalue 函数
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-2-22 02:26 , Processed in 0.193809 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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