找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2637|回复: 19

[讨论]:关于无名块的疑问,请大家指点

[复制链接]
发表于 2004-2-13 17:47:41 | 显示全部楼层 |阅读模式

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

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

×
关于无名块的疑问,请大家指点
(defun mc-make-unname-block(ss / count entlist ent blk)
  (entmake '((0 . "BLOCK")
     (2 . "*U")
     (70 . 1)
     (10 0 0 0)
     ))
  (setq count 0)
  (repeat (sslength ss)
    (setq entlist(entget(setq ent(ssname ss  count))))
    (setq count (1+ count))
    (entmake entlist)
    )
  (setq count 0)
  (repeat(sslength ss)
    (setq ent(ssname ss count))
    (setq count (1+ count))
    (entdel ent)
    )
  (setq blk(entmake '((0 . "ENDBLK"))))
  (if (princ blk)
  (entmake (list (cons 0  "INSERT")
     (cons 2 blk)
     (cons 10 '(0 0 0))
     ))
    )
  blk
  )


上面的代码是明经站里的一个生成无名块的函数,

我想知道无块通常在什么场合下应用,在做粗糙度时有人用到无名块,我不明白这样做有什么好处,我用点坐标来制作粗糙度又会有什么区别?

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

已领礼包: 488个

财富等级: 日进斗金

发表于 2004-2-14 22:32:03 | 显示全部楼层
无名块就是块,就是名字是*U打头的而已.

一般无名块是cad内部使用的,cad偷偷的进行,你就不要考虑他了.
比如一个标注的两头就是的,你可以炸开看一下.
而一般块是你建立才会有.

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

使用道具 举报

 楼主| 发表于 2004-2-14 22:40:30 | 显示全部楼层
不过上面代码我是抄来的,并不理解,也不会应用,还请各位释意!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-2-15 00:30:07 | 显示全部楼层
[php]
(defun mc-make-unname-block (ss / count entlist ent blk)
  ;构造实体表头.
  (entmake '((0 . "BLOCK");'"实体名".
             (2 . "*U");"无名块名称".
             (70 . 1);"无名块标志".
             (10 0 0 0);"插入点.可用(getpoint)另外定义."
            )
  )
  ;"将选集ss的实体放入块定义".
  (setq count 0);"付计数初始值."
  (repeat (sslength ss)
    (setq entlist (entget (setq ent (ssname ss count))));"取单个实体的实体表."
    (setq count (1+ count));"计数加1".
    (entmake entlist);"按实体表生成实体.因为有(entmake ....)表头,
;这些实体将作为块内定义存在.不在图上出现.但可以用insert命
;令"复制"一份到图纸上."
  )
  ;"删除用于块定义的实体."
  (setq count 0)
  (repeat (sslength ss)
    (setq ent (ssname ss count))
    (setq count (1+ count))
    (entdel ent);"entdel一次只能删除一个实体."
  )
  ;"块定义尾.以实体名"ENDBLK"结束."
  (setq blk (entmake '((0 . "ENDBLK"))))
  ;'"原位插入块."
  (if (princ blk);如果造块成功.
    (entmake (list (cons 0 "INSERT")  ;"生成块实体(和块定义是不同的)."
                   (cons 2 blk)       ;"组码2引用块定义."
                   (cons 10 '(0 0 0)) ;'"块插入点."
             )
    )
  )
  blk  ;"返回块名".
)[/php]

  1. [color=blue]
  2. ;;重写造无名块-----from mj 修改by 陌生人2004.2
  3. (defun c:*blk ()
  4.   (princ "\n选择做无名块的实体:")
  5.   (make*blk (ssget)(getpoint "\n定义插入点:"))
  6.   (princ)
  7. )
  8. (defun make*blk (ss pt / i ent blk)
  9.   (entmake (list'(0 . "BLOCK")'(2 . "*U")'(70 . 1)(cons 10 pt)))
  10.   (setq i -1)
  11.   (repeat (sslength ss)
  12.     (setq ent (ssname ss (setq i (1+ i))))
  13.     (entmake (entget ent))
  14.     (entdel ent)
  15.   )
  16.   (setq blk (entmake '((0 . "ENDBLK"))))
  17.   (if blk
  18.     (entmake (list '(0 . "INSERT") (cons 2 blk) (cons 10 pt)))
  19.   )
  20.   (princ "\n已经做成无名块:")(princ blk)
  21. )[/color]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-2-15 11:25:43 | 显示全部楼层
陌生人真是热情,回答很详细。
我问句,还请指教:
在做粗糙度时有人用到无名块,我不明白这样做有什么好处,我用点坐标来制作粗糙度又会有什么区别?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2004-2-15 11:34:14 | 显示全部楼层
最初由 walong 发布
[B]陌生人真是热情,回答很详细。
我问句,还请指教:
在做粗糙度时有人用到无名块,我不明白这样做有什么好处,我用点坐标来制作粗糙度又会有什么区别? [/B]


不管是什么,无名块的作用是:

1、是块,因此可以定义一次而多次引用(插入)。图中需要大量重复引用(插入)的时候,节省图的文件大小。具有块的所有特征。

2、制作无名块的时候,不用自己命名,系统自动命名,不会有重名的可能(普通块如果重名,那么旧的块定义就会被重新定义了),无名块定义如果图中没有引用它的“实体(INSERT)”存在,那么在清理图形的时候(PURGE),无名块定义(BLOCK)会自动清理掉。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-2-15 13:08:28 | 显示全部楼层
无名块不能用DDINSERT来插入,也不能用REFEDIT来编辑。
想把无名块转成普通块,可以用上述二个命令操作,不知各位有没有办法?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-2-15 13:18:51 | 显示全部楼层
感谢各位的指点,我对无名块有了更深的了解了!谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-2-17 08:09:04 | 显示全部楼层
最初由 ywx0576 发布
[B]无名块不能用DDINSERT来插入,也不能用REFEDIT来编辑。
想把无名块转成普通块,可以用上述二个命令操作,不知各位有没有办法? [/B]

  1. ;;BY LUCAS(龍龍仔)
  2. ;;把匿名塊改回普通圖塊
  3. ;;但程序有一重大缺點....
  4. ;;改了名的圖塊與新定義的圖塊名稱一樣,但並不是同一圖塊!!
  5. (defun C:TT (/ BLOCKS DOC SB BNAME ENT BLK BLKREF)
  6.   (vl-load-com)
  7.   (while
  8.     (or        (not
  9.           (setq BLK (car (entsel "\n選擇要改回普通圖塊的匿名塊: ")))
  10.         )
  11.         (progn
  12.           (setq BLKREF (vlax-ename->vla-object BLK))
  13.           (not (= (vla-get-objectname BLKREF) "AcDbBlockReference"))
  14.         )
  15.         (/= "*" (substr (vla-get-name BLKREF) 1 1))
  16.     )
  17.   )
  18.   (setq        BLOCKS
  19.          (vla-get-blocks
  20.            (setq DOC (vla-get-activedocument (vlax-get-acad-object)))
  21.          )
  22.   )
  23.   (setq BNAME (getstring "\n圖塊名稱: "))
  24.   (if (vl-catch-all-error-p
  25.         (vl-catch-all-apply 'vla-item (list BLOCKS BNAME))
  26.       )
  27.     (progn
  28.       (setq SB (vla-item BLOCKS (vla-get-name BLKREF)))
  29.       (vla-put-name (vla-item BLOCKS (vla-get-name BLKREF)) BNAME)
  30.       (setq BLK (vla-add BLOCKS (vla-get-origin SB) BNAME))
  31.       (vlax-for        ENT SB
  32.         (vla-copyobjects
  33.           DOC
  34.           (vlax-safearray-fill
  35.             (vlax-make-safearray
  36.               vlax-vbobject
  37.               '(0 . 0)
  38.             )
  39.             (list ENT)
  40.           )
  41.           BLK
  42.         )
  43.       )
  44.       (vlax-release-object SB)
  45.       (vlax-release-object BLK)
  46.     )
  47.     (alert (strcat "\n  "" BNAME """ "圖塊已存在!!  "))
  48.   )
  49.   (vlax-release-object BLKREF)
  50.   (vlax-release-object BLOCKS)
  51.   (vlax-release-object DOC)
  52.   (princ)
  53. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2004-2-17 23:03:32 | 显示全部楼层
最初由 XDSoft 发布
[B]
....在,那么在清理图形的时候(PURGE),无名块定义(BLOCK)会自动清理掉。 [/B]


purge是普通的也会
是新打开图形时,没引用的无名块自动清除.


LUCAS:[B]
"改了名的圖塊與新定義的圖塊名稱一樣,但並不是同一圖塊"[/B]

图中的insert都成了新名称,那再次打开时,原来的无名块块应该没有了(按规则应该这样,不知事实是不是?)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-2-18 00:57:30 | 显示全部楼层
图中的insert都成了新名称,那再次打开时,原来的无名块块应该没有了(按规则应该这样,不知事实是不是?)

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

使用道具 举报

发表于 2004-2-18 11:56:07 | 显示全部楼层
在AUTOCAD中对于块的含义是比较广泛的,记住即便是一个插入点也是可以被定义成块的!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-2-21 14:51:09 | 显示全部楼层
我也對這不太了解, 我從頭看到尾還是不明白. 有一問題想向各位大俠請教一二. 還望各位多多指點才是. 如:
1.  上面有人說無名塊是自動命名的. 那麼無名塊可以由我去取名嗎? 又是如何做呢?
2 .  當做了一個無名塊后. 以后怎麼找出來用呢? 如找不出來我樣的塊對畫圖有什麼價值呀?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2004-2-21 17:12:43 | 显示全部楼层
最初由 LUCAS 发布
[B]
[code]
;;BY LUCAS(龍龍仔)
... [/B]


按你的方法,改名了:
比如图上有两个(实体a b)匿名块,改名是改过来了(比如"*u23 "--> "abc")
ddinsert,插入3个块"abc",(实体d e f)

现在rename(或者vla-put-name)这个"abc"名字-->"xyz"

实体d e f名称变为了"xyz"而实体a b还是"abc"
而块的列表里已经没有"abc"这个名字了.(怪事情呀,不可想象呀
这时的abc成了没定义的块)

而且现在用entmake这个"abc"插入也不行,因为块表里没有,所以没有地方取找它的定义了.





十三楼的:
  无名块自己可以定义前面的,而后面cad会自动加一个数字.(保证不重复)
  无名块一般都是编程才能插入.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-2-24 12:40:38 | 显示全部楼层
最初由 aeo 发布
[B]

按你的方法,改名了:
比如图上有两个(实体a b)匿名块,改名是改过来了(比如"*u23 "--> "abc")
ddinsert,插入3个块"abc"... [/B]


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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-16 23:35 , Processed in 0.226848 second(s), 59 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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