Как правильно использовать функцию Line3d.IsOn(Point3d point)?

Автор Тема: Как правильно использовать функцию Line3d.IsOn(Point3d point)?  (Прочитано 2282 раз)

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

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

  • ADN Club
  • ****
  • Сообщений: 381
  • Карма: 33
    • C3D Extensions
  • Skype: alexeyterno
Как корректно использовать функцию Line3d.IsOn(Point3d point)? Когда точка располагается в створе отрезка, она все равно возвращает true.
Код для примера:
Код - C# [Выбрать]
  1. [CommandMethod("test2")]
  2. public static void test2()
  3. {
  4.     Document doc = Application.DocumentManager.MdiActiveDocument;
  5.     Database db = doc.Database;
  6.     Editor ed = doc.Editor;
  7.  
  8.     using (Transaction trans = db.TransactionManager.StartTransaction())
  9.     {
  10.         BlockTableRecord ms = (BlockTableRecord)trans.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);
  11.  
  12.         Line l = (Line)trans.GetObject(ed.GetEntity("\nline:").ObjectId, OpenMode.ForRead);
  13.  
  14.         Point3d pnt = ed.GetPoint("\npoint:").Value;
  15.  
  16.         Line3d ll = new Line3d(l.StartPoint, l.EndPoint);
  17.  
  18.         if (ll.IsOn(pnt))
  19.         {
  20.             Circle c = new Circle(pnt, Vector3d.ZAxis, 1);
  21.             ms.AppendEntity(c);
  22.             trans.AddNewlyCreatedDBObject(c, true);
  23.         }
  24.  
  25.         trans.Commit();
  26.     }
  27. }
  28.  

И вот, как работает эта функция:


Отмечено как Решение Алексей Терно 11-08-2018, 16:33:46

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Как корректно использовать функцию Line3d.IsOn(Point3d point)? Когда точка располагается в створе отрезка, она все равно возвращает true.
Всё правильно. Так она и должна работать. Line3d - это бесконечная прямая.
Цитировать
This .NET class wraps the AcGeLine3d ObjectARX class. It represents an unbounded line in 3D space.
А тебе нужен класс LineSegment3d:
Цитировать
This .NET class wraps the AcGeLineSeg3d ObjectARX class. It represents a bounded line segment in 3D space.



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

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

  • ADN Club
  • ****
  • Сообщений: 381
  • Карма: 33
    • C3D Extensions
  • Skype: alexeyterno
тебе нужен класс LineSegment3d
Да - именно он мне и нужен ))
Спасибо!