【问题标题】:AutoCAD Get Length from BlockReference.AutoCAD 从块参考中获取长度。
【发布时间】:2023-03-05 20:54:01
【问题描述】:

问题

我正在努力从 AutoCAD 中的块引用中获取长度。 作为一个数学菜鸟,我不知何故得到了宽度和高度,但我无法得到长度 到目前为止的 BlockReference。 有没有办法获取 BlockReference 的长度。我查看了 AutoCad API 但没有成功。也许有人可以告诉我方向。

我做了什么

   public static double GetBlockWidthAndHeight(BlockReference blockReference) {
            try {
                var db = HostApplicationServices.WorkingDatabase;
                var blockname = blockReference.Name;
                double width = 0;

                using (var tr = db.TransactionManager.StartTransaction()) {
                    var bt = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
                    if (!bt.Has(blockname)) {
                        return 0;
                    }

                    var btrec = (BlockTableRecord)tr.GetObject(bt[blockname], OpenMode.ForRead, false);
                    Extents3d? bounds;
                    bounds = btrec.Bounds;
                    if (bounds.HasValue) {
                        var ext = bounds.Value;
                        width = ext.MaxPoint.X - ext.MinPoint.X;
                        double height = ext.MaxPoint.Y - ext.MinPoint.Y;
                    }
                    else {
                        var bref = new BlockReference(Point3d.Origin, bt[blockname]);
                        bounds = bref.Bounds;
                        var ext = bounds.Value;
                        width = ext.MaxPoint.X - ext.MinPoint.X;
                        double height = ext.MaxPoint.Y - ext.MinPoint.Y;
                        bref.Dispose();
                    }
                    tr.Commit();
                }

                return width;
            }
            catch (Exception ex) {
                Debug.WriteLine(ex.Message);
            }
            return 0;
        }

【问题讨论】:

    标签: c# autocad autocad-plugin


    【解决方案1】:

    您的块引用的是 3D 对象吗?如果是这样的话。我注意到您当前沿 X 轴(宽度)和 Y 轴(高度)获得了对象的边界,但您没有使用 Z 轴。如果块引用是 2D 对象,那么使用您描述的方法将不起作用,因为该信息根本不存在。

    您也可以尝试在 AutoCAD 的“属性”选项板下查看块参照的属性。根据块引用的制作方式,可能已经存在您可以通过 API 轻松访问的维度值。

    这是 Kean Wamsley 博客的链接,其中提供了一些关于如何利用 API 直接访问块信息的简短示例 - http://through-the-interface.typepad.com/through_the_interface/2009/03/accessing-the-properties-of-a-dynamic-autocad-block-using-net.html

    【讨论】:

    • 感谢您的宝贵时间。我有一张二维图。感谢您的链接有没有办法用相同的方法获得长度?-
    • 同样,作为一个 2D 对象,您将无法使用对象的边界来获取 X 和 Y 轴边界之外的任何内容,因为该信息根本不存在。如果在块引用的属性中定义了某种“长度”值,则最好的选择是。然而,这是完全依赖的;关于如何制作块引用以及创建者是否将那个值放在那里。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-20
    • 1970-01-01
    • 1970-01-01
    • 2017-02-04
    • 1970-01-01
    • 2022-07-01
    相关资源
    最近更新 更多