[转帖]AutoCAD2011的边界对象获取实例
本实例运行环境:Visual studio 2010 + AutoCAD 2011运行前:
运行后:
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.Colors;
namespace ClassLibrary4
{
public class Class1
{
static int _index = 1;
public void TraceBoundaryAndHatch()
{
Document doc = Application.DocumentManager.MdiActiveDocument;
Database db = doc.Database;
Editor ed = doc.Editor;
//以点选的方式来获取我们的边界
PromptPointResult ppr = ed.GetPoint("\n请选择内部点: ");
if (ppr.Status != PromptStatus.OK)
return;
//获取创建边界的对象集合
DBObjectCollection objs = ed.TraceBoundary(ppr.Value, false);
if (objs.Count > 0)
{
Transaction tr = doc.TransactionManager.StartTransaction();
using (tr)
{
//我们将对象添加到模型空间
BlockTable bt = (BlockTable)tr.GetObject(doc.Database.BlockTableId, OpenMode.ForRead);
BlockTableRecord btr = (BlockTableRecord)tr.GetObject(bt, OpenMode.ForWrite);
//将每个边界对象添加到块记录中,其ObjectId集合到ids集合
ObjectIdCollection ids = new ObjectIdCollection();
foreach (DBObject obj in objs)
{
Entity ent = obj as Entity;
if (ent != null)
{
//设置边界对象的颜色为自动增加的色号
ent.ColorIndex = _index;
//我们的透明度设置为50%(= 127)阿尔法值截断(255 * (100-n)/100)
ent.Transparency = new Transparency(127);
//每个边界对象添加到块记录,其ID添加到集合
ids.Add(btr.AppendEntity(ent));
tr.AddNewlyCreatedDBObject(ent, true);
}
}
//创建一个填充对象
Hatch hat = new Hatch();
//以Solid方式填充,其填充的颜色为自动增加的色号
hat.SetHatchPattern(HatchPatternType.PreDefined, "SOLID");
hat.ColorIndex = _index++;
//我们的透明度设置为50%(= 127)阿尔法值截断(255 * (100-n)/100)
hat.Transparency = new Transparency(127);
//添加到块记录和事务
ObjectId hatId = btr.AppendEntity(hat);
tr.AddNewlyCreatedDBObject(hat, true);
hat.Associative = true;
hat.AppendLoop(HatchLoopTypes.Default, ids);
hat.EvaluateHatch(true);
//提交事务
tr.Commit();
}
}
}
}
}
<p>以下是“Visual studio 2010+AutoCAD2011” 的源码文件:</p>
<p></p> <p>Autodesk应该搞个可以在实体集合中按点生成边界的方法,</p>
<p>这个TraceBoundary不伦不类的,汗</p>
<p>响铃试过点不在当前可见区域的情况没?</p> 还没试过,明天试试看。 <p>刚试了下,不在可视视图(也就是说在不见的地方)的情况下,有两种:</p>
<p>1.不可视的图元只有一个时,获取的边界正常;</p>
<p>运行前:</p>
<p></p>
<p> </p>
<p>运行后:</p>
<p></p>
<p> </p>
<p>2.不可视的图元不止一个时,获取的边界就不正常了.</p>
<p>运行前:</p>
<p></p>
<p> </p>
<p>运行后: </p>
<p></p>
<p> </p>
<p>在全可视的情况下,可以达到我们想要的理想效果:</p> <p>我现在用的是autocad2010map的,<font face="Verdana">TraceBoundary</font>这个方法只有2011里有吧?不知道兄台能否发一个有<font face="Verdana">TraceBoundary</font>方法的dll?还有在autocad2010里引用该dll不晓得能否用<font face="Verdana">TraceBoundary方法,我来试试,谢谢,顶下</font></p> 老大们,这个要求CAD的最低版本是多少呀? 这个功能只能在AutoCAD2011才能使用.
页:
[1]