Нахождение длин от пересечения линий Self intersecting Lines

Автор Тема: Нахождение длин от пересечения линий Self intersecting Lines  (Прочитано 8464 раз)

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

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Вот пример, который дальше будешь "допиливать" для себя:

Пример работает, но если первой выбрать "очередную линию", а в качестве очередной "основную", иначе дельта x = 0. Cпасибо!
 
Не понял. Если запишешь видео, то надеюсь, что пойму...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ДмитрийПетровАвтор темы

  • ADN OPEN
  • Сообщений: 42
  • Карма: 0
  • Skype: petroffdv
как-то так..
« Последнее редактирование: 14-03-2020, 22:27:09 от ДмитрийПетров »

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
ДмитрийПетров,
1. Как записывать видео для нашего форума написано у меня в подписи.
2. Ну тут всё понятно и программа работает именно так, как задуманно. Основная линия, с которой ты пересекал остальные, имеет почти вертикальный кусок. Поэтому и расстояние по X (почти) равно 0.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ДмитрийПетровАвтор темы

  • ADN OPEN
  • Сообщений: 42
  • Карма: 0
  • Skype: petroffdv
2. Ну тут всё понятно и программа работает именно так, как задуманно. Основная линия, с которой ты пересекал остальные, имеет почти вертикальный кусок. Поэтому и расстояние по X (почти) равно 0.

Я и хотел разобраться как работает этот метод IntersectWith, где можно поподробнее с ним познакомиться, если я хочу получать проекции на ось Х от секущей "основной линии" если она в горизонтальном и в вертикальном расположении?
Код - vb.net [Выбрать]
  1.  mainCurve.IntersectWith(secondCurve, Intersect.OnBothOperands, pts, IntPtr.Zero, IntPtr.Zero);
что есть что в этой записи, особенно после Intersect.?
в следующем видео я как раз и столкнулся с этой проблемой..
Спасибо.
« Последнее редактирование: 15-03-2020, 20:01:32 от ДмитрийПетров »

Оффлайн ДмитрийПетровАвтор темы

  • ADN OPEN
  • Сообщений: 42
  • Карма: 0
  • Skype: petroffdv
видео к посту #15

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Я и хотел разобраться как работает этот метод IntersectWith, где можно поподробнее с ним познакомиться
Этот метод просто находит точки пересечения примитивов в AutoCAD.
если я хочу получать проекции на ось Х от секущей "основной линии" если она в горизонтальном и в вертикальном расположении?
А это совершенно отдельная задача и методом IntersectWith её не решают.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Код - vb.net [Выбрать]

     mainCurve.IntersectWith(secondCurve, Intersect.OnBothOperands, pts, IntPtr.Zero, IntPtr.Zero);

что есть что в этой записи, особенно после Intersect..
Всё описано в документации:
Цитировать
Entity entityPointer  Input entity with which "this" entity is to intersect 
Autodesk.AutoCAD.DatabaseServices.Intersect intersectType  Input type of intersection requested 
Point3dCollection points  Output with the points of intersection appended 
IntPtr thisGraphicSystemMarker  Input GS marker of subentity of "this" entity that's involved in the intersection operation. Use the 0 default if not applicable. 
IntPtr otherGraphicSystemMarker  Input GS marker of subentity of the entity pointed to by entityPointer that's involved in the intersection operation. Use the 0 default if not applicable. 
Что именно здесь непонятно?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ДмитрийПетровАвтор темы

  • ADN OPEN
  • Сообщений: 42
  • Карма: 0
  • Skype: petroffdv
А это совершенно отдельная задача и методом IntersectWith её не решают.

таак, а где почитать поподробнее как решить мне ее? Спасибо.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
таак, а где почитать поподробнее как решить мне ее? Спасибо.
Собственно говоря нигде такого почитать нельзя. Это чистая аналитическая геометрия. В AutoCAD .NET API можно воспользоваться Autodesk.AutoCAD.Geometry. Например:
1) Autodesk.AutoCAD.Geometry.Line3d для создания бесконечной прямой, на которую будем проецировать точку
2) Воспользуемся методом GetProjectedClosestPointTo(Point3d pt /* точка, которую проецируем */, Vector3d norm /* вектор проекции */)
Или:
1) Создаём плоскость Autodesk.AutoCAD.Geometry.Plane с началом в одной из точек прямой для проекции и вектором нормали Vector3d.ZAxis
2) Используем метод Point3d.OrthoProject  для получения проекции точки на прямую.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ДмитрийПетровАвтор темы

  • ADN OPEN
  • Сообщений: 42
  • Карма: 0
  • Skype: petroffdv
Например:
1) Autodesk.AutoCAD.Geometry.Line3d для создания бесконечной прямой, на которую будем проецировать точку
2) Воспользуемся методом GetProjectedClosestPointTo(Point3d pt /* точка, которую проецируем */, Vector3d norm /* вектор проекции */)
Или:
1) Создаём плоскость Autodesk.AutoCAD.Geometry.Plane с началом в одной из точек прямой для проекции и вектором нормали Vector3d.ZAxis
2) Используем метод Point3d.OrthoProject  для получения проекции точки на прямую.
Спасибо, буду изучать в этом направлении.

Оффлайн ДмитрийПетровАвтор темы

  • ADN OPEN
  • Сообщений: 42
  • Карма: 0
  • Skype: petroffdv
Воспользуемся методом GetProjectedClosestPointTo(Point3d pt /* точка, которую проецируем */, Vector3d norm /* вектор проекции */)
Не нашел никаких примеров как пользоваться этим методом, кроме
"Public Function GetProjectedClosestPointTo(point As Point3d, projectDirection As Vector3d, tolerance As Tolerance) As PointOnCurve3d" из справки Автодеск.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
ДмитрийПетров,
Код - C# [Выбрать]
  1. /// <summary>
  2. ///  Функция возвращает проекцию точки на прямую, заданную
  3. ///  двумя точками. Проекция по оси Y
  4. /// </summary>
  5. /// <param name="p">Проецирумая точка</param>
  6. /// <param name="p1">первая точка прямой</param>
  7. /// <param name="p2">вторая точка прямой</param>
  8. /// <returns></returns>
  9. Point3d GetProjectPoint(Point3d p, Point3d p1, Point3d p2)
  10. {
  11.   using (Line3d line = new Line3d(p1, p2)) {
  12.     return line.GetProjectedClosestPointTo(p, Vector3d.YAxis).Point;
  13.   }
  14. }
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ДмитрийПетровАвтор темы

  • ADN OPEN
  • Сообщений: 42
  • Карма: 0
  • Skype: petroffdv
Спасибо за пример, попробую адаптировать.