通过LINQ和窗口来选择块参照,并且获取块的说明

/// <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;

}

通过LINQ和窗口来选择块参照,并且获取块的说明

时间: 2024-08-28 21:41:33

通过LINQ和窗口来选择块参照,并且获取块的说明的相关文章

[M]带属性块参照的转换

有一张表格,表格的每一行都由带有属性的块参照组成,如图: 魔法表格不能直接识别有块参照组成的表格,需要使用 EXPLODE 命令将块参照分解,但多分解带有属性的块只能得到属性的定义 这是就需要使用 BURST 命令(Express命令,如果没安装Express,在控制面板中找到AutoCAD,修改安装,把Express选择上,修复安装就能安装上),可以分解带有属性的块参照.

[Q]无矩形外框块参照图形的识别

该图纸的图框由块参照组成,其外侧图框不是矩形 使用默认设置无法正确识别,需要做以下修改:不勾选“块/外部参照”,勾选“块/外部参照边界”,勾选“制定块”并选择图框(块参照).

块参照重命名

#region 重命名块参照        /// <summary>        /// 重命名块参照        /// </summary>        /// <param name="db"> 当前数据库</param>        /// <param name="oldBlockname">块参照旧名</param>        /// <param name=&q

打开窗口进行选择文件(txt文件),打开所选文件,读入文件

用mfc编写项目的时候往往需要调用窗口,允许用户通过窗口进行选择文件操作 TCHAR szBuffer[MAX_PATH] = { 0 }; OPENFILENAME ofn = { 0 }; ofn.lStructSize = sizeof(ofn); ofn.hwndOwner = m_hWnd; ofn.lpstrFilter = _T("txt文件(*.txt)\0");//要选择的文件后缀 char buf[80]; getcwd(buf, sizeof(buf)); ofn

Java中静态代码块、构造代码块、构造函数、普通代码块(转载)

转载自:http://www.cnblogs.com/ysocean/p/8194428.html 目录 1.静态代码块 ①.格式 ②.执行时机 ③.静态代码块的作用 ④.静态代码块不能存在任何方法体中 ⑤.静态代码块不能访问普通变量 2.构造代码块 ①.格式 ②.执行时机 ③.构造代码块的作用 3.构造函数 4.普通代码块 5.执行顺序 6.父类和子类执行顺序 在Java中,静态代码块.构造代码块.构造函数.普通代码块的执行顺序是一个笔试的考点,通过这篇文章希望大家能彻底了解它们之间的执行顺序

Java中普通代码块,构造代码块,静态代码块区别及代码示例

//普通代码块:在方法或语句中出现的{}就称为普通代码块.普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--"先出现先执行"public class CodeBlock01{ public static void main(String[] args){ { int x=3; System.out.println("1,普通代码块内的变量x="+x); } int x=1; System.out.println("主方法内的变量x="

Java的初始化块、静态初始化块、构造函数的执行顺序及用途探究

随笔- 40  文章- 0  评论- 1 Java的初始化块.静态初始化块.构造函数的执行顺序及用途探究 Java与C++有一个不同之处在于,Java不但有构造函数,还有一个”初始化块“(Initialization Block)的概念.下面探究一下它的执行顺序与可能的用途. 执行顺序 首先定义A, B, C三个类用作测试,其中B继承了A,C又继承了B,并分别给它们加上静态初始化块.非静态初始化块和构造函数,里面都是一句简单的输出. 主类Main里面也如法炮制. 1 class A { 2 st

局部代码块和构造代码块

局部代码块 1 package com_package2; 2 3 public class Person3Demo { 4 public static void main(String[]args) 5 { 6 Person3 p = new Person3(); 7 p.speak(); 8 Person3 p1 = new Person3("hejinjin",23); 9 p1.speak(); 10 Person3 p2 = new Person3("hejinji

构造函数,构造代码块和静态代码块的先后顺序和运用

在自学到java面向对象时,知道有静态代码块,构造代码块和构造函数的存在,如果说构造函数是初始化对象,那么其他2者又是怎么使用,又有什么区别呢.简单的举了下面的例子: 1 package 面向对象; 2 3 class Child 4 { 5 private String country; 6 private String name; 7 Child(String name)//构造函数. 8 { 9 this.name=name; 10 System.out.println(this.name