Hi,
Is there any function available to find out if a point is present on a line or not?Please help.
Thanks
Gulzar
Solved! Go to Solution.
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 }
Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" цім повідомленням! | Do you find the posts helpful? "LIKE" these posts!
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям!
На ваше запитання відповіли? Натисніть кнопку "ПРИЙНЯТИ РІШЕННЯ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ"
Alexander Rivilis / Александр Ривилис / Олександр Рівіліс
Programmer & Teacher & Helper / Программист - Учитель - Помощник / Програміст - вчитель - помічник
Facebook | Twitter | LinkedIn
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
using System; using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.Geometry; using Autodesk.AutoCAD.EditorInput; [assembly: CommandClass(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"); } } } } } }
Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" цім повідомленням! | Do you find the posts helpful? "LIKE" these posts!
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям!
На ваше запитання відповіли? Натисніть кнопку "ПРИЙНЯТИ РІШЕННЯ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ"
Alexander Rivilis / Александр Ривилис / Олександр Рівіліс
Programmer & Teacher & Helper / Программист - Учитель - Помощник / Програміст - вчитель - помічник
Facebook | Twitter | LinkedIn
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
Ok! You can replace in code Tolerance.Global.EqualPoint with 0.001 (or other small value).
Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" цім повідомленням! | Do you find the posts helpful? "LIKE" these posts!
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям!
На ваше запитання відповіли? Натисніть кнопку "ПРИЙНЯТИ РІШЕННЯ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ"
Alexander Rivilis / Александр Ривилис / Олександр Рівіліс
Programmer & Teacher & Helper / Программист - Учитель - Помощник / Програміст - вчитель - помічник
Facebook | Twitter | LinkedIn
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
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.
Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" цім повідомленням! | Do you find the posts helpful? "LIKE" these posts!
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям!
На ваше запитання відповіли? Натисніть кнопку "ПРИЙНЯТИ РІШЕННЯ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ"
Alexander Rivilis / Александр Ривилис / Олександр Рівіліс
Programmer & Teacher & Helper / Программист - Учитель - Помощник / Програміст - вчитель - помічник
Facebook | Twitter | LinkedIn
if your problem is not solved yet , you can go through this article. I hope this will solve your problem.
Regards
Zakir
Can't find what you're looking for? Ask the community or share your knowledge.