Map 3D. Autocad Civil. Классификация MPolygon

Автор Тема: Map 3D. Autocad Civil. Классификация MPolygon  (Прочитано 6956 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн Shiryamov AleksandrАвтор темы

  • ADN OPEN
  • Сообщений: 2
  • Карма: 1
  • Shiryamov Aleksandr
Добрый день!
Работаем в Русском Civil 3D 2014-2015.
В программе выполняем классификацию (переклассификацию) МПолигонов под классы Map3D. Сперва пользователь создаёт Полигон, а потом выбирает класс для назначения.
Классификация указана ниже:

Код - C# [Выбрать]
  1. private static void Classify(ObjectId objectId, string className, params string[] properties)
  2. {
  3.         var manager = HostMapApplicationServices.Application.ActiveProject.ClassificationManager;
  4.  
  5.         // здесь классифицируем
  6.         using (var ids = new ObjectIdCollection { objectId })
  7.         using (var failIds = new ObjectIdCollection())
  8.         {
  9.                 var errorCodes = new FeatureClassErrorCodeCollection();
  10.                 manager.Classify(failIds, errorCodes, ids, className, true, true);
  11.         }
  12.  
  13.         // ...
  14. }
  15.  

Описание класса в классификаторе:
Код - XML [Выбрать]
  1.    <Feature name="0311220000 - Озера соленые" superclass="ГИДРОГРАФИЯ..." acrxclassrange="AcDbMPolygon" base="Нет" desc="">
  2.       <Categories >
  3.          <Category name="Пользовательский">
  4.             <Properties >
  5.                <Property name="Код классификатора*" psrc="ACAD_OCP" primitivetype="OcText" creatable="Да" storageHint="&lt;Hint className=&quot;0311220000 - Озера соленые&quot;/&gt;" readOnly="Да" visible="Да" default="0311220000" range="--"/>
  6.                <Property name="Наименование*" psrc="ACAD_OCP" primitivetype="OcText" creatable="Да" storageHint="&lt;Hint className=&quot;0311220000 - Озера соленые&quot;/&gt;" readOnly="Нет" visible="Да" default="Озера соленые" range="--"/>
  7.             </Properties>
  8.          </Category>
  9.          <Category name="Общие">
  10.             <Properties >
  11.                <Property name="Слой" primitivetype="OcLayer" creatable="Нет" readOnly="Нет" visible="Да" default="ГидрП" range="ГидрП"/>
  12.                <Property name="Тип линий" primitivetype="OcLinetype" creatable="Нет" readOnly="Нет" visible="Да" default="Style_1" range="Style_1"/>
  13.                <Property name="Цвет" primitivetype="OcTrueColor" creatable="Нет" readOnly="Нет" visible="Да" default="7" range="7"/>
  14.                <Property name="Масштаб типа линий" primitivetype="OcNumUserdefNoUnits" creatable="Нет" readOnly="Нет" visible="Да" default="5" range="5"/>
  15.             </Properties>
  16.          </Category>
  17.          <Category name="Образец">
  18.             <Properties >
  19.                <Property name="Образец цвета заливки" primitivetype="OcTrueColor" creatable="Нет" readOnly="Нет" visible="Да" default="131" range="131"/>
  20.             </Properties>
  21.          </Category>
  22.       </Categories>
  23.       <AppData xmlns="http://www.landxml.org/schema/wd/AOC">
  24.          <ACADMAP xmlns="">
  25.             <CreationVersion FdoLink="1">2</CreationVersion>
  26.             <Create >
  27.                <CreateMethod >6</CreateMethod>
  28.                <PatternType >0</PatternType>
  29.                <PatternTypeBlank >0</PatternTypeBlank>
  30.                <PatternName >SOLID</PatternName>
  31.                <PatternNameBlank >0</PatternNameBlank>
  32.                <Angle >0</Angle>
  33.                <AngleBlank >1</AngleBlank>
  34.                <Scale >1</Scale>
  35.                <ScaleBlank >1</ScaleBlank>
  36.                <Spacing >1</Spacing>
  37.                <SpacingBlank >1</SpacingBlank>
  38.                <Color >131</Color>
  39.                <ColorBlank >0</ColorBlank>
  40.             </Create>
  41.             <ShowClass >1</ShowClass>
  42.             <StandardIcon >0</StandardIcon>
  43.             <IconName >C:\Program Files\Autodesk\AutoCAD Civil 3D 2012\class_standard.bmp</IconName>
  44.          </ACADMAP>
  45.       </AppData>
  46.    </Feature>
  47.  

Как видно, в описании есть тег <Create>, в котором описаны свойства, назначающиеся созданному объекту при помощи палитры Map3D. Но программной классификацией эти свойства не назначаются. В Категории "Образец" можно вписать разные свойства штриховки, кроме самой штриховки - "Имя образца" Что можно с этим сделать?
« Последнее редактирование: 13-04-2016, 12:42:35 от Александр Ривилис »

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Map 3D. Autocad Civil. Классификация MPolygon
« Ответ #1 : 13-04-2016, 12:45:18 »
Shiryamov Aleksandr
Приветствую на форуме!
1. Обрати внимание на то, как следует форматировать код на форуме (у меня в подписи).
2.
В Категории "Образец" можно вписать разные свойства штриховки, кроме самой штриховки - "Имя образца" Что можно с этим сделать?
Очевидно, что тебе придётся самостоятельно (программно) назначить эти свойства. Судя по всему они все есть у класса MPolygon:




« Последнее редактирование: 13-04-2016, 16:12:01 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 737
Re: Map 3D. Autocad Civil. Классификация MPolygon
« Ответ #2 : 13-04-2016, 14:08:52 »
Off-Topic: показать
Вот сейчас я очень хорошо понимаю сотрудников техподдержки ADN. Вот вроде даже на русском языке написано, и примеры кода есть, но пришлось несколько раз вдумчиво перечитать, чтобы понять в чем проблема. И я все равно до конца не уверен, что понял :) А им (ADN Support) очень часто приходится еще и не на родном языке читать сообщения...

