Блокировка окна Компас 3D и блокировка вставленной сборки.

Автор Cyclopentan, 09.12.21, 08:47:12

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Cyclopentan

Коллеги, добрый день!
Пришло время закручивать гайки и возникла потребность в 2 запретительных вещах:

1 Необходимо блокировать пользователю возможность что-то делать в Компасе (На время отработки некоторых функций нашей ActiveX библиотеки в Компасе).
По этому поводу вообще нет никаких мыслей, ничего подобного типа block или freeze не нашёл ни в документации SDK, ни на форуме.

2 В процессе работы надо программно запретить пользователю редактировать вставленные в головную сборку подсборки.
По этому поводу появились мысли и их 2 штуки:
2.1 Можно ставить подсборкам статус Редактирование->Запретить (через IPart.ReadOnly  = ksATReadOnly) и потом пытаться отслеживать событие смены пользователем этого статуса и возврата его на место. Но. При такой блокировке мы не можем перемещать заблокированную подсборку, либо менять её исполнение. Т.е. от изменений блокируется не сама подсборка, а ссылка на подсборку из головной сборки. А надо, чтобы данную деталь можно было перемещать, либо менять её исполнение.
2.2 Пытаться отслеживать события "Редактировать компонент на месте" и "Редактировать компонент в окне" и их блокировать.
С редактированием в окне всё ясно - понимаем событие ApplicationEvent BeginOpenDocument, выводим гневное окно, закрываем документ. А что за событие может быть у "Редактировать компонент на месте"? И хватит ли отслеживания только этих двух событий, нет ли ещё каких-нибудь лазеек для изменения вложенной подсборки?

graphdark

#1
А просто вызов модальной формы с анимацией часиков? Имею ввиду в канпасе вызвать модальное окно или сообщение.
+ Благодарностей: 1

Cyclopentan

Оу... Действительно.
Окей, первый вопрос снимается.

KrissKross

Цитата: Cyclopentan от 09.12.21, 08:47:121 Необходимо блокировать пользователю возможность что-то делать в Компасе (На время отработки некоторых функций нашей ActiveX библиотеки в Компасе).

Скрыть Компас и показывать индикацию процесса в своей программе

Цитата: Cyclopentan от 09.12.21, 08:47:122 В процессе работы надо программно запретить пользователю редактировать вставленные в головную сборку подсборки.

Назначить на файл атрибут - только для чтения
и соответственно открывать в Компаса с опцией - только для чтения
Редактировать файл можно только определенным пользователем - назначенными разрешениями в файловой системе - средствами системного администратора

и не много отвлеченно
похоже Вы доросли - до внедрения ПДМ системы
с разграничениями прав доступа к конкретным проектам и ведение архива
+ Благодарностей: 1

Cyclopentan

Цитата: KrissKross от 09.12.21, 10:59:23Скрыть Компас и показывать индикацию процесса в своей программе
Угу, проверил - модальное окно полностью блокирует Компас, его даже скрывать не надо. Как-раз в это окно процесс загрузки будем выводить.

Цитата: KrissKross от 09.12.21, 10:59:23Скрыть Компас и показывать индикацию процесса в своей программе
Неожиданное решение. Но действительно подходит. Менять исполнение и перемещать подсборку можно, при попытке редактирования на месте Компас сам ругается, что файл для чтения, при редактировании в окне файл открывается, но мы уже умеем по событиям с этим бороться. Так что - решение с определёнными допилами рабочее!

Цитата: KrissKross от 09.12.21, 10:59:23Редактировать файл можно только определенным пользователем - назначенными разрешениями в файловой системе - средствами системного администратора
У нас все файлы и данные лежат в базе данных и скачиваются на локальный комп пользователя в момент открытия чертежа из системы, и парсятся и закачиваются в систему при закрытии файла. Так что просто при скачивании будем проставлять признак файлу "Только для чтения", этого вполне хватит.

Цитата: KrissKross от 09.12.21, 10:59:23и не много отвлеченно
похоже Вы доросли - до внедрения ПДМ системы
с разграничениями прав доступа к конкретным проектам и ведение архива
Так и есть, раскусили Вы нас  :shu: . Делаем PLM/PDM систему с участием Компаса на определённой стадии. И как-раз на случай, если кто-то в текущий момент редактирует вложенную сборку, либо у вложенной сборки стоит статус "К применению" - надо её в основной сборке блокировать.