乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 99|回复: 6

[编程交流] 在Autoc中选择特定块

[复制链接]

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 10:09:48 | 显示全部楼层 |阅读模式
大家好,
 
我和一位同事一直在尝试增强打印autocad块的批处理打印程序。目前,我们有一个lisp例程,要求用户手动选择一个块(边框),并从中获取其位置和比例设置,以设置图形的其他变量,包括基于边框插入点位置的限制。我们使用批处理图中的限制来知道要打印的窗口,这样即使在某个边界之外有几何体,也只会打印其中的几何体。
 
我们试图做的是让batch plot程序(用VB6编写)在打开图形进行打印时拾取边框。因此,起草者不必记住手动读取边界。
 
我们的问题是:我们可以发现图形中存在边界块。我们已经找到了允许我们删除该块、分解它等的代码,但没有任何代码可以简单地让我们通过编程“选择”它。
 
如果可能的话,有人举过这样的例子吗。或者你还有其他想法吗?
 
如果有帮助,下面是我们用来手动获取边界信息的lisp:
  1. (Defun Setx (/ os a b c d e l)
  2.    (Setvar "Cmdecho" 0)
  3.    (Setq os (Getvar "Osmode"))
  4.    (Setvar "Osmode" 0)
  5.    (Setq a (Entsel "\nSelect Block:"))
  6.    (While (Not a)
  7.     (Prompt "\nYou Missed... Try Again")
  8.     (Setq a (Entsel "\n  Select Block:"))
  9.    )
  10.    (Setq b (Entget (Car a)))
  11.    (Setq c (Cdr (Assoc 42 b)))
  12.    (Setq d (Cdr (Assoc 10 b)))
  13.    (Setq e (Mapcar '+ (Mapcar '(Lambda (x) (* x c)) '(32 20)) d))
  14.    (Setvar "Dimscale" c)
  15.    (Setvar "Textsize" (* 0.125 c))
  16.    (Setvar "Ltscale" (/ c 4))
  17.    (Command ".Setvar" "Limmin" d)
  18.    (Command ".Setvar" "Limmax" e)
  19.    (Setvar "Cmdecho" 1)
  20.    (Command ".Line" d e "")
  21.    (Command "Delay" "5")
  22.    (Setq l (Ssget "X" (List (Cons 0 "Line") (Cons 10 d))))
  23.    (Command ".Erase" l "")
  24.    (Setvar "Osmode" os)
  25.    (Prompt "\n ")
  26.    (Print (Getvar "Dimscale"))
  27.    (Prompt " is now the Current Dimscale.")
  28.    (Prompt "\nLimits were Set as Shown.")
  29.    (Princ)
  30. )(PRINC)

 
 
感谢您的反馈!
MBS公司
回复

使用道具 举报

4

主题

327

帖子

324

银币

初来乍到

Rank: 1

铜币
19
发表于 2022-7-6 10:26:51 | 显示全部楼层
使用块和块名称过滤器尝试ssget
回复

使用道具 举报

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

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

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:42:53 | 显示全部楼层
对于单个选择,这可能更适合您:允许您选择多个对象(以及任何对象,而不仅仅是块):
 
当然,它只是画了一条线来演示极限,你可以使用vla SetWindowtoPlot,然后使用vla PlottoDevice,如果你想用LISP绘图的话。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:52:35 | 显示全部楼层
顺便说一句,回答您最初的问题:
 
  1. (ssget "_X" '((0 . "INSERT") (2 . "[color=red]YourBlockNameHere[/color]")))
回复

使用道具 举报

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 11:07:13 | 显示全部楼层
令人惊叹的谢谢你的帮助。我会告诉你结果。
 
MBS公司
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 11:09:58 | 显示全部楼层
下面是vba中的示例代码,用于查找名为Dwg1drgtxt的块,这是我们在多个布局中的标题块
 
  1. 3
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-6 20:41 , Processed in 1.113415 second(s), 66 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表