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

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

Вставить текст в центр прямоугольника

Ответ
Поиск в этой теме
Непрочитано 17.05.2016, 15:18 #1
Вставить текст в центр прямоугольника
protorgovec
 
газо- нефтепереработка
 
Уфа
Регистрация: 22.07.2015
Сообщений: 98

Добрый день.
Возникла небольшая проблемка, может кто подскажет.
Код:
[Выделить все]
(vla-AddText (vla-get-PaperSpace Ch2) "1. Общие допуски ГОСТ 30893.2-mK." (vlax-3D-point 35 77 0) 5)
в нужные координаты вставляет текст.
А как прописать, что бы вставлял в центр нужного прямоугольника. Как задаются координаты этого прямоугольника? И как заставить ,что если текст выходит за рамки, что бы играл коэффициентом ширины? Нужен именно однострочный, переносы нельзя.
Просмотров: 7035
 
Непрочитано 17.05.2016, 16:08
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Получи границы созданного текста через vla-getboundingbox и выполняй соответствующие вычисления.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 17.05.2016, 16:50
#3
VVA

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


В лиспе есть ф-ция textbox
Почитай тему Автоматический подбор высоты текста Там рассматривали, что точнее определяет габарит текста (мтекста): textbox, boundingbox, ACET-GEOM-OBJECT-POINT-LIST, ACET-GEOM-TXTBOX,
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 17.05.2016, 17:33
#4
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Насколько я помню, textbox и acet-* могут работать только с объектом текста, который лежит в текущем пространстве. Могу ошибаться.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 18.05.2016, 10:49
#5
protorgovec

газо- нефтепереработка
 
Регистрация: 22.07.2015
Уфа
Сообщений: 98


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Получи границы созданного текста через vla-getboundingbox и выполняй соответствующие вычисления.
Получил эти границы
Код:
[Выделить все]
 (vla-getboundingbox T2 'minp 'maxp)
(vlax-safearray->list minp)
(vlax-safearray->list maxp)
Знаю координаты и прямоугольника куда вписать, а как заставить что бы он менял ширину текста? Не могу понять
protorgovec вне форума  
 
Непрочитано 18.05.2016, 11:03
#6
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Сними дамп объекта - увидишь свойство ScaleFactor. С ним и работай.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 18.05.2016, 15:15
#7
protorgovec

газо- нефтепереработка
 
Регистрация: 22.07.2015
Уфа
Сообщений: 98


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Сними дамп объекта - увидишь свойство ScaleFactor. С ним и работай.
Снял дамп
Код:
[Выделить все]
 (vlax-dump-object T1 T)
много свойств. А почему не ставит такое свойство, как длина текста? Вообще можно как то определить длину текста? Что то не могу найти про длину текста ничего
protorgovec вне форума  
 
Непрочитано 18.05.2016, 15:21
#8
Fedorino

автоматизация и организация черчения
 
Регистрация: 17.11.2009
Sterlitamak
Сообщений: 135


Если текст - строка, то функция (strlen "текст")
Получишь количество символов.
__________________
слесарь САПР
Fedorino вне форума  
 
Непрочитано 18.05.2016, 15:26
#9
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


protorgovec, ты сначала расскажи, что в твоем понимании "длина текста". Количество символов?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 18.05.2016, 15:28
#10
protorgovec

газо- нефтепереработка
 
Регистрация: 22.07.2015
Уфа
Сообщений: 98


Цитата:
Сообщение от Fedorino Посмотреть сообщение
Получишь количество символов.
Количество символов мне наверное не поможет. Мне нужна длина в мм. А можно ли определив координаты описанного прямоугольника вокруг текста
Код:
[Выделить все]
 (vla-getboundingbox T1 'minp 'maxp)
вытащить координаты Х? Там бы уже я через математику

----- добавлено через ~1 мин. -----
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
ты сначала расскажи, что в твоем понимании "длина текста". Количество символов?
Длина мне нужна в мм
protorgovec вне форума  
 
