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

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

Программное обновление поля

Ответ
Поиск в этой теме
Непрочитано 08.09.2011, 10:56 #1
Программное обновление поля
sdv79
 
Инженер ЭОМ
 
Москва
Регистрация: 05.03.2009
Сообщений: 215

Код:
[Выделить все]
(command "_.regen") 
(setq block_selection (ssget '((0 . "INSERT"))))
(foreach s (mapcar'vlax-ename->vla-object
                (vl-remove-if'listp(mapcar'cadr(ssnamex block_selection))))
 (setq blocks_selected    (vla-get-Effectivename s)
     list_of_attributes   (safearray-value (vlax-variant-value (vla-getattributes s)))
     znach_of_attributes (mapcar 'vla-get-TextString list_of_attributes) )
(nth 0 znach_of_attributes) ; если убрать реген вначале кода, 
;то здесь останется старое значение
; как его программно обновить???
)
(command "_.regen") - Информация в атрибуты записываем из полей которые обновляются, очень хочется избавиться от регена всего чертежа, что совсем не удобно при множестве объектов в нем, а обновлять только те что попали в выборку.
Подскажите как это сделать?

Вложения
Тип файла: dwg
DWG 2004
ТТ.dwg (74.6 Кб, 774 просмотров)


Последний раз редактировалось sdv79, 08.09.2011 в 12:00. Причина: Добавил файл
Просмотров: 4022
 
Непрочитано 08.09.2011, 11:48
#2
VVA

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


Код:
[Выделить все]
(command "_.updatefield <выбрать объекты> ...")
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 08.09.2011 в 13:01.
VVA вне форума  
 
Автор темы   Непрочитано 08.09.2011, 12:00
#3
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


(command "_.updatefield") не работает. Добавил файл.
sdv79 вне форума  
 
Непрочитано 08.09.2011, 12:56
#4
VVA

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


Работает. требует выбрать объекты для обновления поля. Для твоего чертежа
Код:
[Выделить все]
(command "_.updatefield" (entlast) "")
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 08.09.2011, 13:34
#5
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


VVA (спасибо) подскажите
1) я беру блок изменяю видимость например на Т-0.66-0.5 300/5
ввожу (command "_.updatefield" (entlast) "") прогоняю цикл и значении (nth 0 znach_of_attributes) остается первоначальным.
2) как обновление полей применить в цикле foreach т.к может быть много блоков в выборке.
sdv79 вне форума  
 
Непрочитано 08.09.2011, 14:12
#6
VVA

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


(entlast) ссылается на последний примитив в базе рисунка. Тебе нужно сосласться на то, что у тебя находится в переменной s, только в виде ename-примитва, а не vla-объекта. Выделил красным
Код:
[Выделить все]
(setq block_selection (ssget '((0 . "INSERT"))))
(foreach s (mapcar'vlax-ename->vla-object
                (vl-remove-if'listp(mapcar'cadr(ssnamex block_selection))))
  (command "_.updatefield" (vlax-vla-object->ename s) "")(command)
 (setq blocks_selected    (vla-get-Effectivename s)
     list_of_attributes   (safearray-value (vlax-variant-value (vla-getattributes s)))
     znach_of_attributes (mapcar 'vla-get-TextString list_of_attributes) )
(nth 0 znach_of_attributes) ; если убрать реген вначале кода, 
;то здесь останется старое значение
; как его программно обновить???
)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 08.09.2011, 14:37
#7
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


Все заработало. Спасибо.
sdv79 вне форума  
 
Автор темы   Непрочитано 03.05.2012, 12:45
#8
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


Подскажите после работы команды (command "_.updatefield" (vlax-vla-object->ename s) "")(command) в командную строку выдается вспомогательная информация, как ее отключить. Вначале кода выставляю системные переменные (setvar "cmdecho" 0) (setvar "menuecho" 0) (setvar "nomutt" 1)
sdv79 вне форума  
 
Непрочитано 03.05.2012, 16:17
#9
VVA

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


Похоже никак.
Как вариант:
1. прогнать строки печатью после команды
Код:
[Выделить все]
(command "_updatefield" (entlast) "")(repeat 5 (princ "\n:"))(princ)
2. Отключить командную строку
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 03.05.2012, 17:16
#10
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


К сожалению не один из предложенных вариантов уважаемого VVA не подходит, работа идет в цикле, при баловстве с Commandlinehide Commandline, начинает мигать.
Что еще можно сделать, не ужели эту чушь нельзя спрятать, РАЗДРАЖАЕТ?!
sdv79 вне форума  
 
Непрочитано 03.05.2012, 23:28
#11
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,407
Отправить сообщение для Александр Ривилис с помощью Skype™


А если сделать набор из примитивов, поля которых нужно обновить и передать этот набор в команду _updatefield? Т.е. обновлять не в цикле, а однократно.
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 04.05.2012, 08:47
#12
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


Если других вариантов нет, то придется так и сделать.
sdv79 вне форума  
 
Непрочитано 09.05.2012, 10:09
#13
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 813



Попробуй так:
(command "_updatefield" (entlast) "")(command ^C)
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 09.05.2012, 23:06
#14
sdv79

Инженер ЭОМ
 
Регистрация: 05.03.2009
Москва
Сообщений: 215
Отправить сообщение для sdv79 с помощью Skype™


Не помогло так и продолжает в командной строке писать Найдено полей ... Обновлено полей...
Эх, ЛИСП всемогущий... )))
sdv79 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Программное обновление поля

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Вставка в таблицу поля, соотвествующего площади примитива Profan Готовые программы 272 06.06.2021 23:12
Пропадают поля на видовом экране в листе klerik AutoCAD 6 06.05.2011 08:05
Google SketсhUp в помощь архитекторам. Как и где приобрести программу? Igla Прочее. Программное обеспечение 14 03.07.2009 17:02
Обновление поля в атрибуте при редактировании дин. блока молодой человек AutoCAD 5 10.11.2008 14:12
NanoСПДС gest Другие CAD системы 401 15.07.2008 14:50