乐筑天下

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

[求助]如何“拆离”光栅图像参照???

[复制链接]

14

主题

49

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
105
发表于 2010-7-27 18:35:00 | 显示全部楼层 |阅读模式
2007 + Visua C# 2005
插入光栅图像参照(菜单:“插入”->“光栅图像参照”)的效果:(Azul是图像名)
注意右键菜单的拆离

s20hmmakhrg.jpg

s20hmmakhrg.jpg


         
右键拆离的效果:

ahqiyahphv5.jpg

ahqiyahphv5.jpg

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
下面是通过代码删除实体后的效果:

n3dk2kny5ed.jpg

n3dk2kny5ed.jpg


图像已经不显示了,但图像状态显示为“未参照”。
附删除实体的代码:(写得比较简单)
  1. static public void DelImage()
  2.         {
  3.             Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
  4.             Database db = doc.Database;
  5.             Autodesk.AutoCAD.DatabaseServices.TransactionManager tm = db.TransactionManager;
  6.             Transaction t = tm.StartTransaction();
  7.             using (DocumentLock docLock = doc.LockDocument())
  8.             {
  9.                 BlockTable bt = (BlockTable)t.GetObject(db.BlockTableId, OpenMode.ForRead);
  10.                 BlockTableRecord btr = (BlockTableRecord)t.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForRead);
  11.                 foreach (ObjectId id in btr)
  12.                 {
  13.                     Entity ent = t.GetObject(id, OpenMode.ForWrite) as Entity;                    if (ent != null)
  14.                     {                        
  15.                         ent.Erase();
  16.                         ent.Dispose();
  17.                         
  18.                     }
  19.                     
  20.                 }
  21.                 t.Commit();
  22.                 t.Dispose();
  23.             }        }
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
问题是如何用C#实现如上所示的右键拆离图像参照的效果...
回复

使用道具 举报

0

主题

6

帖子

1

银币

初来乍到

Rank: 1

铜币
6
发表于 2021-3-16 19:47:00 | 显示全部楼层
试试看,看界面有没有及时更新
回复

使用道具 举报

14

主题

49

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
105
发表于 2010-7-27 20:55:00 | 显示全部楼层
没人在看吗?我觉得是不是在Dictionary里面也要删除图像才行?
自己去研究研究了,也等待高手解答和讨论。
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2010-7-27 22:21:00 | 显示全部楼层
图直接上传吧,看不见
回复

使用道具 举报

14

主题

49

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
105
发表于 2010-7-28 08:45:00 | 显示全部楼层
图像已经上传。。。

在firefox上看明明可以看到图的,怎么用ie看就是baidu了。
回复

使用道具 举报

14

主题

49

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
105
发表于 2010-7-28 19:40:00 | 显示全部楼层
还是没人看吗???
~~~~~~~~~~~
自己已解决!
附代码
  1.        [CommandMethod("Dict")]
  2.         public void SeeDict()
  3.         {
  4.             Database db = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Database;
  5.             Autodesk.AutoCAD.DatabaseServices.TransactionManager tm = db.TransactionManager;
  6.             using (Transaction t = tm.StartTransaction())
  7.             {
  8.                 // open the dictionary
  9.                 Autodesk.AutoCAD.DatabaseServices.ObjectId imgDictID = RasterImageDef.GetImageDictionary(db);
  10.                 DBDictionary imgDict;
  11.                 if (imgDictID.OldId != 0)
  12.                 {
  13.                     imgDict = (DBDictionary)t.GetObject(imgDictID, OpenMode.ForWrite);
  14.                     imgDict.Erase();
  15.                     imgDict.Dispose();
  16.                 }                t.Commit();
  17.             }
  18.          }
首先要插入光栅图像参照(可以插入多个,会全部拆离),才可以看到效果。
删除实体(一楼的代码)相当于选中图像然后按Delete键,在外部参照中的状态显示的是“未参照”,因为在Dictionary中没有Erase掉。
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2010-7-28 19:47:00 | 显示全部楼层
if (imgDictID != ObjectId.Null)
这样好些?
回复

使用道具 举报

14

主题

49

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
105
发表于 2010-7-28 20:06:00 | 显示全部楼层

好像好些...
不知道这个OldId到底是什么意思
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2010-9-17 13:08:00 | 显示全部楼层
试下,删除名为Azui的参照
                    imgDict = (DBDictionary)t.GetObject(imgDictID, OpenMode.ForRead);
                    DBObject obj = t.GetObject(imgDict.GetAt(“Azul"), OpenMode.ForWrite);
                    obj.Erase();
回复

使用道具 举报

14

主题

49

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
105
发表于 2010-9-17 13:51:00 | 显示全部楼层
好的,解决了!多谢了!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2024-11-22 01:35 , Processed in 0.472447 second(s), 75 queries .

© 2020-2024 乐筑天下

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