明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: mkhsj928

[符号表] 复制并重定义块的问题

  [复制链接]
发表于 2010-12-24 19:50:19 | 显示全部楼层
对容器类调用deepclone有点奇怪,呵呵
  1.         [CommandMethod("t10")]
  2.         public static void Test10()
  3.         {
  4.             Document doc = Application.DocumentManager.MdiActiveDocument;
  5.             Database db = doc.Database;

  6.             using (var tr = db.TransactionManager.StartTransaction())
  7.             {
  8.                 var bt = tr.GetObject(db.BlockTableId, OpenMode.ForWrite) as BlockTable;
  9.                 var blkdef = tr.GetObject(bt["1"], OpenMode.ForRead) as BlockTableRecord;
  10.                 var blkdefnew = new BlockTableRecord();
  11.                 blkdefnew.Name = "2";
  12.                 var id = bt.Add(blkdefnew);
  13.                 tr.AddNewlyCreatedDBObject(blkdefnew, true);

  14.                 var ids = new ObjectIdCollection(blkdef.Cast<ObjectId>().ToArray());
  15.                 db.DeepCloneObjects(ids, id, new IdMapping(), true);

  16.                 var ents =
  17.                     blkdefnew.Cast<ObjectId>()
  18.                     .Select(i => tr.GetObject(i, OpenMode.ForWrite) as Entity);

  19.                 foreach (var ent in ents)
  20.                     ent.ColorIndex = 2;

  21.                 tr.Commit();
  22.             }

  23.         }
 楼主| 发表于 2010-12-25 13:16:13 | 显示全部楼层
回复 sieben 的帖子

新图块建成了,但在程序中修改新块的内容,原块中的内容会跟着修改。
但是退出程序用CAD的块编辑器修改,原块不会变。
 楼主| 发表于 2010-12-25 14:14:34 | 显示全部楼层
非常感谢飞狐版主!真强啊!
想破脑袋也想不出来要这样这才克隆块。
发表于 2010-12-25 17:15:29 | 显示全部楼层
本帖最后由 sieben 于 2010-12-25 17:21 编辑

回复 lzh741206 的帖子

这里虽然使用的是DeepCloneObjects函数,其实还是把旧块记录里面的实体一个个打开,再克隆,最后放进新块记录里面。若块记录内实体无其他特殊关连数据,与使用Clone函数应该是一样的作用及效率.
-----------------
var ids = new ObjectIdCollection(blkdef.Cast<ObjectId>().ToArray());
var ents = blkdefnew.Cast<ObjectId>().Select(i => tr.GetObject(i, OpenMode.ForWrite) as Entity);
这两行代码很炫呀!Cast是新东西还是0708版本就有?谢谢斑竹!

发表于 2010-12-25 19:49:31 | 显示全部楼层
本帖最后由 lzh741206 于 2010-12-25 19:50 编辑

Cast是Linq的扩展,是.Net 3.5的,和Cad的版本无关
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 22:59 , Processed in 0.155658 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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