liuhaixin88 发表于 2022-7-5 23:33:46

插入动态块,错误:ba

大家好,我需要帮助。
使用LISP插入动态块,但显示:错误:错误参数类型:lentyp nil。我不知道是怎么回事。
 
代码如下:
;Modify the dynamic property values
(defun DynamicProps (ename propname value / obj prpL cla cll prp)
(vl-load-com)
(setq obj (if (= (type ename) 'VLA-OBJECT) ename (vlax-ename->vla-object ename)))
(if vla-getdynamicblockproperties (setq prpL (vlax-invoke obj 'getdynamicblockproperties)))
(setq return
   (if (setq prp (vl-remove-if-not (function (lambda(x)(= (vlax-get-property x 'PropertyName) propname))) prpL))
   (mapcar (function (lambda(v)
       (if (and (/= value nil)(vlax-property-available-p v 'Value)(/= (type value)'LIST))
         (progn (vlax-put-property v 'Value value)(vla-update obj))
       )
       (if (and (vlax-property-available-p v 'AllowedValues) (vlax-get v 'AllowedValues))
         (list (vlax-get v 'Value)(vlax-get v 'AllowedValues))
(vlax-get v 'Value)
       )
   )) prp)
   (mapcar (function (lambda(v)(list (vla-get-propertyName v)(vlax-get v 'Value) v))) prpL)
   )
)
return
)
;===============================================================
;Get polyline vertex
(defun verpoytexs (ename / plist pp n)
(setq obj (vlax-ename->vla-object ename))
(setq plist (vlax-safearray->list
(vlax-variant-value
    (vla-get-coordinates obj))))
(setq n 0)
(repeat (/ (length plist) 2)
    (setq pp (append pp (list (list (nth n plist)(nth (1+ n) plist)))))
    (setq n (+ n 2))
)
pp
)
;===============================================================
(defun c:tt ( / ss pt_copy pl_pt_lst off_real)
(princ"\n Select the block to be processed:" )
(setq ss (ssget ":S" '((0 . "insert"))))
(setq pt_copy (cdr (assoc 10 (entget(ssname ss 0)))))
(or (= (vla-get-isdynamicblock (vlax-ename->vla-object e)):vlax-true) (exit))
(princ"\n Select polyline to be processed:" )
(setq pl_pt_lst (verpoytexs(ssname (ssget ":S" '((0 . "LWPOLYLINE"))) 0)))
(setq off_real (getreal "\n Enter the interval width:"))
(mapcar
       '(lambda (p1 p2)
          (vl-cmdf ".copy" ss "" "_none" pt_copy "_none" p1)
          (vl-cmdf ".rotate" (entlast) "" "_none" p1 "R" 0 p2)
          (DynamicProps (entlast) "L" (- (distance p1 p2) off_real))
      )
       pl_pt_lst
       (cdr pl_pt_lst)
   )
(princ)
)
(vl-load-com)
插入动态块。图纸

pBe 发表于 2022-7-5 23:49:32

(defun c:tt ( / ss pt_copy pl_pt_lst off_real)
(princ"\n Select the block to be processed:" )
(if (and
(setq ss (ssget ":S" '((0 . "insert"))))
(or (= (vla-get-isdynamicblock (vlax-ename->vla-object (setq e (ssname ss 0)))):vlax-true) (exit))
(princ "\n Select polyline to be processed:")
(setq pl (ssget ":S" '((0 . "LWPOLYLINE"))))
(setq off_real (getreal "\n Enter the interval width:"))
   )
   (progn
(setq pt_copy (cdr (assoc 10 (entgete))))
(setq pl_pt_lst (verpoytexs(ssname pl 0)))
(mapcar
      '(lambda (p1 p2)
         (vl-cmdf ".copy" ss "" "_none" pt_copy "_none" p1)
         (vl-cmdf ".rotate" (entlast) "" "_none" p1 "R" 0 p2)
         (DynamicProps (entlast) "L" (- (distance p1 p2) off_real))
         )
      pl_pt_lst
      (cdr pl_pt_lst)
      )
   ); progn
   ); if
(princ)
)

liuhaixin88 发表于 2022-7-6 00:01:18

 
谢谢你的帮助。但问题仍然存在。选择块时,中断并显示“错误:错误参数类型:lentyp nil”

Lee Mac 发表于 2022-7-6 00:13:33

更改:
(vlax-ename->vla-object e)
收件人:
(vlax-ename->vla-object (ssname ss 0))

liuhaixin88 发表于 2022-7-6 00:22:53

 
李,现在没事了!非常感谢。

pBe 发表于 2022-7-6 00:31:40

 
把一切都搞混了。感谢您捕获错误LM

Lee Mac 发表于 2022-7-6 00:41:13

 
别担心,伙计
页: [1]
查看完整版本: 插入动态块,错误:ba