Получить площадь объекта Face

Автор Тема: Получить площадь объекта Face  (Прочитано 2907 раз)

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

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

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1188
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Подскажите, что-то не найду метода Arae у класса
Autodesk.AutoCAD.DatabaseServices.Face

Использую API acad 2012
Как же мне получить площадь этой фигуры?
Фигура плоская четырехгранная.

У меня пока только одна идея
преобразовать в объект PolyLine3d и взять у него Area

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Получить площадь объекта Face
« Ответ #1 : 12-11-2017, 11:01:17 »
Вот так я делаю в ObjectARX:
Код - C++ [Выбрать]
  1. static double calcArea(AcGePoint3d p1, AcGePoint3d p2, AcGePoint3d p3)
  2. {
  3.         AcGeVector3d v1 = p3 - p1, v2 = p2 - p1;
  4.         return fabs(v2.crossProduct(v1).length() * 0.5);
  5. }
  6.  
  7. static double calc3DFaceArea(AcDbFace *pFace)
  8. {
  9.         if (!pFace) return 0.0;
  10.         AcGePoint3d vts[4];
  11.         for (int i = 0; i <= 3; i++) pFace->getVertexAt(i,vts[i]);
  12.         if (vts[3].isEqualTo(vts[2])) {
  13.                 return calcArea(vts[0],vts[1],vts[2]);
  14.         } else {
  15.                 return calcArea(vts[0],vts[1],vts[3]) + calcArea(vts[1],vts[2],vts[3]);
  16.         }
  17. }
  18.  
Думаю, что на C# ты переведёшь одной левой.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1188
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: Получить площадь объекта Face
« Ответ #2 : 12-11-2017, 11:16:18 »
return fabs(v2.crossProduct(v1).length() * 0.5);
А в С# метод fabs где живет?
Или аналог ему есть какой?
Это Math.Abs что-ли?

Отмечено как Решение Александр Ривилис 12-11-2017, 23:54:38

Оффлайн Алексей (IdeaSoft)Автор темы

  • ADN
  • *
  • Сообщений: 1188
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: Получить площадь объекта Face
« Ответ #3 : 12-11-2017, 11:25:54 »
Код на C#

Код - C# [Выбрать]
  1.         public static double calcArea(Point3d p1, Point3d p2, Point3d p3)  {
  2.             Vector3d v1 = p3 - p1;
  3.             Vector3d v2 = p2 - p1;
  4.             return Math.Abs(v2.CrossProduct(v1).Length * 0.5);
  5.         }
  6.         public static double calc3DFaceArea(Face f) {
  7.             if (f == null ) return 0.0;
  8.             Point3d[] vts = new Point3d[4];
  9.             for (short i = 0; i <= 3; i++)
  10.                 vts[i] = f.GetVertexAt(i);
  11.             if (vts[3].IsEqualTo(vts[2])) {
  12.                 return calcArea(vts[0],vts[1],vts[2]);
  13.             } else {
  14.                 return calcArea(vts[0], vts[1], vts[3]) + calcArea(vts[1], vts[2], vts[3]);
  15.             }
  16.         }

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Получить площадь объекта Face
« Ответ #4 : 12-11-2017, 16:24:42 »
Это Math.Abs что-ли?
Угу. Работает?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение