在Autoc中选择特定块
大家好,我和一位同事一直在尝试增强打印autocad块的批处理打印程序。目前,我们有一个lisp例程,要求用户手动选择一个块(边框),并从中获取其位置和比例设置,以设置图形的其他变量,包括基于边框插入点位置的限制。我们使用批处理图中的限制来知道要打印的窗口,这样即使在某个边界之外有几何体,也只会打印其中的几何体。
我们试图做的是让batch plot程序(用VB6编写)在打开图形进行打印时拾取边框。因此,起草者不必记住手动读取边界。
我们的问题是:我们可以发现图形中存在边界块。我们已经找到了允许我们删除该块、分解它等的代码,但没有任何代码可以简单地让我们通过编程“选择”它。
如果可能的话,有人举过这样的例子吗。或者你还有其他想法吗?
如果有帮助,下面是我们用来手动获取边界信息的lisp:
(Defun Setx (/ os a b c d e l)
(Setvar "Cmdecho" 0)
(Setq os (Getvar "Osmode"))
(Setvar "Osmode" 0)
(Setq a (Entsel "\nSelect Block:"))
(While (Not a)
(Prompt "\nYou Missed... Try Again")
(Setq a (Entsel "\nSelect Block:"))
)
(Setq b (Entget (Car a)))
(Setq c (Cdr (Assoc 42 b)))
(Setq d (Cdr (Assoc 10 b)))
(Setq e (Mapcar '+ (Mapcar '(Lambda (x) (* x c)) '(32 20)) d))
(Setvar "Dimscale" c)
(Setvar "Textsize" (* 0.125 c))
(Setvar "Ltscale" (/ c 4))
(Command ".Setvar" "Limmin" d)
(Command ".Setvar" "Limmax" e)
(Setvar "Cmdecho" 1)
(Command ".Line" d e "")
(Command "Delay" "5")
(Setq l (Ssget "X" (List (Cons 0 "Line") (Cons 10 d))))
(Command ".Erase" l "")
(Setvar "Osmode" os)
(Prompt "\n ")
(Print (Getvar "Dimscale"))
(Prompt " is now the Current Dimscale.")
(Prompt "\nLimits were Set as Shown.")
(Princ)
)(PRINC)
感谢您的反馈!
MBS公司 使用块和块名称过滤器尝试ssget 不确定这是否是一种干净的方法,但我们发现,当我们让vb启动lisp例程时,我们可以在读取边界中的属性并选择边界后,告诉它“选择”和“最后一个”。现在开始测试清除其他几个小错误,但如果其他人有更干净的方法,我们仍将不胜感激。或者如果你有任何其他意见,我也想听听。
我们和ssget打过交道,但不知道如何让它为我们工作。
谢谢
MBS公司 对于单个选择,这可能更适合您:允许您选择多个对象(以及任何对象,而不仅仅是块):
当然,它只是画了一条线来演示极限,你可以使用vla SetWindowtoPlot,然后使用vla PlottoDevice,如果你想用LISP绘图的话。 顺便说一句,回答您最初的问题:
(ssget "_X" '((0 . "INSERT") (2 . "YourBlockNameHere"))) 令人惊叹的谢谢你的帮助。我会告诉你结果。
MBS公司 下面是vba中的示例代码,用于查找名为Dwg1drgtxt的块,这是我们在多个布局中的标题块
3
页:
[1]