Некорректное определение средней точки для сплайна

Автор Тема: Некорректное определение средней точки для сплайна  (Прочитано 18322 раз)

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

Оффлайн DebalanceАвтор темы

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Был удивлён (мягко скажем) "неточностью" вычисления средней точки для сплайна.
Создал чертёж с тремя сплайнами. Сплайны отличаются расположением и количеством управляемых точек (см. рисунок и чертёж во вложении):



После этого определяю средние точки (зелёные кружки). Гипотетически все сплайны должны иметь средние точки строго расположенные по вертикали, но это почему-то не так. Кстати, сам AutoCAD (согласно привязке) определяет их корректно (жёлтые кружки).

Метод определения точек классический:
Код - C++ [Выбрать]
  1. AcDbSpline* pSpline = AcDbSpline::cast(TmpEnt);
  2. if (pSpline != NULL)
  3. {
  4.         double StartParam;
  5.         double EndParam;
  6.         pSpline->getStartParam(StartParam);
  7.         pSpline->getEndParam(EndParam);
  8.  
  9.         AcGePoint3d MidPoint;
  10.         pSpline->getPointAtParam((StartParam + EndParam ) * 0.5, MidPoint);
  11. }
  12.  

Что не так?

P.S.
AutoCAD 2016

Отмечено как Решение Александр Ривилис 31-05-2018, 11:31:56

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Что не так?
Не так я думаю твоё предположение, что средняя точка находится в среднем параметре. Для получения средней точки однозначно нужно использовать AcDbCurve::getPointAtDist и использовать в качестве значения половину длины сплайна.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн DebalanceАвтор темы

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Не так я думаю твоё предположение ...
Это не совсем моё предположение, это скорее Ваше предложение. Как-то Вы писали о нахождении средней точки дуги. Я полагал, что для сплайнов данный метод также работает.
« Последнее редактирование: 12-06-2017, 17:59:31 от Debalance »

Оффлайн DebalanceАвтор темы

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Для получения средней точки однозначно нужно использовать AcDbCurve::getPointAtDist ...
Да. Данный метод работает корректно. В связи с этим возникают вопросы:
1. Как быть с AcGe-кривыми? Там (если Вы помните) есть только работа с интервалами. Преобразовывать в AcDb-кривые?
2. Где, вообще, можно найти подробную инфу про геометрическую суть параметров для каждого типа кривой (а то надоело быть слепым котёнком)?

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
1. Как быть с AcGe-кривыми? Там (если Вы помните) есть только работа с интервалами. Преобразовывать в AcDb-кривые?
Посмотри описание методов:

Код - C++ [Выбрать]
  1. double AcGeCurve3d::length(
  2.     double fromParam,
  3.     double toParam,
  4.     double tol = AcGeContext::gTol.equalPoint()
  5. );
  6.  
  7. double AcGeCurve3d::paramAtLength(
  8.     double datumParam,
  9.     double length,
  10.     Adesk::Boolean posParamDir = Adesk::kTrue,
  11.     double tol = AcGeContext::gTol.equalPoint()
  12. );
  13.  
Если не поможет, то придётся конвертировать в AcDb.
2. Где, вообще, можно найти подробную инфу про геометрическую суть параметров для каждого типа кривой (а то надоело быть слепым котёнком)?
Нигде явно это не описано и для всех видов кривых параметры имеют свой смысл.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Я полагал, что для сплайнов данный метод также работает.
Нет. В силу того что параметры у дуги линейные (от начального угла до конечного), а у сплайна нет. Если мне не изменяет память, то у сплайнов параметры определяются расстоянием между управляющими точками. Кстати, и для полилиний этот алгоритм бы не сработал, так как каждое целое значение параметра попадает на очередную вершину полилинии, а расстояние между вершинами может быть (и обычно бывает) разным.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн DebalanceАвтор темы

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
double AcGeCurve3d::paramAtLength
Про эту функцию я что-то подзабыл. Спасибо за напоминание.

так как каждое целое значение параметра попадает на очередную вершину полилинии
Да. До этого я уже сам дошёл...
Ну, и как я понимаю, у эллипса также как и у дуги параметр это - угол. Верно?

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Ну, и как я понимаю, у эллипса также как и у дуги параметр это - угол. Верно?
Насколько я помню - да. Кстати, можешь воспользоваться ARXDBG-> Curve Test для тестирования:



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

