Вопрос по использованию ksMathematic2D в коде на Python

Автор rusty_cat, 06.02.24, 02:46:47

« назад - далее »

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

rusty_cat

Здравствуйте! Подскажите, пожалуйста, если кто знает. Я недавно начал работать с Python.
Хочу на чертеже определить расстояние от точки с известными координатами до кривой, например, INurbs.
Предполагаю для этого использовать два метода из ksMathematic2D:
- спроецировать точку на кривую - ksGetCurvePointProjection;
- найти расстояние между точками - ksDistancePntPnt.
Со вторым понятно, а как в Python использовать первую функцию, которая координаты точки должна возвращать в переменные по ссылке?? На C++ или Delphi с типизацией и указателями, все понятно, а как в Python?
long ksGetCurvePointProjection (long curve,
double x,
double y,
double* kx,
double* ky);
И еще, ссылка на кривую (long curve) - это значение свойства Reference или что-то еще?

Заранее благодарю!

Slaviation

#1
Добрый день.
Обычно в таких случаях функция возвращает кортеж, первым элементом которого является результат функции (для ksGetCurvePointProjection это long), а следующими элементами кортежа будут значения параметров, переданных по ссылке (для ksGetCurvePointProjection это kx и ky).

res = math_2d.ksGetCurvePointProjection(curve,  x, y, kx, ky)
return_value = res[0]
kx = res[1]
ky = res[2]
или так:
return_value, kx, ky = math_2d.ksGetCurvePointProjection(curve,  x, y, kx, ky)

Пример во вложении. Запустить на новом чертеже. Создает первую точку, кривую и вторую точку - проекцию на кривую.
+ Благодарностей: 1

rusty_cat

Цитата: Slaviation от 06.02.24, 06:42:08Добрый день.
Обычно в таких случаях функция возвращает кортеж, первым элементом которого является результат функции (для ksGetCurvePointProjection это long), а следующими элементами кортежа будут значения параметров, переданных по ссылке (для ksGetCurvePointProjection это kx и ky).

res = math_2d.ksGetCurvePointProjection(curve,  x, y, kx, ky)
return_value = res[0]
kx = res[1]
ky = res[2]
или так:
return_value, kx, ky = math_2d.ksGetCurvePointProjection(curve,  x, y, kx, ky)

Пример во вложении. Запустить на новом чертеже. Создает первую точку, кривую и вторую точку - проекцию на кривую.
Большое спасибо! Мою задачу решил. Написал такой код, - он позволяет определить расстояние от точки до кривой с учетом знака (точки с одной стороны и с другой - отличаются знаком +/-:

def myPointToCurveDistance (curve, Px, Py):
    dist = sdist = None
    kx = ky = 0
    result, kx, ky, t = iMath2D.ksGetCurvePointProjectionEx (curve.Reference, Px, Py, kx, ky)
    if (result==1):
        angle1 = iMath2D.ksGetCurvePerpendicularByT (curve.Reference, t)
        angle2 = iMath2D.ksAngle (Px, Py, kx, ky)
        dist = iMath2D.ksDistancePntPnt (Px, Py, kx, ky)
        if (abs(angle1-angle2) < 1e-8):
            sdist = dist
        else:
            sdist = -dist
    return (result, dist, sdist)
Вдруг кому пригодится.