Shiryamov Aleksandr, посмотрите как задали вопрос в этой теме: http://adn-cis.org/forum/index.php?topic=2999.0. Все наглядно, а главное - легко воспроизвести проблему, разобраться и, при возможности, что-то толковое подсказать.

Оффлайн Shiryamov AleksandrАвтор темы

  • ADN OPEN
  • Сообщений: 2
  • Карма: 1
  • Shiryamov Aleksandr
Re: Map 3D. Autocad Civil. Классификация MPolygon
« Ответ #3 : 14-04-2016, 11:40:32 »
Спасибо большое за ответы! Замечания учту, буду исправляться:)

По поводу программного назначения штриховки - в MPolygon свойства доступны, заполнить их не проблема. Но не получается взять нужное значение свойства из классификатора средствами Map3D.

Написал тестовый проект, в котором сам изначально пытался решить проблему.
К проекту также приложен xml-файл описания "class.xml", в котором описан класс "Класс1". Проект добавлен к сообщению.

Для воспроизведения ошибки необходимо выполнить следующие шаги:
1. Запустить Civil русский. Открыть чертёж, построить в нём МПолигоны.
2. Вызвать команду SETCLASSIFICATOR, после чего загрузится классификатор.
3. Вызвать команду CLASSIFY, выбрать любой МПолигон.

Как результат, выбранный полигон будет классифицирован. Он будет закрашен (или нет, в зависимости от установленного флага FILLMODE) в образец SOLID с нужным цветом. Но в классификаторе в теге <Create> указан образец ANGLE:

Код - XML [Выбрать]
  1.                        
  2. <AppData xmlns="http://www.landxml.org/schema/wd/AOC">
  3.                  <ACADMAP xmlns="">
  4.                                 <CreationVersion FdoLink="1">2</CreationVersion>
  5.                                 <Create >
  6.                                         <CreateMethod >6</CreateMethod>
  7.                                         <PatternType >0</PatternType>
  8.                                         <PatternTypeBlank >0</PatternTypeBlank>
  9.                                         <PatternName >ANGLE</PatternName>
  10.                                         ...
  11.                                 </Create>
  12.                                 <ShowClass >1</ShowClass>
  13.                                 <StandardIcon >0</StandardIcon>
  14.                                 <IconName >C:\Program Files\Autodesk\AutoCAD Civil 3D 2012\class_standard.bmp</IconName>
  15.                 </ACADMAP>
  16. </AppData>

Можно ли добавить нужное мне свойство в категорию "Образец", не знаю. Панель Map3D не предлагает подходящего варианта, когда редактируешь свойства класса:


А написать в xml файле свойство наугад у меня не получилось - при подгрузке файла описаний AutoCAD падает без объяснения причин.
Код - XML [Выбрать]
  1. <Category name="Образец">
  2.   <Properties >
  3.     <Property name="Образец цвета заливки" primitivetype="OcTrueColor" creatable="Нет" readOnly="Нет" visible="Да" default="131" range="131"/>
  4.     <Property name="Образец цвета заливки" ... />
  5.   </Properties>
  6. </Category>

Можно, конечно, программно напрямую работать с xml-документом и обращаться к тегу <Create>, чтобы получать значение у "PatternName", но было бы здорово не городить лишнего, а получать всё через map3d.
Возможно я что-то упустил, не доглядел.

P.s.: Надеюсь, теперь всё по формату и более понятно описано :)

Отмечено как Решение Shiryamov Aleksandr 26-04-2016, 13:14:42

Оффлайн German

  • ADN Club
  • **
  • Сообщений: 84
  • Карма: 13
Re: Map 3D. Autocad Civil. Классификация MPolygon
« Ответ #4 : 14-04-2016, 12:05:39 »
Как я понял, в категорию образец кроме пяти дефолтных свойств ничего и не добавишь. Это не баг, а фича.
Т.е. остается только программно читать пользовательские свойства из классификатора и переназначать у классифицируемого полигона.
PS: спасибо за разжеванный вопрос.