Оффлайн trir

  • ADN Club
  • ****
  • Сообщений: 470
  • Карма: 63
Цитировать
Где, вообще, можно найти подробную инфу про геометрическую суть параметров для каждого типа кривой
в книжках

Оффлайн DebalanceАвтор темы

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
в книжках
В этих книжках мы ничего не найдём про параметры ибо они (параметры) - суть внутренняя "фича" от Autodesk.

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Цитировать
Где, вообще, можно найти подробную инфу про геометрическую суть параметров для каждого типа кривой
в книжках
Перечитывай вопрос. Как книга по сплайнам поможет для дуг, полилиний, etc.???
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн trir

  • ADN Club
  • ****
  • Сообщений: 470
  • Карма: 63
Цитировать
Как книга по сплайнам поможет для дуг, полилиний, etc.
для этого понадобятся другие книжки, например учебник по геометрии

Цитировать
В этих книжках мы ничего не найдём про параметры ибо они (параметры) - суть внутренняя "фича" от Autodesk.
эти "фичи" пишут люди которые читали эти книжки (если сами их и не написали)
Я сравнивал функции из книжки с AutoCAD'ом - 1 в 1

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
для этого понадобятся другие книжки, например учебник по геометрии
Еще раз. Как учебник геометрии поможет тебе догадаться, что целые значения параметров совпадают с вершинами полилинии? С таким же успехом можно было в качестве параметра полилинии использовать длину от начала полилинии. Или что в качестве параметра для круга и дуги используются углы?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн trir

  • ADN Club
  • ****
  • Сообщений: 470
  • Карма: 63
Цитировать
что целые значения параметров совпадают с вершинами полилинии?
разве?

Цитировать
Или что в качестве параметра для круга и дуги используются углы?
The NURBS book, Глава 1, формула 1.1
параметрические формы уравнений есть в каждом хорошем учебнике геометрии, они конечно могут быть разные, но есть же канонические

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
разве?
Угу. Можешь проверить.
The NURBS book, Глава 1, формула 1.1
Самая важная мысль написана чуть ниже:
Цитировать
Thus parametric representation of curve is not unique
« Последнее редактирование: 22-06-2017, 11:28:21 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн trir

  • ADN Club
  • ****
  • Сообщений: 470
  • Карма: 63
для простых полилиний? это очевидно
А вот у NURBS всё очень весело

Хотелось бы, что бы документация была бы полнее, но тогда она начнёт напоминать учебник по Геометрии
Но если держать под рукой нужные книжки, многие вещи выглядят очевидными

Оффлайн DebalanceАвтор темы

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Но если держать под рукой нужные книжки, многие вещи выглядят очевидными
Это было бы очевидным, если бы разработчики AutoCAD в документации давали бы ссылки на главы в "нужных книжках". А в нынешней ситуации остаётся только ломать голову и догадываться: "так это или не так...?"

Оффлайн DebalanceАвтор темы

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Кстати, можешь воспользоваться ARXDBG-> Curve Test для тестирования:
Продолжая тестировать CurveTest у меня возник вопрос. В данной утилите есть два исполнения getClosestPointTo:



В моём случае getClosestPointTo (projected) даёт более точные результаты. Но мне не совсем понятно как программно реализуется данная функция (в отличии от просто getClosesstPointTo)?

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
В моём случае getClosestPointTo (projected) даёт более точные результаты. Но мне не совсем понятно как программно реализуется данная функция (в отличии от просто getClosesstPointTo)?
Читаем ObjectARX SDK Docs:
Цитировать
This function projects the curve onto the plane defined by givenPnt and normal, finds the point on the projected curve that is nearest to givenPnt, then projects this nearest point back onto the original curve and sets pointOnCurve to the result.
Вопросы еще остались?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн DebalanceАвтор темы

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Вопросы еще остались?
Увы да и много. Кластер вопросов вытекает опять же из темы связанной со сплайнами и функцией getClosestPointTo.
Имеем конкретный сплайн (см. чертёж во вложении). И пытаемся определить на нём ближайшую точку к некой точке в пространстве:



