MBS1788 发表于 2022-7-6 10:09:48

在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公司

JohnM 发表于 2022-7-6 10:26:51

使用块和块名称过滤器尝试ssget

MBS1788 发表于 2022-7-6 10:32:44

不确定这是否是一种干净的方法,但我们发现,当我们让vb启动lisp例程时,我们可以在读取边界中的属性并选择边界后,告诉它“选择”和“最后一个”。现在开始测试清除其他几个小错误,但如果其他人有更干净的方法,我们仍将不胜感激。或者如果你有任何其他意见,我也想听听。
 
我们和ssget打过交道,但不知道如何让它为我们工作。
 
谢谢
MBS公司

Lee Mac 发表于 2022-7-6 10:42:53

对于单个选择,这可能更适合您:允许您选择多个对象(以及任何对象,而不仅仅是块):
 
当然,它只是画了一条线来演示极限,你可以使用vla SetWindowtoPlot,然后使用vla PlottoDevice,如果你想用LISP绘图的话。

Lee Mac 发表于 2022-7-6 10:52:35

顺便说一句,回答您最初的问题:
 
(ssget "_X" '((0 . "INSERT") (2 . "YourBlockNameHere")))

MBS1788 发表于 2022-7-6 11:07:13

令人惊叹的谢谢你的帮助。我会告诉你结果。
 
MBS公司

BIGAL 发表于 2022-7-6 11:09:58

下面是vba中的示例代码,用于查找名为Dwg1drgtxt的块,这是我们在多个布局中的标题块
 
3
页: [1]
查看完整版本: 在Autoc中选择特定块