明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 前生

[转帖]LISP匿名块程序:

  [复制链接]
发表于 2006-2-14 13:45:00 | 显示全部楼层
好,顶一下
发表于 2006-11-17 13:06:00 | 显示全部楼层

顶!

支持!

 

发表于 2006-12-19 14:38:00 | 显示全部楼层

多谢指点!

发表于 2006-12-19 14:52:00 | 显示全部楼层
  1. ;;change Annonymous block to normal block
  2. ;;Tested in R2005
  3. ;;By LUCAS
  4. (defun C:AN_TO_N (/ SS)
  5.   (prompt "\nSelect Annonymous block: ")
  6.   (if (setq SS (ssget ":S:E" '((0 . "INSERT") (2 . "`**"))))
  7.     (progn
  8.       (vla-put-name
  9. (vla-item (vla-get-blocks
  10.     (vla-get-activedocument (vlax-get-acad-object))
  11.   )
  12.   (vla-get-name (vlax-ename->vla-object (ssname SS 0)))
  13. )
  14. "LUCAS"
  15.       )
  16.       (vla-auditinfo
  17. (vla-get-activedocument (vlax-get-acad-object))
  18. :vlax-true
  19.       )
  20.     )
  21.     (alert "\nNot match Annonymous block!")
  22.   )
  23.   (princ)
  24. )
发表于 2007-1-2 13:13:00 | 显示全部楼层
用ACTIVEX方法创建匿名图块的例子;
可以通过取得选择集合,把选择集合定义为匿名图块,然后插入进来,最后删除选择集合。
  1. (defun Nblock (ss insertpt / InsPt number blocklist blk index SelectionSetObjs)
  2.   (setq InsPt (vlax-3d-point insertpt));;转化为ActiveX的点
  3.   (setq number (sslength ss))
  4.   (setq blocklist (vla-get-blocks AcadDocument))
  5.   (setq blk (vla-add blocklist InsPt "*U"));;定义匿名图块
  6.   (setq SelectionSetObjs (vlax-make-safearray vlax-vbobject (cons 0 (- number 1))))
  7.   (defun item (ss index)
  8.     (vlax-ename->vla-object (ssname ss index))
  9.   )
  10.   (setq index 0)
  11.   (repeat number
  12.     (vlax-safearray-put-element SelectionSetObjs index (item ss index))
  13.     (setq index (1+ index))
  14.   );;把选择集的物体加入到匿名图块
  15.   (vla-copyobjects AcadDocument SelectionSetObjs blk);;采用copybojects方式
  16.   (vla-insertblock ModelSpace InsPt (vlax-get-property blk 'name) 1 1 1 0)
  17. );;插入图块
以下为测试程序
  1. (defun C:test()
  2.   (vl-load-com)
  3.   (setq AcadObject   (vlax-get-acad-object)
  4. AcadDocument (vla-get-activeDocument AcadObject)
  5. ModelSpace   (vla-get-Modelspace AcadDocument)
  6.   )
  7.   (if (setq ss (ssget));;取得选择集
  8.     (if (setq insertpt (getpoint "\n请输入插入点: "));;取得插入点
  9.       (progn
  10.         (nblock ss insertpt)
  11. (vl-cmdf ".erase" ss "");;删除选择集
  12.       )
  13.     )
  14.   )
  15.   (princ)
  16. )   
发表于 2007-1-4 03:54:00 | 显示全部楼层
本帖最后由 作者 于 2007-1-4 3:58:04 编辑
  1. ;;(mkublk ss inspt) =做无名块 ---by 狂刀.
  2. (defun xt-mkUblk (ss inspt / BLKOBJ *doc I OBJS)
  3.   (setq *doc   (vla-get-activedocument (vlax-get-acad-object))
  4.          inspt (vlax-3d-point(trans inspt 1 0 ))
  5.          i   -1
  6.   )
  7.   (repeat (sslength ss)
  8.     (setq objs(cons (vlax-ename->vla-object (ssname ss (setq i (1+ i))))objs))
  9.   )
  10.   (setq blkobj(vla-add (vla-get-blocks *doc) inspt "*U"))
  11.   (vlax-invoke *doc 'copyobjects objs blkobj)
  12.   (mapcar 'vla-delete objs)
  13.   (vla-insertblock (vla-get-ModelSpace *doc) inspt(vla-get-name blkobj) 1 1 1 0)
  14.   blkobj
  15. )
实例:
  1. (defun c:mkublk (/ pt)
  2.   (princ "\n **做无名块**")
  3.   (if (setq ss (ssget))
  4.     (progn
  5.       (setq inspt (getpoint "\n 定义块插入点/<0,0,0>:"))
  6.       (if (not inspt)(setq inspt '(0. 0. 0.)))
  7.       (xt-mkUblk ss inspt)
  8.     )
  9.   )
  10. )


发表于 2007-1-5 07:50:00 | 显示全部楼层

highflybir & 无痕的程序對插入點不在0,0點的[屬性物件]要再處理一下才會在原位置

发表于 2007-1-6 12:39:00 | 显示全部楼层
要怎么解决不在原来位置的问题啊?期待.....
发表于 2007-1-6 15:26:00 | 显示全部楼层

就是用矢量运算将块的定义点算出位置再插入到WCS下的相应点中。好像没说清楚。呵……

发表于 2007-1-9 12:37:00 | 显示全部楼层
无痕发表于2007-1-4 3:54:00;;(mkublk ss inspt) =做无名块 ---by 狂刀.(defun xt-mkUblk (ss inspt / BLKOBJ *doc I OBJS)  (setq *doc   (vla-get-activedocument (vlax-get-acad-object))  &
实例:
  1. (defun c:mkublk (/ pt)
  2.   (princ "\n **做无名块**")
  3.   (if (setq ss (ssget))
  4.     (progn
  5.       (setq inspt (getpoint "\n 定义块插入点/<0,0,0>:"))
  6.       (if (not inspt)(setq inspt '(0. 0. 0.)))
  7.       (xt-mkUblk ss inspt)
  8.     )
  9.   )
  10. )
  1. (defun xt-mkUblk (ss inspt / BLKOBJ *doc I OBJS)
  2.   (setq *doc   (vla-get-activedocument (vlax-get-acad-object))
  3.          inspt (vlax-3d-point(trans inspt 1 0 ))
  4.          i   -1
  5.   )
  6.   (repeat (sslength ss)
  7.     (setq objs(cons (vlax-ename->vla-object (ssname ss (setq i (1+ i))))objs))
  8.   )
  9.   (mapcar '(lambda (x) (vla-move x inspt (vlax-3d-point '(0 0 0))) (vla-update x)) objs)
  10.   (setq blkobj (vla-add (vla-get-blocks *doc) (vlax-3d-point '(0 0 0)) "*U"))
  11.   ;;(setq blkobj(vla-add (vla-get-blocks *doc) inspt "*U"))
  12.   (vlax-invoke *doc 'copyobjects objs blkobj)
  13.   (mapcar 'vla-delete objs)
  14.   (vla-insertblock (vla-get-ModelSpace *doc) inspt(vla-get-name blkobj) 1 1 1 0)
  15.   blkobj
  16. )
改为这样,就可以解决插入點不在0,0點的[屬性物件]不在原位置的问题.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 13:13 , Processed in 0.202268 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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