f.fhelix 发表于 2022-9-7 23:14:22

我正在尝试修改下面的代码

我正在尝试修改下面的代码以获取3D模型Plant3D中的总管道长度,
代码查找设置为新状态的所有管道,但我收到一条错误消息:“没有功能定义:状态“,
有人可以帮帮我吗?谢谢!
(defun c:TL ( / selnew selAll status Length)
(vl-load-com)
(setq selnew(ssadd))
(setq Length 0)

   (if (setq selAll (ssget "x" '((0 . "ACPP*"))))
      (progn
            (setq i 0
                  n (sslength selAll)
            )
            (while (< i n)
                                (setq ent (ssname selAll i))
                                ;convert to vl object
                                (setq vlaObj (vlax-ename->vla-object ent))
                                (if (vlax-property-available-p vlaObj 'CutLength)
                                (progn
                                        (setq status (vlax-get-property vlaObj 'CutLength))
                                        (ssadd ent selnew)
                                )
                                )
                                (setq Length (status + Length))
                                (setq i (1+ i))
            );while
      )
    )
       
(sssetfirst nil selnew)
alert (Length)
(princ)
)

mhupp 发表于 2022-9-8 01:13:12

您的警报缺少 ( infront.also (length) 使其查找该名称的函数并导致错误“没有函数定义:”如果您尝试这样做(警报长度),它仍然会出错,因为该变量是一个数字,您需要使用 rtos 将其转换为字符串。(defun c:TL ( / selnew selAll len)
(vl-load-com)
(setq selnew (ssadd))
(setq len 0)
(if (setq selAll (ssget "_X" '((0 . "ACPP*"))))
    (foreach ent (mapcar 'cadr (ssnamex selAll))
      (setq vlaObj (vlax-ename->vla-object ent))
      (if (vlax-property-available-p vlaObj 'CutLength)
      (progn
          (setq len (+ (vlax-get-property vlaObj 'CutLength) len))
          (ssadd ent selnew)
      )
      )

    )
)
(sssetfirst nil selnew)
(if (> len 0)
    (alert (strcat "Total Length: " (rtos len 2 3)))
)
(princ)
)
页: [1]
查看完整版本: 我正在尝试修改下面的代码