На рисунке точка совпадает с центром жёлтого кружка. Однако, ближайшая точка определяется совсем в неожиданном месте (голубой маркер).
И так вопросы:
1. Это что уникальность сплайна?
2. Может это быть глюком самого AutoCAD?
3. Существует ли достойное решение нахождения ближайшей точки в таком случае (ибо аналогичные сплайны в моём случае попадаются весьма часто)?

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
1. Это что уникальность сплайна?
2. Может это быть глюком самого AutoCAD?
Допускаю, что может. Мы как-то на DWG.RU коллективно составляли метод, которые корректно определял бы BoundingBox для сплайна, т.к. стандартный метод возвращал некорректный результат: http://forum.dwg.ru/showthread.php?t=41621&highlight=%EF%E5%F7%E0%F2%FC&page=2 сообщения #24 - #52.
Возможно, что и с определением ближайшей точки проблемы.

Оффлайн DebalanceАвтор темы

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
т.к. стандартный метод возвращал некорректный результат
Ну БаундингБокс это отдельная тема - он и для дуги выдаёт некорректные результаты (в своё время я с этим тоже накувыркался). А если это касается точки на кривой - то Автокаду грош цена как инженерной системе...

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Сплайник-то длиной 0,1 ед. чертежа. Погрешность определения точки в этом случае составляет около 0,01 ед.чертежа. Зачем Вам такая точность?
Если хотя бы в 10 раз увеличить - ближайшая точка корректно определяется.

Оффлайн DebalanceАвтор темы

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Погрешность определения точки в этом случае составляет около 0,01 ед.чертежа
Откуда Вы взяли эту цифру?

Зачем Вам такая точность?
Ну значит нужна. А что, это разве большая точность для точного машиностроения и для возможностей AutoCAD?

Если хотя бы в 10 раз увеличить - ближайшая точка корректно определяется.
ХОТЯ БЫ В Д-Е-С-Я-Т-Ь?!!! То есть всё-таки глюк?

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Откуда Вы взяли эту цифру?
Измерил расстояние между полученной точкой и той, которую ожидалось получить.
Ну значит нужна. А что, это разве большая точность для точного машиностроения и для возможностей AutoCAD?
Тогда, наверное, лучше сплайн не использовать. Видимо, у него есть искусственное ограничение по точности вычисления. Подозреваю, что это ввели специально, чтобы не страдало быстродействие.

Оффлайн DebalanceАвтор темы

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Измерил расстояние между полученной точкой и той, которую ожидалось получить.
Я предпочитаю измерять погрешность в процентах. И в данном случае погрешность составляет примерно 400%.

Тогда, наверное, лучше сплайн не использовать.
Весьма жаль. В связи с этим область применения AutoCAD'а резко "скукоживается".

