明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4669|回复: 7

[几何] [转帖]AutoCAD2011的边界对象获取实例

[复制链接]
发表于 2010-6-23 17:40:00 | 显示全部楼层 |阅读模式
本实例运行环境:Visual studio 2010 + AutoCAD 2011

运行前:


运行后:


  1. using Autodesk.AutoCAD.ApplicationServices;
  2. using Autodesk.AutoCAD.EditorInput;
  3. using Autodesk.AutoCAD.DatabaseServices;
  4. using Autodesk.AutoCAD.Runtime;
  5. using Autodesk.AutoCAD.Colors;
  6. namespace ClassLibrary4
  7. {
  8.     public class Class1
  9.     {
  10.         static int _index = 1;
  11.         [CommandMethod("TBH")]
  12.         public void TraceBoundaryAndHatch()
  13.         {
  14.             Document doc = Application.DocumentManager.MdiActiveDocument;
  15.             Database db = doc.Database;
  16.             Editor ed = doc.Editor;
  17.             //以点选的方式来获取我们的边界
  18.             PromptPointResult ppr = ed.GetPoint("\n请选择内部点: ");
  19.             if (ppr.Status != PromptStatus.OK)
  20.                 return;
  21.             //获取创建边界的对象集合
  22.             DBObjectCollection objs = ed.TraceBoundary(ppr.Value, false);
  23.             if (objs.Count > 0)
  24.             {
  25.                 Transaction tr = doc.TransactionManager.StartTransaction();
  26.                 using (tr)
  27.                 {
  28.                     //我们将对象添加到模型空间
  29.                     BlockTable bt = (BlockTable)tr.GetObject(doc.Database.BlockTableId, OpenMode.ForRead);
  30.                     BlockTableRecord btr = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
  31.                     //将每个边界对象添加到块记录中,其ObjectId集合到ids集合
  32.                     ObjectIdCollection ids = new ObjectIdCollection();
  33.                     foreach (DBObject obj in objs)
  34.                     {
  35.                         Entity ent = obj as Entity;
  36.                         if (ent != null)
  37.                         {
  38.                             //设置边界对象的颜色为自动增加的色号
  39.                             ent.ColorIndex = _index;
  40.                             //我们的透明度设置为50%(= 127)阿尔法值截断(255 * (100-n)/100)
  41.                             ent.Transparency = new Transparency(127);
  42.                             //每个边界对象添加到块记录,其ID添加到集合
  43.                             ids.Add(btr.AppendEntity(ent));
  44.                             tr.AddNewlyCreatedDBObject(ent, true);
  45.                         }
  46.                     }
  47.                     //创建一个填充对象
  48.                     Hatch hat = new Hatch();
  49.                     //以Solid方式填充,其填充的颜色为自动增加的色号
  50.                     hat.SetHatchPattern(HatchPatternType.PreDefined, "SOLID");
  51.                     hat.ColorIndex = _index++;
  52.                     //我们的透明度设置为50%(= 127)阿尔法值截断(255 * (100-n)/100)
  53.                     hat.Transparency = new Transparency(127);
  54.                     //添加到块记录和事务
  55.                     ObjectId hatId = btr.AppendEntity(hat);
  56.                     tr.AddNewlyCreatedDBObject(hat, true);
  57.                     hat.Associative = true;
  58.                     hat.AppendLoop(HatchLoopTypes.Default, ids);
  59.                     hat.EvaluateHatch(true);
  60.                     //提交事务
  61.                     tr.Commit();
  62.                 }
  63.             }
  64.         }
  65.     }
  66. }


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
 楼主| 发表于 2010-6-23 17:49:00 | 显示全部楼层

以下是“Visual studio 2010+AutoCAD2011” 的源码文件:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2010-6-23 20:41:00 | 显示全部楼层

Autodesk应该搞个可以在实体集合中按点生成边界的方法,

这个TraceBoundary不伦不类的,汗

响铃试过点不在当前可见区域的情况没?

 楼主| 发表于 2010-6-23 23:08:00 | 显示全部楼层
还没试过,明天试试看。
 楼主| 发表于 2010-6-24 09:10:00 | 显示全部楼层

刚试了下,不在可视视图(也就是说在不见的地方)的情况下,有两种:

1.不可视的图元只有一个时,获取的边界正常;

运行前:

 

运行后:

 

2.不可视的图元不止一个时,获取的边界就不正常了.

运行前:

 

运行后: 

 

在全可视的情况下,可以达到我们想要的理想效果:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2010-6-24 11:39:00 | 显示全部楼层

我现在用的是autocad2010map的,TraceBoundary这个方法只有2011里有吧?不知道兄台能否发一个有TraceBoundary方法的dll?还有在autocad2010里引用该dll不晓得能否用TraceBoundary方法,我来试试,谢谢,顶下

发表于 2010-8-1 16:37:00 | 显示全部楼层
老大们,这个要求CAD的最低版本是多少呀?
 楼主| 发表于 2010-8-3 09:17:00 | 显示全部楼层
这个功能只能在AutoCAD2011才能使用.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-29 16:43 , Processed in 0.190590 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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