my_autocad 发表于 2007-10-4 09:51:00

[求助]快速做块

做图时,常常需要做些临时块,块名不重要,插入点也不重要,只要选择对像,就自动成块,块名可以按照一定规律自动生成,插入点,可以在块内部,或任意一点都行。lsp程序如何实现上面的功能呢?

英雄无敌 发表于 2007-10-4 10:23:00

其实只要利用CAD本身的剪切及粘贴为块就可以了

my_autocad 发表于 2007-10-7 19:26:00

CAD本身的剪切及粘贴中,在CAD里反应是相当的慢,可不可以把做块的程序或过程简化一下呢?

英雄无敌 发表于 2007-10-7 19:40:00

试试这个

my_autocad 发表于 2007-10-8 09:11:00

呵呵,程序试用了,说是无名块,其实有名,只是没有一定的规律,恩,不过程序完全合乎要求,谢谢

无痕 发表于 2007-10-8 13:47:00

;| (make*blk ss pt) = 用选集造无名块------------------ok!!------lxx.2004.2
参数: ss = 要加入无名块的实体选集.
      pt = 块定义点.
返回: 成功返回新定义的块表. 失败返回 nil.
测试: (make*blk (ssget) (setq pt (getpoint)))
|;
(defun make*blk (ss pt / i ent blk)
;;造快表开始标志实体.
(entmake (list'(0 . "BLOCK");实体名.
         '(2 . "*U");无名块名称.
         '(70 . 1);无名块标志.
         (cons 10 pt);插入点.可用(getpoint)另外定义.
   )
)
(setq i -1)
(repeat (sslength ss)
    (setq ent (ssname ss (setq i (1+ i))))
    (entmake (entget ent))
    (entdel ent)
)
;;造块表结束标志实体.
(setq blk (entmake '((0 . "ENDBLK"))));;返回以上块定义.
;(vl-cmdf ".erase" ss "")
(if blk;如果造块成功.插入一个实例.
    (entmake (list (cons 0 "INSERT");生成块实体(和块定义是不同的).
   (cons 2 blk)       ;组码2引用块定义.
   (cons 10 pt)       ;块插入点,按定义点.
      )
    )
)
(princ "\n已经做成无名块:")(princ blk)
)

hyccai 发表于 2007-10-11 18:39:00

正需要!!!

sbyniay 发表于 2007-10-13 17:13:00

<p>什么都别装,浪费空间.</p><p>直接用 <font color="#1ae642">SHIFT+CTRL+C</font> 后&nbsp;&nbsp;<font color="#33cc8f" style="BACKGROUND-COLOR: #eeeeee;">SHIFT+CTRL+V</font>就行了(这是CAD自有的)</p>

xhq1954425 发表于 2007-10-13 17:56:00

<p>我下了!以后有用,谢谢!</p>

yjr111 发表于 2013-1-24 00:06:09

一句话就够了
(defun c:bb()(vl-cmdf "copybase" (setq pt(getpoint"\n指定基点")) (ssget) "" "pasteblock" pt))
页: [1] 2
查看完整版本: [求助]快速做块