tjuzkj 发表于 2011-1-1 20:11:33

如何将复制某层的图元,而且使得所复制的图元的位置与原图元一致

问题的提出:
      单位现在推行协同设计,就是使用外部参照。我们设备专业只能参照建筑专业的图纸,而无修改所引用的外部参照文件的权限。这样就造成了一个问题,建筑图上的某些图元和我们设备专业的图元重叠,比如房间名称等。未协同设计之前,我们可以自己把它移开,现在不行了。我想有没有办法将房间名称这个图层的图元一模一样的复制,然后另存到一个图层中。冻结建筑图中的房间名称的这个层,就可以使用自己建的那个层。

461045462 发表于 2011-1-2 07:19:00

既然是:我想有没有办法将房间名称这个图层的图元一模一样的复制,然后另存到一个图层中。冻结建筑图中的房间名称的这个层,就可以使用自己建的那个层。
那你在复制前先将自己的这个图层的图元转为另一个图层,再插入,然后冻结建筑图中的房间名称的这个层,不就行了?

tjuzkj 发表于 2011-1-2 19:17:41

我的想法和二楼的一样,可是我自己不知道如何复制那个图层图元,且保存一模一样

461045462 发表于 2011-1-2 19:35:52

tjuzkj 发表于 2011-1-2 19:17 static/image/common/back.gif
我的想法和二楼的一样,可是我自己不知道如何复制那个图层图元,且保存一模一样

选择图元,采取同基点复制

Gu_xl 发表于 2011-1-2 20:41:17

;;;下面的程序对复制参照中的text图元有效!
;测试 (tt (car (entsel)) "01注记" "newLay")
;参数 en 块参照引用 la 块参照引用中要复制文本的图层,层名不含块参照名 NewLa 复制后新建图层
(defun tt (en la newla / DBXDOC enl blkrefname inspt blockref obj objlst enlst e n ss)
(setq enl (entget en)
      blkrefname (cdr (assoc 2 enl))
      inspt (cdr (assoc 10 enl))
      n 0
      ss (ssadd)
      )
(command "layer" "m" newla "")
(setq blockref (vla-item (vla-get-blocks(vla-get-ActiveDocument (vlax-get-acad-object))) blkrefname))
(vlax-for obj blockref
    ;;;判断块引用中是否为 la 图层中的文本
    (if (and (= (strcase (vla-get-layer obj)) (strcase (strcat blkrefname "|" la)))
             (= "AcDbText" (vla-get-ObjectName obj))
             )
      (progn
      (setq objlst (cons obj objlst))
      
      )
      )
    )
(if objlst (setq enlst1 (mapcar 'vlax-vla-object->ename objlst)))
(foreach en enlst1
    (setq enl (entget en))
    (setq enl (vl-remove-if '(lambda (x) (or (= 5 (car x)) (= -1 (car x)) (= 330 (car x)) (= 8 (car x)))) enl))
    (setq enl (appendenl (list (cons 8 newla))))
    (setq e (entmake enl))
    (if e (ssadd (entlast) ss))
    )
(if ss (command "move" ss "" '(0 0 0) inspt))
)

zsw23 发表于 2011-4-2 01:07:56

2009有这功能

lenlenq 发表于 2011-4-5 21:29:28

vla-copy ob
页: [1]
查看完整版本: 如何将复制某层的图元,而且使得所复制的图元的位置与原图元一致