|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
29.01.2020, 16:17 | #1 | |
Защита блока от редактирования с помощью реакторов
Воронеж
Регистрация: 26.06.2007
Сообщений: 151
|
||
Просмотров: 4646
|
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
ну вот пример на .Net защиты от удаления по XData. А так проще перенести на анонимный заблокированный слой, имхо.
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,849
|
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
я про это - есть подозрение, что через DXF/ActiveX это не доступно.
|
|||
|
||||
идущий по граблям Регистрация: 26.05.2005
Сообщений: 5,095
|
Цитата:
Если от криворуких пользователей, чтобы они не перегадили блоки, которые предназначены для автоматической обработки - то может пойти другим путем? Записать в словарь блока копию всех DXF-кодов его графических примитивов (кроме entname) и при необходимости сравнивать имеющийся с эталоном (или даже восстанавливать поврежденный). Если от халявщиков - тогда, наверное, как сказано в #2, короче, лезть в глубину глубин кроличьей норы Последний раз редактировалось kp+, 29.01.2020 в 17:25. |
|||
|
||||
Регистрация: 26.06.2007
Воронеж
Сообщений: 151
|
Сергей812, Спасибо, но тема создана в разделе LISP, а не .NET. Интересует, возможно ли сделать это с помощью реакторов — каких и как.
kp+, простая защита от переделки блоков: понятно, что с реакторами потребуется всегда подгружать через acaddoc функцию действия (и пользователь всегда сможет отменить такую загрузку), поэтому это простая защита. Со словарями DXF работать муторно — придётся всегда дополнительно программно обрабатывать любые изменения в блоке. Хотелось бы иметь решение без использования словарей и ведения списка объектов — именно по реакции на событие изменения вызывать функцию, которая бы понимала, "наш" ли блок пытается подвергнуться изменению, и если "наш" — отменять это действие. Или что-то подобное. Последний раз редактировалось Tonic, 29.01.2020 в 17:27. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
имхо, дергать Undo внутри реактора изменения примитива - не самая лучшая идея. Самое простое - перенести на заблокированный слой. Можно не анонимный, анонимный предложил - чтобы обычные пользователи не смогли отключить блокировки слоя даже при сильном желании через менеджеров слоев. Ну или отслеживать запуск команд редактирования блока через vlr-command-reactor
|
|||
|
||||
идущий по граблям Регистрация: 26.05.2005
Сообщений: 5,095
|
Цитата:
Для чего необходимо один раз, сразу после создания записать в словарь блока инфу о его "первозданном" виде. И если перед контролируемыми действиями прога обнаружит несоответствие реального блока эталону, то выдаст предупреждение пользователю/запретит обработку-сохранение-печать/вызовет админа-службу внутренней безопасности-охотников за привидениями Последний раз редактировалось kp+, 29.01.2020 в 17:50. |
|||
|
||||
Регистрация: 26.06.2007
Воронеж
Сообщений: 151
|
kp+, для этого варианта при каждой вставке блока нужно будет проходить по всем входящим примитивам, вычленять некоторые DXF-группы и сохранять их. Затем в определённый момент (например, при вызове операции сохранения файла) нужно запускать функцию, которая должна пройтись по всем тысячам блоков чертежа, и у "наших" блоков пройтись внутри по входящим примитивам, сопоставляя эти DXF-коды. Есть ли вариант проще? Без отсроченной реакции на произошедшие изменения, а с запретом (или откатом) этих изменений.
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,849
|
Tonic, не путай вхождения блоков и их определения.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 18.11.2019
Сообщений: 1,524
|
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,849
|
Offtop: Ага, и тут же в FAQ - "Как снять защиту"?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 18.11.2019
Сообщений: 1,524
|
Цитата:
Может кто замутит тему, как сделать неломаемую защиту данных? Последний раз редактировалось nickname2019, 29.01.2020 в 19:03. |
|||
|
||||
идущий по граблям Регистрация: 26.05.2005
Сообщений: 5,095
|
Цитата:
Да мутили уже все кому не лень. Ищите по форуму, найдете много интересного. Краткое резюме: пока такую защиту не сделает сам Автодеск (где-то в вер. 2050), все остальное будет костылями разной степени костыльности: - надежно, но требует дополнительного, весьма специфического ПО, которое надо ставить отдельно, что многим не подходит; - реализовано встроенными средствами, но защищает только от тех, кого в гугле забанили. |
|||
|
||||
Регистрация: 10.08.2013
Сообщений: 11,052
|
|
|||
|
||||
идущий по граблям Регистрация: 26.05.2005
Сообщений: 5,095
|
На первый взгляд - нежизнеспособны.
Но кто ж это проверит до конца путем написания и тестирования кода, кроме Вас? Может, при правильном использовании в рамках именно Вашей задачи это вполне жизнеспособное и эффективное решение. Отсюда ведь не видно, какие у Вас есть блоки, как выглядят, из чего состоят и как выполняются проекты, какими еще средствами автоматизации Вы пользуетесь. Последний раз редактировалось kp+, 30.01.2020 в 10:49. |
|||
|
||||
Регистрация: 26.06.2007
Воронеж
Сообщений: 151
|
Это сути не меняет. Блоки могут быть любыми (ну пусть это квадратик с текстом внутри), содержат расширенные данные, позволяющие их отличить от других блоков. При запрете изменения этих блоков будет подгружена только функция действия реакторов (ну или другой необходимый код), без какой-либо другой автоматизации.
Понятно, что писать и тестировать мне, но я обратился на форум, чтобы не пробовать всё подряд — наверняка тут кто-нибудь в курсе, как это проще реализовать, а как делать не стоит. С реакторами объектов не задалось (пропуск одного объекта в общем списке сразу сведёт все действия на нет), с реактором изменения базы рисунка пока не выходит — примеров в сети почти нет. |
|||
|
||||
Регистрация: 20.03.2008
Сообщений: 2,653
|
У меня вот такая штука получилась
Код:
----- добавлено через ~23 мин. ----- Добавлено. Да, знаю, что (command) в фунциях действия назначать нельзя, поэтому такой изврат. Прервать (не допустить) запуска команды тоже не выходит, хотя и получается вызвать окно alert до начала редактирования. К тому же, в Полещуке написано, что Цитата:
Однако, возникает вопрос: раз уж всем юзерам нужно будет ставить эти реакторы, то почему просто не назначить им всем в Операциях при двукратном нажатии на блок свою функцию, которая сперва проверит нужные данные, а затем либо даст либо не даст редактировать блок? Или вообще - не переопределить _BEDIT? Может, кто и догадается вызывать ее с точкой (непереопределенную), но такие персонажи также уже будут совсем не далеки от того, чтобы и этот реактор обойти. Они же, как правило, не творят прямо-таки откровенную дичь, особенно, если им объяснить, что порушится алгоритм какой-то программы. |
|||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Лисп для редактирования объектов блока. Можно ли без захода в редактор? | RrRR | LISP | 5 | 06.08.2018 19:08 |
Вставка блока. Окно редактирования атрибута. | JKF | AutoCAD | 4 | 13.03.2018 13:14 |
Имеется ли возможность ссылаться изнутри при создании блока на его же будущий номер ObjId ? | Tyhig | AutoCAD | 6 | 14.08.2017 17:56 |
Вставка блока с помощью иконки | RomanS | Программирование | 50 | 02.04.2010 11:33 |
Перевод имени блока в имя переменной и обратно | Supermax | Программирование | 11 | 14.12.2009 23:26 |