harilalmn 发表于 2022-7-6 08:57:38

设置所有块t的Z位置

代码中有什么错误?我试图将图形中所有块的Z位置值设置为零;
 
(defun c:B0()
(setq myFilter(list (cons 0 "INSERT")))
(setq ss (ssget "_X" myFilter))
(setq l (sslength ss))
(setq i 0)
(Repeat l
   (setq blk (ssname ss i))
   (setq DXF (entget (car blk)))
   (setq IP (cadr (assoc 0 dxf)))
   (setq NewIP (subst "0" (caddrIP) IP))
   (setq NewDXF (subst NewIP IP DXF))
   (entmod NewDXF)
)
)

pBe 发表于 2022-7-6 09:03:32


(defun c:B0()
    (setq myFilter (list (cons 0 "INSERT")))
    (setq ss (ssget "_X" myFilter))
    (setq l (sslength ss))
    (setq i 0)
    (Repeat l
          (setq blk (ssname ss i))
          (setq DXF (entget blk))
          (setq IP (cdr (assoc 10 dxf)))
          (setq NewIP (subst 0.00 (caddr IP) IP))
          (setq NewDXF (subst (cons 10 NewIP) (assoc 10 dxf) DXF))
          (entmod NewDXF)
(setq i (1+ i))
          )
    )

 
变量i保持在0。。。。“0”作为字符串不是实数。。。
除此之外。。。。

Tharwat 发表于 2022-7-6 09:04:41

试试这个。。。

(defun c:Test (/ ss i sset lst)
(vl-load-com)
(if (setq ss (ssget "_x" '((0 . "INSERT") (410 . "model"))))
   (repeat (setq i (sslength ss))
   (setq sset (ssname ss (setq i (1- i))))
   (setq lst (cons (vlax-ename->vla-object sset) lst))
   )
   (alert " << No Blocks existed in this drawing >>")
)
(foreach ml '(1e99 -1e99)
   (mapcar (function (lambda (x)
                     (vla-move x
                                 (vlax-3d-point (list 0 0 0))
                                 (vlax-3d-point (list 0 0 ml))
                     )
                     )
         )
         lst
   )
)
(princ)
)
Tharwat

harilalmn 发表于 2022-7-6 09:08:18

谢谢你的评论。。我现在明白了,我应该在重复循环中添加一个(setq I(1+I))。。。!!
 
谢谢你的密码Tharwat。。。!!与我的代码相比,这是一个非常专业的解决方案。。。!!
 
快乐快乐。。。。

pBe 发表于 2022-7-6 09:13:12

....
(1e99 -1e99).....

 
有趣的

Lee Mac 发表于 2022-7-6 09:15:52

我会这样做:
 
(defun c:B0 ( / e i p s )
   (if (setq s (ssget "_X" '((0 . "INSERT") (-4 . "*,*,<>") (10 0.0 0.0 0.0))))
       (repeat (setq i (sslength s))
         (setq e (entget (ssname s (setq i (1- i))))
               p (assoc 10 e)
         )
         (entmod (subst (list 10 (cadr p) (caddr p) 0.0) p e))
       )
   )
   (princ)
)
 
我认为没有必要把所有的东西都移到1e99标高,然后再移回来,只需将标高设置为零

David Bethel 发表于 2022-7-6 09:19:02

对点值使用(subst)非常危险
 
(setq ip’(10)
(subst 0(caddr ip)ip)
 
返回->'(0)
 
 

(defun c:iz0 (/ ss en ed in)

(and (setq ss (ssget "X" '((0 . "INSERT"))))
      (while (setq en (ssname ss 0))
             (setq ed (entget en)
                   in (cdr (assoc 10 ed)))
             (entmod (subst (list 10 (car in) (cadr in) 0.0)
                            (assoc 10 ed) ed))
             (entupd en)
             (ssdel en ss)))

(prin1))

 
我认为更多的过滤是明智的。也许至少应该添加组67和210。
 
此外,这不会将属性移动到高程0。
 
-大卫

pBe 发表于 2022-7-6 09:21:52

或Ctrl+1
快速选择
位置Z

Tharwat 发表于 2022-7-6 09:24:10

 
谢谢pBe。
 
 
为什么不呢?
 
在客场或其他比赛中,这是否有害或不正确?
 
塔瓦特

Tharwat 发表于 2022-7-6 09:28:08

 
不客气harilalmn。
 
享受吧,伙计
 
塔瓦特
页: [1] 2
查看完整版本: 设置所有块t的Z位置