4.2.2.5. Отображение границ чертежа

Источник здесь.[перевод не проверен];[перевёл Андрей Бушман]

    Границы или лимиты чертежа используют для определения всё тех же границ, содержащих в себе даже наиболее удалённые объекты текущего пространства. Для иллюстрации работы зуммирования, читайте раздел “Magnify a View (Zoom)” (Приближение вида (зуммирование)) руководства пользователя по AutoCAD1.

Вычисление границ текущего пространства

Границы текущего пространства могут быть получены из объекта Database через следующие свойства:
  • Extmin and Extmax - Возвращают границы пространства модели.
  • Pextmin and Pextmax - Возвращают границы текущего листа в пространстве листов.Однажды получив границы текущего пространства, вы можете рассчитывать новые значения свойств Width (ширины) и Height (высоты) текущего вида. 
    Новое значение ширины вида может быть рассчитано по следующей формуле:
dWidth = MaxPoint.X - MinPoint.X
    Новое значение высоты вида может быть рассчитано по формуле:
dHeight = MaxPoint.Y - MinPoint.Y
    После того, как будут рассчитаны ширина и высота вида, можно вычислить его центральную точку по следующей формуле:
dCenterX = (MaxPoint.X + MinPoint.X) * 0.5
dCenterY = (MaxPoint.Y + MinPoint.Y) * 0.5

Вычисление лимитов текущего пространства

    Изменение отображения чертежа основано на лимитах текущего пространства2. Для этого используются свойства Limmin (минимальное значение лимитов) и Limmax (максимальное значение лимитов), а так же свойства Plimmin и Plimmax объекта Database (базы данных документа).
После того, как получены точки, определяющие лимиты текущего пространства, вы можете использовать приведённые выше формулы, для определения ширины, высоты и центральной точки нового вида.

Зуммирование границ и лимитов текущего пространства

Приведённый ниже код показывает, как можно получить лимиты текущего пространства, посредством использования процедуры Zoom, определённой под Управлением Текущего Вида.

    В процедуру Zoom передают, в общей сложности четыре параметра. Первые два - являются точками, которые определяют крайние левую нижнюю и правую верхнюю точку отображаемой области. Третий параметр определён как новая 3D точка и игнорируется процедурой, в то время как последний параметр используется для изменения размеров изображения чертежа таким образом, чтобы оно не полностью заполняло окно чертежа3.

Код VB.NET

   1:  <CommandMethod("ZoomExtents")> _
   2:  Public Sub ZoomExtents()
   3:   
   4:  '' Зуммирование границ текущего пространства
   5:  Zoom(New Point3d(), New Point3d(), New Point3d(), 1.01075)
   6:  End Sub 
   7:   
   8:  <CommandMethod("ZoomLimits")> _
   9:  Public Sub ZoomLimits()
  10:  Dim acDoc As Document = Application.DocumentManager.MdiActiveDocument
  11:  Dim acCurDb As Database = acDoc.Database
  12:   
  13:  '' Зуммирование лимитов пространства модели
  14:  Zoom(New Point3d(acCurDb.Limmin.X, acCurDb.Limmin.Y, 0), _
  15:  New Point3d(acCurDb.Limmax.X, acCurDb.Limmax.Y, 0), _
  16:  New Point3d(), 1)
  17:  End Sub

Код C#

   1:  [CommandMethod("ZoomExtents")]
   2:  static public void ZoomExtents()
   3:  {
   4:    // Зуммирование границ текущего пространства
   5:    Zoom(new Point3d(), new Point3d(), new Point3d(), 1.01075);
   6:  }
   7:   
   8:  [CommandMethod("ZoomLimits")]
   9:  static public void ZoomLimits()
  10:  {
  11:    Document acDoc = Application.DocumentManager.MdiActiveDocument;
  12:    Database acCurDb = acDoc.Database;
  13:   
  14:    // Зуммирование лимитов пространства модели
  15:    Zoom(new Point3d(acCurDb.Limmin.X, acCurDb.Limmin.Y, 0),
  16:         new Point3d(acCurDb.Limmax.X, acCurDb.Limmax.Y, 0),
  17:         new Point3d(), 1);
  18:  }

Код VBA / ActiveX

   1:  Sub ZoomExtents()
   2:  ThisDrawing.Application.ZoomExtents
   3:  End Sub 
   4:   
   5:  Sub ZoomLimits()
   6:  Dim point1(0 To 2) As Double
   7:  Dim point2(0 To 2) As Double 
   8:   
   9:  point1(0) = ThisDrawing.GetVariable("LIMMIN")(0)
  10:  point1(1) = ThisDrawing.GetVariable("LIMMIN")(1)
  11:  point1(2) = 0# 
  12:   
  13:  point2(0) = ThisDrawing.GetVariable("LIMMAX")(0)
  14:  point2(1) = ThisDrawing.GetVariable("LIMMAX")(1)
  15:  point2(2) = 0# 
  16:   
  17:  ThisDrawing.Application.ZoomWindow point1, point2
  18:  End Sub

Примечания переводчика:
1не следует путать обозначенный документ с настоящим руководством
2 - модели или листа
3 - т.е. это масштабный коэффициент, посредством которого мы выполняем приближение/удаление

Comments