Стандартная реализация менеджера подшивок AutoCAD такова, что пользователь может создавать произвольное количество пользовательских свойств уровней подшивки и листа, но не набора листов. Компания Autodesk неоднократно получала от своих пользователей просьбы исправить эту досадную недоработку однако, руководствуясь маркетинговой политикой компании, эти просьбы были проигнорированы. Лично я не питаю никаких иллюзий на тему того, что в обозримом будущем ситуация исправится. Однако отсутствующий функционал достаточно востребован среди пользователей, как русских, так и зарубежных. Возникает вопрос: можно ли это как-то исправить?
К счастью, данная задача легко решается программно (правда не на AutoLISP\Visual LISP). Для её реализации потребуется найти ответы два вопроса:
К счастью, данная задача легко решается программно (правда не на AutoLISP\Visual LISP). Для её реализации потребуется найти ответы два вопроса:
- Как программно создавать\читать\изменять пользовательские свойства групп листов в составе подшивки?
- Как связывать пользовательские свойства групп листов с полями (Fields), присутствующими в составе текстов и атрибутов?
1: public enum PropertyFlags {
2: EMPTY = 0,
3: CUSTOM_SHEETSET_PROP = 1,
4: CUSTOM_SHEET_PROP = 2,
5: IS_CHILD = 4,
6: }
Со значениями CUSTOM_SHEETSET_PROP и CUSTOM_SHEET_PROP всё ясно - это пользовательские свойства уровня подшивки и уровня листа. Значение EMPTY используется для инициализации переменной перед получением пользовательского свойства. Значение IS_CHILD в данный момент не используется и предназначено для будущих расширений (читать как "никогда не будет задействовано", поскольку время показывает, что на развитии механизма подшивок, к сожалению, давно поставлен крест, как это когда-то произошло и с развитием AutoLISP\Visual LISP). Т. о. при желании, значение IS_CHILD можно использовать в своих программах, по своему усмотрению, не боясь конфликтов её интерпретации программным кодом Autodesk.
Теперь по поводу второго вопроса... К сожалению, по умолчанию AutoCAD не предоставляет возможности сослаться на пользовательское свойство группы листов. Однако решение может быть получено путём некоторого компромисса, прозрачного для конечных пользователей: создавать поля, значения которых будут обновляться вами программно за счёт подписки на следующие события: открытия\закрытия документа, регенерации, предварительного просмотра и печати. Код поля можно формировать например следующим образом:
- %<\AcDiesel $(nth, 0, "Expressed value", "Description", "CompanySite", "AssemblyName", "ClassName", "MethodName", "ParameterValue")>%
Параметры, передаваемые в метод, следуют в самом конце. Количество параметров может быть произвольным - столько, сколько требуется для работы указанного метода. В качестве одного из "ParameterValue" можно, к примеру, передавать числовое значение handle объекта, подлежащего обработке. Используя Reflection в вашем коде, зарегистрированном на указанные выше события, можно вычислить искомый результат и записать его вместо "Expressed value". Этот результат и будет отображаться полем (Field) в качестве значения. В "CompanySite" записывается адрес вашего сайта (как разработчика). В "Description", в случае необходимости, можно записать некоторую поясняющую текстовую информацию.
Когда заказчик получит комплект чертежей (вместе с подшивкой), то все поля будут содержать корректные значения даже несмотря на то, что написанный вами программный код отсутствует на его машине. Поскольку заказчик по умолчанию не имеет доступа к пользовательским свойствам групп листов, то и изменить их он не сможет. Соответственно, значения, программно записанные вами в состав поля, остаются корректными даже при отсутствии вашей программы.
Наличие положительного ответа на второй вопрос позволяет вам написать свою версию диспетчера подшивок, более удобную в использовании чем та, что в AutoCAD присутствует по умолчанию. Но это отдельная тема...
P.S. Полезные ссылки по теме:
P.S. Полезные ссылки по теме:
Комментариев нет:
Отправить комментарий