Перейти к содержимому


MultiCAD.NET: подсчет суммарной длины отрезков на чертеже

MultiCAD.NET

Сообщений в теме: 9

#1 azaytsev

    Клуб разработчиков

  • Клуб разработчиков
  • PipPip
  • 16 сообщений
  • Пол:Мужчина

Отправлено 23 Январь 2015 - 12:19

http://habrahabr.ru/...ft/blog/246511/
http://habrastorage.org/files/686/379/734/6863797343d547c9832314d6d8c4b90f.jpg

К нам в техподдержку часто приходит вопрос: "Как посчитать суммы длин отрезков (участков трубопровода, элементов электрических схем и т.п.) в чертеже?". Существует масса способов решения этой задачи, в сегодняшней публикации мы рассмотрим реализацию приложения на MultiCAD.NET API, суммирующего длины, которое работает в nanoCAD, AutoCAD и ZWCAD. В качестве примера мы возьмем задачу определения суммарной длины труб в схеме водоснабжения и рассмотрим два варианта выбора элементов для подсчета: пользовательский и по созданному фильтру.

Сообщение отредактировал azaytsev: 23 Январь 2015 - 20:57


#2 Laziz

    Посетитель

  • Пользователи
  • PipPip
  • 23 сообщений

Отправлено 13 Апрель 2015 - 22:32

VS 2013, Nanocad 5.1 Free
Скажите пожалуйста, из за чего может не увидет линни находящегося на слое?
т.е. слойи находит но не видет линии и полилинии в этих слоях.

McObject currObj = currID.GetObject();
  // Распознавание типа объекта
  if (currObj is DbLine)
  {
    //...... DbLine всегда дет false
  }

Не знаю какие информаци дать что бы боле понятно обяснить, если что спросите.
Спасибо

Сообщение отредактировал Laziz: 14 Апрель 2015 - 11:22


#3 Laziz

    Посетитель

  • Пользователи
  • PipPip
  • 23 сообщений

Отправлено 14 Апрель 2015 - 12:51

Свойство объектов
Прикрепленный файл  Question1.PNG   16,19К   2 Количество загрузок:
Что не так?

#4 macrodaemon

    Гуру MultiCAD API

  • nanoSoft
  • PipPip
  • 18 сообщений
  • Пол:Мужчина

Отправлено 14 Апрель 2015 - 14:56

Делайте просто
DBLine line = currID.GetObject();
if(line != null)
{
}
Там implicit конверсия и она приведет если тип подходит.

или
if(currObj.ClassID == DBline.TypeID)


В 6 и 7 нанокаде ваша конструкция сработала бы.

В 5 нанокаде еще не было приведения к конечному типу объекта и отдавалась реализация McObject, которая при implicit преобразованиях могла привестись в нужны класс.

Все улучшается :)

#5 Laziz

    Посетитель

  • Пользователи
  • PipPip
  • 23 сообщений

Отправлено 15 Апрель 2015 - 11:27

Просмотр сообщенияmacrodaemon (14 Апрель 2015 - 14:56) писал:


В 6 и 7 нанокаде ваша конструкция сработала бы.

В 5 нанокаде еще не было приведения к конечному типу объекта и отдавалась реализация McObject, которая при implicit преобразованиях могла привестись в нужны класс.

Все улучшается :)
Благодарю за ответ, теперь боле понятно стало.
Желаю скорейшего улучшения!

#6 veb786

    Новичок

  • Пользователи
  • Pip
  • 3 сообщений

Отправлено 16 Апрель 2015 - 17:09

Здравствуйте. Не могли бы вы выложить код данного проекта. Заранее спасибо!

#7 Laziz

    Посетитель

  • Пользователи
  • PipPip
  • 23 сообщений

Отправлено 16 Апрель 2015 - 19:29

Просмотр сообщенияveb786 (16 Апрель 2015 - 17:09) писал:

Здравствуйте. Не могли бы вы выложить код данного проекта. Заранее спасибо!
Код на Хабре есть, ссылка на первом посте!

#8 veb786

    Новичок

  • Пользователи
  • Pip
  • 3 сообщений

Отправлено 17 Апрель 2015 - 09:31

Я все сделал вроде бы как надо, но компилятору не нравится эта строчка
ObjectFilter filter = ObjectFilter.Create(true).AddType(typeof(DbLine)).AddType(typeof(DbPolyline)).AddLayer(layerName);
, а именно typeof(DbLine).
Я считаю что проблема в отсутствующей библиотеки или конфликт имен библиотек, но какой?

#9 Laziz

    Посетитель

  • Пользователи
  • PipPip
  • 23 сообщений

Отправлено 17 Апрель 2015 - 14:34

Просмотр сообщенияveb786 (17 Апрель 2015 - 09:31) писал:

Я все сделал вроде бы как надо, но компилятору не нравится эта строчка
ObjectFilter filter = ObjectFilter.Create(true).AddType(typeof(DbLine)).AddType(typeof(DbPolyline)).AddLayer(layerName);
, а именно typeof(DbLine).
Я считаю что проблема в отсутствующей библиотеки или конфликт имен библиотек, но какой?
ObjectFilter filter = ObjectFilter.Create(true).AddType(DbLine.TypeID).AddType(DbPolyline.TypeID).AddType(DbCircle.TypeID).AddType(DbCircArc.TypeID).AddLayer(layerName);
Попробуйте вот так, кажется я так победил эту строку :D

#10 veb786

    Новичок

  • Пользователи
  • Pip
  • 3 сообщений

Отправлено 17 Апрель 2015 - 17:00

Laziz спасибо, это реально помогло!

А еще в nanocad 5.1 не работает эта конструкция:
lengthSum += (currObj as DbLine).Line.Length;

Сделал костыль:
DbLine gg = currObj;
lengthSum += gg.Line.Length;





Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 скрытых пользователей