Реклама i
Стань нашим партнером - зарабатывай с нами!
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > выравнивание текста по линии (прилепить к линии)

выравнивание текста по линии (прилепить к линии)

Ответ
Поиск в этой теме
Непрочитано 05.02.2009, 13:43 #1
выравнивание текста по линии (прилепить к линии)
LAmyk
 
Регистрация: 05.02.2009
Сообщений: 37

поиск пользовал, конкретно не нашел
есть ли возможность выровнять автоматически текст по линии, как показано на рисунке?

Миниатюры
Нажмите на изображение для увеличения
Название: Untitled-3.gif
Просмотров: 1377
Размер:	5.8 Кб
ID:	15620  

Просмотров: 22948
 
Непрочитано 05.02.2009, 14:29
#2
AlexV

Инженер
 
Регистрация: 02.10.2008
С-Пб
Сообщений: 3,686


VBA макрос, предлагает выбрать набор текстовых объектов, затем Line. Текст выравнивается по координате X начальной точки отрезка
Код:
[Выделить все]
Option Explicit
Sub main()
On Error Resume Next
Dim acSelSet As AcadSelectionSet
Dim obj_line  As AcadEntity, varPoint, obj_txt
Dim minExt, maxExt, Lpnt
Set acSelSet = SelectOnlyOnScreen
ThisDrawing.Utility.GetEntity obj_line, varPoint, "Выберите линию..."
If TypeName(obj_line) <> "IAcadLine" Then End
Lpnt = obj_line.StartPoint
For Each obj_txt In acSelSet
 obj_txt.GetBoundingBox minExt, maxExt
 Lpnt(1) = minExt(1)
 Lpnt(2) = minExt(2)
 obj_txt.Move minExt, Lpnt
Next
End Sub
Private Function SelectOnlyOnScreen() As AcadSelectionSet
Dim objSelSet As AcadSelectionSet
Dim objSelCol As AcadSelectionSets
Dim intType(0) As Integer
Dim varData(0) As Variant
Set objSelCol = ThisDrawing.SelectionSets
For Each objSelSet In objSelCol
 If objSelSet.Name = "Txt_Tmp" Then
  objSelSet.Delete
  Exit For
 End If
Next
Set objSelSet = ThisDrawing.SelectionSets.Add("Txt_Tmp")
intType(0) = 0
varData(0) = "TEXT"
objSelSet.SelectOnScreen intType, varData
Set SelectOnlyOnScreen = objSelSet
End Function
__________________
...Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка - ложка понарошку,
А по правде, - это лом!

Последний раз редактировалось AlexV, 05.02.2009 в 14:42.
AlexV вне форума  
 
Непрочитано 12.09.2014, 16:45
#3
Abzorbo

инженер-конструктор
 
Регистрация: 25.01.2007
Киев
Сообщений: 740
<phrase 1= Отправить сообщение для Abzorbo с помощью Skype™


есть ли лисп для выполнения данной команды?
__________________
Time and time again
I witness a birth of a new-born star.
I climb the highest mountain
To find the essence of a new era...
Abzorbo вне форума  
 
Непрочитано 12.09.2014, 18:49
1 | #4
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 5,992


Abzorbo, используй текстовый редактор из VetCAD.
http://vetcad.ru/tv.rar
Nike вне форума  
 
Непрочитано 12.09.2014, 19:55
1 | #5
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,992
<phrase 1= Отправить сообщение для VVA с помощью Skype™


может это подойдет Align Text
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 12.09.2014, 20:15
2 | #6
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Код:
[Выделить все]
;****************** alv_text .lsp *********************************************
; align_ver_text     Выравнивание однострочного текста по вертикали.
;                    Шаблоном для выравнивания служит точка вставки
;                    указанной строки, но можно указать и любой
;                    другой объект, например, вертикальный отрезок.
;                    Автор Владимир Громов
(defun C:ALV_TEXT ( / echo osm tn tk ss1 ss ssn1 pp pp1 n e txtt txt twa two twm)
           (setq echo (getvar "cmdecho"))
           (setvar "cmdecho" 0)
           (setq osm (getvar "osmode"))
           (setvar "osmode" 0)
(command "_.undo" "_be")
           (princ "\n Выберите текстовые строки: ")
           (setq ss1 (ssget))
         (if ss1
           (progn
           (setq ss (ssadd))                    
           (setq ssn1 (sslength ss1) n 0)       
           (repeat ssn1
           (setq pp (ssname ss1 n))             
           (setq pp1 (entget pp))               
           (cond
           ((and(= (cdr (assoc '0 pp1)) "TEXT") (= (cdr (assoc '50 pp1)) 0))
           (ssadd pp ss)   ;Набор ТЕКСТОВ
           )); cond
           (setq n (+ n 1))
           ); repeat
           (setq ssn (sslength ss) n 0)
           (setq txtt (entsel "\n Выберите строку-шаблон или объект для выравнивания: "))
              (if txtt
              (progn
              (setq txt (car txtt))
              (setq twa (cdr (assoc 10 (entget txt))))
              (setq n 0)
              (repeat ssn
                      (setq e (ssname ss n))
                      (setq two (cdr (assoc 10 (entget e))))
                      (setq twm (list (car twa)  (cadr two)))
                      (command "_MOVE" e "" "_none" two "_none" twm)
                      (setq n (+ n 1))
              ); repeat
              ) ; progn 
              (princ "\n Нет шаблона для выравнивания.")
              ) ; if
           ); progn
         (princ "\n Нет выбранных объектов. ")
         ); if
(command "_.undo" "_e")
           (setvar "cmdecho" echo)
           (setvar "osmode" osm)
      (princ)
)
Profan вне форума  
 
