Найти минимальное расстояние между двумя объектами в 3D.

Автор Doom, 23.06.23, 00:07:17

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

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

Doom

Доброго форумчане!

Не получается получить минимальное расстояние между двумя объектами(поверхность(o3d_MeshPointsSurface) и точки(o3d_point3D))
файлы во вложении.

# документ должен быть открыт и активен
iDocument3D = iKompasObject.ActiveDocument3D()

iPart = iDocument3D.GetPart(LDefin3D.pTop_Part)

points = iPart.EntityCollection(LDefin3D.o3d_point3D)
surfacepoints = iPart.EntityCollection(LDefin3D.o3d_MeshPointsSurface)

print("количесто точек: ",points.GetCount())

for i in range(points.GetCount()):
       
    Meas = iPart.GetMeasurer()
    Meas.SetObject1(surfacepoints.GetByIndex(0))
    Meas.SetObject2(points.GetByIndex(i))
    Meas.Calc()

    # вот тут траблы с результатами - везде нули, но это не так.
    minDistanceNext = Meas.MinDistance #distance
    if minDistanceNext>0:
        print(minDistanceNext)

объекты Meas:
['CLSID', 'Calc', 'GetMaxPoint1', 'GetMaxPoint2', 'GetMinPoint1', 'GetMinPoint2', 'GetNormalPoint1', 'GetNormalPoint2', 'GetObject1', 'GetObject2', 'GetPoint1', 'GetPoint2', 'IsAngleValid', 'MaxDistance', 'MeasureResult', 'MinDistance', 'NormalDistance', 'SetObject1', 'SetObject2', 'angle', 'coclass_clsid', 'distance', 'extendObject1', 'extendObject2', 'unit']

Doom

Если задать оба объекта - точки то все высчитывается
(но почему то продолжает ругаться на MinDistance - com_error: (-2147352573, 'Член группы не найден.', None, None))

Также попробовал вручную высчитать расстояние - все высчиталось..


lavgirb

Цитата: Doom от 23.06.23, 00:07:17Не получается получить минимальное расстояние между двумя объектами(поверхность(o3d_MeshPointsSurface) и точки(o3d_point3D)).

Может попробовать их выделить предварительно? Как вручную. Как вариант...

Doom

Тоже самое..

# -------------------------------
SelectMng = iDocument3D.GetSelectionMng()

#первым выделяем точку затем поверхность
point = SelectMng.GetObjectByIndex(0)
surfacepoints = SelectMng.GetObjectByIndex(1)
# -------------------------------

...
Meas.SetObject1(point)
Meas.SetObject2(surfacepoints)
...


Doom


333

Получить с поверхности грань и померить расстояние до грани

Doom


333

Да разные
Поверхность это объект в дереве
грань ее примитив

Doom

Не вижу способов получить кривую грань по точкам.. и так возможно? Или Вы предлагаете разделить на участки плоских граней по 3 точкам ?