Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Алексей Терно от 11-08-2018, 16:18:40

Название: Как правильно использовать функцию Line3d.IsOn(Point3d point)?
Отправлено: Алексей Терно от 11-08-2018, 16:18:40
Как корректно использовать функцию 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.  

И вот, как работает эта функция:
(https://s22.postimg.cc/456tmpejl/2018-08-11_16-13-29.png)
Название: Re: Как правильно использовать функцию Line3d.IsOn(Point3d point)?
Отправлено: Александр Ривилис от 11-08-2018, 16:26:37
Как корректно использовать функцию 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.



Название: Re: Как правильно использовать функцию Line3d.IsOn(Point3d point)?
Отправлено: Алексей Терно от 11-08-2018, 16:33:42
тебе нужен класс LineSegment3d
Да - именно он мне и нужен ))
Спасибо!