Подозреваю, что это ввели специально...
Выходит движок AutoCAD весьма негибкий ибо не может приспосабливаться к масштабу чертежа.

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Выходит движок AutoCAD весьма негибкий ибо не может приспосабливаться к масштабу чертежа.
Мы не обсуждаем это на данном форуме. По существу у тебя только один выход - выполнять аппроксимацию сплайна и находить ближайшую точку к аппроксимирующей кривой.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Выходит движок AutoCAD весьма негибкий ибо не может приспосабливаться к масштабу чертежа.
Немного не так. Механизм сплайнов в AutoCAD не позволяет их использовать в нанотехнологиях :) Но с другими объектами все не так уж и плохо. В .NET API у сплайна есть метод ToPolylineWithPrecision. С его помощью можно получить нужную точку (переписать на C++ думаю не будет проблемой):
Код - C# [Выбрать]
  1. using Autodesk.AutoCAD.ApplicationServices;
  2. using Autodesk.AutoCAD.DatabaseServices;
  3. using Autodesk.AutoCAD.EditorInput;
  4. using Autodesk.AutoCAD.Geometry;
  5. using Autodesk.AutoCAD.Runtime;
  6.  
  7. namespace AcadTest
  8. {
  9.     public class CurveTest
  10.     {
  11.         [CommandMethod("TestClosestPoint")]
  12.         public void ClosestPoint()
  13.         {
  14.             SupportMethods.InitializeVars
  15.                 (out Document adoc, out Editor ed, out Database db);
  16.  
  17.             ObjectId id = SupportMethods.SelectEntity(ed, "\nSelect curve:");
  18.             if (!id.ObjectClass.IsDerivedFrom(RXClass.GetClass(typeof(Curve))))
  19.             {
  20.                 ed.WriteMessage("\nIt's not curve!");
  21.                 return;
  22.             }
  23.  
  24.             Point3d? pt = SupportMethods.GetPoint(ed);
  25.             if (!pt.HasValue)
  26.             {
  27.                 ed.WriteMessage("\nNo point!");
  28.                 return;
  29.             }
  30.  
  31.             Point3d? closPt = null;
  32.  
  33.             using (Curve curve = id.Open(OpenMode.ForRead) as Curve)
  34.             {
  35.                 if (curve != null)
  36.                 {
  37.                     if (curve is Spline spline)
  38.                     {
  39.                         using (Curve plCurve = spline.ToPolylineWithPrecision(5))
  40.                         {
  41.                             closPt = plCurve.GetClosestPointTo(pt.Value, false);
  42.                         }
  43.                     }
  44.                     else
  45.                     {
  46.                         closPt = curve.GetClosestPointTo(pt.Value, false);
  47.                     }
  48.                 }
  49.             }
  50.  
  51.             if (closPt.HasValue)
  52.             {
  53.                 using (Circle circle = new Circle())
  54.                 {
  55.                     circle.Center = closPt.Value;
  56.                     circle.Radius = 0.1 * closPt.Value.DistanceTo(pt.Value);
  57.                     circle.ColorIndex = 1;
  58.                     using (BlockTableRecord cSpace
  59.                         = id.Database.CurrentSpaceId.Open(OpenMode.ForWrite) as BlockTableRecord)
  60.                     {
  61.                         if (cSpace != null)
  62.                         cSpace.AppendEntity(circle);
  63.                     }
  64.                 }
  65.             }
  66.         }
  67.  
  68.         internal static class SupportMethods
  69.         {
  70.             public static void InitializeVars(out Document adoc, out Editor ed, out Database db)
  71.             {
  72.                 adoc = Application.DocumentManager.MdiActiveDocument;
  73.                 ed = adoc.Editor;
  74.                 db = adoc.Database;
  75.             }
  76.  
  77.             public static ObjectId SelectEntity(Editor ed, string msg = "\nSelect entity: ")
  78.             {
  79.                 PromptEntityResult entRes = ed.GetEntity(msg);
  80.                 return entRes.Status == PromptStatus.OK ? entRes.ObjectId : ObjectId.Null;
  81.             }
  82.  
  83.             public static string GetString(Editor ed, string msg = "\nInput string value: ")
  84.             {
  85.                 PromptResult stringRes = ed.GetString(msg);
  86.                 return stringRes.Status == PromptStatus.OK ? stringRes.StringResult : null;
  87.             }
  88.  
  89.             public static Point3d? GetPoint(Editor ed, string msg = "\nSelect point: ")
  90.             {
  91.                 PromptPointResult ptRes = ed.GetPoint(msg);
  92.                 return ptRes.Status == PromptStatus.OK ? (Point3d?)ptRes.Value : null;
  93.             }
  94.         }
  95.     }
  96. }
  97.  

Оффлайн DebalanceАвтор темы

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Мы не обсуждаем это на данном форуме.
А между тем это ключевая тема для любого программиста. Мы должны чётко понимать исходные возможности среды. Где я могу получить информацию о допусках при работе со сплайнами? И правильно ли я понял из Вашей безапелляционной тезы (что у меня всего лишь один выход), что это не является багом движка AutoCAD, а всего лишь изначально заложенное ограничение?

Механизм сплайнов в AutoCAD не позволяет их использовать в нанотехнологиях
Это Ваше предположение? К тому же насколько я помню нанотехнологии начинаются после точностей 0.000000001 ед.

В .NET API у сплайна есть метод ToPolylineWithPrecision
Ривилис уже предложил аппроксимировать, а это одно и тоже. Рудиментарный метод - вместо математической модели я буду хранить кучу точек с посредственной для "нанотехнологий" точностью.

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
И правильно ли я понял из Вашей безапелляционной тезы (что у меня всего лишь один выход), что это не является багом движка AutoCAD, а всего лишь изначально заложенное ограничение?
Ты можешь считать как хочешь, но факт остаётся фактом - исправлять это не будут, т.к. это значительно ухудшит скорость работы со сплайнами.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Рудиментарный метод - вместо математической модели я буду хранить кучу точек с посредственной для "нанотехнологий" точностью.
Нет формулы, которая позволила бы найти ближайшую точку на сплайне по характеристикам сплайна. Отсюда я вижу единственный способ - аппроксимацию.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн DebalanceАвтор темы

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Ты можешь считать как хочешь...
Безусловно, но это меня как-то мало бодрит.

... исправлять это не будут.
Исправляют обычно ошибки и баги, а если это ни то ни другое, то обчём речь?

