ADN Open CIS
Сообщество программистов Autodesk в СНГ

12/05/2015

Выравнивание MTEXT по кривой в указанной точке

На форуме Autodesk возник вопрос об автоматическом выравнивании объекта MText параллельно некоторой кривой без дополнительных запросов угла поворота. Ответ Kent Cooper содержит все что необходимо.

Подобная задача нередко встает в задачах, которые решает обычно Civil. Здесь предоставляется образец кода, который можно использовать при решении подобных вопросов. Основа лежит в определении первой производной к кривой в необходимой точке.

Код - Auto/Visual LISP: [Выделить]
  1. (vl-load-com)
  2.  
  3. (setq es    (entsel)
  4.       entpt (osnap (cadr es) "_nea")
  5.       ang   (angle '(0 0 0)
  6.                    (vlax-curve-getfirstderiv
  7.                      (vlax-ename->vla-object (car es))
  8.                      (vlax-curve-getparamatpoint
  9.                        (vlax-ename->vla-object (car es))
  10.                        entpt
  11.                        ) ;_ end of vlax-curve-getParamAtPoint
  12.                      ) ;_ end of vlax-curve-getFirstDeriv
  13.                    ) ;_ end of angle
  14.       ) ;_ end of setq
  15. (if (and (> ang (/ pi 2)) (<= ang (* pi 1.5)))
  16.   (setq ang (+ ang pi))
  17.   ) ;_ end of if
  18. (setq hght (getreal "\nText Height : "))
  19. (setq
  20.   mspace (vla-get-modelspace
  21.            (vla-get-activedocument (vlax-get-acad-object))
  22.            ) ;_ end of vla-get-modelspace
  23.   ) ;_ end of setq
  24.  
  25. (setq mtextobj (vla-addmtext
  26.                  mspace
  27.                  (vlax-3d-point entpt)
  28.                  0.0
  29.                  "AUTOCAD"
  30.                  ) ;_ end of vla-addMText
  31.       ) ;_ end of setq
  32. (vla-put-attachmentpoint
  33.   mtextobj
  34.   acattachmentpointmiddlecenter
  35.   ) ;_ end of vla-put-attachmentPoint
  36. (vla-put-insertionpoint mtextobj (vlax-3d-point entpt))
  37. (vla-put-rotation mtextobj ang)
  38. (vla-put-height mtextobj hght)
  39. (vla-put-color mtextobj 7)
  40. (vla-put-backgroundfill mtextobj :vlax-true)

Источник: Aligning MText with picked point on a curve by Balaji Ramamoorthy

Переводчик: Алексей Кулик

Примечание переводчика: предоставленное решение будет корректно работать только в том случае, если выполняется несколько условий:

  1. Кривая является плоской
  2. Текущая система координат - мировая. В любом другом случае потребуется проверять полученную точку, а также преобразовывать систему координат объекта MText
  3. Вид крайне желательно предварительно установить в "Top" (вид сверху): в противном случае может быть неверно получена точка привязки MText

Обсуждение: http://adn-cis.org/forum/index.php?topic=2696

Опубликовано 12.05.2015