Непрочитано 18.05.2016, 15:37
#11
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Можно. Вытаскивай.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 18.05.2016, 15:41
#12
protorgovec

газо- нефтепереработка
 
Регистрация: 22.07.2015
Уфа
Сообщений: 98


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Можно. Вытаскивай.
аж настроение поднялось
А можешь подсказать как?
protorgovec вне форума  
 
Непрочитано 18.05.2016, 15:51
#13
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,001


Цитата:
Сообщение от protorgovec Посмотреть сообщение
Длина мне нужна в мм
distance ?
Сергей812 вне форума  
 
Автор темы   Непрочитано 18.05.2016, 15:57
#14
protorgovec

газо- нефтепереработка
 
Регистрация: 22.07.2015
Уфа
Сообщений: 98


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
distance ?
distance мне выдает 0
protorgovec вне форума  
 
Непрочитано 18.05.2016, 15:57
#15
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Гидрит вашу перекись марганца за ногу! Получили minp, maxp, а дальше кто будет преобразования делать?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 18.05.2016, 16:00
#16
protorgovec

газо- нефтепереработка
 
Регистрация: 22.07.2015
Уфа
Сообщений: 98


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Гидрит вашу перекись марганца за ногу! Получили minp, maxp, а дальше кто будет преобразования делать?
Ну дурная у меня голова а нога тут не при чем , забыл я про это. Сейчас сделаю

----- добавлено через ~21 мин. -----
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Гидрит вашу перекись марганца за ногу! Получили minp, maxp, а дальше кто будет преобразования делать?
О смотрю видео с тобой хоть увидел своего подсказчика

