.NET

Reply
Active Contributor
gulzar25
Posts: 42
Registered: ‎07-02-2013
Message 1 of 9 (346 Views)
Accepted Solution

Point on line

346 Views, 8 Replies
07-09-2013 04:52 AM

Hi,

Is there any function available to find out if a point is present on a line or not?Please help.

 

Thanks

Gulzar

if your problem is not solved yet , you can go through this article. I hope this will solve your problem.

 

http://through-the-interface.typepad.com/through_the_interface/2012/01/testing-whether-a-point-is-on-an-autocad-polyline-using-net.html

 

Regards

Zakir

Moderator
Alexander.Rivilis
Posts: 1,449
Registered: ‎04-09-2008
Message 2 of 9 (340 Views)

Re: Point on line

07-09-2013 05:47 AM in reply to: gulzar25
Point3d p; // Given point

Curve crv; // Given curve, eg. Line, Polyline, Circle, etc...

Point3d pNear = crv.GetClosestPointTo(p);

if (pNear.DistanceTo(p) < Tolerance.Global.EqualPoint)
{

  // Point is on Curve

}

 


Пожалуйста не забывайте про Утвердить в качестве решения! Утвердить в качестве решения и Give Kudos!Баллы
Please remember to Accept Solution! Accept as Solution and Give Kudos!Kudos

Active Contributor
gulzar25
Posts: 42
Registered: ‎07-02-2013
Message 3 of 9 (295 Views)

Re: Point on line

07-09-2013 08:57 PM in reply to: gulzar25

Hi Alexander,

Thankyou so much for the reply but if i declare pNear as Point3d, GetClosestPointTo() function doesnt accept as it returns PointOnCurve3d and if i declare pNear as Point3d i cant access DistanceTo() function.Kindly help.

 

Thanks

Gulzar

 

Moderator
Alexander.Rivilis
Posts: 1,449
Registered: ‎04-09-2008
Message 4 of 9 (287 Views)

Re: Point on line

07-09-2013 10:39 PM in reply to: gulzar25
using System;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.EditorInput;
 
[assemblyCommandClass(typeof(Rivilis.CurveUtils))]
 
namespace Rivilis
{
  public class CurveUtils
  {
    [CommandMethod("PointOnCurve")]
    public void MyCommand() // This method can have any name
    {
      Document doc = Application.DocumentManager.MdiActiveDocument;
      Editor ed = doc.Editor;
      
      PromptEntityOptions peOpt = new PromptEntityOptions("\nSelect curve: ");
      peOpt.SetRejectMessage("\nMust be Curve!");  peOpt.AddAllowedClass(typeof(Curve), false);
      PromptEntityResult peRes = ed.GetEntity(peOpt);
      if (peRes.Status != PromptStatus.OK) return;
 
      PromptPointResult ppRes = ed.GetPoint("\bPick point: ");
      if (ppRes.Status != PromptStatus.OK) return;
 
      Point3d p = ppRes.Value.TransformBy(ed.CurrentUserCoordinateSystem);
 
      using (Transaction tr = doc.TransactionManager.StartTransaction()) {
 
        Curve crv = tr.GetObject(peRes.ObjectId, OpenMode.ForRead) as Curve;
        if (crv != null) {
          Point3d pNear = crv.GetClosestPointTo(p, false);
          if (pNear.DistanceTo(p) < Tolerance.Global.EqualPoint) {
            ed.WriteMessage("\nPoint is on Curve");
          } else {
            ed.WriteMessage("\nPoint is not on Curve");
          }
        }
      }
    }
  }
}

Пожалуйста не забывайте про Утвердить в качестве решения! Утвердить в качестве решения и Give Kudos!Баллы
Please remember to Accept Solution! Accept as Solution and Give Kudos!Kudos

Active Contributor
gulzar25
Posts: 42
Registered: ‎07-02-2013
Message 5 of 9 (287 Views)

Re: Point on line

07-09-2013 10:39 PM in reply to: Alexander.Rivilis

Hi,

If i have 2 points on the same line the code is working fine for 1 point and for the other point it is not satisfying the condition ("if (pNear.DistanceTo(p) < Tolerance.Global.EqualPoint)") even though the second point is on the given line.I am not able to figure out why this is happening.I will be grateful for replies.

 

Thanks Gulzar

Moderator
Alexander.Rivilis
Posts: 1,449
Registered: ‎04-09-2008
Message 6 of 9 (274 Views)

Re: Point on line

07-10-2013 12:27 AM in reply to: gulzar25

Ok! You can replace in code Tolerance.Global.EqualPoint with 0.001 (or other small value).


Пожалуйста не забывайте про Утвердить в качестве решения! Утвердить в качестве решения и Give Kudos!Баллы
Please remember to Accept Solution! Accept as Solution and Give Kudos!Kudos

Active Contributor
gulzar25
Posts: 42
Registered: ‎07-02-2013
Message 7 of 9 (269 Views)

Re: Point on line

07-10-2013 12:35 AM in reply to: Alexander.Rivilis

Hi Alexander,

Thanks for the reply.What i meant when i said that it is not satisfying the condition ("(pNear.DistanceTo(p) < Tolerance.Global.EqualPoint)") is distance is coming greater than tolerance value(for example 100).Even though the point is on the line for which im checking.I dont know why this is happening.

 

Thanks

Gulzar

Moderator
Alexander.Rivilis
Posts: 1,449
Registered: ‎04-09-2008
Message 8 of 9 (260 Views)

Re: Point on line

07-10-2013 01:58 AM in reply to: gulzar25

I think the line and a point are in 3D. Double check the coordinates of the given point and the nearest point on the line.


Пожалуйста не забывайте про Утвердить в качестве решения! Утвердить в качестве решения и Give Kudos!Баллы
Please remember to Accept Solution! Accept as Solution and Give Kudos!Kudos

Mentor
mzakiralam
Posts: 231
Registered: ‎11-09-2012
Message 9 of 9 (233 Views)

Re: Point on line

07-11-2013 07:33 AM in reply to: gulzar25

if your problem is not solved yet , you can go through this article. I hope this will solve your problem.

 

http://through-the-interface.typepad.com/through_the_interface/2012/01/testing-whether-a-point-is-on...

 

Regards

Zakir

Post to the Community

Have questions about Autodesk products? Ask the community.

New Post
Announcements
Are You Going To Be @ AU 2014? Feel free to drop by our AU topic post and share your plans, plug a class that you're teaching, or simply check out who else from the community might be in attendance. Ohh and don't forgot to stop by the Autodesk Help | Learn | Collaborate booths in the Exhibit Hall and meet our community team if you get a chance!