Подравняване на текст спрямо линия

autocad-podravni-text-kum-linia-logoЧитател на блога във 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)
)

 

 

Абонирай се да получаваш AutoCAD Уроци по Емейл

 

Чертане , ,

  1. Христо
    14. април 2010, 15:37 | #1

    Мерси, много полезен лисп! А как могат да се подравнят няколко отделни текста по X или по Y?

  2. 14. април 2010, 17:13 | #2

    @Христо
    Избират се обектите и в свойствата им (properties) се задава на ъгъла на завъртане да е 0 или 90 градуса.

  3. Христо
    15. април 2010, 08:37 | #3

    Имах предвид текстовете да се преместят по общо Х или Y.

  4. 15. април 2010, 18:58 | #4

    ОК :) Ако правилно съм разбрал сега. Задачата е примерно няколко текста един под друг, но леко разместени, а не подредени спрямо една вертикална линия.

    Ако това е случаят, може да се направи много бърз lisp, но аз ползвам друг трик. Избирам обекта, към който искам да бъдат подравнени другите обекти и копирам X координатата му от properties. След това избирам всички обекти и на мястото на X координатата правя paste. Така за няколко секунди всички текстове са абсолютно подравнени по X. Аналогично е и за Y.

  5. georgi
    21. април 2010, 16:08 | #5

    Здравейте,
    В Аутокад има команда за въртене на текст към дадена линия.Командата се казва „rotate text“ от менютата или пък пишете в командния ред „torient“ , маркирате текста и след това кликате върху 2 точки от линията и текста се завърта успоредно на линията.

  6. 22. април 2010, 15:28 | #6

    @georgi

    Решението е с един клик повече, но пък няма необходимост от допълнителни лиспове. Така че, това може би е по-доброто решение за много хора.

КОМЕНТИРАЙТЕ:
  1. Bisher keine Trackbacks