Как создать сплайновую кривую dxf с использованием точек?

Я пытаюсь создать сплайновую кривую программно в файле dxf. Мне нужно использовать точки соответствия, так как кривая должна проходить через указанные точки. Я понимаю, что мне также нужно использовать контрольные точки. Есть ли формула для расчета, какие они должны быть? Это замкнутый сплайн с четырьмя опорными точками.

Заранее спасибо!


person AesculusMaximus    schedule 27.09.2015    source источник


Ответы (2)


Думаю, это непростая задача. Помимо контрольных точек, вам также нужно будет определить узлы. здесь (написано на C++), который утверждает, что поддерживает сплайн. Может быть, вы сможете найти некоторую информацию, прочитав код.

AutoCAD использует NURBS, которые представляют собой аппроксимированные кривые (кривая проходит только по первой и последней точкам). В пользовательском интерфейсе сплайны интерполируются (кривая проходит по аппроксимирующим точкам), поэтому есть перевод, который выполняется при чтении/записи файла DXF. Если вы создадите замкнутую точку с 4 подходящими точками, вы увидите 7 контрольных точек в файле DXF:

Подходящие точки и контрольные точки

Использование полилинии для аппроксимации вашего сплайна будет проще. Вот образец полилинии (L-образная форма, начиная с 0,0 -> 100, 0 -> 100, 50)

  0
LWPOLYLINE
  5
D5
  330
70
  100
AcDbEntity
  8
0
  100
AcDbPolyline
  90
3
  70
0
  43
0.0
  10
0.0
  20
0.0
  10
100.0
  20
0.0
  10
100.0
  20
50.0

Чтобы вычислить положение контрольных точек по точкам соответствия, вы можете обратиться к этой странице (§24 и §25). На самом деле вам нужно обратить алгоритм Кастельжау (для кривых Безье; я не знаю, как он работает для NURBS).

person Maxence    schedule 27.09.2015
comment
Да, спасибо Maxence - я как бы пришел к такому же выводу. В настоящее время я пытаюсь использовать полилинию, как вы предложили - знаете ли вы какие-либо примеры, которые я вижу? Похоже, что помимо полилинейного объекта мне также нужны вершинные объекты. - person AesculusMaximus; 27.09.2015
comment
Если вы пишете DXF с версией › R12, вы можете использовать LWPOLYLINE вместо POLYLINE, вам не потребуются дополнительные сущности VERTEX. - person Maxence; 27.09.2015
comment
Я скачал указанный код. Святое дерьмо, этот код бесполезен. Пытался опубликовать его здесь, но он достиг предела количества символов stackoverflow. Несмотря на это, он полон опечаток и переменных, таких как: AMag, k NP, Mat, Bx, By, Cx, Cy. Никакого объяснения ни одной из этих переменных нигде не дается. - person Dustin; 18.04.2017

Хотя я понимаю, что это старый вопрос, я решил поделиться своим опытом. Я обнаружил, что вы можете записать сплайн в файл DXF, используя только точки соответствия и не используя контрольные точки. Я делал это только с открытыми шлицами, и это может (или, вероятно, зависит) варьироваться в зависимости от версии.

SECTION
2
ENTITIES
0
SPLINE
8
Outline
100
AcDbSpline
70
1032
71
3
72
0
73
0
74
6
44
0.000000001
11
33.98654201387437
21
0.0
31
0.0
11
35.68732510673189
21
0.36908328878159574
31
0.0
11
37.37659045005916
21
1.0707740721032477
31
0.0
11
39.04265824154412
21
2.0149195037916585
31
0.0
11
40.67371568762629
21
3.1732042281057
31
0.0
11
42.25786591112497
21
4.5302062466715505
31
0.0

Код группы 70-битное значение 1024 позволяет выполнять подгонку по точкам. Я нашел этот небольшой кусочек информации на Сообщение на форуме AutoCAD. Я не встречал упоминания об этом где-либо еще. Битовое значение 1 — закрытый сплайн, а 8 — плоский. Мое значение 1032, очевидно, плоское, подходящее к точкам и не замкнутое.

Групповой код 74 — это количество точек соответствия.

Групповой код 44 — это допуск точки прилегания.

Групповые коды 11, 21, 31 — это координаты x, y, z соответствующих точек.

См. справочное руководство.

person Dave Harding    schedule 25.11.2018