kanxiaokan 发表于 2019-8-4 17:14:25

程序出错,大佬帮看一下。

(defun c:nn (/ i enbox #cmd #os y_insert_n e len s lst elst s+ ss+ n i_e s_len insert_p insert_p_lst)
(vl-load-com)
;获取对角点
(defun enbox (ename / ll ur)
        (vla-getboundingbox (vlax-ename->vla-object ename) 'll 'ur)
        (mapcar 'vlax-safearray->list (list ll ur))
)
;选择集合并
(defun ss+(ss1 ss2 / a b sl1 sl2 ename)
      (if (= (type ss1) 'PICKSET)(setq a(sslength ss1)))
      (if (= (type ss2) 'PICKSET)(setq b(sslength ss2)))
(cond ((and ss1 ss2)
       (progn
         (setq sl2(sslength ss2))
         (repeat sl2
          (setq ename(ssname ss2 (setq sl2(1- sl2))))
          (setq ss1(ssadd ename ss1)))))
      ((and (not ss1)(not ss2))ss1)
      ((not ss1)ss2)
      ((not ss2)ss1)
      ))
;*******
(vl-cmdf "_.undo" "be")
(setq #cmd (getvar "cmdecho"))
(setvar "cmdecho" 0)
(setq #os (getvar "osmode"))
(setvar "osmode" 0)
(vl-cmdf "-layer" "on" "*" "")
(setq y_insert_n (vlax-get (vlax-ename->vla-object (car (entsel "\n请选择更换目标符号(块):"))) 'Name))
(setq e (car (entsel "\n请选择矩形:")))
(setq len (vlax-get (vlax-ename->vla-object e) 'Length));请选择矩形:; 错误: ActiveX 服务器返回错误: 未知名称: "LENGTH"
(setq s (ssget "A" (list (assoc 8 (entget e)))))
(setq lst nil elst nil s+ nil i 0)
(repeat (sslength s);选择相同的矩形
    (setq i_e (ssname s i))
    (setq s_len (vlax-get (vlax-ename->vla-object i_e) 'Length));请选择矩形:; 错误: ActiveX 服务器返回错误: 未知名称: "LENGTH"
    (if (= len s_len)(setq lst (cons i_e lst)))
    (setq i (1+ i))
    )
(foreach x lst      ;选择矩形内的块
    (setq elst (enbox x))
    (setq s (ssget "W" (car lst)(cadr lst) '((0 . "INSERT")(8 . "CHAR"))))
    (setq s+ (ss+ s s+))
    )
(repeat (setq n (sslength s+))
    (setq insert_p (vlax-get (vlax-ename->vla-object (ssname s+ (setq n (1- n)))) 'Name))
    (setq insert_p_lst (cons insert_p insert_p_lst))
    (entdel (ssname s+ n))
    )
(foreach x insert_p_lst;替换块
    (vl-cmdf "insert" y_insert_n x "1" "" "")
    )
(setvar "cmdecho" #cmd)
(setvar "osmode" #os)
(vl-cmdf "_.undo" "e")
(princ)
)

程序出现错误,我脑袋糊了,检查不出来
(vl-load-com)已写在开头
提示:请选择矩形:; 错误: ActiveX 服务器返回错误: 未知名称: "LENGTH"
应该是这行
(setq len (vlax-get (vlax-ename->vla-object e) 'Length))

(setq s_len (vlax-get (vlax-ename->vla-object i_e) 'Length))



gzhuser 发表于 2019-8-4 22:04:32

你改成vl-get-Length试下?
页: [1]
查看完整版本: 程序出错,大佬帮看一下。