У меня проблемы с методом IntersectWith
технологии AutoCAD ActiveX. Чтобы проиллюстрировать проблему, я буду использовать пример ниже:
Очевидно, пока x> 0 выиграла горизонтальная линия не пересекаются с вертикальной. Однако для небольших значений x точка B приближается к вертикальной линии, а IntersectWith
возвращает пересечение в (0,0) . Я знаю, что этого можно было бы ожидать, если бы использовалась опция acExtendThisEntity
, но ExtendOption
, который я передаю, это acExtendNone
. Согласно документации ActiveX , эти константы определены как значения 1 и 0 соответственно.
Вот мой код:
from pyautocad import Autocad, APoint
acad = Autocad()
A = APoint(-2, 0)
C = APoint(0, 1)
D = APoint(0, -1)
line_CD = acad.model.AddLine(C, D)
header = 'x acExtendNone acExtendThisEntity '
print(header + '\n' + '-'*len(header))
for n in range(1, 11):
x = 1/10**n
B = APoint(-x, 0)
line_AB = acad.model.AddLine(A, B)
coords_0 = line_AB.IntersectWith(line_CD, 0)
coords_1 = line_AB.IntersectWith(line_CD, 1)
print(f'{x:.10f} {repr(coords_0):16} {coords_1}')
И результат, который я получаю:
x acExtendNone acExtendThisEntity
---------------------------------------------------
0.1000000000 () (-2.220446049250313e-16, 0.0, 0.0)
0.0100000000 () (-2.220446049250313e-16, 0.0, 0.0)
0.0010000000 () (-2.220446049250313e-16, 0.0, 0.0)
0.0001000000 () (0.0, 0.0, 0.0)
0.0000100000 () (0.0, 0.0, 0.0)
0.0000010000 () (-2.220446049250313e-16, 0.0, 0.0)
0.0000001000 () (0.0, 0.0, 0.0)
0.0000000100 (0.0, 0.0, 0.0) (0.0, 0.0, 0.0)
0.0000000010 (0.0, 0.0, 0.0) (0.0, 0.0, 0.0)
0.0000000001 (0.0, 0.0, 0.0) (0.0, 0.0, 0.0)
Данные выше показывают, что когда точка B равна 10 -8 или меньше от вертикальная линия line_AB.IntersectWith(line_CD, 0)
возвращает точку пересечения. Как мне этого избежать?