找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 810|回复: 3

[寻找]:如何写unamed block

[复制链接]
发表于 2002-5-15 03:13:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
请教:
   如何在开发中(AUTOLISP)写UNAMED BLOCK ?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2002-5-15 12:51:35 | 显示全部楼层

Re: [寻找]:如何写unamed block

最初由 zengyinlong 发布
[B]请教:
   如何在开发中(AUTOLISP)写UNAMED BLOCK ? [/B]


无名块

图形中的块定义 (BLOCK) 表可包括无名块。创建无名块通常是为了支持填充图案和联结尺寸标注。函数 entmake 可创建除 *Dnnn(尺寸)和 *Xnnn(填充图案)外的无名块。在每次绘制过程开始时,会从块表中清理未被引用的无名块,但不清理已经被引用的无名块(已经被插入的块)。可以调用 entmake 函数来创建无名块的块引用(插入对象)(不能在 INSERT 命令中传入无名块)。同样地,可调用 entmake 来重新定义块。可以调用 entmod 来修改块中的图元(但不是块对象本身)。

AutoLISP 或 ARX创建的无名块的名称(组码 2)的形式是 *Unnn,此处,nnn 是 AutoCAD 生成的号。同样地,无名块的块类型标记(组码 70
)的低位被设为 1。当 entmake 创建的块,其名称以“*”打头,并设置了无名位,则 AutoCAD 将把该块识别为无名块,并给它指派一个名称。entmake 将忽略名称字符串中“*”后的任何字符。

注意  无名块的名称是变化的。尽管一个被引用的无名块会被永久保存,但在绘制过程中,它名称的数值部分仍可能发生变化。

一个图形中的块定义表可以包含多个无名块。创建无名块通常是为了支持填充图案和关联尺寸标注。应用程序也可以调用 entmake 函数创建无名块来达到自己的目的,通常是包含用户不能直接访问的图元。

调用 entmake 函数时,尺寸图元的组码 2(块名部分)是可选的。如果在图元定义数据表中省略了块名,AutoCAD 将创建一个新块;否则它用提供的块名创建尺寸。

无名块的块名(组码 2)是 *Unnn,其中 nnn 是 AutoCAD 生成的一个数。另外,无名块的块类型标志(组码 70)的低位被设为 1。当 entmake 函数创建一个块名以 * 开头并且其无名标志位(组码 70 的低位)为 1 的块时,entmake 函数视之为无名块并给它分配一个块名。块名字符串中 * 后的字符将被忽略。块被创建后, entmake 函数返回块名。如果是多次调用  entmake  函数来创建块,将在成功执行下列函数调用后返回块名。

(entmake "endblk")

无论何时打开图形,其中所有未被引用的无名块都将从块定义表中清除出去,而被引用(插入)的无名块则不会被清除。可以用 entmake 函数创建对无名块的引用(插入),但不能将无名块传入INSERT 命令中,还可以用 entmake 函数重新定义块。可以用 entmod 函数修改块中的图元(但不是块本身)。

注意  尽管被引用的无名块会被永久保存,但其块名的数字部分在不同的编辑会话期间可能不一样。应用程序不能依赖于无名块的块名保持不变。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-5-15 13:15:13 | 显示全部楼层
无名块解决了块名不重复的问题,
但编辑不便,建议不要用无名块。
--除非你本不想编辑。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-5-15 13:35:23 | 显示全部楼层
我是用XDRX_API在Lisp中作匿名块的,非常方便。
以下是用到的函数:


  1. [COLOR=#A52A2A]1、生成实体前建立标记[/COLOR]

  2. c:xdrx_setmark(命令版)
  3. xdrx_setmark(函数版)

  4. 功  能:建立标记,通过下面的命令xdrx_getss获得标记后,新画的实体的选择集。

  5. 说  明:系统默认标记是图形的第一个实体。即,通过命令xdrx_getss获得所有实体。
  6.         命令版本若在LISP中调用,格式为(c:xdrx_setmark)

  7. 返回值:T

  8. [COLOR=#A52A2A]2、获得选择集[/color]

  9. c:xdrx_getss (命令版本)
  10. c:pp (命令版本)
  11. xdrx_getss (函数版本)

  12. 功    能:返回上次标记后的,所有新画实体的选择集。

  13. 说    明:命令,若没有设立标记,则返回图中的所有实体。
  14.           若在LISP中使用,格式为(setq ss(c:xdrx_getss))
  15.           可以构造选择集的时候透明使用,提供C:PP是为了方便

  16.           命令PP和命令XDRX_GETSS在命令行上使用,把得到标记后的实体选择集加入
  17.           到内部数据库P1位置。
  18.           若这两个命令在其他命令内部选物体的时候透明使用,仅仅返回标记后的实体选择集而不
  19.           加入到内部数据库中。

  20. [COLOR=#A52A2A]3、制作匿名块[/color]

  21. xdrx_block_make

  22. 功    能:给定选择集创建块或者匿名块

  23. 调用格式:(xdrx_block_make <"块名"> <选择集> < Pt > [转换INSERT标记])

  24. 返 回 值:块名

  25. 说    明:1、建立匿名块,不要块名

  26.           2、Pt-插入点

  27.           3、参数[转换INSERT标记]若给T,则删除选择集,转换成INSERT
  28.           不给参数,仅仅建立BLOCK,不建立INSERT

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-24 14:40 , Processed in 0.373555 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表