Как можно найти расстояние между 2 объектами?Приветствую на форуме!
У меня есть 2 объекта рандомной формы, как между ними можно найти кратчайшее расстояние??
2d объекты, могут быть любой формы.Формы-то они могут быть любой. Но что это за объекты? Отрезки, полилинии, тексты, блоки...?
Я думал в начале сделать, создать круг. Увеличивать его диаметр и проверять на пересечение объектов.Для начала, можно попробовать находить расстояния между габаритными контейнерами объектов - см. свойство GeometricExtents.
Есть полилиния нужно найти кратчайшее расстояние до точки.Полилиния, как и любой другой наследник от Curve имеет метод GetClosesPointTo (http://help.autodesk.com/view/OARX/2018/ENU/?guid=OREFNET-Autodesk_AutoCAD_DatabaseServices_Curve_GetClosestPointTo_Point3d__MarshalAsUnmanagedType_U1__bool)
2д
Вот так например.
А нельзя получить у каждого объекта массив точек, где проходит этот объект??У линейного - можно. А у блока, например, что это за массив точек?
А у блока, например, что это за массив точек?Точки объектов внутри блока, преобразованные в единую систему координат, и для каждого объекта внутри блока, можно же так же найти GetClosesPointTо, перенеся эту точку внутрь блока..
При создании линии мы задаем 3 координаты, а можно получить список координат где находится линияЭто вопрос или утверждение? Если вопрос, то где знак вопроса? Если утверждение, то оно неверное.
При создании линии мы задаем 3 координатыКак это? Высшая математика в ВУЗе была? :)
и для каждого объекта внутри блока, можно же так же найти GetClosesPointTоЕсли это наследник от Curve. В общем случае - необязательно ;)
А нельзя получить у каждого объекта массив точек, где проходит этот объект??Это называется аппроксимация. Для линий/полилиний/отрезков и т.д. наследников Curve это возможно. Преобразуешь его в Curve3d и используешь метод Curve3d.GetNewSamplePoints
У меня есть BlockReference и polyline. Между ними нужно найти расстояние.Что подразумеваете под понятием "расстояние между блоком и полилинией"? Тут могут быть варианты - от точки вставки блока до линии, от крайнего ближайшего объекта блока до линии и пр.
Расстояние между блоком и полилинией - от ближайшей точки блока к полилинии до этой точки на полилинииТебе придётся разобраться из чего состоит этот блок и найти расстояние от полилинии до каждого из элементов блока. Причем придется учесть масштабирование и поворот блока.
Приложение не поддерживает оперативную (JIT)
отладку. Подробная информацию приводится в конце данного сообщения.
************** Текст исключения **************
Autodesk.AutoCAD.Runtime.Exception: eInvalidInput
в Autodesk.AutoCAD.DatabaseServices.Curve.GetGeCurve(Tolerance tolerance)
в Autodesk.AutoCAD.DatabaseServices.Curve.GetGeCurve()
в ClassLibraryExample2.Class1.AddPoint(Double x1, Double y1, Double x2, Double y2) в C:\Users\User\source\repos\ClassLibraryExample2\ClassLibraryExample2\Class1.cs:строка 137
в ClassLibraryExample2.Class1.test123() в C:\Users\User\source\repos\ClassLibraryExample2\ClassLibraryExample2\Class1.cs:строка 73
в Autodesk.AutoCAD.Runtime.CommandClass.InvokeWorker(MethodInfo mi, Object commandObject, Boolean bLispFunction)
в Autodesk.AutoCAD.Runtime.CommandClass.InvokeWorkerWithExceptionFilter(MethodInfo mi, Object commandObject, Boolean bLispFunction)
в Autodesk.AutoCAD.Runtime.CommandClass.CommandThunk.Invoke()
getgeclosespointtoНет такого метода. Внимательнее! Есть метод GetClosestPointTo.
Как можно в объекте polyline в метод getgeclosespointto, передать только что созданный lineSegment3d?Никак. Polyline - это класс унаследованный от Curve (т.е. Autodesk.AutoCAD.DatabaseServices.Curve). Его метод GetClosestPointTo принимает только точку (Point3d) - смотри документацию.
При первом прохождении 1 цикла все нормально работает. После второго прохождения первого цикла пишет ошибку выше.Запусти под отладчиком и найди место, где возникает исключение.
Ошибка возникает в Curve3d c3d2 = curve2.GetGeCurve(). Но при прохождении цикла в первый раз все нормально работаетЯ так понимаю, что в этом случае curve2 == null, т.е. block as Curve возвращает null и соответственно block не наследник Curve. Проверяй что туда попадает.