... т.к. это значительно ухудшит скорость работы со сплайнами.
Ну хорошо, ну тогда должен существовать некий точностной критерий абсолютной длины сплайна после которго все методы функционируют без сбоя?


Оффлайн DebalanceАвтор темы

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Нет формулы, которая позволила бы найти ближайшую точку на сплайне по характеристикам сплайна.
Вы хотите сказать метод getСlosestPointTo использует принцип предварительной аппроксимации сплайна?
А как быть с точкой пересечения? Тоже нет формулы?

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Вы хотите сказать метод getСlosestPointTo использует принцип предварительной аппроксимации сплайна?
Если бы использовал, то ты бы получил правильную точку. Я так думаю.
А как быть с точкой пересечения? Тоже нет формулы?
Думаю что в общем случае нет.
Исправляют обычно ошибки и баги, а если это ни то ни другое, то обчём речь?
Это и то и другое. :) Кстати по поводу BoundingBox для сплайна на старом сайте ADN была статья: http://jprdintprev.autodesk.com/adn/servlet/devnote?siteID=4814862&id=5410164&linkID=4900509
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн DebalanceАвтор темы

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Кстати по поводу BoundingBox для сплайна на старом сайте ADN была статья
Совершить миллион итераций?!!! Какое неэлегантное решение... Я разочарован в креативности программистов из AutoDesk.

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Совершить миллион итераций?!!! Какое неэлегантное решение...
С этим я, пожалуй, соглашусь. Мне оно тоже не по душе.
Я разочарован в креативности программистов из AutoDesk.
Этих людей очень условно можно назвать "программисты из Autodesk", т.к. это специалисты техподдержки ADN. Там довольно толковые ребята, но ввиду широкой области их задач и, вследствие этого, большой загруженности, не стоит рассчитывать на их высокую "креативность".

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Совершить миллион итераций?!!! Какое неэлегантное решение... Я разочарован в креативности программистов из AutoDesk.
Это не код, работающий в AutoCAD, а лишь пример того, как можно получить более точно BoundingBox. Там в коде есть еще более нелогичные вещи типа:
Код - C++ [Выбрать]
  1.  AcGePoint3d mPtTemp;
  2.  pSpline->getStartPoint(mPtTemp);
  3.  pSpline->getParamAtPoint(mPtTemp,mStartParam);
  4.  
  5.  pSpline->getEndPoint(mPtTemp);
  6.  pSpline->getParamAtPoint(mPtTemp,mEndParam);
В большинстве случаев код на сайте просто демонстрирует идею и не блистает элегантностью, которая могла бы скрыть саму идею.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн DebalanceАвтор темы

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
... код на сайте просто демонстрирует идею ...
Ну если "идея" этих ста пятидесяти строчек кода заключена в том, чтобы научить юзера неуклюже пользоваться методом getPointAtParam, то я (по мимо обозначенного выше) разачарован также и в общей концепции приподнесения обучающего материала в ADN.
Данный форум (на фоне такого примера из "Базы Знаний" ADN) выглядит намного более креативным. Это просто кладезь фонтанирующий элегантными идеями.

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Off-Topic: показать
Данный форум (на фоне такого примера из "Базы Знаний" ADN) выглядит намного более креативным. Это просто кладезь фонтанирующий элегантными идеями.



Оффлайн DebalanceАвтор темы

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Данный форум (на фоне такого примера из "Базы Знаний" ADN) выглядит намного более креативным. Это просто кладезь фонтанирующий элегантными идеями.
Спасибо за высокую оценку данного форума. Кстати, многие мои ответы - это "креативно" переработанные примеры из базы знаний ADN. Самое существенное в этих примерах - это идея, а всё остальное можно и самостоятельно реализовать.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн DebalanceАвтор темы

  • ADN Club
  • ****
  • Сообщений: 421
  • Карма: 16
    • Advanced software for AutoCAD
  • Skype: Debalance
Спасибо за высокую оценку...
Ну что Вы! Это роскошество с вашей стороны. Спасибо - это слишком много. Мне бы хватило маленького плюса в карму за этот пост...

Кстати, многие мои ответы - это "креативно" переработанные примеры...
Да, это заметно. Надеюсь, что Ваше начальство также по достоинству ценит Ваш труд.

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Ну что Вы! Это роскошество с вашей стороны. Спасибо - это слишком много. Мне бы хватило маленького плюса в карму за этот пост...
Уговорил. :)
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение