如何以编程方式显示/h
尊敬的各位我试图编写一个lisp函数,允许我使用其名称作为选择器来显示/隐藏块。
我在网上找到了一些例子,但所有的例子都需要用户手动选择对象,我想使用simpy块的名称来选择它,而不是在窗口中选择什么。
我尝试了以下代码:
(defun c:test_show ()
(setq selezione (ssget "X" '((2 . "test1"))))
(redraw selezione 1)
(princ))
(defun c:test_hide ()
(setq selezione (ssget "X" '((2 . "test1"))))
(redraw selezione 2)
(princ))
但是,当我在F2控制台中键入“test\u show”时,我得到:
Command: test_show
; error: argument type error: lentityp <Selection set: 80>
我已经看到redraw函数需要一个ENAME参数,所以我的问题可能是如何获得具有其名称的块的ENAME,有人可以帮我吗?
提前感谢 尝试:
(tblobjname "block" "bname")
键入而不是“bname”-您的“test1”块。。。 您需要单步通过选取集。该过程有许多变体:
(and (setq ss (ssget "X" '((2 . "TEST1")))
(while (setq en (ssname ss 0))
(redraw en 2)
(ssdel en ss)))
HTH-David 以下是我可能如何完成任务:
两个命令(“test\u hide”和“test\u show”)都调用定义的函数“RedrawSelectionSet”,这需要一个用于redraw函数的SelectionSet参数(ss)和整数参数(mode)。
然后,“重画选择集”将逐步通过提供的选择集并重画每个实体。
我还将SelectionSet过滤器限制为活动空间(模型/布局/通过VPort)中的块(插入)。 为了好玩。。。
(defun c:HIDE_TEST1 ( / ss i e)
(if (and (setq ss (ssget "_X" '((0 . "INSERT") (2 . "TEST1"))))
(setq i -1))
(while (setq e (ssname ss (setq i (1+ i)))) (redraw e 2))
(prompt "\n** Block not found ** "))
(princ))
(defun c:SHOW_TEST1 ( / ss i e)
(if (and (setq ss (ssget "_X" '((0 . "INSERT") (2 . "TEST1"))))
(setq i -1))
(while (setq e (ssname ss (setq i (1+ i)))) (redraw e 1))
(prompt "\n** Block not found ** "))
(princ))
谢谢! @李-作为一名摄政者,“迫使[隐藏的]实体在其正常庄园中重新显示”是否需要过滤器的410组件?
诚然,只修改驻留在活动选项卡上的实体更有效;我只是想知道是否还有另一个方面我没有意识到。
干杯
我之所以包括它是因为你说的原因——我认为没有理由处理(可能是100个)不在当前布局/空间中的实体。
别担心,伙计;我感谢您的澄清。
由于我们的工作流程,我没有考虑到这种情况——我们只在模型空间中工作——纸张空间被降级到标题栏、视口等。。
再一次,非常简洁高效的代码,我的朋友。
x2
http://forums.augi.com/showpost.php?p=1150829&postcount=13
页:
[1]
2