感谢上面提供明经币的几位大哥,现在将代码直接附上!无需下载了
- ;----传入参数说明-----
- ; lst_ename : 图元名的表
- ; pt :块的基点
- ; in_pt : 创建完后,插入的块的坐标 , 设置为nil时,只创建块集合对象,不插入块。返回这个块集合的对象!
- ; name : 块的名字 (名字为 "*U" 时,将创建匿名块)
- ; dele ; 指定是否删除原有的对象 ,T or nil ,
- ;创建块 ,并在in_pt处插入块 删除选择集 返回插入后的块对象
- ;(add_blocks lst_ename pt in_pt "*U" t)
- ;创建块 ,并在in_pt处插入块 不删除选择集 返回插入后的块对象
- ;(add_blocks lst_ename pt in_pt "*U" nil)
- ;创建块 ,不删除选择集 不插入这个块,返回创建的块集合对象
- ;(add_blocks lst_ename pt nil "*U" nil)
- (defun add_blocks (lst_ename pt in_pt name dele / arr lst_var modspe obj obj_block obj_doc pt1 x y)
- (if (and lst_ename pt name)
- (progn
- ;坐标转变体
- (setq pt1 (vlax-3D-point pt))
- ;图纸对象
- (setq obj_doc (vla-get-ActiveDocument (vlax-get-acad-object)))
- ;模型空间对象
- (setq modspe (vla-get-modelspace obj_doc))
- ;创建一个空的块
- (setq obj_block (vla-Add (vla-get-Blocks obj_doc) pt1 name))
- ;获取块名
- (setq name (vla-get-Name obj_block))
- ;图元名表转变体表
- (setq lst_var (mapcar '(lambda(x)
- (setq obj (vlax-ename->vla-object x))
- (vlax-make-variant obj vlax-vbObject)
- )
- lst_ename
- )
- )
- ;创建一个空的数组
- (setq arr (vlax-make-safearray vlax-vbobject (cons 0 (- (length lst_var) 1))))
- ;表装入数组
- (setq arr (vlax-safearray-fill arr lst_var))
- ;将数组对象复制到块内
- (vla-CopyObjects obj_doc arr obj_block)
- (if dele
- (progn
- ;删除原有的对象
- (mapcar '(lambda(y)
- (entdel y)
- )
- lst_ename
- )
- )
- )
- (if in_pt
- (progn
- ;插入in_pt插入这个块
- (vla-InsertBlock modspe (vlax-3D-point in_pt) name 1 1 1 0)
- )
- obj_block
- )
- )
- )
- )
|