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
  • 相关阅读:
    音箱摆放
    SQL Server数据库开发的二十一条军规
    一年级程序员读《应用框架的设计与实现--.NET平台》
    JavaScript调用现成Word模板完成打印
    Asp.net下C#调用Word模版实例
    Android线程池
    Windows系统编程之异步I/O和完成端口 [北极星2003 看雪论坛]
    [转]异步IO、APC、IO完成端口、线程池与高性能服务器
    [转]Windows 内核(WRK)简介
    [转]IOCPSocket IO模型终结篇
  • 原文地址:https://www.cnblogs.com/swtool/p/SWTOOL_00007.html
Copyright © 2011-2022 走看看