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

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Как обновить значения полей только в конкретном экземпляре блока?

Как обновить значения полей только в конкретном экземпляре блока?

Ответ
Поиск в этой теме
Непрочитано 25.01.2024, 11:56 #1
Как обновить значения полей только в конкретном экземпляре блока?
Сыч
 
Регистрация: 05.04.2011
Сообщений: 45

Здравствуйте.
Есть чертеж, в котором используются несколько десятков экземпляров блока, имеющего атрибуты с полями. Причем поля "многоступенчатые": пользователь вносит данные в "ручные" атрибуты, на их основе пересчитываются значения других атрибутов с полями, а на их основе пересчитываются значения третьих атрибутов с полями. Соответственно, чтобы получить окончательный результат, нужно сделать 3-4 регенерации чертежа подряд.
Когда блоков несколько десятков, Автокад ощутимо подвисает, бесполезно регенирируя такую кучу полей.
Отсюда вопрос: есть ли в Автокаде способ выполнить обновление полей только в одном указанном пользователем блоке?
Просмотров: 718
 
Непрочитано 25.01.2024, 12:23
#2
trir


 
Регистрация: 18.12.2010
Сообщений: 5,107


не надо так делать
trir вне форума  
 
Непрочитано 25.01.2024, 12:37
#3
Кулик Алексей aka kpblc
Moderator

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


А не проще отключить автообновление полей и вызывать их обновление принудительно?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 25.01.2024, 13:12
#4
kp+

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


Цитата:
Сообщение от Сыч Посмотреть сообщение
есть ли в Автокаде способ выполнить обновление полей только в одном указанном пользователем блоке?
_updatefield

Offtop:
Цитата:
Сообщение от trir Посмотреть сообщение
не надо так делать
Поддерживаю, можно запросто пропустить всего одну регенерацию (или принудительное локальное обновление) и здорово накосячить.
kp+ вне форума  
 
Автор темы   Непрочитано 25.01.2024, 15:12
#5
Сыч


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
А не проще отключить автообновление полей и вызывать их обновление принудительно?
Вы имеете ввиду настройку значения FIELDEVAL? Это уже сделано, и это не то, что нужно.

Цитата:
Сообщение от kp+ Посмотреть сообщение
_updatefield
Вот это уже интереснее.

Цитата:
Сообщение от kp+ Посмотреть сообщение
Поддерживаю, можно запросто пропустить всего одну регенерацию (или принудительное локальное обновление) и здорово накосячить.
Нет такой проблемы. Сбор и передачу данных в блок (в "ручные" атрибуты) пользователь осуществляет с помощью лиспа, после передачи лисп делает нужное количество регенераций, поля последовательно обновляются. Но долго обновляются, и в этом проблема.
Осталось разобраться, как вместо регенерации вставить в лисп обновление полей блока.
Сыч вне форума  
 
Непрочитано 25.01.2024, 15:27
#6
Кулик Алексей aka kpblc
Moderator

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


Если все равно там вычислений масса, и они делаются лиспом - кто мешает тем же лиспом и в нужные атрибуты засовывать нужные данные?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 25.01.2024, 15:58
#7
Сыч


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Если все равно там вычислений масса, и они делаются лиспом - кто мешает тем же лиспом и в нужные атрибуты засовывать нужные данные?
Две причины:
1. Лисп заполняет атрибуты не просто текстом, а полями, связывая длины указанных полилиний и отрезков, чтобы при смене трасс новые длины поступали в блок автоматически.
2. Нужно, чтобы расчет был относительно прозрачен для пользователя и видны были исходные данные, а не волшебная команда, которая что-то там на основании чего-то там посчитала и выдала какой-то результат.

Последний раз редактировалось Сыч, 25.01.2024 в 16:04.
Сыч вне форума  
 
Непрочитано 25.01.2024, 16:46
#8
kp+

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