----- добавлено через ~60 мин. -----
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Гидрит вашу перекись марганца за ногу! Получили minp, maxp, а дальше кто будет преобразования делать?
Не могу понять, как преобразовывать координаты (((( совсем глупый!

----- добавлено через ~2 ч. -----
Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Гидрит вашу перекись марганца за ногу! Получили minp, maxp, а дальше кто будет преобразования делать?
Алексей, подскажи:
Код:
[Выделить все]
 (vla-getboundingbox T1 'minp 'maxp) (setq Xt1 (vlax-safearray->list minp)) (setq Xt2 (vlax-safearray->list maxp))
(setq Dlt1 (DISTANCE Xt2 Xt1))
(if (> Dlt1 120) (vla-put-ScaleFactor T1 0.6))
он назначает ширину 0,6 но в реале ширина текста не меняется. Не могу понять почему
protorgovec вне форума  
 
Непрочитано 18.05.2016, 19:27
#17
VVA

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


vla-getboundingbox не пойдет. Нарисуй один текст горизонтальный, второй - под углом (например 45 градусов)
Выполни код и посмотри, какие габариты возвращает vla-getboundingbox
Код:
[Выделить все]
(setq T1 (vlax-ename->vla-object(car(entsel "Select text"))))
 (vla-getboundingbox T1 'minp 'maxp) 
(setq Xt1 (vlax-safearray->list minp))
(setq Xt2 (vlax-safearray->list maxp))
(command "_PLINE" "_non"  Xt1 "_non" (list(car Xt1)(cadr Xt2)) "_non" Xt2 "_non" (list(car Xt2)(cadr Xt1)) "_C")
А вот пример ACET-GEOM-OBJECT-POINT-LIST Можно почитать дальше, пост #15
На картинке черным - результат vla-getboundingbox, красным - код из поста #14 по ссылке (ACET-GEOM-OBJECT-POINT-LIST )

----- добавлено через ~10 мин. -----
Цитата:
Сообщение от protorgovec Посмотреть сообщение
И как заставить ,что если текст выходит за рамки, что бы играл коэффициентом ширины?
Как вариант
Код:
[Выделить все]
(setq dst (getdist "\nУкажите требуемую длину текста :"))
(setq txt (car(entsel "\nВыберите текст")))
(setq ScaleFactor (cdr(assoc 41 (entget txt))))
(setq lst (ACET-GEOM-OBJECT-POINT-LIST txt 1e-3))
(while (> (setq Ltxt (distance (car lst) (cadr lst))) dst)
  (setq ScaleFactor (- ScaleFactor 0.01))
  (entmod (subst (cons 41 ScaleFactor)(assoc 41 (entget txt))(entget txt)))
  (entupd txt)
  (setq lst (ACET-GEOM-OBJECT-POINT-LIST txt 1e-3))
  )
Миниатюры
Нажмите на изображение для увеличения
Название: bb.png
Просмотров: 21
Размер:	6.5 Кб
ID:	170610  
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 18.05.2016 в 19:37.
VVA вне форума  
 
Непрочитано 18.05.2016, 20:59
#18
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Цитата:
Сообщение от protorgovec Посмотреть сообщение
он назначает ширину 0,6 но в реале ширина текста не меняется. Не могу понять почему
Либо REGENMODE в 1, либо vla-update для примитива текста.
VVA, я же говорю, что предложенные тобою функции работают только с примитивами, лежащими в текущем пространстве (единственное исключение, кажется - это textbox, но в какой СК он возвращает значения, я не знаю).

----- добавлено через 35 сек. -----
Добавлю: предварительно получить нормаль объекта и углы его поворота - не вопрос.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 18.05.2016, 21:02
#19
protorgovec

газо- нефтепереработка
 
Регистрация: 22.07.2015
Уфа
Сообщений: 98


Цитата:
Сообщение от VVA Посмотреть сообщение
vla-getboundingbox не пойдет. Нарисуй один текст горизонтальный, второй - под углом (например 45 градусов)
Выполни код и посмотри, какие габариты возвращает vla-getboundingbox
Код:
[Выделить все]
(setq T1 (vlax-ename->vla-object(car(entsel "Select text"))))
 (vla-getboundingbox T1 'minp 'maxp) 
(setq Xt1 (vlax-safearray->list minp))
(setq Xt2 (vlax-safearray->list maxp))
(command "_PLINE" "_non"  Xt1 "_non" (list(car Xt1)(cadr Xt2)) "_non" Xt2 "_non" (list(car Xt2)(cadr Xt1)) "_C")
А вот пример ACET-GEOM-OBJECT-POINT-LIST Можно почитать дальше, пост #15
На картинке черным - результат vla-getboundingbox, красным - код из поста #14 по ссылке (ACET-GEOM-OBJECT-POINT-LIST )

----- добавлено через ~10 мин. -----

Как вариант
Код:
[Выделить все]
(setq dst (getdist "\nУкажите требуемую длину текста :"))
(setq txt (car(entsel "\nВыберите текст")))
(setq ScaleFactor (cdr(assoc 41 (entget txt))))
(setq lst (ACET-GEOM-OBJECT-POINT-LIST txt 1e-3))
(while (> (setq Ltxt (distance (car lst) (cadr lst))) dst)
  (setq ScaleFactor (- ScaleFactor 0.01))
  (entmod (subst (cons 41 ScaleFactor)(assoc 41 (entget txt))(entget txt)))
  (entupd txt)
  (setq lst (ACET-GEOM-OBJECT-POINT-LIST txt 1e-3))
  )
спасибо. завтра на работе посмотрю. Только (command) не для меня я все это пытаюсь делать в неактивном документе
protorgovec вне форума  
 
Непрочитано 18.05.2016, 22:43
#20
VVA

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


Цитата:
Сообщение от protorgovec Посмотреть сообщение
Только (command) не для меня
command чертит полилинию вокруг текста, это для наглядности.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Вставить текст в центр прямоугольника

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Вставка в таблицу поля, соотвествующего площади примитива Profan Готовые программы 272 06.06.2021 23:12
Как вставить текст в AutoCad? Александр36 Программирование 20 01.12.2010 22:24
Как вывести текст в model из приложения написанного на lisp? paradoxvaha AutoCAD 3 16.04.2007 03:54
Многострочный текст в атрибутах медвежонок AutoCAD 1 09.06.2006 12:05
Вставить текст программно Flint Программирование 13 03.10.2003 10:24