Сегодня я начинаю разбирать состав каталога традиционной (безнапорной) трубопроводной сети Civil 3D.
У меня до этого уже был некоторый опыт работы с ним. В частности, мне удалось создать с нуля нормально функционирующий колодец (если вы думаете, что это не сильно сложно - попробуйте) и сделать некоторые вещи, которые не получались стандартными средствами. Как показала практика, функционал в каталог заложен гораздо больший, чем позволяет использовать стандартный редактор каталога. Так что, нужно детально разобраться, что же еще можно из него выжать.
Так сейчас выглядит структура нашего рабочего каталога:
Из него удалено уже все, что касается размеров труб и колодцев в британских единицах. Оставлено только то, что действительно нужно для работы. Это позволило уменьшить его размер примерно в два раза, что очень облегчает его передачу через интернет.
Пройдемся по папкам.
Aecc Shared Content
Название говорит о том, что здесь должен содержаться какой-то контент для общего доступа. Заглянем внутрь:
6 файлов XML и один TXT. Вполне читаемые и редактируемые форматы. Я для исследования буду использовать бесплатную Visual Studio Express, хотя можно было воспользоваться обычным блокнотом. Рассмотрим каждый по отдельности.
AeccCatCfg.xml
Вот все, что он содержит:
Не густо. Какие-то две настройки с малоинформативными именами. Что они означают - одному разработчику известно. Комментарий сообщает о том, что этот файл должен лежать в той папке, в которой он, собственно, и лежит. Что же, оставим его в покое.
AeccCatValCfg.xml
Хоть он также содержит всего два параметра, его содержание более информативно, чем у предыдущего файла:
Судя по описанию, параметры предназначены для настроек тестирования каталога. Возможно, что в будущем это нам как-то пригодится, но сейчас это не вызывает интереса. Закрываем файл.
AeccPartParamCfg.xml
Ого! Вот это уже похоже на серьезный файл конфигурации! Настолько серьезный, что его скрин не помещается на один экран. Будем разбирать его кусочками. Чем хороши специализированные XML редакторы - в них можно сворачивать разделы. И тогда можно более наглядно увидеть структуру этого файла:
Корневой элемент AeccParamConfigSet содержит два элемента - AeccParamDeclaration и AeccParamUsage. Рассмотрим их по очереди.
AeccParamDeclaration
Cодержит в себе несколько элементов типа AeccDfSortGroup. Эти элементы содержат элементы типа AeccDfParameter, которые хранят информацию о параметрах специфических характеристик элементов каталога. Вот несколько таких параметров:
Рассмотрим, что означает каждый атрибут одного отдельного параметра:
<AeccDfParameter name="PrtSN" desc="Название размера элемента" context="Catalog_PartSizeName" index="0" datatype="String" usage="String_Name" unit="" visible="True" internal="True"/>
- name - Сокращенное обозначение параметра, используется, например, в формулах
- desc - Описание параметра, локализуется (иногда довольно криво)
- context - Независимое от локализации имя/описание параметра. Что-то мне подсказывает, что именно по нему Civil определяет с каким параметром имеет дело и как его программно обрабатывать.
- index - Неясно, что это. У параметров этой секции преимущественно равен "0". Встречается также значение "1".
- datatype - Тип значения. Бывает "String", "Float", "Int", "Bool". Других вроде больше нет. Для тех, кто хотя бы немного знаком с программированием, ясно, что это обозначает строку, число с плавающей точкой, целое число и логическое значение соответственно.
- usage - Судя по всему, это индикатор того, как Civil должен распознавать это значение. Есть варианты:
- для datatype="String": "String_Name", "String_General", "String_EnumKey", "String_Guid"
- для datatype="Float": "Double_SmallDistance", "Double_General", "Double_Distance", "Double_Angle", "Double_NonZeroNonNeg"
- для datatype="Int": "Int_General", "Int_NonZeroNonNeg". Нашелся также один вариант для "Int" от строки - "String_EnumKey". То ли ошибка, то ли особенность.
- unit - Единица измерения. Используется для datatype="Float". В зависимости от usage может быть "in"(я так понимаю - сокращение от inch и должно быть "mm" по хорошему, чтобы соответствовать нашей метрической системе), "deg"(degrees - градусы), "" - пустое значение, если величина безразмерная или типа, отличного от "Float".
- visible - Видимость параметра. Где? Хороший вопрос. Скорее всего, это отвечает за видимость параметра в свойствах элемента на чертеже.
- internal - Судя по названию, означает что параметр внутренний. Возможно, что это ограничивает его область видимости. У всех параметров значение установлено в "True".
Попробую сделать некоторые выводы из этой информации на основе своего опыта.
Большая часть параметров вопросов не вызывает, т.к. они используются в стандартном редакторе каталога.
Можно безбоязненно отредактировать здесь такой атрибут, как desc - это повлияет на то, какое описание параметра будет отображаться в редакторе каталога. Обязательно этим займусь, так как от описания некоторых параметров просто мозг взрывается (например "Зазор вертикальной трубы").
Атрибуты name и context трогать не стоит - первый используется в формулах, второй - для идентификации параметра Civil'ом. Если их отредактировать, каталог будет работать криво. То же самое касается атрибутов datatype и usage.
Атрибуты index и internal непонятны, а посему их тоже трогать не стоит.
Сомневаюсь, что где-то используется атрибут unit, иначе уже давно бы были проблемы с его неправильным значением. Как-никак, каталог уже несколько лет в работе. Раз проблем нет - значит это чисто справочная информация. Но для порядка, надо попробовать заменить in на mm.
Атрибут visible у меня также чешутся руки потрогать. Например, можно попробовать отключить видимость некоторых элементов, наличие которых в свойствах не требуется. Посмотрим, что из этого получится.
AeccParamUsage
Этот элемент не столь обширен как предыдущий, но содержит весьма интересную информацию!
В него входит несколько элементов типа AeccPartDomainCfg - конфигурации доменов частей. В их атрибутах name - имена доменов, конфигурации которых задаются. Используя соответствующие названия элементов, определяется какой параметр будет обязательным, какой опциональным и т.п. Рассмотрим подробнее одну конфигурацию:
Включаем мозг (хоть это и не просто в почти час ночи) и приступаем к расшифровке:
- <AeccPartDomainCfg domain="Pipe_Domain"> - открывающий тег, показывает, что элемент является конфигурацией домена части (части трубопроводной сети). Атрибут domain содержит имя домена, для которого приведена конфигурация - "Pipe_Domain".
- <AeccReqParam context="SweptShape"/> - первыми идут элементы, обязательные для этого домена. В данном случае - это "SweptShape". Если посмотреть в предыдущем разделе AeccParamDeclaration, то мы найдем там параметр с таким атрибутом context - это не что иное, как "Форма поперечного сечения". Логично, что для того, чтобы определить трубу, нужно задать, какой она будет формы.
- <AeccPartTypeCfg type="Pipe" desc="Труба"> - открывается тег нового элемента, показывающий, что внутри домена есть еще и типы, для каждого из которых задается своя конфигурация. В данном случае это "Труба" (как неожиданно!).
- <AeccReqParam context="WallThickness"/> - здесь мы узнаем, что единственным обязательным параметром является толщина стенки.
- <AeccShpParam context="PipeInnerDiameter"/>,<AeccShpParam context="PipeInnerHeight"/>,<AeccShpParam context="PipeInnerWidth"/> - эти параметры являются зависимыми от формы трубы - на эту мысль наводит Shp в имени. И в зависимости от формы могут потребоваться внутренний диаметр, внутренняя высота и внутренняя ширина.
- <AeccOptParam context="Material_Type"/>,<AeccOptParam context="MinCurveRadius"/>,<AeccOptParam context="FlowAnalysis_Manning"/>,<AeccOptParam context="FlowAnalysis_HazenWilliams"/>,<AeccOptParam context="FlowAnalysis_DarcyWeisbach"/> - Эти параметры являются опциональными - наличие Opt в названии просто не оставляет других вариантов. Это такие параметры как тип материала, минимальный радиус кривой (да ладно? где же он в Civil?) и три коэффициента, которые используются для гидравлических расчетов.
- </AeccPartTypeCfg> - Закрывается тег - описание типа завершено.
- </AeccPartDomainCfg> - Закрывается тег - описание домена завершено.
Аналогичная ситуация и с доменом колодца.
Попробуем проанализировать эту информацию.
Согласно этой конфигурации, есть обязательные параметры, которые должны задаваться для элемента. Есть какие-то параметры, которые определяются в зависимости от формы. Где определяется эта зависимость - пока не понятно. Возможно, что это внутренний механизм Civil. В любом случае, трогать их в этом файле категорически не рекомендую. Наряду с этим, есть опциональные параметры, которые, по идее, можно было бы и не задавать. Но, как показывает практика, в редакторе удалить эти параметры, которые вроде как опциональные, совершенно невозможно. Может быть, такое получится сделать в этом файле?
Также, приходит в голову мысль, что можно создать какой-то свой параметр, который можно использовать как свойство трубы. К примеру, это может быть обозначение основания, которое закладывается под трубу. Надо пробовать.
Фух. Большой файл, но и полезного в нем немало. Посмотрим, что еще в этой папке.
AeccPartParamCfg_old.xml
Это, как я понимаю, мои проделки. Когда я в предыдущий раз копался в каталоге, то сделал на всякий случай резервную копию файла, в котором пробовал вносить изменения. Очень советую сделать то же самое, прежде чем будете что-то пытаться изменять! Удалить, правда, забыл. Но это не так страшно, как испортить каталог.
AeccPartTemplate_RelCat.xml и AeccPartTemplate_RelPart.xml
Я решил объединить их в один подзаголовок, так как они очень похожи. Судя по всему, это шаблоны для создания чего-то. Заглянем внутрь:
Пока не понятно, для чего они нужны. Разница между ними - только в наличии атрибута pathsRelativeTo="Table" в файле AeccPartTemplate_RelPart.xml. Возможно, что изучая дальше каталог, мы найдем файлы, выполненные по этим шаблонам.
AeccuGuidList.txt
Текстовый файл, в котором перечислены GUID элементов каталога без всякого разделения на категории:
Наверное, это нужно для быстрой инициализации элементов каталога. Особо интереса не представляет.