В справке не нашёл такого.Хм в arxdoc.chm вроде написано минимальное количество.
numOfVertices must be no smaller than the number of spline fit points.Не годится, вот свойства моего сплайна:
максимальное скорее всего подобрать из соображений точности, например number of spline fit points * 8
Не годитсяИз справки AutoCAD очевидно, что с количеством управляющих и определяющих точек могут быть "нюансы":
Выполнение некоторых операций приводит к удалению определяющих точек. В этих случаях ручки располагаются в управляющих точках сплайна. К таким операциям относятся обрезка сплайна, перемещение контрольных точек и удаление определяющих данных.Что-то я не понял, что тут написано... Получается, что у сплайна есть:
Повысить точность сплайна можно, увеличив количество управляющих точек в какой-либо из его частей, или изменив весовые коэффициенты некоторых из управляющих точек. Повышение весового коэффициента управляющей точки заставляет сплайн проходить ближе к ней. Еще один способ увеличения точности сплайна - повышение его порядка. Порядком сплайна называется число, на единицу большее степени полинома, описывающего сплайн. Например, кубический сплайн имеет порядок 4. Чем выше порядок сплайна, тем больше у него управляющих точек.
ну или не париться и сделать как-то так:Мне надо определить как можно меньшее число, но чтобы оно не вызывало исключения в методе. Например, мне попался сплайн, у которого NumControlPoints = 111. Если ещё на 8 умножить, то получится дикое количество в 888 вершин! Это нехорошо...
int Points = Math.Max(NumControlPoints, NumFitPoints) *8;
- управляющие точкиЭто одно и тоже - ControlPoints. В AutoCAD'е есть два вида сплайнов. В одних есть FitData, в других нет.
- контрольные точки
Мне надо определить как можно меньшее числоЭто аппроксимация и по идее, чтобы повторить геометрию сплайна полилинией без сглаживания нужно большее количество точек.
мне попался сплайн, у которого NumControlPoints = 111. Если ещё на 8 умножить, то получится дикое количество в 888 вершин! Это нехорошо...Возможно это не аргумент. Для раздумья:
Вот ещё пример попался: длина сплайна 0.0003 ед. чертежа и у него NumControlPoints = 7. Если на 8 умножить, то у такой микроскопической полилинии получится 56 вершин!Такое в автокаде сплошь и рядом. Выбери свою стратегию для таких объектов:
Может положиться на AutoCAD и не задавать количество вершин?Вы про метод ToPolyline без параметра numOfVertices? Я его пробовал, но мне не понравилось, что он по умолчанию очень много вершин создаёт даже для довольно простых кривых. На примере во вложении для этой кривой создалось 222 вершины!
В AutoCAD'е есть два вида сплайнов. В одних есть FitData, в других нет.Да, и если я всё правильно понимаю, один в другой можно переключать ручкой на сплайне.
1. Возможно полилиния с 888 вершинами пострится быстрее, чем сплайн с 111.Лишние вершины полилиний очень сильно увеличивают размер чертежа и уменьшают быстродействие. Я помню чистил такие чертежи с диким количеством вершин с помощью "прополки" из PLTools и за счёт этого уменьшал вес файла чертежа на десятки мегабайт.
2. Изыскатели как правило все рисуют полилиниями без дуг с большим количеством вершин(заборы, границы, горизонтали и т.д.). Т.к. заказчики могут перекидывать в другие САПРы и простые полилинии перекидываются без проблем. 1000 вершин на полилинию не так уж и много.
3. А может вершин сплайна изначально много, можно оптимизировать, а потом аппроксимировать.Я затем извлекаю вершины из полилинии и выполняю оптимизацию. Поэтому, очень хочется, чтобы изначально в эту оптимизацию приходило как можно меньше вершин. Особенно, на микроскопических сплайнах.
4. Попробовать аппроксимировать другим способом. Александр вроде приводил на форуме пример аппроксимации Curve на примере Polyline.
Я пока остановился на таком варианте:Это правильно для достаточно гладких сплайнов с достаточно большим количеством вершин. А вот если у него Fit/Knot-точек мало, а он достаточно большой, то точность аппроксимации может быть неудовлетворительной. Аппроксимацию лучше делать, задавшись максимальной высотой хорды. Мне так кажется...