Добавить вершину к 3dFace

Автор Тема: Добавить вершину к 3dFace  (Прочитано 4406 раз)

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

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

  • ADN
  • *
  • Сообщений: 1188
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Добавить вершину к 3dFace
« : 18-11-2017, 22:37:24 »
Подскажите, мне нужно добавить вершину к объекту face
Если к примеру вершин 4 шт, то я могу добавить? как в коде ниже?
Или ошибка будет?

Код - C# [Выбрать]
  1. Face f = new face;
  2. ...
  3. ; код добавления четырёх вершин пропущен
  4. ...
  5. ; добавление пятой вершины
  6. f.SetVertexAt(4, New point3d(...))

Или это по другому деляеться?




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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Добавить вершину к 3dFace
« Ответ #1 : 18-11-2017, 22:44:06 »
У 3DFace может быть или три или четыре вершины. Больше вершин у неё даже в принципе быть не может. Так что пятая вершина - это добавление новой 3DFace.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн avc

  • ADN Club
  • *****
  • Сообщений: 805
  • Карма: 166
    • Мои плагины к Автокаду
Re: Добавить вершину к 3dFace
« Ответ #2 : 18-11-2017, 22:45:21 »
Эти фейсы вроде как наследие старины глубокой. Сегодня встречаются когда сети, экспортированные из Макса, взрываешь. Поэтому у них всегда 3 вершины - треугольниками же Макс работает. Но зачем-то есть и четвертая вершина. Пятой не предусмотрено. Чисто из любопытства - а зачем вам в 21ом веке понадобились эти фейсы? Может все-таки регион использовать? Или уж сразу по человечески к твердотельному моделированию переходить? Не?

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

  • ADN
  • *
  • Сообщений: 1188
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: Добавить вершину к 3dFace
« Ответ #3 : 18-11-2017, 23:02:11 »
У 3DFace может быть или три или четыре вершины. Больше вершин у неё даже в принципе быть не может. Так что пятая вершина - это добавление новой 3DFace.

Хорошо! Я понял.
Тогда  как вариант мне нужно к этой трапеции (которая жёлтая на рисунке)
просто достроить еще треугольник (оранжевый к точке С).
В итоге мне нужно закрыть эту плоскость как пятиугольник.
Как показано на картинке.

Только не могу найти пару точек той смой грани до которой нужно достроить треугольник
Пробовал искать кратчайшее расстояние (не помогло)

Как это сделать?
Идея пока такая.

Может как-то перебором пробежаться по точкам трапеции (строив разные треугольники)
до тех пор пока общая площадь перекрытия треугольника и трапеции не будет равна нулю.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Добавить вершину к 3dFace
« Ответ #4 : 18-11-2017, 23:13:56 »
Тогда  как вариант мне нужно к этой трапеции (которая жёлтая на рисунке)
просто достроить еще треугольник (оранжевый к точке С).
В итоге мне нужно закрыть эту плоскость как пятиугольник.
Как показано на картинке.
Я так понимаю, что ты знаешь 4 точки для 4-угольника. Что ты еще знаешь?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 1188
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: Добавить вершину к 3dFace
« Ответ #5 : 18-11-2017, 23:50:11 »
Тогда  как вариант мне нужно к этой трапеции (которая жёлтая на рисунке)
просто достроить еще треугольник (оранжевый к точке С).
В итоге мне нужно закрыть эту плоскость как пятиугольник.
Как показано на картинке.
Я так понимаю, что ты знаешь 4 точки для 4-угольника. Что ты еще знаешь?

Я знаю:
1) четыре точки трапеции
2) то что эта трапеция четко вписывается в черный внешний треугольник
3) то что краные линии параленые друг другу и показывают и параллельны горизонтальной поверхности
4) Более того эти четыре точки даже у меня по парам лежат "верхняя" пара и "нижняя"
   Например нижняя пара на отметке к примеру 144.00 м, а верхняя пара на отметке 145.00 м
« Последнее редактирование: 19-11-2017, 00:22:58 от Алексей (IdeaSoft) »

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Добавить вершину к 3dFace
« Ответ #6 : 18-11-2017, 23:51:52 »
Я знаю:
1) четыре точки трапеции
2) то что эта трапеция четко вписывается в черный внешний треугольник
3) то что краные линии параленые друг другу и показывают и параллельны горизонтальной поверхности
4) Более того эти четыре точки даже у меня по парам лежат "верхняя" пара и "нижняя"
   Например нижняя пара на отметке к примеру 144.00 м, а верхняя пара на отметке 145.00 м

