AutoCAD从BlockReference获取长度。

时间:2016-10-12 10:47:32

标签: c# autocad autocad-plugin

问题

我很难从AutoCAD中的BlockReference获取长度。 我不知何故成为一名数学教练得到了Widh&高度,但我不能得到长度 到目前为止,BlockReference。 有没有办法获得BlockReference的长度。我查看了AutoCad API,但没有succsess。也许有人可以告诉我方向。

我做了什么

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

1 个答案:

答案 0 :(得分:1)

您的块是否引用了3D对象?如果是这样。我注意到你当前沿X轴(宽度)和Y轴(高度)获得了对象的边界,但是你使用Z轴缺失了。如果Block Reference是一个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