Подравняване на текст спрямо линия
Читател на блога във Facebook попита как може да се подравни текст към съществуваща линия. Проблемът идва когато имаме такъв чертеж, при който съществуват много текстове, които трябва да са успоредни на определени линии. Ако линиите са хоризонтални и вертикални няма проблем, но когато те са с произволен ъгъл нещата стават по-сложни. Трябва да си играем да избираме всеки текст и да го въртим по няколко пъти докато горе-долу изглежда успореден, защото никога не можем „на око“ да го нацелим да е точно успореден.
Ако ви се случва да чертаете такива чертежи, ви предлагам един начин за улеснение с кратка autolisp програма, която се пуска в три стъпки:
1. Копирате лисп кода по-долу и го поставяте в един празен текстов файл, който записване някъде на диска си. Препоръчително е описателно име с разширение lsp като Align-Text.lsp
2. Стартирате командата appload и избирате файла, който сте създали на диска (малко по-подробно как се зарежда лисп програма може да прочетете тук)
3. Изписвате командата Atxt (от Align Text – подравни текст) и избирате последователно една линия и след това един или повече текста, който искате да подравните към нея. Линията не може да бъде полилиния, ако искате да подравните към полилиния, трябва да я превърнете в линия с explode.
(defun c:ATxt (/ VlaObjLine LinAngle VlaObjText )
(vl-load-com )
(setq VlaObjLine (vlax-ename->vla-object (car (entsel "\nИзберете линия: " ))) )
(setq LinAngle (vla-get-Angle VlaObjLine ) )
(while (setq VlaObjText (vlax-ename->vla-object (car (entsel "\nИзберете текст : " ))))
(vla-put-Rotation VlaObjText LinAngle )
(vlax-release-object VlaObjText )
)
(vlax-release-object VlaObjLine )
(princ)
)
Мерси, много полезен лисп! А как могат да се подравнят няколко отделни текста по X или по Y?
@Христо
Избират се обектите и в свойствата им (properties) се задава на ъгъла на завъртане да е 0 или 90 градуса.
Имах предвид текстовете да се преместят по общо Х или Y.
ОК 🙂 Ако правилно съм разбрал сега. Задачата е примерно няколко текста един под друг, но леко разместени, а не подредени спрямо една вертикална линия.
Ако това е случаят, може да се направи много бърз lisp, но аз ползвам друг трик. Избирам обекта, към който искам да бъдат подравнени другите обекти и копирам X координатата му от properties. След това избирам всички обекти и на мястото на X координатата правя paste. Така за няколко секунди всички текстове са абсолютно подравнени по X. Аналогично е и за Y.
Здравейте,
В Аутокад има команда за въртене на текст към дадена линия.Командата се казва „rotate text“ от менютата или пък пишете в командния ред „torient“ , маркирате текста и след това кликате върху 2 точки от линията и текста се завърта успоредно на линията.
@georgi
Решението е с един клик повече, но пък няма необходимост от допълнителни лиспове. Така че, това може би е по-доброто решение за много хора.
Лиспа действа, но в някои случаи обръща текста надолу с главата. Подскажете как мога да го избегна това. 🙂
Това е удобно но не може ли да се направи по разширен вариант за да е по пълно. Примерно да се подравнява и по полилиния и към окръжност или извивка.