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

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

Отключение перерисовки во время выполнения лиспа

Ответ
Поиск в этой теме
Непрочитано 23.10.2008, 17:42 #1
Отключение перерисовки во время выполнения лиспа
Sleekka
 
-
 
Москва
Регистрация: 24.07.2005
Сообщений: 1,335

Подскажите пожалуйста, как отключить перерисовку во время выполнения лиспа?
я поворачиваю объект в коде, а потом возвращаю его в исходное состояние, хочу чтобы пользователь не видел этого преобразования объекта.
Просмотров: 2341
 
Непрочитано 23.10.2008, 20:41
#2
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


не обновляй объект и чертеж после вращения
Елпанов Евгений вне форума  
 
Непрочитано 23.10.2008, 21:29
#3
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Если не секрект зачем поворачиваешь? И каким способом - командными методами? Через dxf или vla?
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 24.10.2008, 11:54
#4
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,335


Цитата:
Если не секрект зачем поворачиваешь? И каким способом - командными методами? Через dxf или vla?
Есть блок с атрибутами, я делаю getboundingbox для атрибута, но мой блок может может быть повернут на (к примеру 45 градусов) тогда getboundingbox - не даст мне получить длину атрибута, тогда я решил поворачивать объект в 0 градусов делать getboundingbox а потом возвращать в исходное положение, и через vla-put-rotation у меня блок поворачивается а атрибуты остаются на месте, обновить это - у меня не получилось. А если поворачивать командными методами то атрибуты корректно поворачиваются вместе с блоком. Поэтому я поворачиваю командным методом.
Sleekka вне форума  
 
Непрочитано 24.10.2008, 12:33
#5
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Ну так он (атрибут) и не должен поворачиваться - это-же отдельный объект идущий вслед за блоком.
То есть аттрибут (cons 0 "ATTDEF") лежит у тебя за блоком (entnext obj) - где obj вхождение блока, при условии что атрибут вобще есть:
(= (cdr (assoc 66 (entget obj))) 1), вот у него и надо брать угол поворота, а чтобы посчитать длинну не нужно его поворачивать - есть функция косинус (cos) и воспоминания о школьной тригонометрии.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 24.10.2008, 12:59
#6
Кулик Алексей aka kpblc
Moderator

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


У тебя блок масштабирован? Если да, то с равными масштабами или нет?
---
Добавлено: дай образец файла, в котором вставлен блок.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.

Последний раз редактировалось Кулик Алексей aka kpblc, 24.10.2008 в 13:09.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 24.10.2008, 13:44
#7
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,335


Цитата:
есть функция косинус (cos) и воспоминания о школьной тригонометрии
Да я помню что есть такая функция, но я отказался от этого варианта решения и решил делать через rotate.
Цитата:
У тебя блок масштабирован? Если да, то с равными масштабами или нет?
---
Добавлено: дай образец файла, в котором вставлен блок.
Да не вопрос.
Файл + код, функции твои =) у тебя должны быть.
Вложения
Тип файла: lsp tmp.lsp (1.6 Кб, 63 просмотров)
Тип файла: dwg
DWG 2004
vinos_ned_V4_0_bl.dwg (28.5 Кб, 396 просмотров)
Sleekka вне форума  
 
Автор темы   Непрочитано 24.10.2008, 15:16
#8
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,335


Ну что - кто что скажет?
Sleekka вне форума  
 
Непрочитано 24.10.2008, 15:21
#9
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Опиши что лисп делает (функции крыса закачать конечно могу, но очень лень - оно-же как и код изучать).
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 24.10.2008, 15:43
#10
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,335


Цитата:
Опиши что лисп делает
На русском чтоли?
Выбор объекта, тыкаем в дин блок, получаем ename.
По ename получаем список из vla-указателей на все атрибуты блока с тэгом "1string" - их один.
если rotation у блока отличается от 0, то поворачиваем блок к нулю, если 0 - то не трогаем.
делаем boundingbox на этот атрибут.
вычисляем длину атрибута и в дин свойство дин блока вводим это значение, и если блок поворачивался то поворачиваем обратно.

Из сказанного Евгением, могу перефразировать вопрос, как повернуть блок с атрибутами программно, чтобы достичь того-же эффекта что и командными методами?
Или все же можно отключить перерисовку при использовании командных методов?
Sleekka вне форума  
 
Непрочитано 24.10.2008, 16:17
#11
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от Sleekka Посмотреть сообщение
На русском чтоли?
Из сказанного Евгением, могу перефразировать вопрос, как повернуть блок с атрибутами программно, чтобы достичь того-же эффекта что и командными методами?
Пропущу проверки на блок, имя атрибута и пр:
(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.10.2008, 16:28
#12
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,335


Гениально, точно можно же только атрибут крутить а не весь блок.
Цитата:
посчитать длинну через косинус.
Я надеюсь вы знаете что возвращает боундингбокс и поэтому поймете что там так не получится - на каждый угол придется вводить какие-то свои поправки.
Sleekka вне форума  
 
Непрочитано 24.10.2008, 16:43
#13
VVA

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


Sleekka, Предлагаю ничего не крутить, а воспользоваться acet-* функциями.
Атрибут в этом смысле ничем не отличается от текста. А про траблы с boundingbox и тест, мтекст можно почитать здесь
Автоматический подбор высоты текста
Ну и простой примерчик. Выбрать нужно именно атрибут
Код:
[Выделить все]
(setq lst (ACET-GEOM-TEXTBOX (entget (car(nentsel "\nТкни в атрибут: "))) 1e-3)) 
(setq cc (getvar "CECOLOR")) 
(setvar "CECOLOR" "1") 
(command "_pline") 
(foreach pt lst 
  (command "_none" pt)) 
(command "_close")(command) 
(setvar "CECOLOR" cc)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 24.10.2008, 16:45
#14
Кулик Алексей aka kpblc
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-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 24.10.2008, 16:48
#15
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от Sleekka Посмотреть сообщение
Я надеюсь вы знаете что возвращает боундингбокс и поэтому поймете что там так не получится - на каждый угол придется вводить какие-то свои поправки.
Согласен - из-за высоты текста значение может быть несколько больше, но не меньше-же - вобщем сам решай.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 24.10.2008, 16:50
#16
VVA

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


Кулик Алексей aka kpblc,
Если реализовать пп 1-7, то получим открытый код ACET-GEOM-TEXTBOX
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 24.10.2008, 17:10
#17
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,335


Щас пока осмысливаю, а не подскажете где взять документацию по acet ver.1.38 а то у меня есть на 1.37 в каде установлены ver.1.38, а в акаде не нашел хелпа к текущей библиотеке acet?
Sleekka вне форума  
 
Непрочитано 24.10.2008, 17:27
#18
VVA

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


Как таковой полной справки в природе нет.
Есть :
это http://www.jtbworld.com/download/acetutil.zip
это http://forum.dwg.ru/showpost.php?p=155330&postcount=16
и научный метод (метод тыка) + так
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 24.10.2008, 17:32
#19
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,335


Спасибо.
Sleekka вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Отключение перерисовки во время выполнения лиспа



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
А как насчёт уважения к РУССКОМУ ЯЗЫКУ, дамы и господа инженеры? Зяблик Разное 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