|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Отключение перерисовки во время выполнения лиспа
-
Москва
Регистрация: 24.07.2005
Сообщений: 1,335
|
||
Просмотров: 2341
|
|
||||
- Регистрация: 24.07.2005
Москва
Сообщений: 1,335
|
Цитата:
|
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Ну так он (атрибут) и не должен поворачиваться - это-же отдельный объект идущий вслед за блоком.
То есть аттрибут (cons 0 "ATTDEF") лежит у тебя за блоком (entnext obj) - где obj вхождение блока, при условии что атрибут вобще есть: (= (cdr (assoc 66 (entget obj))) 1), вот у него и надо брать угол поворота, а чтобы посчитать длинну не нужно его поворачивать - есть функция косинус (cos) и воспоминания о школьной тригонометрии.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
У тебя блок масштабирован? Если да, то с равными масштабами или нет?
--- Добавлено: дай образец файла, в котором вставлен блок.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. Последний раз редактировалось Кулик Алексей aka kpblc, 24.10.2008 в 13:09. |
|||
![]() |
|
||||
- Регистрация: 24.07.2005
Москва
Сообщений: 1,335
|
Цитата:
Цитата:
Файл + код, функции твои =) у тебя должны быть. |
|||
![]() |
|
||||
- Регистрация: 24.07.2005
Москва
Сообщений: 1,335
|
Цитата:
Выбор объекта, тыкаем в дин блок, получаем ename. По ename получаем список из vla-указателей на все атрибуты блока с тэгом "1string" - их один. если rotation у блока отличается от 0, то поворачиваем блок к нулю, если 0 - то не трогаем. делаем boundingbox на этот атрибут. вычисляем длину атрибута и в дин свойство дин блока вводим это значение, и если блок поворачивался то поворачиваем обратно. Из сказанного Евгением, могу перефразировать вопрос, как повернуть блок с атрибутами программно, чтобы достичь того-же эффекта что и командными методами? Или все же можно отключить перерисовку при использовании командных методов? |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Цитата:
(setq obj (car (entsel "Укажите блок"))) ... проверка блок ли это и есть ли у него атрибуты (cons 0), (cons 66) (setq atr (entnext obj)) ... проверка тот ли это атрибут (cons 2) (setq ang (cdr (assoc 50 (entget atr)))); запоминаем угол в ang (entmod (subst (cons 50 0) (assoc 50 (entget atr)) (entget atr)));изменяем его на 0 .... выполнение замера и пр. (entmod (subst (cons 50 ang) (assoc 50 (entget atr)) (entget atr))); возращаем атрубут на место Но все же я настоятельно рекомендую не крутить атрибут а взять его угол (setq ang (cdr (assoc 50 (entget atr)))) и посчитать длинну через косинус.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
- Регистрация: 24.07.2005
Москва
Сообщений: 1,335
|
Гениально, точно можно же только атрибут крутить а не весь блок.
Цитата:
|
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Sleekka, Предлагаю ничего не крутить, а воспользоваться acet-* функциями.
Атрибут в этом смысле ничем не отличается от текста. А про траблы с boundingbox и тест, мтекст можно почитать здесь Автоматический подбор высоты текста Ну и простой примерчик. Выбрать нужно именно атрибут Код:
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Ай-яй-яй, народ, что же вы творите-то? Только что освободился, поэтому сплошные идеи, без кода.
1. Получить указатель на блок и забрать обычное имя. 2. По имени получить указатель на описание блока 3. Для элементов описания блока получить BoundingBox 4. Преобразовать полученные точки с учетом масштабирования вхождения блока. 5. Получить массив указателей на вхождения атрибутов и через (textbox) получить для них BoundingBox'ы. 6. Преобразовать полученные точки с учетом масштабирования (установленные вручную стиль/высоту текста/коэффициент сжатия/точку вставки и проч.лабуду учитывать при textbox'e) 7. Из полученных в пп.4 и 6 точек получить "обрамляющий" контур и преобразовать его в OCS вхождения блока, используя trans, polar и учитывая по ходу дела координаты точки вставки блока. Результаты преобразовать в WCS. Все вроде бы... --- Добавлено: писал, пока не было поста от VVA.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,839
|
Согласен - из-за высоты текста значение может быть несколько больше, но не меньше-же - вобщем сам решай.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Кулик Алексей aka kpblc,
Если реализовать пп 1-7, то получим открытый код ACET-GEOM-TEXTBOX ![]()
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Как таковой полной справки в природе нет.
Есть : это http://www.jtbworld.com/download/acetutil.zip это http://forum.dwg.ru/showpost.php?p=155330&postcount=16 и научный метод (метод тыка) + так
__________________
Как использовать код на Лиспе читаем здесь |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
А как насчёт уважения к РУССКОМУ ЯЗЫКУ, дамы и господа инженеры? | Зяблик | Разное | 1249 | 17.02.2023 16:20 |
ВРЕМЯ | Vova | Разное | 29 | 08.03.2009 10:40 |
Юмор 2007 | Огурец | Разное | 1172 | 29.12.2007 11:16 |
Можно ли подсветить грипсы во время выполнения команды? | Torino | Программирование | 9 | 18.11.2004 19:38 |