zoukankan      html  css  js  c++  java
  • autocad.net 利用linq获取矩形框内的块参照

    利用linq获取在两点确定的矩形内的块参照 

    Query syntax:

    private ObjectId[] FindBlockReferencesInRectangle(Point3d pt1, Point3d pt2, Database db)
            {
                using (Transaction tr = db.TransactionManager.StartOpenCloseTransaction())
                using (Line line = new Line(pt1, pt2))
                {
                    Extents3d bound = line.GeometricExtents;
    
                    BlockTableRecord modelSpace = (BlockTableRecord)tr.GetObject(
                      SymbolUtilityServices.GetBlockModelSpaceId(db), OpenMode.ForRead);
    
                    Func<ObjectId, bool> isBlockReference = (id =>
                        id.ObjectClass == RXClass.GetClass(typeof(BlockReference)));
    
                    Func<ObjectId, bool> isInside = (id =>
                    {
                        BlockReference br = (BlockReference)tr.GetObject(id, OpenMode.ForRead);
                        Extents3d exts = new Extents3d(bound.MinPoint, bound.MaxPoint);
                        exts.AddExtents(br.GeometricExtents);
                        return bound.IsEqualTo(exts);
                    }); ;
    
                    var blocks =
                        from ObjectId id in modelSpace
                        where isBlockReference(id) && isInside(id)
                        select id;
    
                    return blocks.ToArray();
                }
            }
    View Code

    Extension methods syntax:

            private ObjectId[] FindBlockReferencesInRectangle(Point3d pt1, Point3d pt2, Database db)
            {
                using (Transaction tr = db.TransactionManager.StartOpenCloseTransaction())
                using (Line line = new Line(pt1, pt2))
                {
                    Extents3d bound = line.GeometricExtents;
    
                    BlockTableRecord modelSpace = (BlockTableRecord)tr.GetObject(
                        SymbolUtilityServices.GetBlockModelSpaceId(db), OpenMode.ForRead);
    
                    Func<ObjectId, bool> isBlockReference = (id =>
                        id.ObjectClass == RXClass.GetClass(typeof(BlockReference)));
    
                    Func<ObjectId, bool> isInside = (id =>
                    {
                        BlockReference br = (BlockReference)tr.GetObject(id, OpenMode.ForRead);
                        Extents3d exts = new Extents3d(bound.MinPoint, bound.MaxPoint);
                        exts.AddExtents(br.GeometricExtents);
                        return bound.IsEqualTo(exts);
                    });
    
                    return modelSpace
                        .Cast<ObjectId>()
                        .Where(isBlockReference)
                        .Where(isInside)
                        .ToArray();
                }
            }
    View Code
  • 相关阅读:
    函数
    函数式编程
    高级特性
    内建的数据结构
    条件语句和循环语句
    java_基础——用代码编译.java文件+加载class文件
    日期格式私人定制——SimpleDateFormat
    java7(3)——增强的catch之自动释放资源
    java7(2)——使用mutilcatch注意事项
    java7(1)——反编译深入理解增强的switch(读字节命令实战)
  • 原文地址:https://www.cnblogs.com/swtool/p/SWTOOL_00007.html
Copyright © 2011-2022 走看看