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

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

ширина TEXT

Ответ
Поиск в этой теме
Непрочитано 07.11.2007, 00:06 #1
ширина TEXT
Тим Боль
 
Регистрация: 19.10.2007
Сообщений: 8

Здравствуйте, подскажите, пожалуйста, как можно определить ширину объекта TEXT.
Просмотров: 3298
 
Непрочитано 07.11.2007, 00:09
#2
Кулик Алексей aka kpblc
Moderator

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


(textbox) либо (vla-getboundingbox)
В первый передается, по-моему, либо ename-указатель на объект текста, либо список, достаточный для создания объекта через (entmake). Во второй передается vla-указатель на существующий объект.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.11.2007, 00:19
#3
Pilot

Проектировщик свиноводство
 
Регистрация: 21.08.2003
Сообщений: 2,291


Пример функции для определения длины литерала t1 для текущего текстового стиля:
Код:
[Выделить все]
(defun TxtLen (t1)
(caadr (textbox (list (cons 1 t1))))
);end TxtLen
Pilot вне форума  
 
Автор темы   Непрочитано 07.11.2007, 00:34
#4
Тим Боль


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


Спасибо!
Тим Боль вне форума  
 
Непрочитано 07.11.2007, 00:41
#5
Кулик Алексей aka kpblc
Moderator

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


Pilot, все же лучше передавать полный список. При высоте текущего текстового стиля = 0 можно иногда получить странные результаты
То есть я бы передавал нечто типа:
Код:
[Выделить все]
(textbox
  '((0 . "TEXT")
    (100 . "AcDbEntity")
    (100 . "AcDbText")
    (10 0. 0. 0.)
    (40 . 2.5)
    (1 . "Запрашиваемый текст")
    (50 . 0.0)
    (41 . 1.0)
    (51 . 0.0)
    (7 . "Standard")
    (71 . 0)
    (72 . 0)
    (11 0.0 0.0 0.0)
    (210 0.0 0.0 1.0)
    (100 . "AcDbText")
    (73 . 0)
    )
  ) ;_ end of textbox
В таком случае просто гарантировано корректное получение значений точек.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 07.11.2007, 06:15
#6
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Как показал Pilot делать нельзя - будут ошибки при изменении высоты и наклона. Лучше оформить функцией
Код:
[Выделить все]
 
(defun ru-string-length (s txt_height / lsttxt)
;;; длина строки s в единицах рисунка 
;;; при текущей высоте текста txt_height
  (if (and s (/= s ""))
    (progn
      (setq lsttxt (textbox (list (cons 1 s) (cons 40 txt_height) (cons 50 0)))) 
      (- (caadr lsttxt) (caar lsttxt))
    ) 
    0.0
   ) 
)
Текущая (или любая другая) высота текста передается аргументом. Вычисляется во внешней функции.
ShaggyDoc вне форума  
 
Непрочитано 07.11.2007, 10:04
#7
Pilot

Проектировщик свиноводство
 
Регистрация: 21.08.2003
Сообщений: 2,291


Я показал функцию, которую использую сам в своих программах для достаточно локальных целей.
Ошибок в работе функции внутри этих программ мной не замечено.
Точность результата меня вполне устраивает даже при наклонном тексте (преимущественно для определения длины полки выноски или размера прямоугольника вокруг текста, а при этом все равно делается некоторый запас).
Но изначально есть некоторые ограничения:
- Текущий стиль только с высотой текста 0.
- Текущая высота текста не 0.
- есть еще что-то, сразу не вспомнить.
Pilot вне форума  
 
Непрочитано 15.11.2007, 17:02
#8
PiP

программист
 
Регистрация: 06.06.2005
СПб
Сообщений: 44
<phrase 1=


Здравствуйте! А есть ли в VBA функция, подсчитывающая реальную ширину текста ( и высоту MText) ? Не нашел в HELP :-(
В PASCAL, помнится, было что-то вроде TextWidth и TextHeight для "ширины" и "высоты" строки...
PiP вне форума  
 
Непрочитано 15.11.2007, 17:48
#9
kp+

идущий по граблям
 
Регистрация: 26.05.2005
Сообщений: 5,194


Кажется, нет.
Если нужна реальная, чисто конкретно, высота и ширина текста, без поправок на разные углы наклона и проч., как если в натуре померять линейкой, то наверно, можно сделать так:
- "взорвать" текст до уровня линейных примитивов (должно получиться что-то вроде результата работы команды txtexp);
- по этим объектам вычислить высоту и ширину текста;
- удалить этот мусор.

Но это так, в порядке бесплатного совета. Реализация наверняка будет громоздкой и глючной. Может, есть что-то лучше
kp+ вне форума  
 
Непрочитано 15.11.2007, 18:16
#10
Кулик Алексей aka kpblc
Moderator

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


PiP, kp+, почитайте тему с самого начала...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 19.11.2007, 16:14
#11
PiP

программист
 
Регистрация: 06.06.2005
СПб
Сообщений: 44
<phrase 1=


Прошу прощения, задержался с ответом - были проблемы с железом (компьютерным).
Не врубился - какой пост я пропустил? Про VBA, вроде, еще не было ничего...
PiP вне форума  
 
Непрочитано 19.11.2007, 16:20
#12
Кулик Алексей aka kpblc
Moderator

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


GetBoundingBox
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 19.11.2007, 16:29
#13
PiP

программист
 
Регистрация: 06.06.2005
СПб
Сообщений: 44
<phrase 1=


В этом и проблема: GetBoundingBox дает цифры, указанные в entity.Width и entity.Height (про последнее- не проверял). И возвращает мне ... ну очень много, а текст - всего 2 буквы. Так как файл dwg прислан от смежников - распросить и понять зачем такое сделано - затруднено. Просто образать (типа entity.Width = 4) - рука не поднимается.
PiP вне форума  
 
Непрочитано 19.11.2007, 16:41
#14
Кулик Алексей aka kpblc
Moderator

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


Тогда образец нужон.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 19.11.2007, 17:21
#15
PiP

программист
 
Регистрация: 06.06.2005
СПб
Сообщений: 44
<phrase 1=


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Тогда образец нужон.
Primer_MText.bas
primer_MText.dwg
- в архиве primerMT.rar

Для entity.Height - тоже справедливо, увы...
Вложения
Тип файла: rar PrimerMT.rar (7.5 Кб, 64 просмотров)
PiP вне форума  
 
Непрочитано 19.11.2007, 19:00
#16
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Почитай еще здесь
Автоматический подбор высоты текста
Там, правда, рассматривалисть acet-* ф-ции. Но к ним можно обратиться из VBA через SendComand, зная метку (dxf код 5) примитива
Что-то типа
Код:
[Выделить все]
 
    ThisDrawing.SendCommand _
    ("(setvar & Chr(34) & USERR1 & Chr(34) _
      " (ACET-GEOM-TEXTBOX (handent METKA)))" & vbCr)
И прочитать значение переменной USERR1
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 19.11.2007, 19:37
#17
PiP

программист
 
Регистрация: 06.06.2005
СПб
Сообщений: 44
<phrase 1=


Спасибо. К сожалению - (лисп (придется) (учить (тоже)))...
PiP вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > ширина TEXT



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Я начинаю заниматься программированием LISP (help) mmax LISP 293 24.02.2009 11:18
Regen Holon Программирование 28 03.08.2007 15:18
Где можно взять основную надпись и рамку для када А4 Taleon AutoCAD 18 17.04.2006 22:24
Тип линий DDlis Программирование 8 16.08.2005 18:16
RTEXT shnn AutoCAD 3 06.07.2005 17:54