通过LINQ和窗口来选择块参照,并且获取块的说明
2014-07-08 21:24
127 查看
/// <summary>
/// 获取窗口中块说明
/// </summary>
/// <param name="db">数据库对象</param>
/// <param name="pt1">窗口选择角点1</param>
/// <param name="pt2">窗口选择角点2</param>
/// <returns></returns>
public static void getBlocks(this Database db,Point3d pt1,Point3d pt2)
{
BlockTableRecord btr = new BlockTableRecord();
Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.GetDocument(db).Editor;
using (Transaction trans = db.TransactionManager.StartTransaction())
{
//选取模型空间中指定窗口中的块
var blocks = from d in db.SelectCrossingWindow<BlockReference>(pt1,pt2)
select d;
foreach (var bref in blocks)
{
btr =(BlockTableRecord) trans.GetObject(bref.BlockTableRecord, OpenMode.ForRead);
ed.WriteMessage("\n块名为:"+ bref.Name + "\n块说明为:" + btr.Comments);
}
trans.Commit();
}
}
/// <summary>
/// 选择窗口中及和窗口四条边界相交的实体,实体类型为T
/// </summary>
/// <typeparam name="T">实体的类型</typeparam>
/// <param name="db">数据库对象</param>
/// <param name="pt1">窗口的一个角点</param>
/// <param name="pt2">窗口的另一个角点</param>
/// <returns>返回类型为T的实体</returns>
public static List<T> SelectCrossingWindow<T>(this Database db, Point3d pt1, Point3d pt2) where T : Entity
{
return SelectCrossingWindow<T>(db, pt1, pt2, OpenMode.ForRead, false);
}
/// <summary>
/// 选择窗口中及和窗口四条边界相交的实体,实体类型为T
/// </summary>
/// <typeparam name="T">实体的类型</typeparam>
/// <param name="db">数据库对象</param>
/// <param name="pt1">窗口的一个角</param>
/// <param name="pt2">窗口的另一个角点</param>
/// <param name="mode">实体的打开方式</param>
/// <param name="openErased">是否打开已删除的实体</param>
/// <returns>返回类型为T的实体</returns>
public static List<T> SelectCrossingWindow<T>(this Database db, Point3d pt1, Point3d pt2, OpenMode mode, bool openErased) where T : Entity
{
var trans = db.TransactionManager;
string dxfname = RXClass.GetClass(typeof(T)).DxfName;
List<T> ents = new List<T>();
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
TypedValue[] values = { new TypedValue((int)DxfCode.Start, dxfname) };
var filter = new SelectionFilter(values);
var entSelected = ed.SelectCrossingWindow(pt1, pt2, filter);
if (entSelected.Status == PromptStatus.OK)
{
foreach (var id in entSelected.Value.GetObjectIds())
{
T t = (T)(object)trans.GetObject(id, mode, openErased);
ents.Add(t);
}
}
return ents;
}
/// 获取窗口中块说明
/// </summary>
/// <param name="db">数据库对象</param>
/// <param name="pt1">窗口选择角点1</param>
/// <param name="pt2">窗口选择角点2</param>
/// <returns></returns>
public static void getBlocks(this Database db,Point3d pt1,Point3d pt2)
{
BlockTableRecord btr = new BlockTableRecord();
Editor ed = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.GetDocument(db).Editor;
using (Transaction trans = db.TransactionManager.StartTransaction())
{
//选取模型空间中指定窗口中的块
var blocks = from d in db.SelectCrossingWindow<BlockReference>(pt1,pt2)
select d;
foreach (var bref in blocks)
{
btr =(BlockTableRecord) trans.GetObject(bref.BlockTableRecord, OpenMode.ForRead);
ed.WriteMessage("\n块名为:"+ bref.Name + "\n块说明为:" + btr.Comments);
}
trans.Commit();
}
}
/// <summary>
/// 选择窗口中及和窗口四条边界相交的实体,实体类型为T
/// </summary>
/// <typeparam name="T">实体的类型</typeparam>
/// <param name="db">数据库对象</param>
/// <param name="pt1">窗口的一个角点</param>
/// <param name="pt2">窗口的另一个角点</param>
/// <returns>返回类型为T的实体</returns>
public static List<T> SelectCrossingWindow<T>(this Database db, Point3d pt1, Point3d pt2) where T : Entity
{
return SelectCrossingWindow<T>(db, pt1, pt2, OpenMode.ForRead, false);
}
/// <summary>
/// 选择窗口中及和窗口四条边界相交的实体,实体类型为T
/// </summary>
/// <typeparam name="T">实体的类型</typeparam>
/// <param name="db">数据库对象</param>
/// <param name="pt1">窗口的一个角</param>
/// <param name="pt2">窗口的另一个角点</param>
/// <param name="mode">实体的打开方式</param>
/// <param name="openErased">是否打开已删除的实体</param>
/// <returns>返回类型为T的实体</returns>
public static List<T> SelectCrossingWindow<T>(this Database db, Point3d pt1, Point3d pt2, OpenMode mode, bool openErased) where T : Entity
{
var trans = db.TransactionManager;
string dxfname = RXClass.GetClass(typeof(T)).DxfName;
List<T> ents = new List<T>();
Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
TypedValue[] values = { new TypedValue((int)DxfCode.Start, dxfname) };
var filter = new SelectionFilter(values);
var entSelected = ed.SelectCrossingWindow(pt1, pt2, filter);
if (entSelected.Status == PromptStatus.OK)
{
foreach (var id in entSelected.Value.GetObjectIds())
{
T t = (T)(object)trans.GetObject(id, mode, openErased);
ents.Add(t);
}
}
return ents;
}
相关文章推荐
- 通过进程获取窗口的句柄
- 通过ProcessID获取窗口句柄
- Python:通过获取淘宝账号和密码的实验,来看登陆方式选择的重要性(二)
- 通过进程ID获取进程主窗口句柄
- 通过进程ID获取窗口句柄(微软)
- 打开新窗口,并且父窗口得到新窗口的返回值,比如论坛头像的选择,对firefox同样适合
- 通过句柄,获取窗口的指针
- Python:通过获取淘宝账号和密码的实验,来看登陆方式选择的重要性
- MS SQL 获取数据库名,表名,列名,说明等信息(SQL Server 2005 测试通过)
- vs不支持通过afxgetmainwnd()获取窗口句柄
- 通过Linq来获取数据库中的所有表及其字段名称
- 通过窗口句柄获取窗口图标的几种办法
- MS SQL 获取数据库名,表名,列名,说明等信息(SQL Server 2005 测试通过)
- Python:通过获取淘宝账号和密码的实验,来看登陆方式选择的重要性
- 通过进程ID获取最顶层窗口句柄
- 通过Intent获取其他窗口的处理结果
- C# 通过窗口句柄获取程序运行路径 通过程序运行路径获取程序图标
- 如何通过字符串指定的窗口名称,获取该窗口内的控件
- Python:通过获取淘宝账号和密码的实验,来看登陆方式选择的重要性
- js弹出一个新窗口进行选择并且返回这个页面的值-showModalDialog