jjatho 发表于 2022-7-5 16:58:57

将图形中的所有块设置为

在此之前,我已经编写了使用ssget和chprop更改具有大量对象的图形的例程,但我不确定是否可以使用相同的样式将图形中的所有块设置为无法转换。
 
有没有办法用AutoLISP编写一个简单的脚本,将图形中的所有块的“allow exploding”设置为no?任何信息引导我在正确的方向将不胜感激,谢谢!

Grrr 发表于 2022-7-5 17:15:20


(defun C:test ( / )
(vlax-for b (vla-get-Blocks (vla-get-ActiveDocument (vlax-get-acad-object)))
        (and
                (eq (vla-get-IsLayout b) :vlax-false)
                (vl-catch-all-apply 'vla-put-Explodable (list b :vlax-false))
        )
)
(princ)
) (vl-load-com) (princ)

Lee Mac 发表于 2022-7-5 17:21:49

我还将排除外部参照,即:
(defun c:unexplodeall ( )
   (vlax-for blk (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
       (if (and (= :vlax-false (vla-get-islayout blk))
                (= :vlax-false (vla-get-isxref   blk))
         )
         (vla-put-explodable blk :vlax-false)
       )
   )
   (princ)
)
(vl-load-com) (princ)
 
@Grrr,我不认为vl catch all在这个操作中适用吗?

Grrr 发表于 2022-7-5 17:27:19

我把它包括在“以防万一”中,没有具体原因。
 
与此线程相关的一些有趣问题:
-我不明白为什么“布局块”也有“可爆炸”的属性,怎么可能爆炸模型/图纸空间?!
-另外,我很好奇如何用vanilla lisp实现它,所以我查看了“BLOCK”(dxf)参考,希望在GC 70下找到可分解的标志,但没有关于它的文档。

Lee Mac 发表于 2022-7-5 17:35:12

 
好的,但这是一个滑坡-继续这种错误捕获和逻辑的形式,您还可以将整个程序封装在一个vl-catch-all-apply表达式中:代码永远不会明显返回错误,当它出错时,任何事情都不会得到适当的处理。
 
 
因为它们与块和外部参照来自同一个类,因此都具有相同的特性。
 
 
例子:
(defun getexplodable ( blk / ent )
   (if (setq ent (tblobjname "block" blk))
       (cdr (assoc 280 (entget (cdr (assoc 330 (entget ent))))))
   )
)

Grrr 发表于 2022-7-5 17:44:21

我以前读过这篇文章,但我认为这不应该成为这个特殊案例(常规)的问题。
顺便说一句,我认为在某些情况下,手动提示可能有用:

(if (vl-catch-all-error-p (setq err (vl-catch-all-apply ...)))
(setq errLst (cons err errLst))
)
(and errLst
(print "The following errors occured: ")
(foreach x errLst (print (vl-catch-all-error-message x)))
)
 
 
非常感谢!
我刚刚读过GC 330,它写着它的“软指针句柄”-这是该实体的某种类型的字典吗?

Lee Mac 发表于 2022-7-5 17:56:03

 
DXF组330的值通常是指向父实体的指针-在这种情况下,是块实体的BLOCK\u记录父实体。

Grrr 发表于 2022-7-5 18:00:32

 
谢谢李!
页: [1]
查看完整版本: 将图形中的所有块设置为