明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3238|回复: 13

获取栅格图形名称

  [复制链接]
发表于 2011-11-9 09:44:20 | 显示全部楼层 |阅读模式
请问我从图面上选择了一个 Autodesk.AutoCAD.DatabaseServices.Image 类型的实体,请问用程序如何获取该image图形的名称和位置点?
发表于 2011-11-9 11:15:49 | 显示全部楼层
你选择的应该是 Autodesk.AutoCAD.DatabaseServices.RasterImage 而不是 Autodesk.AutoCAD.DatabaseServices.Image 吧?
 楼主| 发表于 2011-11-9 11:30:45 | 显示全部楼层
我选择的栅格图形就是 Autodesk.AutoCAD.DatabaseServices.Image类型呢
发表于 2011-11-10 12:43:40 | 显示全部楼层
名称是Name属性可以读取,Path可以读取路径,里面也包含了名称
位置点应该是Position属性,是一个Point3d类型
发表于 2011-11-10 12:52:07 | 显示全部楼层
要先转换成rasterimage对象
发表于 2011-11-10 12:54:06 | 显示全部楼层
本帖最后由 sailorcwx 于 2011-11-10 13:02 编辑

  1. public void Test5()
  2.         {
  3.             Document doc = Application.DocumentManager.MdiActiveDocument;
  4.             Database db = doc.Database;
  5.             Editor ed = doc.Editor;            
  6.             PromptEntityOptions selectOptions = new PromptEntityOptions("\n选择光栅图像");
  7.             selectOptions.SetRejectMessage("\n只能选择光栅图像");
  8.             selectOptions.AddAllowedClass(typeof(Image),false);
  9.             PromptEntityResult selectResult = ed.GetEntity(selectOptions);
  10.             if (selectResult.Status != PromptStatus.OK) return;
  11.             Transaction tr = doc.TransactionManager.StartTransaction();            
  12.             using (tr)
  13.             {
  14.                 RasterImage imageSelected = tr.GetObject(selectResult.ObjectId, OpenMode.ForRead) as RasterImage;
  15.                 ed.WriteMessage("\n图像名称:{0}\n图像路径:{1}\n图像位置:{2},{3},{4}", imageSelected.Name, imageSelected.Path, imageSelected.Position.X.ToString(), imageSelected.Position.Y.ToString(), imageSelected.Position.Z.ToString());
  16.             }
  17.         }

 楼主| 发表于 2011-11-10 14:52:49 | 显示全部楼层
楼上的请问你是用的cad什么版本? 我用的07版本,把image转换成RasterImage后,RasterImage 是空值啊
附代码如下:
 楼主| 发表于 2011-11-10 14:53:32 | 显示全部楼层
  1. /// <summary>删除选择的块和图片
  2.         /// </summary>
  3.         /// <returns></returns>
  4.         public static int ClearBlockAndImage()
  5.         {
  6.            Document doc = Application.DocumentManager.MdiActiveDocument;
  7.            Database db = doc.Database;
  8.            Editor ed = doc.Editor;  
  9.             int count = 0;
  10.             ObjectIdCollection colInputEntIds;
  11.             PromptSelectionOptions promptSelRess = new PromptSelectionOptions();
  12.             promptSelRess.MessageForAdding = "请选择对象";
  13.             PromptSelectionResult promptSelRes;
  14.             promptSelRes = Editor.GetSelection(promptSelRess);

  15.             if (promptSelRes.Status != PromptStatus.OK)
  16.             {
  17.                 return 0;
  18.             }
  19.             colInputEntIds = new ObjectIdCollection(promptSelRes.Value.GetObjectIds());

  20.             using (doc.LockDocument())
  21.             {
  22.                 using (Transaction tran = db.TransactionManager.StartTransaction())
  23.                 {
  24.                     try
  25.                     {
  26.                         foreach (ObjectId id in colInputEntIds)
  27.                         {
  28.                             //实体类型判断
  29.                             Entity ent = tran.GetObject(id, OpenMode.ForRead) as Entity;
  30.                             if (ent is BlockReference)// || ent is Autodesk.AutoCAD.DatabaseServices.Image)
  31.                             {
  32.                                 ent.UpgradeOpen();
  33.                                 ent.Erase();
  34.                                 count++;
  35.                             }
  36.                             if (ent is Autodesk.AutoCAD.DatabaseServices.Image)
  37.                             {
  38.                                 RasterImage imageSelected = tran.GetObject(id, OpenMode.ForRead) as RasterImage;
  39.                                 count++;
  40.                             }
  41.                         }
  42.                         tran.Commit();
  43.                     }
  44.                     catch (System.Exception se)
  45.                     {
  46.                         ed.WriteMessage("\n" + se.Message + "\n");
  47.                     }
  48.                 }
  49.                 return count;
  50.             }
  51.         }
发表于 2011-11-10 16:16:23 | 显示全部楼层
并不是转换后是空值,而是你的判断ent is Autodesk.AutoCAD.DatabaseServices.Image有误,你试试我下面这段代码就知道,其实你选择的光栅图像对应的类型应该是rasterimage
  1. [CommandMethod("t6")]
  2.         public void Test6()
  3.         {
  4.             Document doc = Application.DocumentManager.MdiActiveDocument;
  5.             Database db = doc.Database;
  6.             Editor ed = doc.Editor;
  7.             PromptEntityOptions selectOptions = new PromptEntityOptions("\n选择对象");            
  8.             PromptEntityResult selectResult = ed.GetEntity(selectOptions);
  9.             if (selectResult.Status != PromptStatus.OK) return;
  10.             Transaction tr = doc.TransactionManager.StartTransaction();
  11.             using (tr)
  12.             {
  13.                 Entity ent = tr.GetObject(selectResult.ObjectId, OpenMode.ForRead) as Entity;
  14.                 ed.WriteMessage("\n你选择的对象为{0}", ent.GetType().ToString());
  15.             }
  16.         }
 楼主| 发表于 2011-11-10 17:10:02 | 显示全部楼层
刚用你的代码试了,我选择的对象就是Autodesk.AutoCAD.DatabaseServices.Image类型,我要获取的就是这个image类型的名称,最后再进行删除,如直接根据image的objectid去erase的话只是把image卸载掉,并没有从图面上拆除
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 19:26 , Processed in 0.177665 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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