Jump to content

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


Recommended Posts

http://habrahabr.ru/company/nanosoft/blog/246511/

6863797343d547c9832314d6d8c4b90f.jpg

 

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

Edited by azaytsev
Link to comment
Share on other sites

  • 2 months later...

VS 2013, Nanocad 5.1 Free

Скажите пожалуйста, из за чего может не увидет линни находящегося на слое?

т.е. слойи находит но не видет линии и полилинии в этих слоях.

 

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

 

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

Спасибо

Edited by Laziz
Link to comment
Share on other sites

Делайте просто

DBLine line = currID.GetObject();

if(line != null)

{

}

Там implicit конверсия и она приведет если тип подходит.

 

или

if(currObj.ClassID == DBline.TypeID)

 

 

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

 

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

 

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

Link to comment
Share on other sites

 

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

 

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

 

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

Благодарю за ответ, теперь боле понятно стало.

Желаю скорейшего улучшения!

Link to comment
Share on other sites

Я все сделал вроде бы как надо, но компилятору не нравится эта строчка

ObjectFilter filter = ObjectFilter.Create(true).AddType(typeof(DbLine)).AddType(typeof(DbPolyline)).AddLayer(layerName);

, а именно typeof(DbLine).

Я считаю что проблема в отсутствующей библиотеки или конфликт имен библиотек, но какой?

Link to comment
Share on other sites

Я все сделал вроде бы как надо, но компилятору не нравится эта строчка

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

Link to comment
Share on other sites

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

 

А еще в nanocad 5.1 не работает эта конструкция:

lengthSum += (currObj as DbLine).Line.Length;

 

Сделал костыль:

DbLine gg = currObj;

lengthSum += gg.Line.Length;

Link to comment
Share on other sites

  • 3 years later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Tell a friend

    Love Официальный форум компании Нанософт? Tell a friend!
×
×
  • Create New...