Непрочитано 15.09.2014, 10:10
#7
Abzorbo

инженер-конструктор
 
Регистрация: 25.01.2007
Киев
Сообщений: 740
<phrase 1= Отправить сообщение для Abzorbo с помощью Skype™


Nike, что-то не грузится в мой акад твоя софтина. У меня Acad 2013 x64.
Версия от VVA прикольная, но текст по вертикали слетает, удобно, но не во всех случаях.
Версия от Profan не сбивает текст по вертикали!
Спасибо, товарищи!
__________________
Time and time again
I witness a birth of a new-born star.
I climb the highest mountain
To find the essence of a new era...
Abzorbo вне форума  
 
Непрочитано 03.11.2015, 09:08
#8
VaniaLSD


 
Регистрация: 13.02.2014
Сообщений: 22


А Мtext не сдигает.
VaniaLSD вне форума  
 
Непрочитано 03.11.2015, 09:53
#9
engngr

сети
 
Регистрация: 03.11.2008
Московия*
Сообщений: 5,780


Выбрать тексты (text, mtext) и задать им единую координату по x.
engngr вне форума  
 
Непрочитано 03.11.2015, 09:56
#10
ProPeller

Пастух
 
Регистрация: 16.07.2012
Питер
Сообщений: 318


Цитата:
Сообщение от engngr Посмотреть сообщение
Выбрать тексты (text, mtext) и задать им единую координату по x.
А если линия будет наклонной?
__________________
Автоматизация должна быть автоматической.
ProPeller вне форума  
 
Непрочитано 03.11.2015, 10:07
#11
engngr

сети
 
Регистрация: 03.11.2008
Московия*
Сообщений: 5,780


Цитата:
Сообщение от ProPeller Посмотреть сообщение
А если линия будет наклонной?
Установить пск.
upd: с наклонной будет, конечно, не айс, но, имхо, задать координату - самый простой стандартный способ для задачи из #1.
engngr вне форума  
 
Непрочитано 06.01.2016, 11:50
#12
aligor


 
Регистрация: 27.04.2015
Сообщений: 7


Не возражаете, если вклинюсь в вашу тему?
Кажется о этом идет разговор.

Давненько приятель написал мне (еще под AutoCAD 14) лиспик для выравнивания текста по заданной линии. Этот лисп работает и на более современных версиях.
Здесь две команды:

1. Выровнять текст по линии;
2. Повернуть текст на 180 градусов.

Код:
[Выделить все]
 (defun c:У (/)
(setq lin (entget (car (entsel "Укажите линию:"))))
(setq a1 (angle (cdr (assoc 10 lin)) (cdr (assoc 11 lin))))
(setq tex (entget (car (entsel "Укажите текст:"))))
(setq tex (subst (cons 50 a1) (assoc 50 tex) tex))
(entmod tex)
)

(defun c:П (/)
(setq tex (entget (car (entsel "Укажите текст:"))))
(setq a1 (+ (cdr (assoc 50 tex)) PI))
(setq tex (subst (cons 50 a1) (assoc 50 tex) tex))
(entmod tex)
)

В строке "Макросы" для первой команды вставить : ^C^C_У
Для второй команды: ^C^C_П
aligor вне форума  
 
Непрочитано 25.01.2018, 10:48
#13
Alternativa2212


 
Регистрация: 16.01.2018
Сообщений: 17


ребят а как этот макрос установить, и как пользоватся я во всяких дополнения ваще не шарю
Alternativa2212 вне форума  
 
Непрочитано 25.01.2018, 10:58
#14
AlexCondor

инженер
 
Регистрация: 03.08.2007
Сообщений: 1,327


