Отслеживание изменения семейства
Уже много лет проектировщики и разработчики спрашивают, как можно защитить семейства от изменения их пользователями, или хотя бы отследить было ли семейство изменено или нет.
Вот один из подобных вопросов:
Вопрос: Меня все время спрашивают, как можно защитить мои семейства от изменения их пользователями.
Было бы очень неплохо, если я хотя бы смог определить, что в семейство были внесены некие изменения.
Например, значение некоторого параметра установить равным нулю, если семейство было скопировано или изменено.
В этом случае в своей надстройке я бы смог отфильтровать те семейства, в которых были сделаны изменения.
Ответ: Мне кажется в предложенном вами варианте могут быть подводные камни, например, как быть со вложенными параметрами и как отслеживать изменения в них.
Тем не менее в Revit 2015 API появилась одна полезная возможность, которая как раз связана с данной темой. Параметры «только для чтения». Эти параметры можно изменить программно, но их нельзя изменить в интерфейсе пользователя. Более подробную информацию смотрите в разделе Создание общих параметров – описание и изменения пользователями - shared parameter creation – description and user modifiability (на англ.)
И наконец, мне совершенно спонтанно пришла в голову идея:
- Нужно придумать и реализовать некий метод для создания бинарного представления вашего семейства. Например, это может быть результат выполнения метода EditFamily. Затем сохраним этот результат в файл.
- Вычислить контрольную сумму полученного бинарного представления
- Сохранить контрольную сумму в параметр «только для чтения» или с помощью расширяемой области хранения. Возможно в зашифрованном виде.
После этого, чтобы определить было ли семейство изменено или нет, нужно заново вычислить контрольную сумму и сравнить ее с той, что хранится в параметре.
Я надеюсь, что правильная реализация этого алгоритма позволит добиться желаемого результата.
Я буду очень признателен, если кто-нибудь предложит другие решения или реализацию предложенного алгоритма.
Обсуждение: http://adn-cis.org/forum/index.php?topic=853
Опубликовано 13.07.2014Отредактировано 13.07.2014 в 23:58:11