Цитата:
Сообщение от Сыч Посмотреть сообщение
Осталось разобраться, как вместо регенерации вставить в лисп обновление полей блока.
Так подойдет?
Код:
[Выделить все]
 (Vl-cmdf "_updatefield" block_entity)
(entupd block_entity)
И все это в цикл на 4 оборота, или сколько там у вас уровней вложенности полей. Честно говоря, с многократно вложенными полями не дружу, поэтому подводных камней не знаю и работоспособность не гарантирую

Offtop:
Цитата:
Сообщение от Сыч Посмотреть сообщение
Нужно, чтобы расчет был относительно прозрачен для пользователя и видны были исходные данные, а не волшебная команда, которая что-то там на основании чего-то там посчитала и выдала какой-то результат
Сотрудники месье знают толк... Не проще вывод промежуточных результатов сделать в том же лиспе? А дотошный пользователь, если усомнится, все равно будет пересчитывать не с помощью полей, а на бумажке
Единственное, что приходит в голову, зачем такой изврат - у некоторых пользователей LT...

Последний раз редактировалось kp+, 25.01.2024 в 16:57.
kp+ вне форума  
 
Непрочитано 25.01.2024, 16:48
#9
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от Сыч Посмотреть сообщение
Нужно, чтобы расчет был относительно прозрачен для пользователя и видны были исходные данные, а не волшебная команда, которая что-то там на основании чего-то там посчитала и выдала какой-то результат.
что-то большие сомнения по поводу "прозрачности" расчета
Цитата:
Сообщение от Сыч Посмотреть сообщение
Причем поля "многоступенчатые": пользователь вносит данные в "ручные" атрибуты, на их основе пересчитываются значения других атрибутов с полями, а на их основе пересчитываются значения третьих атрибутов с полями. Соответственно, чтобы получить окончательный результат, нужно сделать 3-4 регенерации чертежа подряд.
сам разработчик этой "системы" может и видит всю картину в целом...
Сергей812 вне форума  
 
Автор темы   Непрочитано 25.01.2024, 20:49
#10
Сыч


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


Цитата:
Сообщение от kp+ Посмотреть сообщение
Так подойдет?
Вот так сработало
Код:
[Выделить все]
 (vl-cmdf "_UPDATEFIELD" block_entity "")

Цитата:
Сообщение от Сергей812 Посмотреть сообщение
что-то большие сомнения по поводу "прозрачности" расчета
Людям свойственно сомневаться.
Сыч вне форума  
 
Непрочитано 25.01.2024, 23:44
#11
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от Сыч Посмотреть сообщение
Людям свойственно сомневаться.
просто человек "однозадачная система", и если основное внимание сосредоточено на соблюдение ритуала определенных вспомогательных действий для получения корректного результата - сквозной контроль данных ака прозрачность вычислений будет по остаточному принципу.
Сергей812 вне форума  
 
Непрочитано 25.01.2024, 23:52
#12
Кулик Алексей aka kpblc
Moderator

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


Offtop:
Цитата:
Сообщение от Сыч Посмотреть сообщение
Людям свойственно сомневаться.
Точнее, ошибаться. А у меня так вообще безлимит
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 26.01.2024, 04:15
#13
Сыч


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


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Точнее, ошибаться.
Ну как говорится, "ты сказал".
Сыч вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Как обновить значения полей только в конкретном экземпляре блока?



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменить значения у атрибутов блока alexmntmnk LISP 1 03.07.2023 20:07
Вставка значения атрибута блока в поле в блоке Prying AutoCAD 28 08.09.2020 17:51
Как установить значения атрибутов динамического блока? Diam Finn .NET 3 14.01.2020 18:30
Дописать префикс/суффикс перед/после значения атрибута блока Liam AutoCAD 7 05.10.2013 23:05
При взрыве блока (_EXPLODE) размеры меняют свои значения Олександр AutoCAD 2 23.09.2010 21:11