12/05/2015
Выравнивание MTEXT по кривой в указанной точке
На форуме Autodesk возник вопрос об автоматическом выравнивании объекта MText параллельно некоторой кривой без дополнительных запросов угла поворота. Ответ Kent Cooper содержит все что необходимо.
Подобная задача нередко встает в задачах, которые решает обычно Civil. Здесь предоставляется образец кода, который можно использовать при решении подобных вопросов. Основа лежит в определении первой производной к кривой в необходимой точке.
Код - Auto/Visual LISP: [Выделить]
- (vl-load-com)
- (setq es (entsel)
- entpt (osnap (cadr es) "_nea")
- ang (angle '(0 0 0)
- (vlax-curve-getfirstderiv
- (vlax-ename->vla-object (car es))
- (vlax-curve-getparamatpoint
- (vlax-ename->vla-object (car es))
- entpt
- ) ;_ end of vlax-curve-getParamAtPoint
- ) ;_ end of vlax-curve-getFirstDeriv
- ) ;_ end of angle
- ) ;_ end of setq
- (if (and (> ang (/ pi 2)) (<= ang (* pi 1.5)))
- (setq ang (+ ang pi))
- ) ;_ end of if
- (setq hght (getreal "\nText Height : "))
- (setq
- mspace (vla-get-modelspace
- (vla-get-activedocument (vlax-get-acad-object))
- ) ;_ end of vla-get-modelspace
- ) ;_ end of setq
- (setq mtextobj (vla-addmtext
- mspace
- (vlax-3d-point entpt)
- 0.0
- "AUTOCAD"
- ) ;_ end of vla-addMText
- ) ;_ end of setq
- (vla-put-attachmentpoint
- mtextobj
- acattachmentpointmiddlecenter
- ) ;_ end of vla-put-attachmentPoint
- (vla-put-insertionpoint mtextobj (vlax-3d-point entpt))
- (vla-put-rotation mtextobj ang)
- (vla-put-height mtextobj hght)
- (vla-put-color mtextobj 7)
- (vla-put-backgroundfill mtextobj :vlax-true)
Источник: Aligning MText with picked point on a curve by Balaji Ramamoorthy
Переводчик: Алексей Кулик
Примечание переводчика: предоставленное решение будет корректно работать только в том случае, если выполняется несколько условий:
- Кривая является плоской
- Текущая система координат - мировая. В любом другом случае потребуется проверять полученную точку, а также преобразовывать систему координат объекта MText
- Вид крайне желательно предварительно установить в "Top" (вид сверху): в противном случае может быть неверно получена точка привязки MText
Обсуждение: http://adn-cis.org/forum/index.php?topic=2696
Опубликовано 12.05.2015