2016-10-12 4 views
0

ПроблемаAutoCAD Get Length from BlockReference.

им изо всех сил, чтобы получить длину от BlockReference в AutoCAD. Я как-то с математикой нуб получил Widh & Высота, но я не могу получить длину до сих пор BlockReference. Есть ли способ получить длину BlockReference. Ive просмотрел API AutoCad, но без succsess. Может быть, кто-то может показать мне направление.

Что Ive Done

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

Является ли ваша ссылка блок 3D-объект? Если так. Я заметил, что вы в настоящее время получаете границы объекта по оси X (ширина) и оси Y (высота), но вам не хватает использования оси Z. Если ссылка на блок является двумерным объектом, то описанный вами метод не будет работать, поскольку такой информации просто нет.

Вы также можете попробовать посмотреть свойства ссылки на блок в палитре «Свойства» 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

+0

спасибо за ваше время. У меня 2d рисунок. Спасибо за ссылку, есть способ получить длину с тем же методом? - –

+0

Опять же, будучи 2D-объектом, вы не сможете использовать границы объекта, чтобы получить что-либо за пределами границ X и Оси Y, поскольку эта информация просто не существует. Ваш лучший выбор будет, если есть значение «Длина», определенное в свойствах ссылки на блок. Однако это полностью зависит; о том, как была сделана ссылка на блок, и вне зависимости от того, создал ли создатель это значение. –

 Смежные вопросы

  • Нет связанных вопросов^_^