Alternativa2212,
FAQ: Часто задаваемые вопросы > 1. AutoCAD
AlexCondor вне форума  
 
Непрочитано 13.05.2019, 12:07
#15
allar8


 
Регистрация: 12.03.2013
Сообщений: 650


Цитата:
Сообщение от Profan Посмотреть сообщение
;****************** alv_text .lsp *********************************************
; align_ver_text Выравнивание однострочного текста по вертикали.
; Шаблоном для выравнивания служит точка вставки
; указанной строки, но можно указать и любой
; другой объект, например, вертикальный отрезок.
; Автор Владимир Громов
(defun C:ALV_TEXT ( / echo osm tn tk ss1 ss ssn1 pp pp1 n e txtt txt twa two twm)
(setq echo (getvar "cmdecho"))
(setvar "cmdecho" 0)
(setq osm (getvar "osmode"))
(setvar "osmode" 0)
(command "_.undo" "_be")
(princ "\n Выберите текстовые строки: ")
(setq ss1 (ssget))
(if ss1
(progn
(setq ss (ssadd))
(setq ssn1 (sslength ss1) n 0)
(repeat ssn1
(setq pp (ssname ss1 n))
(setq pp1 (entget pp))
(cond
((and(= (cdr (assoc '0 pp1)) "TEXT") (= (cdr (assoc '50 pp1)) 0))
(ssadd pp ss) ;Набор ТЕКСТОВ
)); cond
(setq n (+ n 1))
); repeat
(setq ssn (sslength ss) n 0)
(setq txtt (entsel "\n Выберите строку-шаблон или объект для выравнивания: "))
(if txtt
(progn
(setq txt (car txtt))
(setq twa (cdr (assoc 10 (entget txt))))
(setq n 0)
(repeat ssn
(setq e (ssname ss n))
(setq two (cdr (assoc 10 (entget e))))
(setq twm (list (car twa) (cadr two)))
(command "_MOVE" e "" "_none" two "_none" twm)
(setq n (+ n 1))
); repeat
) ; progn
(princ "\n Нет шаблона для выравнивания.")
) ; if
); progn
(princ "\n Нет выбранных объектов. ")
); if
(command "_.undo" "_e")
(setvar "cmdecho" echo)
(setvar "osmode" osm)
(princ)
)
Мне понравилась. Я так понял тексты только по левому краю выравнивает. Если б еще и по точке вставке текста можно было выравнивать - ваще бы зачетно было (наподобии макрос-командl на базе стандартной команды в акад 2015 и выше ^C^C_textalign Ы СЦ " - в данном случае по центру), но и так не плохо. А может просто в ней не до конца разобрался. Понравилась тем что в отличии ^C^C_textalign Ы СЦ меньше манипуляций надо сделать. Для Акад ниже 2015 Dаш лисп есно не заменим. Спасибо!
Для акад 2015 и выше вот комманды для кнопок:
^C^C_textalign Ы СЦ - выравнивание посередине поцентру;
^C^C_textalign Ы СЛ - выравнивание посередине слева;
^C^C_textalign Ы СП - выравнивание посередине справа;
и т.п.
Но чет работают с глюками - хочешь по центру например сделать выравнивание, а выравнивается по правому или левому краю.
Поэтому лучше использовать след команды:
ТВСЦ ^C^C_justifytext СЦ ^C^C_textalign Ы СЦ
ТВСЛ ^C^C_justifytext СЛ ^C^C_textalign Ы СЛ
ТВСП ^C^C_justifytext СП ^C^C_textalign Ы СП
и т.п.
Но есть недостаток - больше манипуляций - перед использованием команды нужно выбрать выравниваемые объекты
а потом еще раз выбрать после запроса в командной строке все выбранные объекты еще раз
а потом указать объект относительно которого выравниваем.
Но главный плюс всегда выравнивает так как надо

И еще иконки к ним если кому понадобится вдруг (см. вложение)
Вложения
Тип файла: rar Icons.rar (10.00 Мб, 26 просмотров)

Последний раз редактировалось allar8, 10.01.2022 в 14:43.
allar8 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > выравнивание текста по линии (прилепить к линии)

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание нового типа линий Apelsinov AutoCAD 915 08.07.2022 12:36
LISP. Вставка в таблицу поля, соотвествующего площади примитива Profan Готовые программы 272 06.06.2021 23:12
Выравнивание текста pasha_1977 AutoCAD 12 16.03.2020 18:27
VBA, Масштаб типа линии для текста? Vildar Программирование 1 28.07.2008 16:40
Размер и выравнивание по линии вставляемого текста Бродяга AutoCAD 4 23.08.2006 07:34