arkun 发表于 2024-10-19 00:19:57

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

下面的代码运行时提示如下错误:
命令: 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)
)

xyp1964 发表于 2024-10-19 17:44:48

缺函数:huazuixiaojuxing haohaoxuanjuxing lm:getdynpropvalue lm:setdynpropvalue 函数
页: [1]
查看完整版本: 请大佬来帮忙看看代码的修改有没有问题