乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 111|回复: 9

复制并重定义块的问题

[复制链接]

9

主题

100

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
136
发表于 2010-12-24 15:32:00 | 显示全部楼层 |阅读模式
我是想实现从现有块复制来新建一个块,在新块中需更改原块的部分内容,代码如下:
  1. private ObjectId mCloneBlock(ObjectId oldBlockId,string sNewBlockName)
  2.         {
  3.             ObjectId newBlockId = ObjectId.Null;
  4.             using (Transaction tr = db.TransactionManager.StartTransaction())
  5.             {
  6.                 BlockTable bt = db.BlockTableId.GetObject(OpenMode.ForWrite) as BlockTable;
  7.                 BlockTableRecord btr=db.CurrentSpaceId.GetObject(OpenMode.ForWrite) as BlockTableRecord;
  8.                 BlockTableRecord oldbtr=OldBlockId.GetObject(OpenMode.ForRead) as BlockTableRecord;
  9.                 IdMapping idmap=new IdMapping();
  10.                 BlockTableRecord newbtr = oldbtr.DeepClone(btr, idmap, false);
  11.                 foreach (ObjectId id in newbtr)
  12.                 {
  13.                     Entity ent = id.GetObject(OpenMode.ForRead) as Entity;
  14.                     if (ent != null)
  15.                     {
  16.                         ent.UpgradeOpen();
  17.                         ent.ColorIndex = 210;//更改实体颜色
  18.                     }
  19.                 }
  20.                 newbtr.Name = sNewBlockName;
  21.                 newBlockId = bt.Add(newbtr);
  22.                 tr.AddNewlyCreatedDBObject(newbtr, true);
  23.                 tr.Commit();
  24.             }
  25.             return newBlockId;
  26.         }

但是更改之后原块的内容也被更改了,why?
回复

使用道具 举报

21

主题

97

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
181
发表于 2010-12-24 15:35:00 | 显示全部楼层
你是重结构上面改变的肯定要变,你可以做一个实验。你在一幅图里插入另一幅图,不分解。然后再重复操作,CAD对你说,图里面已经有这个块名的对象了,是否覆盖。我想道理是一样的。
回复

使用道具 举报

9

主题

100

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
136
发表于 2010-12-24 15:42:00 | 显示全部楼层
我是复制了一份出来呀?跟clone()一样的道理嘛。clone()出来一个实体,你改这个clone()出来的实体,原实体是不会变的!
回复

使用道具 举报

21

主题

97

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
181
发表于 2010-12-24 15:42:00 | 显示全部楼层
但是你明明说的是更改了内容。
回复

使用道具 举报

9

主题

100

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
136
发表于 2010-12-24 15:43:00 | 显示全部楼层
我是更改了内容,我更改的是复制出来的内容,不是更改原实体的内容啊
回复

使用道具 举报

9

主题

100

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
136
发表于 2010-12-24 15:46:00 | 显示全部楼层
“在新块中需更改原块的部分内容”应更正为“在新块中需更改部分实体”
回复

使用道具 举报

21

主题

97

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
181
发表于 2010-12-24 15:47:00 | 显示全部楼层
只要你改了后的块名和以前的块名一样,那以前的应该就会变成你改后的块。
回复

使用道具 举报

9

主题

100

帖子

7

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
136
发表于 2010-12-24 15:48:00 | 显示全部楼层
我想可能是对Deepclone 没理解透。谁能解释一下?
回复

使用道具 举报

32

主题

651

帖子

8

银币

中流砥柱

Rank: 25

铜币
779
发表于 2010-12-24 17:47:00 | 显示全部楼层
我看了你的代码,觉得没有问题,以前我好象也这样试过,也是没有成功,后来改用Clone(),请问你的新图块出来了吗?若出来了在下一次事务单独打开新图块,再修改颜色,看旧图块还会不会跟着变?
回复

使用道具 举报

21

主题

97

帖子

6

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
181
发表于 2010-12-24 18:27:00 | 显示全部楼层
我以前用VBA写了一个插入属性块的程序,插入的属性块里面的颜色会跟着变。但实际上我是想为每个此名的块定义一个颜色号。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-15 10:46 , Processed in 0.775583 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表