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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > GetBoundingBox и textbox некорректно обрабатывают многострочные атрибуты

GetBoundingBox и textbox некорректно обрабатывают многострочные атрибуты

Ответ
Поиск в этой теме
Непрочитано 07.10.2010, 21:36 #1
GetBoundingBox и textbox некорректно обрабатывают многострочные атрибуты
Ax3
 
Programming, automation, CADs, GISs. "Теплоком"
 
Россия, Санкт-Петербург
Регистрация: 02.02.2007
Сообщений: 306

Привет, братья по каду!
Обнаружил следующие странные вещи (иллюстрация во вложенном чертеже; прямоугольники смещены, но это не важно):
Проверка GetBoundingBox и textbox_exmpl_v1.00+(c)Danilov_AS_2010.10.07.dwg
1. GetBoundingBox либо вообще не обрабатывает многострочные атрибуты (кад выдет ошибку "Automation Error. Null extents"), либо возвращает координаты так, словно это однострочный текст. [в приложенном чертеже красным]
2.
Код:
[Выделить все]
(textbox (entget <атрибут>))
работает аналогично, хотя и возвращает чуть-чуть другие координаты, но достаточно близкие к тем, что возвращает GetBoundingBox. Плюс он спокойно относится ко ВСЕМ атрибутам, ни разу не возвращал ошибки. [в приложенном чертеже зеленым].
{добавлено 2010.10.08 15:53} Хм, вообще-то похоже, что textbox атрибута возвращает В ТОЧНОСТИ такой же прямоугольник, что и getboundingbox, правда, немного смещенный.
3. Конструкция типа
Код:
[Выделить все]
(textbox '((0 . "MTEXT") (100 . "AcDbMText") (1 . "<текст, вытащенный из атрибута>") (40 . <высота текста>) (7 . <стиль текста>)))
вообще выдает какое-то непонятное exception, видимо, не хватает каких-то dxf-данных.
4. Конструкция типа
Код:
[Выделить все]
(textbox '((1 . "<текст, вытащенный из атрибута, с заменой всех \\P на \n>") (40 . <высота текста>) (7 . <стиль текста>)))
работает совсем непонятно. То ли она выдает высоту однострочного текста с запасом, то ли из трех строк делает одну или две - я так и не понял, впрочем, это и не важно, поскольку такая конструкция больше похожа на извращение [в приложенном чертеже желтым]

Для анализа использовал вот эти чертеж и программу:
Проверка GetBoundingBox и textbox_v1.00+(c)Danilov_AS_2010.10.07.dwg
GetBoundingBox_test(c)Danilov_AS_aka_`Hawk`_2010.10.07.lsp

Собственно вопрос - это глюк, недоработка или я чего-то не догоняю? И как выкрутиться, если надо получить все-таки прямоугольник, описывающий многострочный атрибут? Кто-нибудь сталкивался с такой проблемой?

P.S. В принципе я вроде выкрутился - создаю рядом mtext, содержащий текст из атрибута, и получаю его BoundingBox, потом mtext удаляю. Но это как-то... гм, неправильно, что ли...

P.P.S. AutoCAD 2008 en SP1.

__________________
На LISPе можно мыслить!

Последний раз редактировалось Ax3, 08.10.2010 в 15:54.
Просмотров: 3582
 
Непрочитано 07.10.2010, 22:06
#2
Supermax

Руководитель фирмы
 
Регистрация: 28.03.2007
Москва
Сообщений: 1,831
Отправить сообщение для Supermax с помощью Skype™


Я сталкивался.
Supermax вне форума  
 
Автор темы   Непрочитано 07.10.2010, 22:17
#3
Ax3

Programming, automation, CADs, GISs. "Теплоком"
 
Регистрация: 02.02.2007
Россия, Санкт-Петербург
Сообщений: 306


>>Supermax
И как решал, если не секрет?
__________________
На LISPе можно мыслить!
Ax3 вне форума  
 
Непрочитано 07.10.2010, 22:21
#4
Кулик Алексей aka kpblc
Moderator

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


textbox некорректно обрабатывает многострочные тексты (и, по правде говоря, вообще не должен их обрабатывать).
Советую посмотреть http://www.caduser.ru/forum/index.ph...#message129846
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 08.10.2010, 09:12
#5
Ax3

Programming, automation, CADs, GISs. "Теплоком"
 
Регистрация: 02.02.2007
Россия, Санкт-Петербург
Сообщений: 306


>>Кулик Алексей aka kpblc
Привет, Алексей.
Спасибо за ссылку. Но, боюсь, это не то. Ключевым моментом в этой программе является
Код:
[Выделить все]
(vlax-invoke-method vlao 'copy)
, который к атрибутам вообще не применим, как следует из справки
Цитата:
Signature
RetVal = object.Copy
...
Remarks
AttributeReference: You should not attempt to use this method on AttributeReference objects. AttributeReference objects inherit this method because they are one of the drawing objects, however, it is not feasible to perform this operation on an attribute reference.
К сожалению...
Прошу меня поправить, если где-то ошибся. И спасибо за участие. :-)

Цитата:
textbox некорректно обрабатывает многострочные тексты (и, по правде говоря, вообще не должен их обрабатывать).
(Ой) Да, я теперь понял, в чем фишка textbox-а. Он вообще не обрабатывает такой объект, как "MTEXT" (у меня возвращает nil) {отредактировано 2010.10.08 12:18}. Странно, что он при этом абсолютно спокойно относится к многострочным атрибутам, хоть и обрабатывает их неправильно {отредактировано 2010.10.08 12:25}.
__________________
На LISPе можно мыслить!

Последний раз редактировалось Ax3, 08.10.2010 в 12:23.
Ax3 вне форума  
 
Непрочитано 08.10.2010, 13:44
#6
VVA

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


Ax3, Про свой же топик забыл?
Автоматический подбор высоты текста
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 08.10.2010, 15:12
#7
Ax3

Programming, automation, CADs, GISs. "Теплоком"
 
Регистрация: 02.02.2007
Россия, Санкт-Петербург
Сообщений: 306


>>VVA
И правда забыл :-)

Однако acet-geom-txtbox отрабатывает вот так:
Нажмите на изображение для увеличения
Название: Безымянный.jpg
Просмотров: 69
Размер:	23.7 Кб
ID:	46315
GetBoundingBox_test_v1.01(c)Danilov_AS_aka_`Hawk`_2010.10.08.lsp
То есть тоже неправильно

acet-geom-object-point-list для атрибутов вообще nil возвращает

{Добавлено _2010.11.09_17.52.25}
В общем, пока создание и измерение mtext-а с таким же содержимым, как у многострочного атрибута, остается единственным приемлемым вариантом...
__________________
На LISPе можно мыслить!

Последний раз редактировалось Ax3, 09.11.2010 в 17:50.
Ax3 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > GetBoundingBox и textbox некорректно обрабатывают многострочные атрибуты

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Многострочные атрибуты в Autocad 2008 wetr AutoCAD 9 13.09.2014 16:32