Ты пятую точку знаешь или нет?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 1188
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: Добавить вершину к 3dFace
« Ответ #7 : 18-11-2017, 23:54:29 »
Пробую так сделать

Код - vb.net [Выбрать]
  1. ' перечень отрезков трапеции
  2.                             Dim LnD() As Line = {New Line(p1, p3), _
  3.                                                              New Line(p1, p4), _
  4.                                                              New Line(p2, p3), _
  5.                                                              New Line(p2, p3)}
  6. ' ??? Не получается получить значение функциии GetDistAtPoint
  7.  
  8.                                 Dim MinD As Double = LnD(0).GetDistAtPoint(p5)
  9. ' точки ближайшего отрезка
  10.                                 Dim minp1 As CAD_GEO.Point3d,  minp2 As CAD_GEO.Point3d
  11.                                 For i As Integer = 1 To LnD.Length - 1
  12.                                     If (LnD(i).GetDistAtPoint(p5) < MinD) Then
  13.                                         minp1 = LnD(i).StartPoint
  14.                                         minp2 = LnD(i).EndPoint
  15.                                     End If
  16.                                 Next


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

  • ADN
  • *
  • Сообщений: 1188
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: Добавить вершину к 3dFace
« Ответ #8 : 18-11-2017, 23:55:10 »
Ты пятую точку знаешь или нет?
Да 5 точку тоже знаю - это чочка исходного черного треугольника

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Добавить вершину к 3dFace
« Ответ #9 : 18-11-2017, 23:56:05 »
Да 5 точку тоже знаю - э то чточка исходного черного треугольника
Так в чем проблема? Тебе просто нужно найти из первых четырёх те две соседние точки, с которыми эту пятую точку нужно соединить, чтобы создать еще один 3DFace.
Проходишь по всем вершинам первого 3DFace (1,2,3,4), соединяя их отрезками с пятой точкой (5) и проверяешь на пересечение этих отрезков со всеми гранями 3DFace (1->2, 2->3, 3->4, 4->1). Если пересечения нет - значит это нужные нам две точки, которые объединяем с пятой во второй 3DFace.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 1188
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: Добавить вершину к 3dFace
« Ответ #10 : 19-11-2017, 00:03:53 »
Так в чем проблема? Тебе просто нужно найти из первых четырёх те две соседние точки, с которыми эту пятую точку нужно соединить, чтобы создать еще один 3DFace.


Так вот я и пытаюсь найти пару ближайших точек, что бы соединить.
функцией point3d.DistanceTo()
Только есть слуяи почему-то когда точка та кокторая должна быть ближе почемуто дальше
У меня пример с треугольником есть в dwg где я нарисовал 3dpolyne для сравнения растояний.



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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Добавить вершину к 3dFace
« Ответ #11 : 19-11-2017, 00:05:17 »
Так вот я и пытаюсь найти пару ближайших точек, что бы соединить.
А причем здесь ближайшие? Я об этом писал???
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 1188
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: Добавить вершину к 3dFace
« Ответ #12 : 19-11-2017, 00:16:03 »
Мерить расстояния это моя ошибка.
Не выходит.

Вот на картинке в красная (2,52) линия короче
а нужна зеленая (а она длиннее 2,62)
Желтая трапеция к которой
нужно прикрепить треугольник.

Прикрепляю и dwg тоже.
И еще. Не исключен вариант, что расстояния могут быть равны
Нужно как-то по другом найти эту нужную грань трапеции.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Добавить вершину к 3dFace
« Ответ #13 : 19-11-2017, 00:21:17 »
Ты прочитал алгоритм, который я описал выше? Если бы ты его использовал, то красная линия у тебя бы не получилась, т.к. она пересекает одну из граней 3DFace. А зелёная не пересекает.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN
  • *
  • Сообщений: 1188
  • Карма: 9
    • idea-soft.ru
  • Skype: makar_govorun
Re: Добавить вершину к 3dFace
« Ответ #14 : 19-11-2017, 00:24:51 »
Понятно! Буду искать пересечения.
Только нужно искать именно пересечение
исключая частные случаи примыкания отрезков.